{"version":3,"file":"static/js/application.async.landing~e0ae872c.3cc99980.chunk.js","mappings":"qgBAKMA,EAAc,SAAHC,GAAA,IAAMC,EAAMD,EAANC,OAAM,OAC3BC,EAAAA,EAAAA,KAAA,OAAAC,UACED,EAAAA,EAAAA,KAACE,EAAAA,KAAI,CAACC,QAAQ,SAASC,OAAQ,CAAEC,KAAM,CAAEC,MAAO,YAAcL,SAAEF,KAC5D,EAOKQ,EAAkB,SAAHC,GAAY,OAAAA,EAANC,OACzBC,KAAI,SAAAC,GAAK,OACdX,EAAAA,EAAAA,KAAA,OAAqBY,UAAU,uBAAsBX,SAClDY,IAAAA,QAAUF,EAAMG,QAASd,EAAAA,EAAAA,KAACH,EAAW,CAACE,OAAQY,EAAMI,MAAUJ,EAAMG,MAAMJ,KAAI,SAAAM,GAAK,OAClFC,EAAAA,EAAAA,MAAA,QAAkBC,MAAO,CAAEC,QAAS,QAASb,MAAO,SAAUL,SAAA,CAC3De,EAAM,KACPhB,EAAAA,EAAAA,KAACH,EAAW,CAACE,OAAQY,EAAMI,QAFlBC,EAGJ,KALDL,EAAMI,IAOV,GACN,EAOJR,EAAgBa,aAAe,CAC7BX,OAAQ,IC1BV,IAAMY,EAAa,CAAEhB,KAAM,CAAEiB,WAAY,MAE5BC,EAAe,SAAHzB,GAElB,IADL0B,EAAU1B,EAAV0B,WAAYC,EAAW3B,EAAX2B,YAAaC,EAA0B5B,EAA1B4B,2BAA4BjB,EAAMX,EAANW,OAE/CkB,GAAOC,EAAAA,EAAAA,YAAWC,EAAAA,aACxBC,GAA0CC,EAAAA,EAAAA,UAASP,GAAWQ,GAAAC,EAAAA,EAAAA,GAAAH,EAAA,GAAvDI,EAAaF,EAAA,GAAEG,EAAgBH,EAAA,IAEtCI,EAAAA,EAAAA,UAAQ,WACND,EAAiBX,EACnB,GAAG,CAACA,IAEJ,IAAMa,GAAiCC,EAAAA,EAAAA,cACrC,SAACC,GACCJ,EAAiBI,EAAMC,OAAOxB,OAC9BU,EAA2B,CAAEV,MAAOuB,EAAMC,OAAOxB,MAAOyB,KAAM,eAChE,GACA,CAACN,EAAkBT,IAGrB,OACET,EAAAA,EAAAA,MAAA,OAAKL,UAAU,0BAAyBX,SAAA,EACtCgB,EAAAA,EAAAA,MAACyB,EAAAA,MAAK,CAACC,YAAU,EAACC,OAAQ,CAAEC,YAAa,GAAI5C,SAAA,EAC3CD,EAAAA,EAAAA,KAACE,EAAAA,KAAI,CAACE,OAAQiB,EAAWpB,SAAE0B,EAAKmB,UAAUC,iBAC1C/C,EAAAA,EAAAA,KAACgD,EAAAA,WAAU,CACT,aAAYrB,EAAKmB,UAAUC,wCAC3BE,MAAM,+DAIVhC,EAAAA,EAAAA,MAACyB,EAAAA,MAAK,CAACE,OAAQ,CAAEC,YAAa,GAAI5C,SAAA,EAC9BwB,IACAzB,EAAAA,EAAAA,KAACE,EAAAA,KAAI,CAACE,OAAQiB,EAAWpB,SAAE0B,EAAKmB,UAAUC,uHAE5C/C,EAAAA,EAAAA,KAACkD,EAAAA,UAAS,CACRC,WAAS,EACT1B,YAAaA,EACb2B,KAAM,GACNC,WAAW,EACXrC,MAAOkB,GAAiB,GACxBoB,SAAUjB,EACVzB,UAAU,4BAGXH,GAAUA,EAAO8C,OAAS,IACzBvD,EAAAA,EAAAA,KAAA,OAAKY,UAAU,iCAAgCX,UAC7CD,EAAAA,EAAAA,KAACO,EAAe,CAACE,OAAQA,WAMrC,EASAc,EAAaH,aAAe,CAC1BX,OAAQ,GACRgB,YAAa,I,oGCrEF+B,EAAY,WAAH,MAAU,CAC9BC,KAAM,CACJC,YAAa,IAEhB,EC0CYC,GAAoBC,EAAAA,EAAAA,cApCH,SAAH9D,GAA4B,IAAtB+D,EAAK/D,EAAL+D,MAAOC,EAAOhE,EAAPgE,QAChCnC,GAAOC,EAAAA,EAAAA,YAAWC,EAAAA,aAClBkC,GAAOC,EAAAA,EAAAA,kBAAiBF,EAAS,mCACjCG,GAAUC,EAAAA,EAAAA,kBAAiBV,GACWW,GAAqBvC,EAAAA,EAAAA,YAAWwC,EAAAA,oBAApEC,QAAWC,wBAEnB,OACEtE,EAAAA,EAAAA,KAAA,OAAKY,UAAU,sBAAqBX,UAClCD,EAAAA,EAAAA,KAACuE,EAAAA,EAAU,CAACC,OAAO,YAAWvE,UAC5BgB,EAAAA,EAAAA,MAACwD,EAAAA,EAAc,CAAAxE,SAAA,EACbD,EAAAA,EAAAA,KAAC0E,EAAAA,EAAe,CAAAzE,SAAE0B,EAAKmB,UAAUC,UAChCc,IAAUc,EAAAA,GAAWC,SACpB5E,EAAAA,EAAAA,KAACE,EAAAA,EAAI,CAAC2E,KAAM,IAAI5E,SAAEkE,EAAiBxC,EAAKmB,UAAUC,yUAAkVpB,EAAKmB,UAAUC,4IAEnZ/C,EAAAA,EAAAA,KAACE,EAAAA,EAAI,CAAC2E,KAAM,IAAI5E,SAAEkE,EAAiBxC,EAAKmB,UAAUC,yUAAkVpB,EAAKmB,UAAUC,2IAEpZgB,IACC/D,EAAAA,EAAAA,KAAA,QAAMY,UAAWqD,EAAQR,KAAKxD,UAC5BD,EAAAA,EAAAA,KAAC8E,EAAAA,EAAI,CAACC,KAAMhB,EAAMvB,OAAO,SAASwC,IAAI,sBAAsBpE,UAAU,2BAA0BX,UAC9FD,EAAAA,EAAAA,KAAA,QAAAC,UACED,EAAAA,EAAAA,KAAA,KAAAC,SAAI0B,EAAKmB,UAAUC,4DASrC,IC/BMkC,EAAkB,CAAEC,WAAY,CAAEC,YAAa,YAC/C9D,EAAa,CAAEhB,KAAM,CAAEiB,WAAY,MAE5B8D,EAAiB,SAAHtF,GAEpB,IADL+D,EAAK/D,EAAL+D,MAAOpC,EAAW3B,EAAX2B,YAAaD,EAAU1B,EAAV0B,WAAY6D,EAAkBvF,EAAlBuF,mBAAoB3D,EAA0B5B,EAA1B4B,2BAA4BjB,EAAMX,EAANW,OAE1EkB,GAAOC,EAAAA,EAAAA,YAAWC,EAAAA,aACxBC,GAA0CC,EAAAA,EAAAA,UAASP,GAAWQ,GAAAC,EAAAA,EAAAA,GAAAH,EAAA,GAAvDI,EAAaF,EAAA,GAAEG,EAAgBH,EAAA,IAEtCI,EAAAA,EAAAA,UAAQ,WACND,EAAiBX,EACnB,GAAG,CAACA,IAEJ,IAAMa,GAAiCC,EAAAA,EAAAA,cACrC,SAACC,GACCJ,EAAiBI,EAAMC,OAAOxB,OAC9BU,EAA2B,CAAEV,MAAOuB,EAAMC,OAAOxB,MAAOyB,KAAM,iBAChE,GACA,CAACN,EAAkBT,IAGrB,OACE1B,EAAAA,EAAAA,KAAA,OAAKY,UAAU,4BAA2BX,UACxCgB,EAAAA,EAAAA,MAACyB,EAAAA,MAAK,CAACE,OAAQ,CAAEC,YAAa,IAAK5C,SAAA,EACjCgB,EAAAA,EAAAA,MAACyB,EAAAA,MAAK,CAACE,OAAQ,CAAEC,YAAa,GAAI5C,SAAA,EAChCgB,EAAAA,EAAAA,MAACyB,EAAAA,MAAK,CAACC,YAAU,EAACC,OAAQ,CAAEC,YAAa,GAAI5C,SAAA,EAC3CD,EAAAA,EAAAA,KAACE,EAAAA,KAAI,CAACE,OAAQiB,EAAWpB,SAAE0B,EAAKmB,UAAUC,cAC1C/C,EAAAA,EAAAA,KAACgD,EAAAA,WAAU,CACT,aAAYrB,EAAKmB,UAAUC,wCAC3BE,MAAM,gEAGRxB,IACAzB,EAAAA,EAAAA,KAACE,EAAAA,KAAI,CAACE,OAAQiB,EAAWpB,SAAE0B,EAAKmB,UAAUC,6EAE5C/C,EAAAA,EAAAA,KAACkD,EAAAA,UAAS,CACRC,WAAS,EACT1B,YAAaA,EACb2B,KAAM,GACNC,WAAW,EACXrC,MAAOkB,GAAiB,GACxBoB,SAAUjB,EACVzB,UAAU,8BAGXH,GAAUA,EAAO8C,OAAS,IACzBvD,EAAAA,EAAAA,KAAA,OAAKY,UAAU,mCAAkCX,UAC/CD,EAAAA,EAAAA,KAACO,EAAe,CAACE,OAAQA,UAK/BT,EAAAA,EAAAA,KAAC2D,EAAiB,CAACE,MAAOA,IAEzBA,IAAUc,EAAAA,GAAWC,UACpB3D,EAAAA,EAAAA,MAACyB,EAAAA,MAAK,CAACE,OAAQ,CAAEC,YAAa,GAAI5C,SAAA,EAChCD,EAAAA,EAAAA,KAACE,EAAAA,KAAI,CAAAD,SAAE0B,EAAKmB,UAAUC,wCACtB/C,EAAAA,EAAAA,KAACkD,EAAAA,UAAS,CACRC,WAAS,EACTC,KAAM,GACNhD,OAAQ6E,EACR5B,WAAW,EACXiC,UAAQ,EACRtE,MAAOqE,GAAsB,GAC7BzE,UAAU,8CAOxB,EAYAwE,EAAehE,aAAe,CAC5BK,YAAa,GACb4D,mBAAoB,GACpB5E,OAAQ,IChFH,IAAM8E,EAAgB,SAAHzF,GAUnB,IATL0F,EAAiB1F,EAAjB0F,kBACAC,EAAe3F,EAAf2F,gBACAC,EAAa5F,EAAb4F,cACAC,EAAc7F,EAAd6F,eACAC,EAAY9F,EAAZ8F,aACA/B,EAAK/D,EAAL+D,MACAgC,EAAa/F,EAAb+F,cACAC,EAAqBhG,EAArBgG,sBACArF,EAAMX,EAANW,OAEMkB,GAAOC,EAAAA,EAAAA,YAAWC,EAAAA,aAClBkE,EACJlC,IAAUc,EAAAA,GAAWqB,SACjBnF,IAAAA,OACAgF,GAAiBA,EAAcI,mBAC/B,iBAEApF,IAAAA,OACAgF,GAAiBA,EAAcK,kBAC/B,kBACG,GACHC,EACJtC,IAAUc,EAAAA,GAAWC,QACjB/D,IAAAA,OACAgF,GAAiBA,EAAcI,mBAC/B,iBAEA,GACAG,EACJvF,IAAAA,OACEgF,GAAiBA,EAAcI,mBAC/B,gBACG,GAEDI,EAA0B5F,EAAO6F,MAAK,SAAA3F,GAAK,MAAI,wBAAyBA,CAAK,IAC7E4F,EAAwB9F,EAAO6F,MAAK,SAAA3F,GAAK,MAAI,sBAAuBA,CAAK,IAEzE6F,EAAsBH,EACxBA,EAAwBI,oBACxB,GACEC,EAAoBH,EACtBA,EAAsBI,kBACtB,GAEEjF,EAA6B,SAAHlB,GAAyB,IAAnBQ,EAAKR,EAALQ,MAAOyB,EAAIjC,EAAJiC,KAC3CqD,EAAsB9E,EAAOyB,EAC/B,EAEMmE,GACJ5G,EAAAA,EAAAA,KAACoF,GAAcyB,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACTlB,GAAc,IAClB9B,MAAOA,EACPrC,WAAYuE,EACZV,mBAAoBc,EACpBzE,2BAA4BA,EAC5BjB,OAAQ+F,KAINM,GACJ9G,EAAAA,EAAAA,KAACuB,GAAYsF,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACPjB,GAAY,IAChBpE,WAAY4E,EACZ1E,2BAA4BA,EAC5BjB,OAAQiG,KAIZ,OACE1G,EAAAA,EAAAA,KAAA,OAAKY,UAAU,2BAA0BX,SACtCyF,GACCzE,EAAAA,EAAAA,MAAC8F,EAAAA,EAAS,CAACC,UAAQ,EAACC,aAAW,EAAAhH,SAAA,CAC5BuF,IACCvE,EAAAA,EAAAA,MAACiG,EAAAA,EAAa,CAAClG,MAAM,IAAGf,SAAA,EACtBD,EAAAA,EAAAA,KAACmH,EAAAA,EAAe,CAAAlH,SAAE0B,EAAKmB,UAAUC,mBACjC/C,EAAAA,EAAAA,KAACoH,EAAAA,EAAc,CAAAnH,SACZ2G,OAINnB,IACCxE,EAAAA,EAAAA,MAACiG,EAAAA,EAAa,CAAClG,MAAM,IAAGf,SAAA,EACtBD,EAAAA,EAAAA,KAACmH,EAAAA,EAAe,CAAAlH,SAAE0B,EAAKmB,UAAUC,gCACjC/C,EAAAA,EAAAA,KAACoH,EAAAA,EAAc,CAAAnH,SACZ6G,WAMT7F,EAAAA,EAAAA,MAACyB,EAAAA,MAAK,CAACE,OAAQ,CAAEC,YAAa,IAAK5C,SAAA,CAChCuF,GAAqBoB,EACrBnB,GAAmBqB,MAK9B,EAcAvB,EAAcnE,aAAe,CAC3BoE,mBAAmB,EACnBC,iBAAiB,EACjBC,eAAe,EACfC,eAAgB,CAAC,EACjBC,aAAc,CAAC,EACfnF,OAAQ,IClIH,MAAM4G,EAAkB,4BAElBC,EAAwB,EACnCC,kBACAC,mBAIY,YAAU,UAAQD,EAAiB,YAAUC,GAAiB,GAAK,CAACH,GAAkBG,IAAgBC,KAAK,QAEnHC,EAAoB7B,GAAiB,YAAUA,EAAc8B,MAAM,UAAUpE,OAEtEqE,EAAa,CAAC/D,EAAOgC,EAAelE,KAC/C,GAAIkC,IAAU,KAAWmC,SAAU,CACjC,MAAMD,EAAiB,WAASF,GAAiBA,EAAcI,mBAAoB,gBAAiB,IAC9FG,EAAe,WAASP,GAAiBA,EAAcI,mBAAoB,cAAe,IAC1F4B,EAAsBH,EAAkB3B,GACxC+B,EAAoBJ,EAAkBtB,GAC5C,OAAOzE,EAAKmB,UAAU,8HAAqI,CAAE+E,sBAAqBC,qB,CAGpL,MAAM/B,EAAiB,WAASF,GAAiBA,EAAcK,kBAAmB,gBAAiB,IAC7FC,EAAiC,WAASN,GAAiBA,EAAcI,mBAAoB,gBAAiB,IAC9G8B,EAA6BL,EAAkB3B,GAC/CiC,EAA8BN,EAAkBvB,GACtD,OAAOxE,EAAKmB,UAAU,iJAAwJ,CAAEiF,6BAA4BC,+BAA8B,E,wHCf/NC,GAA0BC,EAAAA,EAAAA,IAAW,iBAErCC,GAA+BC,EAAAA,EAAAA,KAC1CC,EAAAA,EAAAA,IAAc9C,EAAe,CAAE+C,WAAW,IAC1C,CAAEC,SAAU,CAACC,EAAAA,GAAwBC,EAAAA,MAiCjCC,GAA8BC,EAAAA,EAAAA,uBA9BN,SAAH7I,GAKpB,IAJL8I,EAAgB9I,EAAhB8I,iBACAC,EAAU/I,EAAV+I,WACAhF,EAAK/D,EAAL+D,MACGiF,GAAIC,EAAAA,EAAAA,GAAAjJ,EAAAkJ,GAiBP,OACEhJ,EAAAA,EAAAA,KAACuF,GAAasB,EAAAA,EAAAA,GAAA,CACZf,sBAjBa,SAACmD,EAAgBxG,GAChC,IAAMyG,EAAUrF,IAAUc,EAAAA,GAAWqB,SAAW,qBAAuB,oBACjEmD,EAAkB,CACtB3H,YAAUqF,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACJgC,EAAWrH,YAAc,CAAC,GAAG,CAAF,GAAA4H,EAAAA,EAAAA,GAAA,GAC9BF,GAAOrC,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACFgC,EAAWrH,YAAcqH,EAAWrH,WAAW0H,GAAWL,EAAWrH,WAAW0H,GAAW,CAAC,GAAG,CAAF,GAAAE,EAAAA,EAAAA,GAAA,GAChG3G,EAAOwG,OAKdL,EAAiB,GAAIO,EACvB,EAKItF,MAAOA,GACHiF,GAGV,IAIaO,GAA6CjB,EAAAA,EAAAA,KACxDC,EAAAA,EAAAA,IAAcK,EAA6B,CAAEJ,WAAW,IACxD,CAAEC,SAAU,CAACC,EAAAA,GAAwBC,EAAAA,M,4KCzC1Ba,EAAuB,SAAHxJ,GAE1B,IADL0F,EAAiB1F,EAAjB0F,kBAAmBC,EAAe3F,EAAf2F,gBAAiB5B,EAAK/D,EAAL+D,MAAOgC,EAAa/F,EAAb+F,cAAeC,EAAqBhG,EAArBgG,sBAAuBrF,EAAMX,EAANW,OAAQ8I,EAAMzJ,EAANyJ,OAAWT,GAAIC,EAAAA,EAAAA,GAAAjJ,EAAAkJ,GAElGrH,GAAOC,EAAAA,EAAAA,YAAWC,EAAAA,aAExB,OACE7B,EAAAA,EAAAA,KAACwJ,EAAAA,IAAc3C,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,CAEb4C,OAAOzJ,EAAAA,EAAAA,KAAC0J,EAAAA,GAAS,CACfC,SAAU5G,aACV6G,KAAMC,EACNC,WAAY,CAAEC,MAAO,IACrBC,SAAS,6BACTC,QAASrC,EAAW/D,EAAOgC,EAAelE,KAE5CuI,qBAAsB,CAAEC,cAAeC,EAAAA,IACvCC,eAAgB,CACdd,OAAAA,EACAe,UAAW,mBAETxB,GAAI,IAAA7I,UAERgB,EAAAA,EAAAA,MAACyB,EAAAA,MAAK,CAACE,OAAQ,CAAEC,YAAa,IAAK5C,SAAA,EACjCD,EAAAA,EAAAA,KAAA,QAAMY,UAAU,6BAA4BX,SACzC0B,EAAKmB,UAAUC,6GAElB/C,EAAAA,EAAAA,KAACmI,EAA4B,CAC3B3C,kBAAmBA,EACnBC,gBAAiBA,EACjB5B,MAAOA,EACPgC,cAAeA,EACfC,sBAAuBA,EACvBrF,OAAQA,EACR8J,eAAgB,CAAEC,OAAQvC,UA1B1B,iBA+BV,EAYAqB,EAAqBlI,aAAe,CAClCoE,mBAAmB,EACnBC,iBAAiB,EACjBhF,OAAQ,G,oLCjDH,MAAMgK,EAAe,CAC1BC,YAAa,CACXC,MAAO,sMACPC,MAAO,gPAETC,UAAW,CACTF,MAAO,gBACPC,MAAO,iBAETE,UAAW,CACTH,MAAO,+BACPC,MAAO,iC,uCCxBJ,MAAMG,GAAsB,OAAW,CAC5C7K,KAAM,CACJoB,WAAYsB,EAAA,EAAOoI,oBAErBC,KAAM,CACJ3J,WAAYsB,EAAA,EAAOoI,mBACnBE,WAAY,SACZ/J,QAAS,OACTgK,UAAWvI,EAAA,EAAOwI,oBAClBC,aAAczI,EAAA,EAAO0I,kBAEvBC,SAAU,CACRpK,QAAS,OACTqK,eAAgB,iBAElBC,UAAW,CACTtK,QAAS,OACTuK,cAAe,SACfL,aAAczI,EAAA,EAAO0I,kBAEvBK,gBAAiB,CACfxK,QAAS,OACTuK,cAAe,MACfF,eAAgB,gBAChBL,UAAWvI,EAAA,EAAOgJ,mBAClB7B,MAAO,eAETxF,WAAY,CACVwF,MAAO,eAET8B,qBAAsB,CACpBvK,WAAYsB,EAAA,EAAOoI,mBACnBtH,YAAad,EAAA,EAAOkJ,oBAEtBC,eAAgB,CACdC,SAAU,OACVC,UAAWrJ,EAAA,EAAOsJ,oBAIhBC,GAAkB,OAAiB,CACvC,iCAAkC,CAChCH,SAAU,WAIDI,EAAgE,EAAGC,cAC9EF,IACA,MAAMlI,EAAU8G,IAChB,OACE,gBAAC7K,EAAA,EAAI,CACHU,UAAWqD,EAAQ/D,KAAI,aACX,kBAAkBmM,KAE7BA,EAEJ,EC1DUC,EAASC,MACpBC,EACAC,EACAC,EACAC,KAEA,MAAMC,QAAiBC,MAAML,EAAK,CAChCC,SACAC,KAAMI,KAAKC,UAAUL,GACrBC,YAGF,IAAKC,EAASI,GACZ,MAAM,IAAIC,MAAM,+BAGlB,OAAOL,EAASM,MAAM,EAGXC,EAAoCC,IAAiC,CAChF,eAAgB,mBAChBC,KAAMD,EAAcE,YAAYC,OAChC,yBAA0B,aAC1B,uBAAwB,aACxB,sBAAuBH,EAAcI,eACrCC,cAAe,kBAAkBL,EAAcM,QAC/CC,kBAAmBP,EAAcQ,eAAeC,GAChDC,WAAYV,EAAcQ,eAAeG,uBCoC3C,IAAYC,GAAZ,SAAYA,GACV,cACA,iBACD,CAHD,CAAYA,IAAAA,EAAa,KCsFlB,MAAMC,EAAa,IAxI1B,MACE,yBAAMC,CAAoBd,EAAgB,CAAC,G,MACzC,MAAMT,EAAUQ,EAAiCC,GAC3CV,EAAiC,CACrCyB,kBAAmB,UACnBC,iBAAkB,gCAClBC,eAAgB1B,EAAQgB,mBAG1B,OAAOrB,EACL,GAAkC,QAA/B,EAAAc,EAAckB,yBAAiB,eAAEC,gCACpCP,EAAcQ,KACd9B,EACAC,EAEJ,CAEA,8BAAM8B,CACJrB,EAAgB,CAAC,EACjBsB,EACAC,G,MAEA,MAAMhC,EAAUQ,EAAiCC,GAE3CwB,QAA6BC,KAAKC,qBAAqB1B,EAAeuB,GAGtEI,EAAc,IAAIC,IAAIJ,EAAqBlO,KAAI,EAAGmN,QAASA,KAC3DoB,EAAS,IAAID,IAAIN,EAAMhO,KAAI,EAAGmN,QAASA,KAGvCqB,EAAsBC,MAAMC,KAAKL,GAAavE,QAAO6E,IAAOJ,EAAOK,IAAID,KAGvEE,EAAkBJ,MAAMC,KAAKH,GAAQzE,QAAO6E,IAAON,EAAYO,IAAID,KAQzE,GALIH,EAAoB3L,OAAS,SACzBsL,KAAKW,qCAAqCpC,EAAe8B,EAAqBP,GAIvD,IAA3BY,EAAgBhM,OAClB,MAAO,CAAC,EAGV,MAAMmJ,EAA2C,CAC/CyB,kBAAmB,UACnBsB,aAAcF,EAAgB7O,KAAI2O,IAAM,CACtChB,eAAgBgB,EAChBjB,iBAAkB,gCAClBD,kBAAmB,UACnBuB,SAAUf,EACVgB,WAAY,gBAKhB,OAAOrD,EACL,GAAkC,QAA/B,EAAAc,EAAckB,yBAAiB,eAAEC,wCACpCP,EAAcQ,KACd9B,EACAC,EAEJ,CAEA,0CAAM6C,CACJpC,EAAgB,CAAC,EACjBsB,EACAC,G,MAEA,MAAMhC,EAAUQ,EAAiCC,GAC3CV,EAA8C,CAClDyB,kBAAmB,UACnBsB,aAAcf,EAAMhO,KAAI2O,IAAM,CAC5BhB,eAAgBgB,EAChBjB,iBAAkB,gCAClBsB,SAAUf,EACVgB,WAAY,gBAIhB,OAAOrD,EACL,GAAkC,QAA/B,EAAAc,EAAckB,yBAAiB,eAAEC,oCACpCP,EAAc4B,OACdlD,EACAC,EAEJ,CAEA,6BAAMkD,CACJzC,EAAgB,CAAC,EACjBuB,G,MAEA,IACE,MAAMhC,EAAUQ,EAAiCC,GAC3CV,EAAsD,CAC1DoD,UAAW,CAACnB,GACZgB,WAAY,WACZxB,kBAAmB,UACnBC,iBAAkB,iCAUpB,aAPyE9B,EACvE,GAAkC,QAA/B,EAAAc,EAAckB,yBAAiB,eAAEC,qDACpCP,EAAcQ,KACd9B,EACAC,IAGgB8C,aAAa/O,KAAIqP,GAAQA,EAAK1B,gB,CAChD,MAAO1N,GACP,MAAO,E,CAEX,CAEA,0BAAMmO,CACJ1B,EAAgB,CAAC,EACjBuB,GAEA,IACE,MAAMqB,QAAgCnB,KAAKgB,wBAAwBzC,EAAeuB,GAClF,GAAuC,IAAnCqB,EAAwBzM,OAC1B,MAAO,GAGT,MAAM0M,QAAiCpB,KAAKX,oBAAoBd,GAC1D8C,EAAyB,IAAIC,IAAIF,EAAyBG,eAAe1P,KAAI2P,GAAwB,CAACA,EAAqBxC,GAAIwC,MAErI,OAAOL,EAAwBtP,KAAI4P,GAAUJ,EAAuBK,IAAID,IAAW,CAAEzC,GAAIyC,I,CACzF,MAAO3P,GACP,MAAO,E,CAEX,GCzIW6P,EAAsB,EAAGC,WAAUC,WAAUpN,eACxD,MAAM3B,GAAY,IAAAC,YAAW,EAAAC,aACvBuL,GAAqB,IAAAxL,YAAW,MAChCqC,EAAU8G,IAuBhB,OACE,uBAAKnK,UAAWqD,EAAQwH,WACtB,gBAACvL,EAAA,EAAI,KACH,gBAAC,KAAa,CACZyQ,iBAAe,EACfC,kBAAkB,EAClBC,SAAS,YACT5N,MAAM,WACN6N,KAAMnP,EAAKmB,UAAU2H,EAAaC,YAAY+F,IAC9CM,SAAUpP,EAAKmB,UAAU,iBAI7B,uBAAKlC,UAAWqD,EAAQgH,MACtB,gBAAC+F,EAAA,EAAK,cACQrP,EAAKmB,UAAU,+CAAsD,CAAE2N,aAAW,YACpF,SACV5L,KAAK,UAEJ,GAAGlD,EAAKmB,UAAU,aAA2B,OAAR4N,QAAQ,IAARA,OAAQ,EAARA,EAAUnN,WAElD,gBAAC,MAAa,OAGhB,gBAAC,EAAA0N,2BAA0B,CACzBtP,KAAMA,EAENuP,UAhDY,IAAMjD,EAAWC,oBAAoBd,GAAe+D,MAAKvE,I,MAAY,OACrFwE,OAA8B,QAAvB,EAAAxE,EAASwD,sBAAc,eAAE7M,SAAU,EAC1C8N,OAAQzE,EAASwD,gBAAkB,IAAI1P,KAAIqP,GAAS,OAAD,wBAC9CA,GAAI,CAEP/O,MAAO+O,EAAKlC,GACZxB,QAAS0D,EAAKuB,SAEhB,IA0CItQ,MAAO0P,EACPpN,SAAUA,EACV1C,UAAWqD,EAAQ8H,eACnBwF,aAAc,CAACxB,EAAMyB,IAAe,OAAJzB,QAAI,IAAJA,OAAI,EAAJA,EAAMuB,KAAKG,cAAcC,SAASF,EAAOC,eACzEE,cAAc,cACdC,mBAAoBxF,EACpByF,oBA9CoBC,GACxB,uBAAKlR,UAAWqD,EAAQsH,UACtB,gBAACrL,EAAA,EAAI,cAAayB,EAAKmB,UAAU,sBAA6B,CAAEiP,KAAMD,EAASR,QAC5EQ,EAASR,MAEZ,gBAACpR,EAAA,EAAI,cAAayB,EAAKmB,UAAU,mDAA0D,CAAEkP,UAAWF,EAASG,aAC9GH,EAASG,UAAW,IAAKtQ,EAAKmB,UAAU,cAyCzCoP,qBAAsB,gBAAChS,EAAA,EAAI,CAACU,UAAWqD,EAAQ4H,sBAAuBlK,EAAKmB,UAAU2H,EAAaI,UAAU4F,KAAkB,aAClH9O,EAAKmB,UAAU2H,EAAaK,UAAU2F,MAGvD,EAGHD,EAAoBpP,aAAe,CACjCqP,SAAU,QACVC,SAAU,GACVpN,SAAU,O,sJC9EC6O,EAAY,SAACC,EAAYC,GACpC,IAAMC,EAAM,SAACC,GACX,IAAMC,EAAa3R,IAAAA,WAAauR,GAC9BA,EAAWG,GACX1R,IAAAA,OAAS,CAAC,EAAG0R,EAAOH,GACtB,OACEpS,EAAAA,EAAAA,KAACqS,GAAgBxL,EAAAA,EAAAA,GAAA,GAAK2L,GAE1B,EAKA,OAHAF,EAAIG,YAAW,aAAAC,QAAgBC,EAAAA,EAAAA,gBAAeN,GAAiB,KAC/DO,IAAqBN,EAAKD,GAEnBC,CACT,C,gOCnBa9O,EAAY,WAAH,MAAU,CAC9BqP,0BAA2B,CACzBC,UAAW,GACX,aAAc,CACZC,WAAY,KAGhBC,wBAAyB,CACvBD,WAAY,GACZ,WAAY,CACV7H,WAAY,SACZ+H,QAAS,CAAC,EAAG,GAAI,EAAG,IAEpB,wBAAyB,CACvBC,WAAY,QAGd,oBAAqB,CACnB/R,QAAS,OACTuK,cAAe,MACfyH,SAAU,EACVjI,WAAY,UAGd,mBAAoB,CAClBkI,WAAY,OACZnH,UAAW,UAGfoH,aAAc,CACZtJ,MAAO,QACP,8BAA+B,CAC7BsB,aAAc,SAGlBiI,mBAAoB,CAClBvJ,MAAO,QACPkC,UAAW,SAGhB,E,YC5BKsH,EAAqB,SAACC,EAAYC,GAAgB,OAAMA,EAAgB,OAAAf,OAAUe,EAAiB5F,GAAE,YAAA6E,OAAWe,EAAiBnC,MAAI,OAAAoB,OAAYc,EAAY,EAE7JE,EAA4B,SAAAC,GAAe,OAC/CA,IAAmBC,EAAAA,EAAAA,SAAQD,EAAgBE,OAAQC,EAAAA,EAAAA,MAAKH,EAAgBE,KAAK,SAAA/T,GAAY,MAAqB,qBAArBA,EAATiU,SAAgD,GAAE,EAE9HC,EAAqB,SAACR,EAAYC,GAAgB,MAAM,CAC5DpE,GAAImE,EACJzB,KAAM0B,GAAoBA,EAAiBnC,KAC3C2C,SAAUR,GAAoBA,EAAiBS,eAC/CpD,KAAMyC,EAAmBC,EAAYC,GACtC,EAEM,SAASU,EAAwB9B,GACtC,IAAM+B,EAAM,SAAC7B,GACX,IACE5Q,EAGE4Q,EAHF5Q,KACA6R,EAEEjB,EAFFiB,WACA5K,EACE2J,EADF3J,iBAGF9G,GAA8CC,EAAAA,EAAAA,UAAS,CAAEsS,eAAgBb,EAAYc,aAAc,OAAOtS,GAAAC,EAAAA,EAAAA,GAAAH,EAAA,GAAnGyS,EAAevS,EAAA,GAAEwS,EAAkBxS,EAAA,GACpCyS,GAAW7S,EAAAA,EAAAA,YAAW8S,EAAAA,iBAEtBC,GAAevS,EAAAA,EAAAA,UAAQ,kBAAMwS,EAAAA,EAAAA,KAA8B,GAAE,KAEnEC,EAAAA,EAAAA,YAAU,WACJrB,IACF5K,EAAiB,CAAC,0BAA2B,MAAM,GACnD+L,EAAaG,SAAStB,GAAY,GAAsBrC,MACtD,SAACsC,GACC7K,EAAiB,GAAI,MAAM,GAC3B4L,EAAmB,CAAEH,eAAe,EAAMC,aAAcN,EAAmBR,EAAYC,IACzF,IACA,SAACsB,GACKrB,EAA0BqB,IAGxBN,GACFA,EAASO,MAAM,qCAADtC,OAAsCc,IAGtD5K,EAAiB,GAAI,MAAM,GAC3B4L,EAAmB,CAAEH,eAAe,EAAMC,aAAcN,EAAmBR,OAEvEiB,GACFA,EAAS9T,MAAM,sBAAD+R,OAAuBqC,aAAyB9H,MAAQ8H,EAAgBjI,KAAKC,UAAUgI,KAIvGnM,EAAiB,CAAC,IAAK,MAAM,GAC7B4L,EAAmB,CAAEH,eAAe,EAAMU,cAAAA,IAE9C,IAGN,GAAG,CAACN,EAAUjB,EAAYmB,EAAc/L,IAExC,IAAM3E,GAAUC,EAAAA,EAAAA,kBAAiBV,GAE3ByR,GAAiB7S,EAAAA,EAAAA,UAAQ,kBAC7BpC,EAAAA,EAAAA,KAAA,OAAKY,UAAWqD,EAAQ4O,0BAA0B5S,UAChDD,EAAAA,EAAAA,KAACkV,EAAAA,GAAO,CAACpE,KAAMnP,EAAKmB,UAAUC,cAAqBoS,WAAS,KACxD,GACL,CAAClR,EAAQ4O,0BAA2BlR,IAEjCyT,GAAehT,EAAAA,EAAAA,UAAQ,kBAC3BpC,EAAAA,EAAAA,KAAA,OAAKY,UAAWqD,EAAQ+O,wBAAwB/S,UAC9CD,EAAAA,EAAAA,KAACqV,EAAAA,MAAK,CACJC,QAAS3T,EAAKmB,UAAUC,kGACxBc,MAAM,QACN+F,MAAO5J,EAAAA,EAAAA,KAAA,OAAKY,UAAU,gBACtB2U,aAAa,KAEX,GACL,CAACtR,EAAQ+O,wBAAyBrR,IAErC,OAAI6R,IAAee,EAAgBF,cAC1BY,EAGLzB,GAAce,EAAgBF,eAAiBE,EAAgBQ,cAC1DK,GAIPpV,EAAAA,EAAAA,KAACwV,EAAAA,SAAc,CAAAvV,UACbD,EAAAA,EAAAA,KAACqS,GAAgBxL,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAK0L,GAAK,IAAE+B,aAAcC,EAAgBD,iBAGjE,EAkBA,OARAF,EAAIhT,aAAe,CACjBoS,gBAAYiC,EACZ7M,iBAAkB8M,EAAAA,MAGpBtB,EAAI3B,YAAW,2BAAAC,QAA8BC,EAAAA,EAAAA,gBAAeN,GAAiB,KAC7EO,IAAqBwB,EAAK/B,GAEnB+B,CACT,C,qCCvHauB,EAA2B,SAACnJ,GACvC,IAAMoJ,EAAgB,IAAIC,IAAIrJ,GAAKsJ,SAASnO,MAAM,KAC5CoO,EAAYH,EAAcrS,OAEhC,OAAIwS,GAAa,EACQA,GAAa,IAA8C,IAAxCH,EAAcG,EAAY,GAAGxS,QAAwD,IAAxCqS,EAAcG,EAAY,GAAGxS,SAAyD,IAAxCqS,EAAcG,EAAY,GAAGxS,OAC7I,GAAAmP,OAChBkD,EAAcG,EAAY,GAAE,KAAArD,OAAIkD,EAAcG,EAAY,GAAE,KAAArD,OAAIkD,EAAcG,EAAY,IAAE,GAAArD,OAC5FkD,EAAcG,EAAY,GAAE,KAAArD,OAAIkD,EAAcG,EAAY,IAG1D,IACT,EAEaC,EAAmC,SAACC,EAAUC,GACzD,IAAMC,EAAiBR,EAAyBM,GAChD,OAAOE,GAAkBD,GAAeC,EAAe1E,gBAAkByE,EAAYzE,aACvF,ECPO,SAAS2E,EAAa/D,GAC3B,IAAM+B,EAAM,SAAC7B,GACX,IACE5Q,EAIE4Q,EAJF5Q,KACA0U,EAGE9D,EAHF8D,gBACAzN,EAEE2J,EAFF3J,iBACA0L,EACE/B,EADF+B,aAGIrQ,GAAUC,EAAAA,EAAAA,kBAAiBV,GAC3B8S,GAAuBC,EAAAA,EAAAA,QAAO,OAEpCnU,EAAAA,EAAAA,UAAQ,WACN,IAAM6R,EAAWK,GAAgBA,EAAaL,SAC9C,GAAIA,EAAU,CACZ,IAAMiC,EAAcP,EAAyB1B,GAC7CqC,EAAqBE,QAAU,CAAEhK,IAAKyH,EAAUwC,OAAQP,EAC1D,CACF,GAAG,CAAC5B,IAEJ,IAAMoC,GAAwBpU,EAAAA,EAAAA,cAAY,SAACtB,GACzC,IACI2V,EADET,GAAcU,EAAAA,EAAAA,QAAON,EAAqBE,QAAS,SAAU,MAOnE,OALIN,IACFS,EAAyBX,EAAiChV,EAAOkV,GAC/D,KACAvU,EAAKmB,UAAUC,8DAEZ4T,CACT,GAAG,CAAChV,IAEEsS,GAAW2C,EAAAA,EAAAA,QAAON,EAAqBE,QAAS,MAAO,MACvDK,GAAezU,EAAAA,EAAAA,UAAQ,kBAAO6R,IACpCjU,EAAAA,EAAAA,KAAA,OAAKY,UAAU,2BAA0BX,UACvCD,EAAAA,EAAAA,KAACE,EAAAA,EAAI,CAAAD,SAAG0B,EAAKmB,UAAUC,0CAAiD,CAAEkR,SAAAA,OACtE,GACH,CAACtS,EAAMsS,IAEV,OACEjU,EAAAA,EAAAA,KAACwV,EAAAA,SAAc,CAAAvV,UACbgB,EAAAA,EAAAA,MAAA,OAAKL,UAAWkW,IAAW,sBAAuB7S,EAAQoP,cAAcpT,SAAA,CACrE4W,GACD7W,EAAAA,EAAAA,KAACqS,GAAgBxL,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACX0L,GAAK,IACT5Q,KAAMA,EACN+U,sBAAuBA,EACvBK,eAAgB9C,EAChBrL,iBAAkBA,EAClByN,gBAAiBA,SAK3B,EA4BA,OATAjC,EAAIhT,aAAe,CACjBoS,gBAAYiC,EACZ7M,iBAAkB8M,EAAAA,KAClBpB,kBAAcmB,GAGhBrB,EAAI3B,YAAW,gBAAAC,QAAmBC,EAAAA,EAAAA,gBAAeN,GAAiB,KAClEO,IAAqBwB,EAAK/B,GAEnB+B,CACT,C,6HC3Fa4C,EACL,OADKA,EAEH,SAGGC,GAA0BC,EAAAA,EAAAA,eAAc,CAAC,GCDzCC,EAAiB,SAAHrX,GAA0C,IAApCsX,EAAgBtX,EAAhBsX,iBAAkBC,EAAUvX,EAAVuX,WAC3CC,GAAoBf,EAAAA,EAAAA,QAAO,MACjCgB,GAAmD3V,EAAAA,EAAAA,YAAWqV,GAAwBO,EAAAD,EAA9EE,SAAAA,OAAQ,IAAAD,EAAG3W,IAAAA,KAAM2W,EAAAE,EAAAH,EAAEI,WAAAA,OAAU,IAAAD,EAAG7W,IAAAA,KAAM6W,EAIxCE,IAFYC,EAAAA,EAAAA,oBAAVC,MAC2BC,YAAY,IAAM,IACPpQ,MAAM,KAAK,IAEzDkN,EAAAA,EAAAA,YAAU,WAMR,OALIuC,IACFE,EAAkBd,QAAUY,EAAiBY,YAAYX,EAAY,CAAEY,SAAS,IAChFR,KAGK,WACLH,EAAkBd,QAAU,KAC5BmB,GACF,CACF,GAAG,CAACN,EAAYD,EAAkBK,EAAUE,IAE5C,IAAMO,GAAwB5V,EAAAA,EAAAA,cAC5B,WACOgV,EAAkBd,UAInBoB,IAAqBO,EAAAA,YAAYC,SACnCd,EAAkBd,QAAQ6B,gBACjBT,IAAqBO,EAAAA,YAAYG,QAC1ChB,EAAkBd,QAAQ+B,WACjBX,IAAqBO,EAAAA,YAAYK,SAC1ClB,EAAkBd,QAAQiC,aAC1BC,YAAW,WACTpB,EAAkBd,SAAWc,EAAkBd,QAAQmC,MACzD,GAAG,IAEP,GACA,CAACf,IAUH,OAPA/C,EAAAA,EAAAA,YACE,WACEqD,GACF,GACA,CAACA,IAGI,IACT,EAEAf,EAAeyB,UAAY,CACzBvB,WAAYwB,IAAAA,OAAiBC,WAC7B1B,iBAAkByB,IAAAA,MAAgB,CAChCb,YAAaa,IAAAA,KAAeC,aAC3BA,Y,gBCrDQC,EAAmB,SAAHjZ,GAAgD,IAA1CkZ,EAAUlZ,EAAVkZ,WAAYC,EAAYnZ,EAAZmZ,aAAchZ,EAAQH,EAARG,SACnD6X,GAAUD,EAAAA,EAAAA,oBAAVC,MACFoB,GAA0BtX,EAAAA,EAAAA,YAAWqV,GACrCkC,GAAgBC,EAAAA,EAAAA,kBAAiBtB,GACjCuB,EAAW,GAAA3G,OAAMsG,EAAU,KAAAtG,OAAIyG,GAC/BG,GAAgB/C,EAAAA,EAAAA,QAAO8C,GAEvBE,GAA4BjX,EAAAA,EAAAA,cAAY,WAC5C,OAAK4W,EAAwBG,IACzBH,EAAwBG,KAAiBrC,GAAmBqC,IAAgBC,EAAc9C,SAC5F0C,EAAwBG,GAAerC,GAChChX,EAAAA,EAAAA,KAACmX,EAAc,CAACE,WAAYgC,EAAajC,iBAAkB6B,MAEpEK,EAAc9C,QAAU6C,EACjB,KACT,GAAG,CAACA,EAAaJ,EAAcC,IAEzBzB,GAAWnV,EAAAA,EAAAA,cAAY,WACvB4W,EAAwBG,KAAiBrC,IAC3CkC,EAAwBG,GAAerC,EAE3C,GAAG,CAACqC,EAAaH,IAEXvB,GAAarV,EAAAA,EAAAA,cAAY,kBACtB4W,EAAwBG,EACjC,GAAG,CAACA,EAAaH,IAEjB,OACEjY,EAAAA,EAAAA,MAACgW,EAAwBuC,SAAQ,CAACxY,MAAO,CAAEyW,SAAAA,EAAUE,WAAAA,GAAa1X,SAAA,CAC/DsZ,IACAtZ,IAGP,C,snDCpCawZ,EAAc,SAAH3Z,GAAA,IACtBa,EAAKb,EAALa,MAAK,OAELX,EAAAA,EAAAA,KAAC0Z,EAAAA,SAAQ,CAAAzZ,UACPD,EAAAA,EAAAA,KAACE,EAAAA,KAAI,CAACU,UAAU,eAAeT,QAAQ,QAAQwK,OAAK,EAACgP,QAAM,EAACvZ,OAAQ,CAAEC,KAAM,CAAEC,MAAO,YAAcL,SAAEU,KAC5F,EAMb8Y,EAAYrY,aAAe,CACzBT,MAAO,IAGF,IAAMiZ,EAAS,SAAHpZ,GAAA,IACjBC,EAAMD,EAANC,OAAM,OAENT,EAAAA,EAAAA,KAAA,OAAKY,UAAU,SAAQX,SACpBQ,GAAUA,EAAOC,KAAI,SAAAC,GAAK,OAAI8Y,EAAY,CAAE9Y,MAAAA,GAAQ,KACjD,EAOKkZ,EAAoB,SAAHC,GAAA,IAC5BC,EAAQD,EAARC,SACAC,EAASF,EAATE,UAAS,OAET/Y,EAAAA,EAAAA,MAACyY,EAAAA,SAAQ,CAAAzZ,SAAA,EACPD,EAAAA,EAAAA,KAAA,QAAAC,SAAO8Z,KACP/Z,EAAAA,EAAAA,KAACga,EAAS,MACD,EAQAC,EAA8B,SAAAD,GAAS,OAAI,SACtDzH,EACA2H,GAAa,OAEbla,EAAAA,EAAAA,KAAC0Z,EAAAA,SAAQ,CAAAzZ,UACPD,EAAAA,EAAAA,KAAC0C,EAAAA,MAAK,CAACC,YAAU,EAACwX,cAAc,SAAQla,UACtCD,EAAAA,EAAAA,KAAC6Z,EAAiB,CAACE,SAAUG,EAAc3H,GAAQyH,UAAWA,OAEvD,CACX,EAEII,EACW,gBADXA,EAEU,eAGHC,EAAkB,SAAHC,GAAmC,IAA7BC,EAAID,EAAJC,KAAM5Y,EAAI2Y,EAAJ3Y,KAAM6Y,EAASF,EAATE,UAC5C,OAAQD,GACN,KAAKH,EACH,OAAOzY,EAAKmB,UAAUC,kBACxB,KAAKqX,EACH,OAAOzY,EAAKmB,UAAUC,gDAAuD,CAAE0X,OAAQD,IACzF,QACE,OAAO,KAEb,EAEaE,EAAe,SAAHC,GAA6B,IAAvB5I,EAAI4I,EAAJ5I,KAAMyI,EAASG,EAATH,UAC/B7Z,EAAQ,KAMZ,OALY,MAARoR,GAAyB,KAATA,EAClBpR,EAAQyZ,EACCrI,GAAQA,EAAKxO,OAASiX,IAC/B7Z,EAAQyZ,GAEHzZ,CACT,EAEaia,EAAuB,SAAAC,GAAS,OAAIA,EAAUC,WAAaD,EAAUE,OAAQ,EAC7EC,EAAwB,SAAAH,GAAS,OAAKA,EAAUpa,QAAUoa,EAAUpa,OAAO8C,OAAS,CAAC,EC1ErF0X,EAAsB,SAAAlJ,GAAI,OAAyC,MAArC2I,EAAa,CAAE3I,KAAAA,EAAMyI,UAF9C,KAEmE,EAExEU,OAAczF,EAEd0F,EAAe3F,EAAAA,MAAW,SAACjD,GACtC,IACER,EAEEQ,EAFFR,KACAqJ,EACE7I,EADF6I,QAEIzZ,GAAOC,EAAAA,EAAAA,YAAWC,EAAAA,aAClBwZ,EAAmB1Z,EAAKmB,UAAUC,iBAClCpC,EAAQoR,EAAKpR,MAAQoR,EAAKpR,MAAQ0Z,EAAgB,CAAEE,KAAMG,EAAa,CAAE3I,KAAMA,EAAK/Q,MAAOwZ,UAbjF,MAa+F7Y,KAAAA,EAAM6Y,UAbrG,MAcVc,EAAkBV,EAAqB7I,GAC7C,OACE9Q,EAAAA,EAAAA,MAAA,OAAKL,UAAW2a,IAAW,gBAAiB,WAAWtb,SAAA,EACrDD,EAAAA,EAAAA,KAACkD,EAAAA,UAAS,CACRsY,MAAOH,EACP5Z,YAAaE,EAAKmB,UAAUC,kCAC5B/B,MAAO+Q,EAAK/Q,MACZya,cAAexB,GAA4B,kBAAOja,EAAAA,EAAAA,KAAC0b,EAAAA,UAAS,CAC1DzY,MAAM,8CACN,aAAYtB,EAAKmB,UAAUC,qCAA4C,CAAEgN,KAAMsL,KAC/E,IACF/X,SAAU,SAACqY,EAAG3a,GACZoa,EAAQ,CACNpa,MAAAA,EACA+Z,SAAS,EACTD,WAA0C,IAA/BG,EAAoBja,IAEnC,EACAZ,OAAQ,CAAE8E,WAAY,CAAE6E,MAAO,IAAKkC,UAAW,UAEhDqP,GAAmB3a,IAASX,EAAAA,EAAAA,KAACyZ,EAAW,CAAC9Y,MAAOA,IAChDqa,EAAsBjJ,KAAS/R,EAAAA,EAAAA,KAAC4Z,EAAM,CAACnZ,OAAQsR,EAAKtR,OAAOC,KAAI,SAAAkb,GAAC,OAAIA,EAAEtG,OAAO,QAGpF,IAOA6F,EAAa/Z,aAAe,CAC1B2Q,KAAM,CACJ/Q,WAAOyU,EACPsF,SAAS,EACTD,WAAW,I,iMCvDFe,EAA4B,CACvCC,WAAY,aACZC,SAAU,WACVC,sBAAuB,UAGZC,EAAqB,SAACta,EAAMua,GAAwE,IAA9DC,EAAcC,UAAA7Y,OAAA,QAAAkS,IAAA2G,UAAA,IAAAA,UAAA,GAAUC,EAAeD,UAAA7Y,OAAA,EAAA6Y,UAAA,QAAA3G,EAAE6G,EAAOF,UAAA7Y,OAAA,QAAAkS,IAAA2G,UAAA,IAAAA,UAAA,GACjG,GAAgB,MAAZF,EACF,OAAOva,EAAKmB,UAAUC,yBAGxB,IACEwZ,EAEEL,EAFFK,aAAYC,EAEVN,EADFO,iBAAAA,OAAgB,IAAAD,EAAG,GAAEA,EAGnBE,EAAqBH,IAAiBV,EAA0BC,WAKpE,GAJIK,IACFO,EAAiD,IAA5BD,EAAiBlZ,QAGpCmZ,EACF,OAAO/a,EAAKmB,UAAUC,yBAGxB,IAAIkH,EAAU,GACV0S,EAAoBF,EAAiBjS,QAAO,SAAAoR,GAAC,MAA0B,aAAtBA,EAAEgB,eAA8B,IAC/EC,EAAoBJ,EAAiBjS,QAAO,SAAAoR,GAAC,MAA0B,aAAtBA,EAAEgB,eAA8B,IA6BvF,MA5BwB,eAApBP,IACFM,EAAoB,IAElBA,EAAkBpZ,SACpB0G,GAAO,GAAAyI,OAAO/Q,EAAKmB,UAAUC,yBAC7B4Z,EAAkBG,SAAQ,SAACta,EAAQua,GACjC9S,GAAWzH,EAAOwa,SACbV,IACHrS,GAAO,KAAAyI,OAAS/Q,EAAKmB,UAAUma,EAAAA,EAAiBza,EAAO0a,yBACvDjT,GAAO,KAAAyI,OAASlQ,EAAO2a,mBAAkB,MAEvCJ,EAAQJ,EAAkBpZ,OAAS,IACrC0G,GAAW,KAEf,KAEE4S,EAAkBtZ,SAChBoZ,EAAkBpZ,SACpB0G,GAAW,MAEbA,GAAO,GAAAyI,OAAO/Q,EAAKmB,UAAUC,yBAC7B8Z,EAAkBC,SAAQ,SAACta,EAAQua,GACjC9S,GAAWzH,EAAOwa,SACdD,EAAQF,EAAkBtZ,OAAS,IACrC0G,GAAW,KAEf,KAEKA,CACT,EAEamT,EAAgC,SAACzb,EAAMqb,EAAUb,EAAgBE,GAAsC,IAArBC,EAAOF,UAAA7Y,OAAA,QAAAkS,IAAA2G,UAAA,IAAAA,UAAA,GACpG,IAAKY,EAAU,MAAO,GACtB,IACEK,EAGEL,EAHFK,oBACAC,EAEEN,EAFFM,qBAIF,OAFIN,EADFO,eAIIpB,EACKF,EAAmBta,EAAM0b,EAAqBlB,EAAgBE,EAAiBC,GAEjF3a,EAAKmB,UAAUC,yBAGjBkZ,EAAmBta,EAAM2b,EAAsBnB,EAAgBE,EAAiBC,EACzF,EClDMkB,EAAoB,mEAEpBC,EAAY,+BAELC,EAAgC,SAACnL,GAC5C,IACEoL,EAWEpL,EAXFoL,KACAC,EAUErL,EAVFqL,QACAC,EASEtL,EATFsL,YACAC,EAQEvL,EARFuL,+BACAC,EAOExL,EAPFwL,+BACAC,EAMEzL,EANFyL,sBACAC,EAKE1L,EALF0L,QACAC,EAIE3L,EAJF2L,MACAC,EAGE5L,EAHF4L,0BACAC,EAEE7L,EAFF6L,iCACAC,EACE9L,EADF8L,kBAEI1c,GAAOC,EAAAA,EAAAA,YAAWC,EAAAA,aAClByc,GAAS/H,EAAAA,EAAAA,UACTgI,GAAsBhI,EAAAA,EAAAA,UAC5BzU,GAA2DC,EAAAA,EAAAA,WAAS,GAAMC,GAAAC,EAAAA,EAAAA,GAAAH,EAAA,GAAnE0c,EAAYxc,EAAA,GAAEyc,EAAkCzc,EAAA,GACvD0c,GAAwCC,EAAAA,EAAAA,GAAmBlB,GAAnDmB,EAAaF,EAAbE,cAAeC,EAAYH,EAAZG,aACjBzR,GAAgBxL,EAAAA,EAAAA,YAAWkd,EAAAA,IAE/BnC,EAEEgB,EAFFhB,kBACAE,EACEc,EADFd,kBAGIpI,GAAW7S,EAAAA,EAAAA,YAAW8S,EAAAA,iBAM1BhH,EACEN,EADFM,MAGIqR,GAAoBzc,EAAAA,EAAAA,cAAY,SAACkP,GACrC,IAAAwN,EAGId,EAAMe,OAFRC,EAAGF,EAAHE,IACAC,EAAGH,EAAHG,IAGF,OAAOtB,EAAYuB,UAAUC,SAASH,GAAKI,SAASD,SAASF,GAAKI,UAAUhP,KAAG1J,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAC,CAC9E2Y,OAAQ,CAAC,mBACThO,OAAAA,GACI4M,EAAmC,CAAEqB,kCAAkC,GAAS,CAAC,GAAG,CAAF,GACtFA,iCAAkCrB,KACjCsB,YACAvO,MAAK,SAAAvE,GAAQ,OAAIA,CAAQ,IACzB+S,OAAM,SAAAhf,GAAK,OAAIif,QAAQC,IAAIlf,EAAM,GACtC,GAAG,CAACud,EAAOL,EAAaO,IAGlB0B,GAAwBxd,EAAAA,EAAAA,cAAY,SAACyd,EAAaC,GACtD,IAAAC,EAGI/B,EAAMe,OAFRC,EAAGe,EAAHf,IACAC,EAAGc,EAAHd,IAKF,OAFA1K,EAASyL,OAAO,8BAETrC,EAAYuB,UAAUC,SAASH,GAAKI,SAASD,SAASF,GAAKI,UAAU,+BACzEY,UAAU,CACTC,OAAKvZ,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,CACH2Y,OAAQ,CAAC,aACLQ,EAAc,CAAExV,OAAQ,CAAE6V,MAAM,4BAAD3N,OAA8BsN,EAAW,OAAU,CAAC,GACnF5B,EAAmC,CAAEkC,eAAgB,SAAY,CAAC,GAExEC,QAAS,CACPR,YAAAA,KAEDL,YACFvO,MAAK,SAAAvE,GAAQ,OAAIA,CAAQ,IACzB+S,OAAM,SAAAhf,GAAK,OAAIif,QAAQC,IAAIlf,EAAM,GACtC,GAAG,CAACud,EAAOL,EAAaO,IAElBoC,GAAgBle,EAAAA,EAAAA,cAAY,SAACme,EAASC,EAAQC,EAAYC,GAAY,OAC1EhC,GACE3d,EAAAA,EAAAA,MAAC4f,EAAAA,EAAK,CAAA5gB,SAAA,EACJD,EAAAA,EAAAA,KAAC8gB,EAAAA,EAAU,CAACC,QACV/gB,EAAAA,EAAAA,KAACghB,EAAAA,EAAY,CAAA/gB,UACXD,EAAAA,EAAAA,KAACihB,EAAAA,EAAM,CACLC,WAAW,SACX,aAAYvf,EAAKmB,UAAUC,SAC3B6G,MAAM5J,EAAAA,EAAAA,KAACmhB,EAAAA,IAAgB,IACvBC,QAAS,WAAF,OAAQvC,EAAa4B,EAAQ,MAGzCxgB,SAEE0gB,IAEFC,IAAgB5gB,EAAAA,EAAAA,KAACqhB,EAAAA,EAAS,CAAAphB,SAAE2gB,OAE/B,CACEH,QAAAA,EAASa,cAAc,EAAMC,QAAS,IAAMC,SAAU,eAAgBd,OAAAA,GAEzE,GAAE,CAAC9B,EAAejd,IAEf8f,GAAsCnf,EAAAA,EAAAA,cAAY,WACtDmS,EAASyL,OAAO,kCAChBzB,GAAmC,EACrC,GAAG,CAACA,IAEEiD,GAAgBtf,EAAAA,EAAAA,UAAQ,iBAAO,CACnCuf,aAAc5C,EACd6C,qBAAsBxD,EACvB,GAAG,CAACA,EAAkCW,IAGjC8C,GAAoBvf,EAAAA,EAAAA,cAAY,SAAC0a,EAAU8E,GAC/C,OAAIA,GACKC,EAAAA,EAAAA,mBAAyB/E,EAAU8E,IACxCA,IAAkBE,EAAAA,eAAeC,UAE9BF,EAAAA,EAAAA,mBAAyB/E,EAAU8E,EAC5C,GAAG,IAGGI,GAAuB5f,EAAAA,EAAAA,cAAY,SAAC6f,GACxC,IAAMvL,EDtEoB,SAAC+F,EAAmBE,EAAmBsF,GACnE,IAAIC,EAAmB,EACnBC,EAAiB,EAGfC,EAAsB,IAAItT,IAAI2N,EAAkBjc,KAAI,SAAA6hB,GAAG,OAAIA,EAAIvF,SAASnP,EAAE,KAC1E2U,EAAsB,IAAIxT,IAAI6N,EAAkBnc,KAAI,SAAA6hB,GAAG,OAAIA,EAAIvF,SAASnP,EAAE,KAE1E4U,EAAuB,GACvBC,EAAuB,GA0B7B,OAvBAP,EAAkBxF,kBAAkBG,SAAQ,SAACyF,GAC3C,IAAMI,EAAQJ,EAAIvF,SAASnP,GACvB2U,EAAoBlT,IAAIqT,GAC1BP,GAAoB,EACXE,EAAoBhT,IAAIqT,GACjCN,GAAkB,EAElBI,EAAqBG,KAAKL,EAE9B,IAGAJ,EAAkBtF,kBAAkBC,SAAQ,SAACyF,GAC3C,IAAMI,EAAQJ,EAAIvF,SAASnP,GACvByU,EAAoBhT,IAAIqT,GAC1BP,GAAoB,EACXI,EAAoBlT,IAAIqT,GACjCN,GAAkB,EAElBK,EAAqBE,KAAKL,EAE9B,IAEO,CACL5F,kBAAkB,GAADjK,QAAAmQ,EAAAA,EAAAA,GAAMlG,GAAsB8F,GAC7C5F,kBAAkB,GAADnK,QAAAmQ,EAAAA,EAAAA,GAAMhG,GAAsB6F,GAC7CN,iBAAAA,EACAC,eAAAA,EAEJ,CC6BmBS,CAAenG,EAAmBE,EAAmBsF,GACpE1N,EAASyL,OAAO,gCAEZtJ,EAAOwL,iBAAmB,GAC5B5B,EAAc,uBAAwB,UAAW7e,EAAKmB,UAAUC,2BAAkCpB,EAAKmB,UAAUC,oEAA2E,CAAEqO,MAAOwF,EAAOwL,oBAE1MxL,EAAOyL,eAAiB,GAC1B7B,EAAc,sBAAuB,UAAW7e,EAAKmB,UAAUC,+BAAsCpB,EAAKmB,UAAUC,4DAAmE,CAAEqO,MAAOwF,EAAOyL,kBAGzMzE,EAAQ,CACNjB,kBAAmB/F,EAAO+F,kBAC1BE,kBAAmBjG,EAAOiG,mBAE9B,GAAG,CAACF,EAAmBE,EAAmBe,EAAS4C,EAAe7e,IAElE,OACEV,EAAAA,EAAAA,MAAA,OAAKL,UAAU,mCAAkCX,SAAA,EAC/CD,EAAAA,EAAAA,KAAC+iB,EAAAA,EAAO,CAACtF,UAAWA,KACpBzd,EAAAA,EAAAA,KAACgjB,EAAAA,4BAA2B,CAC1B1E,OAAQC,EACR0E,sBAAuBnD,EACvBoD,eAAgBhB,EAChB1D,aAAcA,EACd2E,gBAAiB1E,EACjB2E,iBAAkB1V,EAClB2V,eAAgB7F,EAChB8F,uBAAsB,GAAA5Q,OAAKtF,EAAcmW,aAAW7Q,OAAGtF,EAAcoW,iBAAkBvjB,UAEvFD,EAAAA,EAAAA,KAACyjB,EAAAA,0BAAyB,OAG5BzjB,EAAAA,EAAAA,KAAC0jB,EAAAA,wBAAuB,CACtBN,iBAAkB1V,EAClB2V,eAAgB7F,EAChBkE,cAAeA,EAAczhB,UAE7BD,EAAAA,EAAAA,KAAC2jB,EAAAA,sBAA6B,CAC5BrF,OAAQA,EACRsF,0BAA2BvF,EAAoBoD,OAAsChM,EACrFqI,+BAAgCA,EAChCC,+BAAgCA,EAChCC,sBAAuBA,EACvBC,QAASA,EACTE,0BAA2BA,EAC3B0F,gBAAiBlH,EACjBmH,wBAAyBjH,EACzBkH,wBAAwB,EACxBC,mBA3DS,IA4DTC,2BA5DS,IA6DTC,wBAAyB,SAAAC,GAAgB,OAAIvG,EAAQ,CAAEjB,kBAAmBwH,GAAmB,EAC7FC,gCAAiC,SAAAD,GAAgB,OAAIvG,EAAQ,CAAEf,kBAAmBsH,GAAmB,EACrGE,wBAAyBC,EAAAA,+BACzBzC,kBAAmBA,QAK7B,EAqBAnE,EAA8Btc,aAAe,CAC3Cuc,KAAM,CAAC,EACPG,gCAAgC,EAChCC,gCAAgC,EAChCC,uBAAuB,EACvBK,mBAAmB,EACnBJ,QAAS,CAAC,EACVE,+BAA2B1I,EAC3B2I,kCAAkC,G,4BCzO9BmG,EAAoB,CACxB,CAAE9hB,KAAM+hB,EAAAA,EAAmBC,KAAM1a,MAAO,IAAK2a,OAAQ,KAG1CC,EAAoB,WAAH,OAC5B3kB,EAAAA,EAAAA,KAAA,OAAAC,UACED,EAAAA,EAAAA,KAAC4kB,EAAAA,EAAO,CAACC,gBAAiBN,KACtB,ECPKO,EAAuB,CAClC,CAAEriB,KAAM+hB,EAAAA,EAAmBC,KAAM1a,MAAO,GAAI2a,OAAQ,IACpD,CAAEjiB,KAAM+hB,EAAAA,EAAmBO,IAAKhb,MAAO,GACvC,CAAEtH,KAAM+hB,EAAAA,EAAmBC,KAAMC,OAAQ,GAAI3a,MAAO,KACpD,CAAEtH,KAAM+hB,EAAAA,EAAmBO,IAAKL,OAAQ,GAAI3a,MAAO,SAGxCib,EAAiB,WAAH,OACzB/jB,EAAAA,EAAAA,MAAA,OAAAhB,SAAA,EACED,EAAAA,EAAAA,KAAC4kB,EAAAA,EAAO,CAACC,gBAAiBC,KAC1B9kB,EAAAA,EAAAA,KAAC4kB,EAAAA,EAAO,CAACC,gBAAiB,CAAC,CAAEpiB,KAAM+hB,EAAAA,EAAmBO,IAAKhb,MAAO,OAAQ2a,OAAQ,QAClF1kB,EAAAA,EAAAA,KAAC4kB,EAAAA,EAAO,CAACC,gBAAiBC,MACtB,ECZFG,GAAeC,E,UAAAA,aAAY,CAC/BjS,QAAS,EACTkS,UAAW,CACT,4BAA6B,CAC3BC,OAAQ,SACRC,OAAQ,WAKRC,EAA6B,CACjC,CAAE7iB,KAAM+hB,EAAAA,EAAmBC,KAAMC,OAAQ,IACzC,CAAEjiB,KAAM+hB,EAAAA,EAAmBO,IAAKhb,MAAO,GAAI2a,OAAQ,IACnD,CAAEjiB,KAAM+hB,EAAAA,EAAmBC,KAAMC,OAAQ,IACzC,CAAEjiB,KAAM+hB,EAAAA,EAAmBO,IAAKhb,MAAO,GAAI2a,OAAQ,IACnD,CAAEjiB,KAAM+hB,EAAAA,EAAmBC,KAAMC,OAAQ,IACzC,CAAEjiB,KAAM+hB,EAAAA,EAAmBO,IAAKhb,MAAO,GAAI2a,OAAQ,IACnD,CAAEjiB,KAAM+hB,EAAAA,EAAmBC,KAAMC,OAAQ,IACzC,CAAEjiB,KAAM+hB,EAAAA,EAAmBO,IAAKhb,MAAO,GAAI2a,OAAQ,IACnD,CAAEjiB,KAAM+hB,EAAAA,EAAmBC,KAAMC,OAAQ,IACzC,CAAEjiB,KAAM+hB,EAAAA,EAAmBO,IAAKhb,MAAO,GAAI2a,OAAQ,KAG/Ca,EAA8B,CAClC,CAAE9iB,KAAM+hB,EAAAA,EAAmBgB,OAAQd,OAAQ,IAC3C,CAAEjiB,KAAM+hB,EAAAA,EAAmBO,IAAKhb,MAAO,KAAM2a,OAAQ,IACrD,CAAEjiB,KAAM+hB,EAAAA,EAAmBC,KAAMC,OAAQ,GAAI3a,MAAO,OACpD,CAAEtH,KAAM+hB,EAAAA,EAAmBO,IAAKhb,MAAO,OAAQ2a,OAAQ,KC3B5CI,GAAuB,CAClC,CAAEriB,KAAM+hB,EAAAA,EAAmBC,KAAM1a,MAAO,GAAI2a,OAAQ,IACpD,CAAEjiB,KAAM+hB,EAAAA,EAAmBO,IAAKhb,MAAO,GACvC,CAAEtH,KAAM+hB,EAAAA,EAAmBC,KAAMC,OAAQ,GAAI3a,MAAO,KACpD,CAAEtH,KAAM+hB,EAAAA,EAAmBO,IAAKL,OAAQ,GAAI3a,MAAO,SAGxC0b,GAAgB,WAAH,OACxBzlB,EAAAA,EAAAA,KAAC4kB,EAAAA,EAAO,CAACC,gBAAiBC,IAAwB,ECR9CY,GAAyB,CAC7B,CAAEjjB,KAAM+hB,EAAAA,EAAmBC,KAAM1a,MAAO,IAAK2a,OAAQ,KACrD,CAAEjiB,KAAM+hB,EAAAA,EAAmBO,IAAKhb,MAAO,KAAM2a,OAAQ,KACrD,CAAEjiB,KAAM+hB,EAAAA,EAAmBC,KAAM1a,MAAO,IAAK2a,OAAQ,KACrD,CAAEjiB,KAAM+hB,EAAAA,EAAmBO,IAAKhb,MAAO,OAAQ2a,OAAQ,MAG5CiB,GAAwB,WAAH,OAChC3lB,EAAAA,EAAAA,KAAA,OAAKkB,MAAO,CAAE+K,UAAW,IAAKhM,UAC5BD,EAAAA,EAAAA,KAAC4kB,EAAAA,EAAO,CAACC,gBAAiBa,MACtB,E,gCCVKE,GAAc,SAACvT,EAAkBuS,GAC5C,IAAMiB,EAAiB,SAAH/lB,GAAmC,IAA7BgmB,EAAWhmB,EAAXgmB,YAAgBvT,GAAKxJ,EAAAA,GAAAA,GAAAjJ,EAAAkJ,IAC7C,OAAI8c,GACK9lB,EAAAA,EAAAA,KAAC4kB,EAAO,KAGV5kB,EAAAA,EAAAA,KAACqS,GAAgBxL,EAAAA,EAAAA,GAAA,GAAK0L,GAC/B,EAUA,OAJAsT,EAAezkB,aAAe,CAC5B0kB,aAAa,GAGRD,CACT,E,mDCrBaE,GAAe,CAC1B/f,SAAU,WACVpB,QAAS,UACTohB,WAAY,aACZC,iBAAkB,mBAClBC,eAAgB,iBAChBC,yBAA0B,2BAC1BC,uBAAwB,yBACxBC,yBAA0B,2BAC1BC,wBAAyB,0BACzBC,mCAAoC,qCACpCC,qBAAsB,wBCXXC,GAAoC,CAC/CC,SAAS,EACTpJ,qBAAsB,CACpBb,iBAAkB,CAAC,CACjBkK,UAAW,CACTC,cAAe,EACfC,kBAAmB,CACjBC,YAAa,KACbC,SAAU,QACVC,gBAAiB,UACjBC,WAAY,GACZC,aAAc,UACdC,UAAW,QACX7V,KAAM,QACN8V,cAAe,yBACfC,KAAM,YAERC,sBAAuB,EACvBC,6BAAyB9R,EACzB4R,KAAM,YAERG,cAAe,WACf3Z,QAAI4H,EACJmH,gBAAiB,WACjB6K,OAAQ,SACRvK,sBAAuB,cACvBC,mBAAoB,EACpBH,SAAU,2BAEZ0K,cAAe,GACfC,kBAAkB,EAClBC,4BAA4B,EAC5BrL,aAAc,YAEhBc,oBAAqB,CAAC,EACtBE,gBAAgB,GAGLsK,GAAwC,CACnDnB,SAAS,EACTpJ,qBAAsB,CACpBoK,cAAe,GACfC,kBAAkB,EAClBC,4BAA4B,EAC5BrL,aAAc,cAEhBc,oBAAqB,CAAC,EACtBE,gBAAgB,GAGLuK,GAAqC,SAAAC,GAAU,OAAKA,EAAatB,GAAoCoB,EAAqC,EAE1IG,GAA+B,SAAAD,GAAU,OAAKA,EAAa,CAAC,qBAAuB,CAAC,MAAM,ECpD1FE,GAA0B,CACrCC,KAAMnlB,2BACNolB,SAAUplB,WACVqlB,OAAQrlB,SACRslB,QAAStlB,UACTulB,UAAWvlB,YACXwlB,SAAUxlB,WACVylB,MAAOzlB,QACP0lB,OAAQ1lB,SACR2lB,MAAO3lB,QACP4lB,QAAS5lB,UACT6lB,SAAU7lB,WACV8lB,QAAS9lB,UACT+lB,OAAQ/lB,SACRgmB,OAAQhmB,SACRimB,MAAOjmB,QACPkmB,UAAWlmB,YACXmmB,UAAWnmB,YACXomB,QAASpmB,UACTqmB,SAAUrmB,WACVsmB,QAAStmB,UACTumB,WAAYvmB,aACZwmB,WAAYxmB,aACZymB,QAASzmB,UACT0mB,UAAW1mB,YACX2mB,OAAQ3mB,SACR4mB,WAAY5mB,aACZ6mB,SAAU7mB,WACV8mB,QAAS9mB,UACT+mB,QAAS/mB,UACTgnB,kBAAmBhnB,qBACnBinB,OAAQjnB,SACRknB,UAAWlnB,YACXmnB,QAASnnB,UACTonB,QAASpnB,UACTqnB,mBAAoBrnB,sBACpBsnB,QAAStnB,UACTunB,OAAQvnB,SACRwnB,MAAOxnB,QACPynB,MAAOznB,QACP0nB,KAAM1nB,OACN2nB,WAAY3nB,aACZ4nB,QAAS5nB,UACT6nB,WAAY7nB,cC/BR8nB,IAAmBC,EAAAA,GAAAA,IAAS/E,GAAa/f,UACzC+kB,IAAmBC,EAAAA,GAAAA,IAAQH,IAAkB3iB,EAAAA,GAAAA,IAAW,S,uBCFxD+iB,GAAmCrF,IDIJ,WACnC,IAAMjkB,GAAOC,EAAAA,EAAAA,YAAWC,EAAAA,aAExB,OACE7B,EAAAA,EAAAA,KAACkrB,GAAAA,GAAgC,CAC/BzpB,YAAaE,EAAKmB,UAAUC,kCAC5BsM,GAAG,sBACHgH,gBAAiB,CACf8U,MAAO,OACPC,OAAQplB,GAAAA,UAEVrE,KAAMA,EACN4I,eAAgB,CAAEC,OAAQugB,KAGhC,GCnB4EpG,GAE/D0G,GAAoB,SAAHvrB,GAAA,IAAMwrB,EAAGxrB,EAAHwrB,IAAKC,EAASzrB,EAATyrB,UAAcziB,GAAIC,EAAAA,GAAAA,GAAAjJ,EAAAkJ,IAAA,OACzDhJ,EAAAA,EAAAA,KAACwrB,GAAAA,IAAmB3kB,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,CAElB4C,OAAOzJ,EAAAA,EAAAA,KAAC0J,GAAAA,GAAS,CAACC,SAAU5G,gBAAuBiH,SAAS,gDAC5DE,qBAAsB,CAAEC,cAAeC,GAAAA,KACnCtB,GAAI,IAAA7I,UAERD,EAAAA,EAAAA,KAACirB,GAAgC,CAACnF,YAAayF,MAL1CD,EAMe,EAQxBD,GAAkBjqB,aAAe,CAC/BmqB,WAAW,G,yCC9BAE,GAAa,CACxBC,cAAe,WACfC,gBAAiB,kBACjBC,UAAW,YACXC,YAAa,cACbC,OAAQ,SACRC,gBAAiB,kBACjBC,gBAAiB,YACjBC,aAAc,eACdC,OAAQ,SACRC,gBAAiB,kBACjBC,OAAQ,SACRC,aAAc,eACdC,UAAW,YACXC,YAAa,cACbC,MAAO,QACPC,oBAAqB,sBACrBC,gBAAiB,kBACjBC,WAAY,aACZC,qBAAsB,uBACtBC,iBAAkB,mBAClBC,cAAe,gBACfC,SAAU,eACVC,YAAa,cACbC,aAAc,eACdC,iBAAkB,mBAClBC,yBAA0B,2BAC1BC,IAAK,MACLC,YAAa,cACbC,eAAgB,kB,yWCzBZC,IAAkCC,EAAAA,GAAAA,gBAAe,CACrDC,aAAc,GACdC,cAAe,oBACfC,iBAAkB,yBAGPC,GAAiC,SAAAjsB,GAAI,OAAI,SAAiCX,EAAO6sB,GAC5F,IAAMC,EAAgBD,EAAiB7sB,GACvC,MAAM,GAAN0R,QAAAmQ,EAAAA,EAAAA,IACKkL,EAAAA,GAAAA,SAAQD,GAAiB,GAAKA,IAAajL,EAAAA,EAAAA,GAC3C7hB,EAAMuC,OAAS,EAAI,CAAC5B,EAAKmB,UAAUC,iCAAyC,IAEnF,CAAE,EAEWirB,GAAgC,SAAChtB,EAAO6sB,GACnD,OAAc,OAAV7sB,QAA4ByU,IAAVzU,EACb,GAEF6sB,EAAiB7sB,EAC1B,EAEMitB,IAAwCT,EAAAA,GAAAA,gBAAe,CAC3DC,aAAc,OACdC,cAAe,mBACfC,iBAAkB,wBAGPO,IAA0BC,EAAAA,GAAAA,YAAUC,EAAAA,GAAAA,gBAAeC,GAAAA,GAAgBd,KAEnEe,IAAgCH,EAAAA,GAAAA,YAAUC,EAAAA,GAAAA,gBAAeG,GAAAA,GAAsBN,K,4CCVtFpD,IAAmBC,EAAAA,GAAAA,IAAS/E,GAAa/f,UACzCwoB,IAAwBxD,EAAAA,GAAAA,IAAQH,IAAkB3iB,EAAAA,GAAAA,IAAW,cAE7DumB,GACJ7I,IACE8I,EAAAA,GAAAA,KAAyBC,EAAAA,GAAAA,IACvBT,GACA,CAAE1jB,OAAQgkB,MAEZxJ,GAGS4J,GAAsB,SAACrc,GAClC,IAAM5Q,GAAOC,EAAAA,EAAAA,YAAWC,EAAAA,aAClBuL,GAAgBxL,EAAAA,EAAAA,YAAWkd,EAAAA,IAGhB+P,EAGbzhB,EAHF0hB,cACAC,EAEE3hB,EAFF2hB,mBACAC,EACE5hB,EADF4hB,YAGIC,GAAc7sB,EAAAA,EAAAA,UAAQ,kBAAAyE,EAAAA,EAAAA,GAAC,CAAQxC,SAAOwC,EAAAA,EAAAA,GAAA,GAAOkoB,IAAyBC,EAAW,GAAK,CAACD,EAAoBC,IAG/GzD,EAKEhZ,EALFgZ,UACAhiB,EAIEgJ,EAJFhJ,OAAM2lB,EAIJ3c,EAHFoL,KAAAA,OAAI,IAAAuR,EAAG,CAAC,EAACA,EACTllB,EAEEuI,EAFFvI,SACGlB,GAAIC,EAAAA,GAAAA,GACLwJ,EAAKvJ,IAET,OACEhJ,EAAAA,EAAAA,KAACwJ,GAAAA,IAAc3C,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,CAEb4C,OAAOzJ,EAAAA,EAAAA,KAAC0J,GAAAA,GAAS,CACfC,SAAU5G,WACViH,SAAUA,GAAY,iCACtBC,QACE0T,IAAQjd,EAAAA,GAAAA,KACNid,EAAKwR,WACL,SAAAC,GAAI,OAAIztB,EAAKmB,UAAUmlB,GAAwBmH,IAASA,EAAK,IAC7DC,WACJzlB,KAAM0lB,KAERplB,qBAAsB,CAAEC,cAAeC,GAAAA,IACvCC,eAAgB,CACdd,OAAAA,EACAe,UAAWmhB,GAAWE,kBAEpB7iB,GAAI,IAAA7I,UAERD,EAAAA,EAAAA,KAACyuB,GAAwC,CACvC3I,YAAayF,EACbsD,OAAQA,EACRI,YAAaA,EACb5Y,gBAAiB,CACf8U,MAAO,YACPoE,UAAW3B,GAA+BjsB,QAxBzC8pB,GAAWE,gBA6BtB,EASAiD,GAAoBxtB,aAAe,CACjCmqB,WAAW,EACX5N,KAAM,CAAC,EACP3T,SAAU,M,iBChGCwlB,GAAkB,CAC7BC,KAAM,EACNC,QAAS,GACTC,OAAQ,GACRC,WAAY,IAGDC,GAAS,SAACC,GACrB,OAAQA,GACN,IAAK,UAkBL,QACE,MAAO/sB,WAjBT,IAAK,SACH,MAAOA,SACT,IAAK,UACH,MAAOA,UACT,IAAK,YACH,MAAOA,YACT,IAAK,WACH,MAAOA,WACT,IAAK,SACH,MAAOA,SACT,IAAK,WACH,MAAOA,WACT,IAAK,SACH,MAAOA,SACT,IAAK,iBACH,MAAOA,kBAIb,EAEagtB,GAAS,SAACC,GACrB,OAAQA,GACN,KAAK,EAQL,QACE,MAAO,KAPT,KAAK,GACH,MAAO,KACT,KAAK,GACH,MAAO,KACT,KAAK,GACH,MAAO,KAIb,EAEaC,GAAU,SAACC,EAAMC,GAC5B,OAAQD,GACN,KAAK,EACH,OAAOC,EAAOptB,gBAAwBA,aACxC,KAAK,EACH,OAAOotB,EAAOptB,gBAAwBA,aACxC,KAAK,EACH,OAAOotB,EAAOptB,gBAAwBA,aACxC,KAAK,EACH,OAAOotB,EAAOptB,gBAAwBA,aACxC,KAAK,EACH,OAAOotB,EAAOptB,gBAAwBA,aACxC,KAAK,EACH,OAAOotB,EAAOptB,gBAAwBA,aACxC,KAAK,EACH,OAAOotB,EAAOptB,gBAAwBA,aACxC,KAAK,EACH,OAAOotB,EAAOptB,gBAAwBA,aACxC,KAAK,EACH,OAAOotB,EAAOptB,gBAAwBA,aACxC,KAAK,EACH,OAAOotB,EAAOptB,gBAAwBA,aACxC,KAAK,GACH,OAAOotB,EAAOptB,gBAAwBA,aACxC,KAAK,GACH,OAAOotB,EAAOptB,gBAAwBA,aACxC,KAAK,GACH,OAAOotB,EAAOptB,gBAAwBA,aACxC,KAAK,GACH,OAAOotB,EAAOptB,gBAAwBA,aACxC,KAAK,GACH,OAAOotB,EAAOptB,gBAAwBA,aACxC,KAAK,GACH,OAAOotB,EAAOptB,gBAAwBA,aACxC,KAAK,GACH,OAAOotB,EAAOptB,gBAAwBA,aACxC,KAAK,GACH,OAAOotB,EAAOptB,gBAAwBA,aACxC,KAAK,GACH,OAAOotB,EAAOptB,gBAAwBA,aACxC,KAAK,GACH,OAAOotB,EAAOptB,gBAAwBA,aACxC,KAAK,GACH,OAAOotB,EAAOptB,gBAAwBA,aACxC,KAAK,GACH,OAAOotB,EAAOptB,gBAAwBA,aACxC,KAAK,GACH,OAAOotB,EAAOptB,gBAAwBA,aACxC,KAAK,GACH,OAAOotB,EAAOptB,gBAAwBA,aACxC,KAAK,GACH,OAAOotB,EAAOptB,gBAAwBA,aACxC,QACE,OAAOotB,EAAOptB,gBAAwBA,aAE5C,EAoBaqtB,GAAuB,SAACzuB,EAAM0uB,GAA+C,IAA/BC,EAAiBlU,UAAA7Y,OAAA,QAAAkS,IAAA2G,UAAA,IAAAA,UAAA,GAC1E,GAAIiU,EAAgB,CAClB,IACME,EADsBF,EAAeG,QAAQC,sBACXJ,EAAeG,QAAQE,wBAA0BL,EAAeG,QAAQG,gBAC5G1mB,EAAU,GACR2mB,EAAeP,EAAeQ,kBAMpC,GALKhwB,KAAAA,QAAU+vB,IAA0C,aAAzBA,EAAaE,UAC3C7mB,EAAUtI,EAAKmB,UAAUC,sCAA6C,CAAEqM,KAAMwhB,EAAaG,UAAWC,GAAIJ,EAAaE,YAGpFT,EAAeG,QAAQS,+BACzB,CACjC,IAAMd,EAAoD,YAA7CE,EAAeG,QAAQU,kBAC9BC,EAAMZ,EAAUhtB,OACtBgtB,EAAUzT,SAAQ,SAACsU,EAAUrU,GAC3B9S,GAhCyB,SAACtI,EAAM0vB,EAASlB,GAAqC,IAA/BG,EAAiBlU,UAAA7Y,OAAA,QAAAkS,IAAA2G,UAAA,IAAAA,UAAA,GAChEkV,EAAYD,IAAUE,YACtBC,EAAUH,IAAUI,UACpBC,EAAW3B,GAAOP,GAAgB6B,IAAUM,gBAC5CC,EAAS7B,GAAOP,GAAgB6B,IAAUQ,cAC1CC,EAAY,GAAApf,OAAM/Q,EAAKmB,UAAU+sB,GAAOwB,IAAUU,QAAO,KAAArf,OAAI/Q,EAAKmB,UAAUC,0BAAiC,CACjHqM,KAAMzN,EAAKmB,UAAUmtB,GAAQqB,EAAWnB,GAAO,CAAEH,IAAK0B,IACtDV,GAAIrvB,EAAKmB,UAAUmtB,GAAQuB,EAASrB,GAAO,CAAEH,IAAK4B,OAGpD,OAAItB,EACKwB,EAEH,GAANpf,OAAUof,EAAY,MAAApf,OAAM7R,KAAAA,YAAcwwB,IAAUW,sBAAwBX,IAAUW,oBAAsB,EAAKrwB,EAAKmB,UAAUC,eAAuBpB,EAAKmB,UAAUC,eAAoB,QAAA2P,OACxL7R,KAAAA,YAAcwwB,IAAUY,uBAAyB,EAAIZ,IAAUY,sBAAqB,IACxF,CAiBmBC,CAAkBvwB,EAAMyvB,EAAUjB,EAAMG,GAC/CrmB,GAAW8S,EAAQoU,EAAM,IAC3BlnB,GAAW,KAEf,GACF,CACA,IAAMkoB,EAAgC9B,EAAe+B,mCAMrD,OAJEnoB,GAAO,IAAAyI,OADLyf,EACaxwB,EAAKmB,UAAUC,4BAEfpB,EAAKmB,UAAUC,+BAGlC,CACA,MAAO,EACT,E,uCCvIMsvB,IAA4BvH,EAAAA,GAAAA,IAAS/E,GAAaM,0BAElDiM,GACJ1M,IACE8I,EAAAA,GAAAA,KAAyBC,EAAAA,GAAAA,IACvB4D,GAAAA,GACA,CAAE/nB,OAAQ6nB,ObQiB,WAAH,OAC5BpxB,EAAAA,EAAAA,MAAA,OAAKL,UAAWqkB,EAAahlB,SAAA,EAC3BD,EAAAA,EAAAA,KAAC4kB,EAAAA,EAAO,CAACC,gBAAiBS,KAC1BtlB,EAAAA,EAAAA,KAAC4kB,EAAAA,EAAO,CAACC,gBAAiBS,KAC1BrkB,EAAAA,EAAAA,MAAA,OAAKC,MAAO,CAAE+K,UAAW,IAAKhM,SAAA,EAC5BD,EAAAA,EAAAA,KAAC4kB,EAAAA,EAAO,CAAC7a,MAAO,OAChB/J,EAAAA,EAAAA,KAAA,UACAA,EAAAA,EAAAA,KAAC4kB,EAAAA,EAAO,CAACC,gBAAiBU,KAC1BvlB,EAAAA,EAAAA,KAAC4kB,EAAAA,EAAO,CAACC,gBAAiBU,QAE5BtkB,EAAAA,EAAAA,MAAA,OAAKC,MAAO,CAAE+K,UAAW,IAAKhM,SAAA,EAC5BD,EAAAA,EAAAA,KAAC4kB,EAAAA,EAAO,CAAC7a,MAAO,OAChB/J,EAAAA,EAAAA,KAAA,UACAA,EAAAA,EAAAA,KAAC4kB,EAAAA,EAAO,CAACC,gBAAiBU,KAC1BvlB,EAAAA,EAAAA,KAAC4kB,EAAAA,EAAO,CAACC,gBAAiBU,SAExB,IanBKiN,GAAkB,SAACjgB,GAC9B,IAAM5Q,GAAOC,EAAAA,EAAAA,YAAWC,EAAAA,aAExBC,GAA4CC,EAAAA,EAAAA,UAAS,MAAKC,GAAAC,EAAAA,EAAAA,GAAAH,EAAA,GAAnDuuB,EAAcruB,EAAA,GAAEywB,EAAiBzwB,EAAA,GAClC0wB,GAA4BpwB,EAAAA,EAAAA,cAAY,SAACqwB,GAAWF,EAAkBE,EAAO,GAAG,IAGpFrH,EAKE/Y,EALF+Y,IACAC,EAIEhZ,EAJFgZ,UACAhiB,EAGEgJ,EAHFhJ,OAAM2lB,EAGJ3c,EAFFoL,KAAAA,OAAI,IAAAuR,EAAG,CAAC,EAACA,EACNpmB,GAAIC,EAAAA,GAAAA,GACLwJ,EAAKvJ,IAED4pB,EAAgBjV,EAAhBiV,YAER,OACE5yB,EAAAA,EAAAA,KAACwJ,GAAAA,IAAc3C,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,CAEb4C,OAAOzJ,EAAAA,EAAAA,KAAC0J,GAAAA,GAAS,CACfC,SAAU5G,cACViH,SAAS,2BACTC,QAASmmB,GAAqBzuB,EAAM0uB,GAAkBA,EAAe7Z,SAAS,GAC9E5M,KAAMipB,KAER3oB,qBAAsB,CAAEC,cAAeC,GAAAA,IACvCC,eAAgB,CACdd,OAAAA,EACAe,UAAWghB,IAETxiB,GAAI,IAAA7I,UAERD,EAAAA,EAAAA,KAACsyB,GAA0C,CACzCxM,YAAayF,EACbuH,YAAU,EACVC,OAAQ,CAAEpV,MAAI9W,EAAAA,EAAAA,GAAA,GAAO8W,IACrBtH,gBAAiB,CACbsH,KAAMiV,GAEVH,kBAAmBC,MArBhBpH,EAyBX,EASAkH,GAAgBpxB,aAAe,CAC7BmqB,WAAW,EACX5N,KAAM,CAAC,G,yBChEHqV,IAAkBlI,EAAAA,GAAAA,IAAS/E,GAAanhB,SACxCquB,IAAsBjI,EAAAA,GAAAA,IAAQgI,IAAiB9qB,EAAAA,GAAAA,IAAW,aAE1DgrB,IAAgCxE,EAAAA,GAAAA,KAAyBC,EAAAA,GAAAA,IAA6BL,GAA+B,CAAE9jB,OAAQyoB,MAExHE,GAA4B,SAAC5gB,GACxC,IAAMnF,GAAgBxL,EAAAA,EAAAA,YAAWkd,EAAAA,IAC3Bnd,GAAOC,EAAAA,EAAAA,YAAWC,EAAAA,aAGPgtB,EAGbzhB,EAHF0hB,cACAC,EAEE3hB,EAFF2hB,mBACAC,EACE5hB,EADF4hB,YAGIC,GAAc7sB,EAAAA,EAAAA,UAAQ,kBAAAyE,EAAAA,EAAAA,GAAC,CAAQxC,SAAOwC,EAAAA,EAAAA,GAAA,GAAOkoB,IAAyBC,EAAW,GAAK,CAACD,EAAoBC,IAG/GzlB,EAGEgJ,EAHFhJ,OAAM2lB,EAGJ3c,EAFFoL,KAAAA,OAAI,IAAAuR,EAAG,CAAC,EAACA,EACNpmB,GAAIC,EAAAA,GAAAA,GACLwJ,EAAKvJ,IAET,OACEhJ,EAAAA,EAAAA,KAACwJ,GAAAA,IAAc3C,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,CAEb4C,OAAOzJ,EAAAA,EAAAA,KAAC0J,GAAAA,GAAS,CACfC,SAAU5G,WACV6G,KAAM0lB,GACNtlB,SAAS,uBACTC,QAAStI,EAAKmB,UAAUmlB,GAAwBtK,EAAKyV,UAAY,SAAWrwB,KAAK,GAAD2P,OAAIiL,EAAKyV,cAE3FlpB,qBAAsB,CAAEC,cAAeC,GAAAA,IACvCC,eAAgB,CACdd,OAAAA,EACAe,UAAW,aAETxB,GAAI,IAAA7I,UAERD,EAAAA,EAAAA,KAACkzB,GAA6B,CAC5BrE,OAAQA,EACRI,YAAaA,EACb5Y,gBAAiB,CACf8U,MAAO,WACPxN,KAAAA,EACA4R,UAAWN,EAAYoE,wCAAqC5d,EAAYuY,IAE1EsF,uBAAuB,EACvBC,aAAa,EACbC,kBAAkB,EAClBC,kBAAmBxE,EAAYoE,mCAAqC,GAAK,CAAC,YAzBxE,WA6BV,EAOAF,GAA0B/xB,aAAe,CACvCuc,KAAM,CAAC,G,wDC/EI+V,GAAoB,WAC/B,IAAM/xB,GAAOC,EAAAA,EAAAA,YAAWC,EAAAA,aAKxB,MAAO,CACL8xB,gBALqBrxB,EAAAA,EAAAA,cAAY,SAACsxB,EAAQC,GAAQ,OAAKlyB,EAAKmyB,eAC5DC,OAAOH,GAASC,EAASG,cACzB,CAAEC,YAAY,EAAOC,sBAAuB,GAC7C,GAAE,CAACvyB,IAIN,E,sDCkBQwyB,GAAgBC,GAAAA,EAAhBD,YAEF3wB,GAAY,WAAH,MAAU,CACvB6wB,YAAa,CACXC,SAAU,OACVnzB,QAAS,UAEZ,EAEK0pB,IAAmBC,EAAAA,GAAAA,IAAS/E,GAAa/f,UACzCuuB,IAAavJ,EAAAA,GAAAA,IAAQH,IAAkB3iB,EAAAA,GAAAA,IAAW,WAClDssB,GACJ5O,IACE8I,EAAAA,GAAAA,KAAyBC,EAAAA,GAAAA,IACvB8F,GAAAA,EACA,CAAEjqB,OAAQ+pB,MAEZvP,GAGS0P,GAAc,SAACniB,GAC1B,IAAM5Q,GAAOC,EAAAA,EAAAA,YAAWC,EAAAA,aAEE8yB,IADJ/yB,EAAAA,EAAAA,YAAWkd,EAAAA,KAC6B,CAAC,GAAvDlR,eAAkB+mB,aACpBC,GAAsBC,EAAAA,GAAAA,IAAoBrxB,IACxCmwB,EAAmBD,KAAnBC,eAGNrI,EAME/Y,EANF+Y,IACAC,EAKEhZ,EALFgZ,UACAhiB,EAIEgJ,EAJFhJ,OACAurB,EAGEviB,EAHFuiB,aAAY5F,EAGV3c,EAFFoL,KAAAA,OAAI,IAAAuR,EAAG,CAAC,EAACA,EACNpmB,GAAIC,EAAAA,GAAAA,GACLwJ,EAAKvJ,IAGP+rB,EAOEpX,EAPFoX,aACAlB,EAMElW,EANFkW,SACAllB,EAKEgP,EALFhP,WACAqmB,EAIErX,EAJFqX,aACAC,EAGEtX,EAHFsX,qBACAC,EAEEvX,EAFFuX,kBACAC,EACExX,EADFwX,SAGMC,GAAejB,IAAe,CAAC,GAA/BiB,WAEFC,GAAmBjzB,EAAAA,EAAAA,UAAQ,iBAAO,CACtCkzB,SAAUzB,EACV0B,oBAAqB,CAAEC,YAAaJ,EAAWK,aAAeL,EAAWK,aAAe,KACxFC,oBAAqB,CAAEF,YAAaJ,EAAWO,WAAaP,EAAWO,WAAa,KACrF,GAAG,CAAC9B,EAAUuB,EAAWK,aAAcL,EAAWO,aAG7CC,GAAqBxzB,EAAAA,EAAAA,UAAQ,kBAAMT,EAAKmB,UAAUC,wCAA+C,CAAEgyB,aAAAA,EAAclB,SAAAA,GAAW,GAAE,CAACkB,EAAclB,EAAUlyB,IAEvJk0B,GAAgBvzB,EAAAA,EAAAA,cAAY,SAACwzB,GACjChB,EAAa,CACXnX,KAAM,SAAAoY,GAAQ,OAAAlvB,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACTkvB,GACAD,EAAW,GAGpB,GAAG,CAAChB,IAEEkB,GAAiB1zB,EAAAA,EAAAA,cAAY,SAAC2zB,GAClC,GAAIA,EAAW,CACb,IAAMC,EAFmD9Z,UAAA7Y,OAAA,QAAAkS,IAAA2G,UAAA,IAAAA,UAAA,GAEduX,EAAesC,EAAWpC,GAAYoC,EACjFJ,EAAc,CAAEd,aAAcmB,GAChC,CACF,GAAG,CAACrC,EAAUgC,EAAelC,IAEvBwC,GAAqC7zB,EAAAA,EAAAA,cAAY,SAAC2zB,GAAuC,IAA5BG,EAAcha,UAAA7Y,OAAA,QAAAkS,IAAA2G,UAAA,IAAAA,UAAA,GAC/E,GAAI6Z,GAAaA,EAAUI,OAAQ,CACjC,IAAMH,EAAoBE,EAAiBzC,EAAesC,EAAUI,OAAQxC,GAAYoC,EAAUI,OAClGR,EAAc,CAAEd,aAAcmB,GAChC,CACF,GAAG,CAACrC,EAAUgC,EAAelC,IAEvB2C,GAAmBh0B,EAAAA,EAAAA,cAAY,SAAAwX,GAA4B,IAAzByc,EAAOzc,EAAPyc,QAASC,EAAQ1c,EAAR0c,SAC/CX,EAAc,CAAEY,cAAeF,EAASG,aAAcF,GACxD,GAAG,CAACX,IAEJ/zB,GAAwDC,EAAAA,EAAAA,UAAS,MAAKC,GAAAC,EAAAA,EAAAA,GAAAH,EAAA,GAA/D60B,EAAoB30B,EAAA,GAAE40B,EAAuB50B,EAAA,GAElD60B,GACEC,EAAAA,GAAAA,IAA8B,CAChCnoB,WAAAA,EACAooB,KAAMC,GAAAA,EAAKC,QACXjC,aAAAA,EACAnB,SAAAA,IALAgD,WAQIpiB,GAAW7S,EAAAA,EAAAA,YAAW8S,EAAAA,iBAW5B,OATAG,EAAAA,EAAAA,YAAU,WACJogB,GAAwBC,GAC1B2B,EAAW,CAAE1B,SAAU,CAAC,EAAG+B,WAAY,CAAC,IAAK/lB,MAAK,SAACgmB,GACjDP,EAAwBO,EAC1B,IAAGC,SAAQ,WACX,GAEJ,GAAG,CAAClC,EAAmB2B,EAAY5B,KAGjCh0B,EAAAA,EAAAA,MAACuI,GAAAA,IAAc3C,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,CAEb4C,OACEzJ,EAAAA,EAAAA,KAAC0J,GAAAA,GAAS,CACRE,KAAMytB,GACN1tB,SAAU5G,SACViH,SAAS,yBACTstB,GAAG,KACHC,iBAAkBzgB,IAAW8d,EAAoB,gBACjD3qB,QAAS2rB,IAGbvrB,eAAgB,CACZC,UAAWghB,EACX/hB,OAAAA,GAEJW,qBAAsB,CAAEC,cAAeC,GAAAA,KACnCtB,GAAI,IAAA7I,SAAA,EAERD,EAAAA,EAAAA,KAACw0B,GAAyC,CACxC1O,YAAayF,EACbiM,cAAc,EACd3D,SAAUc,EACVf,OAAQmB,EACRiB,eAAgBA,EAChBzK,UAAWA,EACXkM,mBAAoBnB,EACpBoB,YAAY,EACZrC,iBAAkBA,IAKnBJ,GACDC,IACCr0B,KAAAA,QAAU81B,KACX32B,EAAAA,EAAAA,KAAC23B,GAAAA,IAAsB9wB,EAAAA,EAAAA,GAAA,CACrB8H,WAAYA,EACZilB,OAAQjW,EAAKia,OACb/D,SAAUA,GAAUc,EACpBqB,eAAgBG,EAChBx0B,KAAMA,EACN8S,SAAUA,EACV0gB,SAAUA,EACV0C,UAAWxC,EAAiBK,oBAAoBF,YAChDsC,UAAWzC,EAAiBE,oBAAoBC,YAChDuC,cAAehD,GACXjsB,OA9CDwiB,EAmDX,EAUAoJ,GAAYtzB,aAAe,CACzBmqB,WAAW,EACX5N,KAAM,CAAC,G,6DCzLHqa,GAAwCpS,GAAYqS,GAAAA,ICTvB,WAAH,OAC9Bh3B,EAAAA,EAAAA,MAAAi3B,EAAAA,SAAA,CAAAj4B,SAAA,EACED,EAAAA,EAAAA,KAACylB,GAAa,KACdzlB,EAAAA,EAAAA,KAAC4kB,EAAAA,EAAO,CAACC,gBAAiB,CAAC,CAAEpiB,KAAM+hB,EAAAA,EAAmBO,IAAKhb,MAAO,OAAQ2a,OAAQ,QAClF1kB,EAAAA,EAAAA,KAACglB,EAAc,KACfhlB,EAAAA,EAAAA,KAAC4kB,EAAAA,EAAO,CAACC,gBAAiB,CAAC,CAAEpiB,KAAM+hB,EAAAA,EAAmBO,IAAKhb,MAAO,OAAQ2a,OAAQ,QAClF1kB,EAAAA,EAAAA,KAACglB,EAAc,MACd,IDIQmT,GAAoB,SAAC5lB,GAChC,IAAM5Q,GAAOC,EAAAA,EAAAA,YAAWC,EAAAA,aAGtB0pB,EAKEhZ,EALFgZ,UACAhiB,EAIEgJ,EAJFhJ,OACA6uB,EAGE7lB,EAHF6lB,SAAQlJ,EAGN3c,EAFFoL,KAAAA,OAAI,IAAAuR,EAAG,CAAC,EAACA,EACNpmB,GAAIC,EAAAA,GAAAA,GACLwJ,EAAKvJ,IAGP+nB,EAGEpT,EAHFoT,UACAD,EAEEnT,EAFFmT,QACAjjB,EACE8P,EADF9P,GAGF,OACE7N,EAAAA,EAAAA,KAACwJ,GAAAA,IAAc3C,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,CAEb4C,OAAOzJ,EAAAA,EAAAA,KAAC0J,GAAAA,GAAS,CACfC,SAAU5G,sBACVkH,SAASouB,EAAAA,GAAAA,IAAsB12B,EAAMovB,EAAWD,GAChDlnB,KAAM0uB,KAERpuB,qBAAsB,CAAEC,cAAeC,GAAAA,IACvCC,eAAgB,CACZd,OAAAA,EACAe,UAAWmhB,GAAWM,kBAEtBjjB,GAAI,IAAA7I,UAERD,EAAAA,EAAAA,KAACg4B,GAAqC,CACpClS,YAAayF,EACb5pB,KAAMA,EACN0U,gBAAiB,CACfsH,KAAM,CACJoT,UAAAA,EACAD,QAAAA,EACAyH,SAAUH,EACVI,UAAW3qB,GAEb4qB,aAAc,CACZ1H,UAAWA,GAAa,IAAI2H,KAC5B5H,QAAUjwB,KAAAA,OAASiwB,IAAYjwB,KAAAA,YAAciwB,GAAY,KAAOA,QAzBjErF,GAAWM,gBA+BtB,EAWAoM,GAAkB/2B,aAAe,CAC/BmqB,WAAW,EACX5N,KAAM,CAAC,EACPya,SAAU,M,0IEpECO,GAAsB,SAAH74B,GAQzB,IAPL84B,EAA2B94B,EAA3B84B,4BACAC,EAAe/4B,EAAf+4B,gBACAjvB,EAAI9J,EAAJ8J,KACAkvB,EAAWh5B,EAAXg5B,YACAC,EAA+Bj5B,EAA/Bi5B,gCACAC,EAAUl5B,EAAVk5B,WACGlwB,GAAIC,EAAAA,GAAAA,GAAAjJ,EAAAkJ,IAEDrH,GAAOC,EAAAA,EAAAA,YAAWC,EAAAA,aAExB,OACE7B,EAAAA,EAAAA,KAACwJ,GAAAA,IAAc3C,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,CAEb4C,OAAOzJ,EAAAA,EAAAA,KAAC0J,GAAAA,GAAS,CACfC,SAAU5G,kBACV6G,KAAMA,EACNqvB,YAAat3B,EAAKmB,UAAUC,mBAC5BkH,QAAS2uB,IAEX1uB,qBAAsB,CAAEC,cAAeC,GAAAA,IACvCC,eAAgB,CACdd,OAAQsvB,EACRvuB,UAAWmhB,GAAWO,kBAEpBljB,GAAI,IAAA7I,UAERD,EAAAA,EAAAA,KAACk5B,GAAAA,GAAuB,CAACJ,YAAaA,EAAaK,kBAAgB,EAACJ,gCAAiCA,EAAiCC,WAAYA,MAd7IvN,GAAWO,gBAiBtB,EAWA2M,GAAoBv3B,aAAe,CACjC43B,YAAY,G,6HC1CDI,GAAoB,SAAHt5B,GAQvB,IAPLu5B,EAA8Bv5B,EAA9Bu5B,+BACAR,EAAe/4B,EAAf+4B,gBACAjvB,EAAI9J,EAAJ8J,KACA0vB,EAA4Bx5B,EAA5Bw5B,6BACAR,EAAWh5B,EAAXg5B,YACAE,EAAUl5B,EAAVk5B,WACGlwB,GAAIC,EAAAA,GAAAA,GAAAjJ,EAAAkJ,IAEDrH,GAAOC,EAAAA,EAAAA,YAAWC,EAAAA,aAExB,OACE7B,EAAAA,EAAAA,KAACwJ,GAAAA,IAAc3C,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,CAEb4C,OAAOzJ,EAAAA,EAAAA,KAAC0J,GAAAA,GAAS,CACfC,SAAU5G,eACV6G,KAAMA,EACNqvB,YAAat3B,EAAKmB,UAAUC,gBAC5BkH,QAASovB,IAEXnvB,qBAAsB,CAAEC,cAAeC,GAAAA,IACvCC,eAAgB,CACdd,OAAQsvB,EACRvuB,UAAWmhB,GAAWQ,eAEpBnjB,GAAI,IAAA7I,UAERD,EAAAA,EAAAA,KAACu5B,GAAAA,GAA0B,CAACT,YAAaA,EAAaK,kBAAgB,EAACG,6BAA8BA,EAA8BN,WAAYA,MAd1IvN,GAAWQ,aAiBtB,EAWAmN,GAAkBh4B,aAAe,CAC/B43B,YAAY,G,6hBCvCDQ,GAAiB,SAAH15B,GAcpB,IAbL6J,EAAQ7J,EAAR6J,SACAK,EAAQlK,EAARkK,SACAyvB,EAAQ35B,EAAR25B,SACA7vB,EAAI9J,EAAJ8J,KACAqvB,EAAWn5B,EAAXm5B,YACAS,EAAU55B,EAAV45B,WACAb,EAAe/4B,EAAf+4B,gBACAc,EAAY75B,EAAZ65B,aACAC,EAAoB95B,EAApB85B,qBACAC,EAAmB/5B,EAAnB+5B,oBACAnvB,EAAW5K,EAAX4K,YACAovB,EAAYh6B,EAAZg6B,aACGhxB,GAAIC,EAAAA,GAAAA,GAAAjJ,EAAAkJ,IAEDrH,GAAOC,EAAAA,EAAAA,YAAWC,EAAAA,aAElBotB,GAAcrtB,EAAAA,EAAAA,YAAWwC,GAAAA,oBAC/B,OACEnD,EAAAA,EAAAA,MAACuI,GAAAA,IAAc3C,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,CAEb4C,OAAOzJ,EAAAA,EAAAA,KAAC0J,GAAAA,GAAS,CACfC,SAAUA,EACVK,SAAUA,EACVJ,KAAMA,EACNqvB,YAAat3B,EAAKmB,UAAUm2B,GAC5BhvB,SAASjK,EAAAA,EAAAA,KAAC+5B,GAAAA,GAA2B,CAACp4B,KAAMA,EAAMq4B,OAAQN,EAAYO,SAAS,MAEjF/vB,qBAAsB,CAAEC,cAAeC,GAAAA,IACvCC,eAAgB,CACZd,OAAQsvB,EACRvuB,UAAWmvB,IAEX3wB,GAAI,IAAA7I,SAAA,EAERD,EAAAA,EAAAA,KAAA,QAAAC,SAAOyK,GAAe/I,EAAKmB,UAAU4H,MACrC1K,EAAAA,EAAAA,KAACk6B,GAAAA,GAAgD,CAC/Cv4B,KAAMA,EACNg4B,aAAcA,EACdQ,eAAgBP,EAChBK,SAAS,KAEXj6B,EAAAA,EAAAA,KAACo6B,GAAAA,GAA8B,CAACz4B,KAAMA,EAAM04B,iBAAkBR,EAAqB5K,YAAaA,EAAa6K,aAAcA,OAtBtHL,EAyBX,EAiBaa,GAAc,SAAH95B,GAAA,IACtBw5B,EAAMx5B,EAANw5B,OACAnB,EAAer4B,EAAfq4B,gBACAjvB,EAAIpJ,EAAJoJ,KACA2wB,EAAkC/5B,EAAlC+5B,mCACAT,EAAYt5B,EAAZs5B,aACAU,EAAkBh6B,EAAlBg6B,mBACAC,EAAmCj6B,EAAnCi6B,oCACAzwB,EAAQxJ,EAARwJ,SACGlB,GAAIC,EAAAA,GAAAA,GAAAvI,EAAAk6B,IAAA,OAEP16B,EAAAA,EAAAA,KAACw5B,IAAc3yB,EAAAA,EAAAA,GAAA,CAEb8C,SAAU5G,SACViH,SAAUA,GAAY,0BACtByvB,SAAUhO,GAAWS,OACrBtiB,KAAMA,EACNqvB,YAAal2B,0BACb22B,WAAYM,EACZnB,gBAAiBA,EACjBc,aAAca,EACdZ,qBAAsBa,EACtBZ,oBAAqBU,EACrB7vB,YAAa3H,8LACb+2B,aAAcA,GACVhxB,GAbC2iB,GAAWS,OAchB,EAcJoO,GAAYl5B,aAAe,CACzB4I,SAAU,MAGL,IAAM2wB,GAAa,SAAH7gB,GAAA,IACrB8gB,EAAK9gB,EAAL8gB,MACA/B,EAAe/e,EAAf+e,gBACAjvB,EAAIkQ,EAAJlQ,KACAixB,EAAiC/gB,EAAjC+gB,kCACAf,EAAYhgB,EAAZggB,aACAgB,EAAiBhhB,EAAjBghB,kBACAC,EAAkCjhB,EAAlCihB,mCACArwB,EAAWoP,EAAXpP,YACAf,EAAQmQ,EAARnQ,SACGb,GAAIC,EAAAA,GAAAA,GAAA+Q,EAAAkhB,IAAA,OAEPh7B,EAAAA,EAAAA,KAACw5B,IAAc3yB,EAAAA,EAAAA,GAAA,CAEb8C,SAAUA,GAAY5G,WACtB02B,SAAUhO,GAAWe,MACrB5iB,KAAMA,EACNqvB,YAAal2B,yBACb22B,WAAYkB,EACZ/B,gBAAiBA,EACjBc,aAAcmB,EACdlB,qBAAsBmB,EACtBlB,oBAAqBgB,EACrBnwB,YAAaA,EACbovB,aAAcA,GACVhxB,GAZC2iB,GAAWe,MAahB,EAeJmO,GAAWM,YAAc,CACvBtxB,SAAU,M,4GC5JNuxB,GAAkBn4B,sRAyBlBo4B,GAAiB,SAAChG,GAEtB,MAAwB,oBADFA,GAAYA,EAASxX,KAAQ9c,KAAAA,IAAMs0B,EAAU,CAAC,OAAQ,iBAAmBt0B,KAAAA,IAAMs0B,EAAU,CAAC,iBAElH,EAcaiG,GAA+B,SAAC7oB,GAC3C,IACE5Q,EAKE4Q,EALF5Q,KACAuc,EAIE3L,EAJF2L,MACAiX,EAGE5iB,EAHF4iB,SACAkG,EAEE9oB,EAFF8oB,uBACAC,EACE/oB,EADF+oB,mBAGIC,GAAgBn5B,EAAAA,EAAAA,UAAQ,kBArBP,SAAC+yB,GACxB,IAAMqG,EAAmBrG,GAAYA,EAASxX,KAAQ9c,KAAAA,IAAMs0B,EAAU,CAAC,OAAQ,qBAAuBt0B,KAAAA,IAAMs0B,EAAU,CAAC,qBACvH,OAAOt0B,KAAAA,MAAQ26B,GACZnb,MAAM,CAAE,cAAe,iCACvBob,QACAlrB,IAAI,gBACJvP,OACL,CAcsC06B,CAAiBvG,EAAS,GAAE,CAACA,IAC3DwG,GAAgBv5B,EAAAA,EAAAA,UAAQ,kBAbP,SAAAi5B,GAAsB,OAAIx6B,KAAAA,IAAMw6B,EAAwB,gCAAiC,CAa5EO,CAAiBP,EAAuB,GAAE,CAACA,IAEzEQ,GAAkBz5B,EAAAA,EAAAA,UACtB,kBApDyB,SAACT,EAAM45B,EAAeD,EAAoBK,GACrE,OAAI96B,KAAAA,YAAc86B,GACT,KAGLL,EACGK,EAGE,KAFE,CAAErmB,QAAS3T,EAAKmB,UAAUo4B,IAAkBz4B,KAAM,WAKzD84B,EACGI,EAGE,CAAErmB,QAAS3T,EAAKmB,UAlBAC,kTAkB+BN,KAAM,QAFnD,CAAE6S,QAAS3T,EAAKmB,UAAUo4B,IAAkBz4B,KAAM,WAKtD,IACT,CAgCUq5B,CAAqBn6B,EAAM45B,EAAeD,EAAoBK,EAAc,GAClF,CAACh6B,EAAM45B,EAAeD,EAAoBK,IAGtCI,GAA0Bz5B,EAAAA,EAAAA,cAAY,WAC1C4b,EAAM8d,KAAK,yCACb,GAAG,CAAC9d,IAEJ,OAAK2d,GAKH77B,EAAAA,EAAAA,KAACuE,GAAAA,EAAU,CACTmc,OAAQmb,EAAgBp5B,KACxB+B,OAAO,YACP5D,UAAU,kCACVM,MAAO,CACL4R,UAAW,OACX/I,MAAO,OACPkyB,UAAW,aACXhwB,UAAW,QACXhM,UAEFgB,EAAAA,EAAAA,MAACwD,GAAAA,EAAc,CAAAxE,SAAA,EACbD,EAAAA,EAAAA,KAAA,OAAKY,UAAU,0CAAyCX,UACtDD,EAAAA,EAAAA,KAACk8B,GAAAA,cAAa,CACZC,SAAUN,EAAgBvmB,QAC1B8mB,MAAO,CACLC,EAAG,SAAAvrB,GAAI,OAAI9Q,EAAAA,EAAAA,KAAA,KAAAC,SAAI6Q,GAAS,EACxBrN,KAAM,SAAAqN,GAAI,OAER9Q,EAAAA,EAAAA,KAAC8E,GAAAA,KAAI,CAAClE,UAAU,YAAYwf,MAAM,gBAAengB,SAAE6Q,GAAY,QAKpEwqB,IAAuBK,IAAkBR,KAC1Cn7B,EAAAA,EAAAA,KAAA,OAAKs8B,eAAa,EAAAr8B,UAChBD,EAAAA,EAAAA,KAACu8B,GAAAA,cAAa,CACZ37B,UAAU,sBACVkQ,KAAMnP,EAAKmB,UAAUC,yBACrBqe,QAAS2a,WAjCZ,IAwCX,E,6HC7EMS,GAAuB,WAAH,MAAU,CAClCnI,YAAa,CACXC,SAAU,OACVnzB,QAAS,UAEXs7B,aAAc,CACZpxB,aAAc,OAEjB,EAEKwf,IAAmBC,EAAAA,GAAAA,IAAS/E,GAAa/f,UACzC02B,IAAkB1R,EAAAA,GAAAA,IAAQH,IAAkB3iB,EAAAA,GAAAA,IAAW,kBACvDy0B,IAAsCjO,EAAAA,GAAAA,KAAyBC,EAAAA,GAAAA,IAA6BiO,GAAAA,GAAsB,CAAEpyB,OAAQkyB,MAErHG,GAAmB,SAACtqB,GAC/B,IAAM5Q,GAAOC,EAAAA,EAAAA,YAAWC,EAAAA,aAChBqc,IAAUtc,EAAAA,EAAAA,YAAWk7B,GAAAA,eAAiB,CAAC,GAAvC5e,MACF9Q,GAAgBxL,EAAAA,EAAAA,YAAWkd,EAAAA,IACP6V,GAAmBvnB,GAAiB,CAAC,GAAvDQ,eAAkB+mB,aACpBoI,EAAY3vB,GAAiBA,EAAc4vB,iBAAoB,KAE/Dx5B,GAAYqxB,EAAAA,GAAAA,IAAoB2H,IAGpClR,EAQE/Y,EARF+Y,IACAC,EAOEhZ,EAPFgZ,UACAhiB,EAMEgJ,EANFhJ,OACAurB,EAKEviB,EALFuiB,aACAmI,EAIE1qB,EAJF0qB,QAAO/N,EAIL3c,EAHFoL,KAAAA,OAAI,IAAAuR,EAAG,CAAC,EAACA,EACTllB,EAEEuI,EAFFvI,SACGlB,GAAIC,EAAAA,GAAAA,GACLwJ,EAAKvJ,IAGPmsB,EAQExX,EARFwX,SACA+H,EAOEvf,EAPFuf,sBACAC,EAMExf,EANFwf,YACAtJ,EAKElW,EALFkW,SACAuJ,EAIEzf,EAJFyf,IACAC,EAGE1f,EAHF0f,KACAC,EAEE3f,EAFF2f,kCACAvI,EACEpX,EADFoX,aAGFwI,EAIIN,EAHFO,4BAAAA,OAA2B,IAAAD,EAAG,CAAC,EAACA,EAAAE,EAG9BR,EAFFS,qBAAAA,OAAoB,IAAAD,EAAG,CAAC,EAACA,EAAAE,EAEvBV,EADFW,SAAAA,OAAQ,IAAAD,EAAG,GAAEA,EAIbE,EAGEL,EAHFK,mBACAC,EAEEN,EAFFM,sBACGC,GAA+Bh1B,EAAAA,GAAAA,GAChCy0B,EAA2B9C,IAG1BsD,EAAwBC,OAAAC,OAAA,KAAAC,EAAAA,GAAAA,GACzBT,GAAAA,IAEEjpB,GAAW7S,EAAAA,EAAAA,YAAW8S,EAAAA,iBAEtB0pB,GAA0Bh8B,EAAAA,EAAAA,UAAQ,WACtC,IAAIi8B,EAAc,GACdC,EAAkB,GACtB,GAAInB,EAAa,CACXA,IAAgBoB,GAAAA,GAAgB97B,MAAQ26B,EAC1CiB,EAAW,GAAA3rB,OAAM0qB,EAAG,KAAA1qB,OAAImhB,GACfsJ,IAAgBqB,GAAAA,GAAsB/7B,MAAQ46B,IACvDgB,EAAW,GAAA3rB,OAAM2qB,EAAI,OAEvB,IAAMoB,EAAwBC,GAAAA,GAAyBvB,GACvDmB,EAAkBG,EAAwBA,EAAsB3tB,KAAOqsB,CACzE,CAEA,OACEl8B,EAAAA,EAAAA,MAAAi3B,EAAAA,SAAA,CAAAj4B,SAAA,CACG0B,EAAKmB,UAAUC,sBAA6B,CAAEu7B,gBAAAA,KAAsBD,EAAW,KAAA3rB,OAAQ/Q,EAAKmB,UAAUC,yBAAgC,CAAEs7B,YAAAA,KAAmB,KAC5Jr+B,EAAAA,EAAAA,KAAC2+B,GAAAA,GAAsB,CACrB5J,aAAcA,EACdqI,IAAKA,EACL3oB,SAAUA,EACVmpB,SAAUA,MAIlB,GAAG,CAACT,EAAax7B,EAAMozB,EAAcqI,EAAK3oB,EAAUmpB,EAAUP,EAAMxJ,IAE9D+K,GAAkBx8B,EAAAA,EAAAA,UAAQ,kBAAM07B,CAAqB,GAAE,CAACA,IAExDjI,GAAgBvzB,EAAAA,EAAAA,cAAY,SAACwzB,GACjChB,EAAa,CACXnX,KAAM,SAAAoY,GAAQ,OAAAlvB,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACTkvB,GACAD,EAAW,GAGpB,GAAG,CAAChB,IAEE+J,GAAsBv8B,EAAAA,EAAAA,cAAY,SAACqZ,EAAGmjB,GAC1C,IAAMziB,EAAkBxb,KAAAA,IAAMi+B,EAAgB,QAC9CjJ,EAAc,CAAEsH,YAAa9gB,GAC/B,GAAG,CAACwZ,IAEEkJ,GAA0Bz8B,EAAAA,EAAAA,cAAY,SAAAwX,GAIrC,IAHCklB,EAAkBllB,EAAxB6D,KACA4Y,EAAOzc,EAAPyc,QACAC,EAAQ1c,EAAR0c,SAEAX,GAAahvB,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAC,CAAC,EACVm4B,GAAkB,IACrBC,uBAAwB1I,EACxB2I,sBAAuB1I,IAE3B,GAAG,CAACX,IAEJ,OACE50B,EAAAA,EAAAA,MAACuI,GAAAA,IAAc3C,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,CAEb4C,OACEzJ,EAAAA,EAAAA,KAAC0J,GAAAA,GAAS,CACRE,KAAMu1B,GACNx1B,SAAU5G,eACViH,SAAUA,GAAY,0BACtBstB,GAAG,KACHC,iBAAkBzgB,IAAWtT,EAAU,gBACvCyG,QAASm0B,IAGb/zB,eAAgB,CACdC,UAAWghB,EACX/hB,OAAAA,GAEFW,qBAAsB,CAAEC,cAAeC,GAAAA,KACnCtB,GAAI,IAAA7I,SAAA,EAERD,EAAAA,EAAAA,KAAC28B,IAAmC91B,EAAAA,EAAAA,GAAA,CAClCo2B,QAASY,EACTuB,oBAAqBjC,EACrB0B,oBAAqBA,EACrBQ,eAAgB/B,EAChBgC,sBAAuB,CAAElC,IAAAA,EAAKC,KAAAA,GAC9B0B,wBAAyBA,EACzBQ,UAAW5K,EACXoI,SAAUA,EACVxR,UAAWA,EACXuS,sBAAuBA,EACvB0B,aAAW,GACPzB,KAEN/9B,EAAAA,EAAAA,KAAC2+B,GAAAA,GAAsB,CACrB5J,aAAcA,EACdqI,IAAKA,EACL3oB,SAAUA,EACVmpB,SAAUA,KAEZ59B,EAAAA,EAAAA,KAACo7B,IAA4Bv0B,EAAAA,EAAAA,GAAA,CAC3BlF,KAAMA,EACNuc,MAAOA,EACPiX,SAAUA,EACVkG,uBAAwB6B,GACpBc,IAELY,IAAmB5+B,EAAAA,EAAAA,KAAA,OAAKY,UAAWkW,IAAWtT,EAAU,sBA7CpD8nB,EAgDX,EAwBAuR,GAAiBz7B,aAAe,CAC9Buc,KAAM,CAAC,EACPsf,QAAS,CAAC,EACV1R,WAAW,EACXvhB,SAAU,M,0ICvNNy1B,GAAsB,WAAH,MAAU,CACjCC,oBAAqB,CACnB1zB,SAAU,KAEb,EAEK2zB,GAA0C/Z,GAAYga,GAAAA,GAA8Bjb,GACpFkb,GAAmDja,GAAYka,GAAAA,GAAuCnb,GAE/Fob,GAAkB,SAACxtB,GAC9B,IAAM5Q,GAAOC,EAAAA,EAAAA,YAAWC,EAAAA,aAElBoC,GAAUC,EAAAA,GAAAA,kBAAiBu7B,IAG/BnU,EAQE/Y,EARF+Y,IACAC,EAOEhZ,EAPFgZ,UACAhiB,EAMEgJ,EANFhJ,OACA0zB,EAKE1qB,EALF0qB,QAAO/N,EAKL3c,EAJFoL,KAAAA,OAAI,IAAAuR,EAAG,CAAC,EAACA,EACT8Q,EAGEztB,EAHFytB,8BACAC,EAEE1tB,EAFF0tB,YACGn3B,GAAIC,EAAAA,GAAAA,GACLwJ,EAAKvJ,IAGPk3B,EAEEjD,EAFFiD,gBACAC,EACElD,EADFkD,oBAGFrgC,EAII6d,GAAQ,CAAC,EAHUyiB,EAAmBtgC,EAAxCugC,oBACgBC,EAAcxgC,EAA9BygC,eACqBC,EAAmB1gC,EAAxC2gC,oBAGIC,GAAat+B,EAAAA,EAAAA,UAAQ,iBAAO,CAChCi+B,oBAAqBD,EACrBG,eAAgBD,EAChBG,oBAAqBD,EACtB,GAAG,CAACJ,EAAqBE,EAAgBE,IAEpCG,GAAoBv+B,EAAAA,EAAAA,UAAQ,kBAAMw+B,EAAAA,GAAAA,IAAqBj/B,EAAM++B,EAAW,GAAE,CAACA,EAAY/+B,IAE7F,OACE3B,EAAAA,EAAAA,KAACwJ,GAAAA,IAAc3C,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,CAEb4C,OACEzJ,EAAAA,EAAAA,KAAC0J,GAAAA,GAAS,CACRC,SAAU5G,uBACVkH,QAAS02B,EACT/2B,KAAMi3B,KAGV32B,qBAAsB,CAAEC,cAAeC,GAAAA,IACvCC,eAAgB,CACdd,OAAAA,EACAe,UAAWghB,IAETxiB,GAAI,IAAA7I,UAERgB,EAAAA,EAAAA,MAAA,OAAKL,UAAWqD,EAAQy7B,oBAAoBz/B,SAAA,CAExCigC,IACAlgC,EAAAA,EAAAA,KAAA,QAAMY,UAAU,2BAA0BX,SACvC0B,EAAKmB,UAAUC,gEAIlBk9B,GACGjgC,EAAAA,EAAAA,KAAC6/B,IAAgDh5B,EAAAA,EAAAA,GAAA,CAChDif,YAAayF,EACb5pB,KAAMA,EACN0U,gBAAiB,CACfoiB,aAAciI,EACd/iB,KAAM+iB,GAERV,8BAA+BA,EAC/BC,YAAaA,GACTE,KAELngC,EAAAA,EAAAA,KAAC2/B,IAAuC94B,EAAAA,EAAAA,GAAA,CACvCif,YAAayF,EACb5pB,KAAMA,EACN0U,gBAAiB,CACfoiB,aAAciI,EACd/iB,KAAM+iB,IAEJP,SA1CP7U,EAgDX,EAmBAyU,GAAgB3+B,aAAe,CAC7Buc,KAAM,CAAC,EACPsf,QAAS,CAAC,EACV1R,WAAW,EACXyU,+BAA+B,EAC/BC,aAAa,G,2CC5HFa,GAAoB,CAC/BC,UAAW,kBACXC,UAAW,mBAGAC,GAAoB,SAAHnhC,GAGvB,IAFLuW,EAAevW,EAAfuW,gBACA6qB,EAAWphC,EAAXohC,YAEMv/B,GAAOC,EAAAA,EAAAA,YAAWC,EAAAA,aAClBuL,GAAgBxL,EAAAA,EAAAA,YAAWkd,EAAAA,IAEjCte,EAAyC6V,GAAmB,CAAC,EAA/C8e,EAAQ30B,EAAdmd,KAAgBwjB,EAAY3gC,EAAZ2gC,aAEhBC,EAAkBjM,EAAlBiM,cAEFC,GAAc/+B,EAAAA,EAAAA,cAAY,SAACG,GAI/B,MAAO,CAAE6+B,QAHOzgC,KAAAA,OAASuM,EAAc0zB,GAAkBr+B,IAAQ,gBAG/C8+B,SAFD1gC,KAAAA,OAASuM,EAAc0zB,GAAkBr+B,IAAQ,cAGpE,GAAG,CAAC2K,IAEEo0B,GAAYl/B,EAAAA,EAAAA,cAAY,WAC5B,IAAAm/B,EAA8BJ,EAAYD,EAAc/Z,MAAhDia,EAAOG,EAAPH,QAASC,EAAQE,EAARF,SAEjB,OACEvhC,EAAAA,EAAAA,KAAC0hC,GAAAA,GAAyB,CACxBC,gBAAgB,OAChBtyB,GAAG,YACHuyB,aAAcx0B,EAAcQ,eAAe+mB,aAC3ChzB,KAAMA,EACN0U,gBAAiB,CACf8U,MAAOgW,EACP/V,OAAQ,CACNyW,YAAUz4B,EAAAA,GAAAA,GAAA,GACP+3B,EAAe,CACd1+B,KAAM,SACNq/B,QAASP,EACTQ,QAAST,EACTU,UAAU,MAKlBd,YAAaA,GAGnB,GAAG,CAACG,EAAa1/B,EAAMy/B,EAAeh0B,EAAcQ,eAAe+mB,aAAcwM,EAAcD,IAE/F,OACEjgC,EAAAA,EAAAA,MAAA,OAAAhB,SAAA,EACEgB,EAAAA,EAAAA,MAAC+P,GAAAA,EAAK,CAACixB,QAAQ,YAAWhiC,SAAA,CACvB0B,EAAKmB,UAAUC,gBAChB/C,EAAAA,EAAAA,KAAC0b,EAAAA,UAAS,CACRzY,MAAM,0BACN,aAAYtB,EAAKmB,UAAUC,gDAG/B/C,EAAAA,EAAAA,KAACwhC,EAAS,MAGhB,E,qEClDMhF,GAAuB,WAAH,MAAU,CAClCnI,YAAa,CACXC,SAAU,OACVnzB,QAAS,UAEXs7B,aAAc,CACZpxB,aAAc,OAEjB,EAEKwf,IAAmBC,EAAAA,GAAAA,IAAS/E,GAAa/f,UACzCk8B,IAAelX,EAAAA,GAAAA,IAAQH,IAAkB3iB,EAAAA,GAAAA,IAAW,kBACpDi6B,GACJvc,IACE+I,EAAAA,GAAAA,IACEsS,GACA,CAAEz2B,OAAQ03B,KAEZld,GAGSod,GAAgB,SAAC7vB,GAC5B,IAAM5Q,GAAOC,EAAAA,EAAAA,YAAWC,EAAAA,aAClB2B,GAAYqxB,EAAAA,GAAAA,IAAoB2H,IAGpClR,EAOE/Y,EAPF+Y,IACAC,EAMEhZ,EANFgZ,UACAhiB,EAKEgJ,EALFhJ,OACAurB,EAIEviB,EAJFuiB,aAAY5F,EAIV3c,EAHFoL,KAAAA,OAAI,IAAAuR,EAAG,CAAC,EAACA,EACTiS,EAEE5uB,EAFF4uB,aACGr4B,GAAIC,EAAAA,GAAAA,GACLwJ,EAAKvJ,IAGPmsB,EAEExX,EAFFwX,SACAtB,EACElW,EADFkW,SAGIwO,GAAYjgC,EAAAA,EAAAA,UAAQ,WACxB,OAAKmpB,GAAqB,OAAR4J,QAAQ,IAARA,GAAAA,EAAUiM,cACAjM,EAAlBiM,cACaD,GAEhB,IACT,GAAG,CAAC5V,EAAW4J,EAAUgM,IAEnBmB,GAAkBlgC,EAAAA,EAAAA,UAAQ,kBAAMT,EAAKmB,UAAUC,6BAAoC,CAAEs/B,UAAAA,EAAWxO,SAAAA,GAAW,GAAE,CAACwO,EAAWxO,EAAUlyB,IAEnI4gC,GAAmBjgC,EAAAA,EAAAA,cAAY,SAACwzB,GACpChB,EAAa,CACXnX,KAAM,SAAAoY,GAAQ,OAAAlvB,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACTkvB,GAAQ,IAAA3sB,EAAAA,GAAAA,GAAA,GACV+3B,EAAerL,GAAW,GAGjC,GAAG,CAAChB,EAAcqM,IAElB,OACEnhC,EAAAA,EAAAA,KAACwJ,GAAAA,IAAc3C,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,CAEb4C,OACEzJ,EAAAA,EAAAA,KAAC0J,GAAAA,GACC,CACAC,SAAU5G,YAEVu0B,GAAG,KACHC,iBAAkBzgB,IAAWtT,EAAU,gBACvCyG,QAASq4B,IAGbj4B,eAAgB,CACZC,UAAWghB,EACX/hB,OAAAA,GAEJW,qBAAsB,CAAEC,cAAeC,GAAAA,KACnCtB,GAAI,IAAA7I,UAERD,EAAAA,EAAAA,KAACmiC,GAA2C,CAC1Crc,YAAayF,EACblV,gBAAiB,CAAEsH,KAAMwX,EAAUgM,aAAAA,GACnCD,YAAaqB,MArBVjX,EAyBX,EAcA8W,GAAchhC,aAAe,CAC3Buc,KAAM,CAAC,EACP4N,WAAW,G,+CC/GAiX,GAAkB,SAACjwB,GAC9B,IACE+Y,EACE/Y,EADF+Y,IAAKC,EACHhZ,EADGgZ,UAAS2D,EACZ3c,EADcoL,KAAAA,OAAI,IAAAuR,EAAG,CAAC,EAACA,EAAKpmB,GAAIC,EAAAA,GAAAA,GAChCwJ,EAAKvJ,IACDmsB,GAAaxX,GAAQ,CAAC,GAAtBwX,SACFsN,EAActN,GAAYA,EAASuN,WAEnCC,EAAsB/c,GAAYgd,GAAAA,GAAUje,GAElD,OACE3kB,EAAAA,EAAAA,KAACwrB,GAAAA,IAAmB3kB,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,CAElB4C,OAAOzJ,EAAAA,EAAAA,KAAC0J,GAAAA,GAAS,CAACC,SAAU5G,gBAC5BmH,qBAAsB,CAAEC,cAAeC,GAAAA,KACnCtB,GAAI,IAAA7I,UAERD,EAAAA,EAAAA,KAAC2iC,EAAmB,CAClBF,YAAaA,EACb3c,YAAayF,EACbjmB,UAAQ,MARLgmB,EAYX,EAaAkX,GAAgBphC,aAAe,CAC7BmqB,WAAW,EACX5N,KAAM,CAAC,GCzCT,IAAMna,GAAY,WAAH,MAAU,CACvBnD,KAAM,CACJ4L,UAAW,IAEbxC,MAAO,CACL6qB,SAAU,GACVhzB,WAAY,IACZ4R,WAAY,OACZkS,OAAQ,GAEX,EAEYyd,GAAwB,SAAH/iC,GAAsB,IAAhBG,EAAQH,EAARG,SAChC0B,GAAOC,EAAAA,EAAAA,YAAWC,EAAAA,aAClB+yB,GAAsBC,EAAAA,GAAAA,IAAoBrxB,IAEhD,OACEvC,EAAAA,EAAAA,MAACyB,GAAAA,MAAK,CAAC9B,UAAWkW,IAAW,0BAA2B8d,EAAoB,SAAUhyB,OAAQ,CAAEC,YAAa,IAAK5C,SAAA,EAChHD,EAAAA,EAAAA,KAAA,MAAIY,UAAWkW,IAAW8d,EAAoB,UAAU30B,SACrD0B,EAAKmB,UAAUC,yBAElB9B,EAAAA,EAAAA,MAACyB,GAAAA,MAAK,CAACC,YAAU,EAAC/B,UAAWkW,IAAW8d,EAAoB,gBAAiBhyB,OAAQ,CAAEC,YAAa,IAAK5C,SAAA,EACvGD,EAAAA,EAAAA,KAAA,OAAK8iC,IAAKC,GAAmBC,IAAI,MACjC/hC,EAAAA,EAAAA,MAACyB,GAAAA,MAAK,CAAAzC,SAAA,EACJD,EAAAA,EAAAA,KAAA,QAAMY,UAAU,mCAAkCX,SAAE0B,EAAKmB,UAAUC,wEACnE/C,EAAAA,EAAAA,KAAA,QAAMY,UAAU,kCAAiCX,SAAE0B,EAAKmB,UAAUC,kGAGtE/C,EAAAA,EAAAA,KAAA,OAAKY,UAAU,+BAA8BX,SAC1CA,MAIT,EC1CO,SAASgjC,GAA+BC,GAA2B,IAAlBC,EAAO/mB,UAAA7Y,OAAA,QAAAkS,IAAA2G,UAAA,IAAAA,UAAA,GACvDgnB,EAAiB,GAkBvB,OAhBAF,EAAQpmB,SAAQ,SAACta,GACf,IAAM6gC,EAAY7gC,EAAOmkB,UACnB2c,EAAa9gC,EAAO+gC,aAAaC,WAEvCJ,EAAexgB,KAAK,CAClB/U,GAAIs1B,EAAU,GAAK3gC,EAAOqL,GAC1BkkB,IAAKsR,EAAUtR,IACfR,UAAW8R,EAAUI,SACrB9R,YAAa0R,EAAUK,WACvBjS,QAAS4R,EAAUM,OACnB9R,UAAWwR,EAAUO,SACrB5R,kBAAmBsR,EAAa,GAAK,EAAI,EACzCrR,oBAAqB4R,OAAOC,KAAKC,IAAIT,IAEzC,IAEOF,CACT,CD4BAP,GAAsBzhC,aAAe,CACnCnB,SAAU,M,sDEzCN+jC,GAAwB,SAAAC,GAAI,OAAIC,KAAAA,SAAeD,EAAM,aAAc,EACnEE,GAAY,SAAAC,GAAU,OAAIF,KAAAA,UAAgBE,EAAY,EAE5D,SAASC,KACP,IAAMC,GAAoB1iC,EAAAA,EAAAA,YAAW2iC,GAAAA,mBAC/Bn3B,GAAgBxL,EAAAA,EAAAA,YAAWkd,EAAAA,IAI3B0lB,EAHyB,IAAIC,GAAAA,uBAAuB,CACxDH,kBAAAA,IAEkDI,WAAW,CAACC,GAAAA,oBAAoBC,aAEpF,OADmBC,EAAAA,GAAAA,8BAA6BL,EAAsBp3B,EAExE,CAEO,SAAS03B,KACd,IAAMC,EAAaV,KACnB,OAAOW,QAAQC,QAAQF,EACzB,CAIO,SAASG,KACd,IAAMC,EAAYd,KAClB,MAAO,CACLtT,UAAWiT,GAAsBmB,EAAUC,QACzCpB,GAAsBG,GAAUgB,EAAUE,iBAC5CvU,QAASkT,GAAsBmB,EAAUG,MACvCtB,GAAsBG,GAAUgB,EAAUI,eAEhD,C,iBClCaC,GAAgC,SAAC7jC,GAAgC,IAA1B8jC,EAAerpB,UAAA7Y,OAAA,QAAAkS,IAAA2G,UAAA,GAAAA,UAAA,GAAG,CAAC,EAEnEspB,EAEED,EAFFC,mBACAC,EACEF,EADFE,cAGF,OAAID,IAAuBE,GAAAA,GAAOC,UAAYhlC,KAAAA,KAAO8kC,GAAiB,EAClD9kC,KAAAA,MAAQ8kC,EAAe,QAExBl+B,KAAK,MAGjB9F,EAAKmB,UAAUC,uBACxB,ECda+iC,GAAmC,SAACnkC,EAAMgxB,EAAMoT,GAC3D,IAAKpT,EAAM,MAAO,GAClB,IAAKoT,EACH,OAAOpkC,EAAKmB,UAAUC,0BAExB,IAAM2N,EAAWiiB,EAAKqT,oBAAoBC,UAAUhnB,SAC9CinB,EAAY,GACZC,EAAQ,GAEdtlC,KAAAA,KAAO6P,GAAU,SAAClO,GAChB,IAAM4jC,EAAa5jC,EAAOmkB,UAAU0f,QAAQC,UAAUC,WACtD1lC,KAAAA,KAAOulC,GAAY,SAACI,GACS,WAAvBA,EAAUC,SACZP,EAAUtjB,KAAK4jB,EAAUE,iBAEzBP,EAAMvjB,KAAK,gBAADlQ,OAAiB8zB,EAAUE,iBAEzC,GACF,IAEA,IAAMC,EAAmBT,EAAU3iC,OAAS,EAAC,GAAAmP,OAAM/Q,EAAKmB,UAAUC,oBAAwB2P,OAAGwzB,EAAUz+B,KAAK,OAAU,KAChHm/B,EAAeT,EAAM5iC,OAAS,EAAC,GAAAmP,OAAM/Q,EAAKmB,UAAUC,sBAA0B2P,OAAGyzB,EAAM1+B,KAAK,OAAQ,KAE1G,OAAIk/B,GAAoBC,EAChB,GAANl0B,OAAUi0B,EAAgB,MAAAj0B,OAAKk0B,GAE1BD,GAAoBC,GAAgBjlC,EAAKmB,UAAUC,0CAC5D,EC3Ba8jC,GAAoBhmC,KAAAA,SAAU,iBAAO,CAChDimC,UAAW/jC,kBACXgkC,eAAgBhkC,uBAChBikC,mBAAoBjkC,4BACpBkkC,eAAgBlkC,uBAChBmkC,SAAUnkC,iBACVg+B,UAAWh+B,yBACXokC,UAAWpkC,2DACXqkC,UAAWrkC,iCACXi+B,UAAWj+B,uBACXskC,YAAatkC,yCACbukC,YAAavkC,gBACbwkC,WAAYxkC,cACZykC,UAAWzkC,aACX0kC,sBAAuB1kC,0BACxB,IAEY2kC,GAAqB,SAAC/lC,EAAMgmC,GACvC,OAAKA,GAAQd,KAAoBc,EAAItgB,MAI9B1lB,EAAKmB,UAAU+jC,KAAoBc,EAAItgB,OAHrC,EAIX,EAEaugB,GAA2B,SAACx6B,EAAezL,EAAMgmC,EAAK/T,GACjE,IAAMgO,EAAex0B,EAAcQ,eAAe+mB,aAC5CkT,EAAShnC,KAAAA,SAAW+yB,EAAOyC,QAC/B10B,EAAKmyB,eAAeF,EAAOyC,OAAQuL,GACnC,IACIkG,EAAUJ,GAAmB/lC,EAAMgmC,GACrCI,EAAS,GAOb,OANIJ,EAAIH,YACNO,EAASpmC,EAAKmyB,eAAe6T,EAAIH,UAAW5F,IAE1C+F,EAAIJ,aACNQ,EAASpmC,EAAKqmC,cAAcL,EAAIJ,aAE3B5lC,EAAKmB,UAAUC,0DAAiE,CACrF8kC,OAAAA,EAAQC,QAAAA,EAASC,OAAAA,GAErB,EAEaE,GAAwB,SAAC76B,EAAezL,EAAMiyB,GACzD,IAAMgO,EAAex0B,EAAcQ,eAAe+mB,aAC5CkT,EAAShnC,KAAAA,SAAW+yB,GAAUA,EAAOyC,QACzC10B,EAAKmyB,eAAeF,EAAOyC,OAAQuL,GACnC,IACF,OAAOjgC,EAAKmB,UAAUC,qBAA4B,CAChD8kC,OAAAA,GAEJ,ECnDaK,GAAyB,SAACvmC,EAAMwmC,EAASroC,GAG/C,IAFLsoC,EAAatoC,EAAbsoC,cACAC,EAAYvoC,EAAZuoC,aAEA,OAAIF,GAAaC,EACT,GAAN11B,OAAU/Q,EAAKmB,UAAUC,0BAA8B2P,OAAG01B,GAEvDD,EAME,GALAE,EAGC,GAAN31B,OAAU21B,EAAaC,QAAO,MAAA51B,QAAK61B,EAAAA,GAAAA,OAAMF,EAAah3B,MAAO,WAAW5J,KAAK,MAFpE9F,EAAKmB,UAAU,eAK5B,EChBa0lC,GAAuB,SAAC7mC,EAAM8mC,GAA6D,IAAjDC,EAAkBtsB,UAAA7Y,OAAA,QAAAkS,IAAA2G,UAAA,GAAAA,UAAA,GAAG,CAAC,EAAGusB,EAAUvsB,UAAA7Y,OAAA,QAAAkS,IAAA2G,UAAA,IAAAA,UAAA,GAClFwsB,EAAUF,EAAmBG,WACnC,IAAKD,EACH,OAAOjnC,EAAKmB,UAAUC,kBAExB,IAAQ+lC,EAAsBL,EAAtBK,UAAWC,EAAWN,EAAXM,OACbC,EACHD,EAAOH,IAAYG,EAAOH,GAAS93B,MAAI,OAAA4B,OACjCk2B,GACHK,EACHH,EAAUJ,EAAmBQ,eAAiBJ,EAAUJ,EAAmBQ,cAAcp4B,MACvF43B,EAAmBQ,aAClBC,EAA2BT,EAAmBU,yBAClDznC,EAAKmB,UAAUC,WACfpB,EAAKmB,UAAUC,YAEjB,OAAI4lC,EACKhnC,EAAKmB,UAAUC,6EAAoF,CACxGimC,MAAAA,EAAOC,aAAAA,IAGJtnC,EAAKmB,UAAUC,gIAAuI,CAC3JimC,MAAAA,EAAOC,aAAAA,EAAcE,yBAAAA,GAEzB,ECxBaE,GAAwB,SAAC1nC,EAAM2nC,GAC1C,IAAM54B,EAAW44B,GAAgBA,EAAa9+B,QAAO,SAAAuF,GAAI,MAAoB,YAAhBA,EAAK0X,MAAoB,IACtF,OAAI/W,GAAYA,EAASnN,OAAS,EACzBmN,EAAShQ,KAAI,SAAAqP,GAAI,OAAIA,EAAKw5B,WAAW,IAAE9hC,KAAK,MAE9C9F,EAAKmB,UAAUC,yBACxB,ECNaymC,GAA4B,SAAC7nC,EAAM8nC,GAC9C,IACEC,GACED,GAAc,CAAC,GADjBC,mBAGF,OAAIA,GAAsBA,EAAmBp4B,KACpCo4B,EAAmBp4B,KAErB3P,EAAKmB,UAAUC,yBACxB,C,gFCTO,IAAMka,EAAmB,CAC9B+jB,UAAWj+B,kCACX4mC,WAAY5mC,uCACZ6mC,WAAY7mC,sCACZ8mC,WAAY9mC,oBACZ+mC,WAAY/mC,oBACZ,cAAeA,cACf,cAAeA,cACf09B,oBAAqB19B,oBACrBs9B,oBAAqBt9B,oBACrBw9B,eAAgBx9B,mBAChBgnC,cAAehnC,UACfinC,YAAajnC,aACbknC,SAAUlnC,WACVmnC,SAAUnnC,WACVonC,QAASpnC,UACTqnC,OAAQrnC,SACRsnC,WAAYtnC,aACZunC,OAAQvnC,SACRwnC,QAASxnC,UACTynC,UAAWznC,YACX0nC,SAAU1nC,WACV2nC,OAAQ3nC,SACR4nC,SAAU5nC,WACV6nC,OAAQ7nC,SACR,gBAAiBA,gBACjB,eAAgBA,gBAGL8nC,EAAmC,CAC9CC,mCAAoC/nC,mDACpCgoC,qCAAsChoC,8GACtCioC,oCAAqCjoC,4CACrCkoC,sCAAuCloC,qFACvCmoC,yBAA0BnoC,iCAC1BooC,gCAAiCpoC,+BACjCqoC,8BAA+BroC,6OAC/BsoC,+BAAgCtoC,yBAChCuoC,kCAAmCvoC,SACnCwoC,uDAAwDxoC,WACxDyoC,+BAAgCzoC,0BAChC0oC,8DAA+D1oC,wHAC/D2oC,qDAAsD3oC,gNACtD4oC,uDAAwD5oC,qTACxD6oC,8CAA+C7oC,iLAC/C8oC,6CAA8C9oC,gNAC9C+oC,+BAAgC/oC,WAChCgpC,+BAAgChpC,WAChCipC,gCAAiCjpC,cACjCkpC,oCAAqClpC,iBACrCmpC,sCAAuCnpC,mBACvCopC,8BAA+BppC,UAC/BqpC,oCAAqCrpC,iBACrCspC,mCAAoCtpC,iBACpCupC,4BAA6BvpC,QAC7BwpC,oCAAqCxpC,iBACrCypC,+BAAgCzpC,YAChC0pC,mCAAoC1pC,gBACpC2pC,6BAA8B3pC,UAC9B4pC,qCAAsC5pC,mBACtC6pC,gCAAiC7pC,YACjC8pC,iCAAkC9pC,aAClC+pC,4BAA6B/pC,QAC7BgqC,+BAAgChqC,YAChCiqC,+BAAgCjqC,QAChCkqC,6CAA8ClqC,KAC9CmqC,2CAA4CnqC,gBAC5CoqC,uCAAwCpqC,YACxC,aAAc,aACd,sCAAuCA,sCACvC,kDAAmDA,kD,uVCtExCqqC,EAAmB,WAAC,MAA6B,CAC5DC,mBAAoB,CAClBphC,UAAW,GACXlC,MAAO,IACP+I,UAAW,IACXG,QAAS,GACTq6B,cAAe,GACfv6B,WAAY,GACZw6B,WAAY,UACZC,UAAW,iCACXC,aAAc,EACd,sCAAuC,CACrCF,WAAY,6DACZE,aAAc,EACd1jC,MAAO,mBACP2a,OAAQ,kBACR3R,WAAY,kBACZ,UAAW,CACT,iBAAkB,CAChB5R,QAAS,SAGb,yBAA0B,CACxBb,MAAO,qBAGX,WAAY,CACVyJ,MAAO,IACPkC,UAAW,GACXyhC,MAAO,QAET,8BAA+B,CAC7B3jC,MAAO,IACP,cAAe,CACbwjC,WAAY,6DACZE,aAAc,EACd1jC,MAAO,mBACP2a,OAAQ,kBACR3R,WAAY,kBACZ5R,QAAS,OACTwsC,SAAU,OACVjiC,cAAe,SACfR,WAAY,SACZ,UAAW,CACT,iBAAkB,CAChB/J,QAAS,SAGb,yBAA0B,CACxBb,MAAO,oBAET,eAAgB,CACdyJ,MAAO,GACP2a,OAAQ,GACRzY,UAAW,KAGf,sBAAuB,CACrBoZ,OAAQ,oBACRkoB,WAAY,qBACZjsC,WAAY,IACZmsC,aAAc,EACd,WAAY,CACVphC,QAAS,WACT/L,MAAO,UACPstC,YAAa,EACbC,WAAY,uBAIlB,yBAA0B,CACxB1sC,QAAS,OACT+J,WAAY,UAEd,sBAAuB,CACrB5J,WAAY,KAEd,wBAAyB,CACvByI,MAAO,mBACPsb,OAAQ,kBACRpS,QAAS,kBAEX,2BAA4B,CAC1BuO,SAAU,WACVssB,gBAAiB,kBACjB/jC,MAAO,mBACP,UAAW,CACT,iBAAkB,CAChB5I,QAAS,SAGb,yBAA0B,CACxBb,MAAO,qBAIX,4BAA6B,CAC3ByS,WAAY,IAEd,uBAAwB,CACtB06B,aAAc,EACdjjC,OAAQ,mGACRT,MAAO,mBACP2a,OAAQ,oBAGZqpB,kBAAmB,CACjBrpB,OAAQ,GACR3a,MAAO,IACP0jC,aAAc,MACdpoB,OAAQ,qBACRlkB,QAAS,OACTqK,eAAgB,SAChBN,WAAY,UAEd8iC,cAAe,CACb3oB,OAAQ,qBAEV4oB,qBAAsB,CACpB9sC,QAAS,OACT4I,MAAO,OACPyB,eAAgB,WAChBkZ,OAAQ,GAEVwpB,qBAAsB,CACpB1iC,eAAgB,WAChBrK,QAAS,OACTgtC,OAAQ,UACRV,aAAc,GACdF,WAAY,UACZxjC,MAAO,GACP2a,OAAQ,IAEV0pB,8BAA+B,CAC7B5sB,SAAU,WACV6sB,KAAM,MACNC,IAAK,MACLC,UAAW,wBACXpjC,UAAW,MACXhK,QAAS,QAEXqtC,iBAAkB,CAChB9pB,OAAQ,IACR3a,MAAO,QAET0kC,aAAc,CACZ1kC,MAAO,OACP2a,OAAQ,OACRopB,gBAAiB,UACjBL,aAAc,GAEhBiB,cAAe,CACb1iC,SAAU,QACVjC,MAAO,OACPkJ,QAAS,GACTF,WAAY,EACZyO,SAAU,SACV8sB,IAAK,QACLntC,QAAS,OACTwsC,SAAU,OACVniC,eAAgB,SAChBS,UAAW,SAEb0iC,oBAAqB,CACnBjqB,OAAQ,IAEVkqB,mBAAoB,CAClBta,SAAU,GACVhzB,WAAY,KAEdutC,mBAAoB,CAClBva,SAAU,GACVhzB,WAAY,IACZwtC,aAAc,GAEhBC,eAAgB,CACd/iC,SAAU,QACVjC,MAAO,OACPkJ,QAAS,GACTuO,SAAU,SACV8sB,IAAK,MACLntC,QAAS,OACTwsC,SAAU,OACVniC,eAAgB,SAChBS,UAAW,GACXshC,WAAY,UACZC,UAAW,iCACXC,aAAc,GAEhBuB,UAAW,CACTvB,aAAc,MACdjjC,OAAQ,oGAEVykC,WAAY,CACVhjC,UAAW,IAEbijC,eAAgB,CACd5a,SAAU,GACVh0B,MAAO,WAET6uC,WAAY,CACVp8B,WAAY,GACZhJ,MAAO,QAETqlC,aAAc,CACZjuC,QAAS,OACT+J,WAAY,SACZM,eAAgB,gBAChBL,UAAW,QAEbkkC,YAAa,CACXluC,QAAS,OACT+J,WAAY,UAEdokC,wBAAyB,CACvBR,aAAc,GAEhBS,oBAAqB,CACnB7rC,YAAa,GAEf8rC,uBAAwB,CACtB9qB,OAAQ,EACR3a,MAAO,EACP0jC,aAAc,MACdtsC,QAAS,eACTgtC,OAAQ,UACRP,YAAa,IAEf6B,iBAAkB,CAChB/qB,OAAQ,EACR3a,MAAO,EACP2lC,QAAS,GAEXC,oBAAqB,CACnBxuC,QAAS,OACTgK,UAAW,OAEbykC,sBAAuB,CACrBzuC,QAAS,OACTuK,cAAe,UAEjBmkC,kBAAmB,CACjB98B,WAAY,GACZK,WAAY,IAEd08B,eAAgB,CACd3uC,QAAS,OACTwsC,SAAU,OACVxiC,UAAW,GACX4kC,OAAQ,OAEVC,iBAAkB,CAChBlC,gBAAiB,UACjB76B,QAAS,UACTw6B,aAAc,GAEhBwC,YAAa,CACX3vC,MAAO,UACPgB,WAAY,IACZH,QAAS,OACT+J,WAAY,SACZC,UAAW,GAEb+kC,kBAAmB,CACjBpC,gBAAiB,UACjB76B,QAAS,UACTw6B,aAAc,GAEhB0C,aAAc,CACZ7vC,MAAO,UACPgB,WAAY,IACZH,QAAS,OACT+J,WAAY,SACZC,UAAW,GAEbilC,UAAW,CACT9b,SAAU,GACVhzB,WAAY,KAEd+uC,eAAgB,CACdt9B,WAAY,EACZu6B,cAAe,GAEjBgD,mBAAoB,CAClBv9B,WAAY,EACZu6B,cAAe,GAEjBiD,gCAAiC,CAC/BxmC,MAAO,IAETymC,kBAAmB,CACjBnlC,aAAc,GAEjB,EAEYolC,EAA6B,WAAH,MAAU,CAC/CC,sBAAuB,CACrBlvB,SAAU,WACVrgB,QAAS,OACT8R,QAAS,OACTyR,OAAQ,OACRhZ,cAAe,SACfF,eAAgB,gBAChBiiC,aAAc,OACdxhC,UAAW,OACXoZ,OAAQ,sBAEVsrB,OAAQ,CACNrc,SAAU,GACVhzB,WAAY,MACZ4R,WAAY,OACZ/R,QAAS,QAEXyvC,YAAa,CACX79B,WAAY,iBACZrP,YAAa,iBACborC,aAAc,iBACdzjC,aAAc,MACdqZ,OAAQ,QAEVha,YAAa,CACX4pB,SAAU,GACVhzB,WAAY,MACZhB,MAAO,sBACP4S,WAAY,QAEf,EAEY29B,EAAmC,WAAH,MAAU,CACrDC,4BAA6B,CAC3B,oCAAqC,CACnC,WAAY,CACVhD,gBAAiB,gBAGrB7hC,UAAW,IAEb8kC,aAAc,CACZ5vC,QAAS,OACTqK,eAAgB,SAChBN,WAAY,SACZnB,MAAO,QACP2a,OAAQ,OACR6oB,WAAY,WAEf,EAEYyD,EAA6B,WAAH,MAAU,CAC/CC,mBAAoB,CAClB,2BAA4B,CAC1BlnC,MAAO,oBAGZ,E,kCC9VYmnC,EAAc,SAAA3+B,GAAK,OAC9BvS,EAAAA,EAAAA,KAAA,OAAKkB,MAAO,CACVC,QAAS,OACTqK,eAAgB,SAChBN,WAAY,SACZwZ,OAAQ,OACRrZ,aAAc,QACZpL,UAEFD,EAAAA,EAAAA,KAAA,OAAKkB,MAAO,CAAEusC,aAAc,MAAO0D,SAAU,UAAWlxC,UAACD,EAAAA,EAAAA,KAACoxC,EAAAA,GAAgBvqC,EAAAA,EAAAA,GAAA,GAAK0L,OAC3E,E,WCXF8+B,EAAuBtuC,uCACvBuuC,EAAmBvuC,uCAEnBwuC,EAAW,CAAC,CAChBxnC,MAAO,IACP2a,OAAQ,IACR5T,KAAM/N,6BACNyuC,SAAUzuC,YACV0uC,WAAY1uC,aACX,CACDgH,MAAO,IACP2a,OAAQ,GACR5T,KAAM/N,oCACNyuC,SAAUzuC,WACV0uC,WAAY1uC,qBACX,CACDgH,MAAO,IACP2a,OAAQ,GACR5T,KAAM/N,8BACNyuC,SAAUzuC,WACV0uC,WAAY1uC,eACX,CACDgH,MAAO,IACP2a,OAAQ,GACR5T,KAAM/N,8BACNyuC,SAAUzuC,WACV0uC,WAAY1uC,eACX,CACDgH,MAAO,IACP2a,OAAQ,IACR5T,KAAM/N,mCACNyuC,SAAUzuC,YACV0uC,WAAY1uC,mBACX,CACDgH,MAAO,IACP2a,OAAQ,IACR5T,KAAM/N,6BACNyuC,SAAUzuC,YACV0uC,WAAY1uC,aACX,CACDgH,MAAO,IACP2a,OAAQ,IACR5T,KAAM/N,oCACNyuC,SAAUzuC,YACV0uC,WAAY1uC,oBACX,CACDgH,MAAO,IACP2a,OAAQ,IACR5T,KAAM/N,0BACNyuC,SAAUzuC,YACV0uC,WAAY1uC,UACX,CACDgH,MAAO,IACP2a,OAAQ,GACR5T,KAAM/N,8BACNyuC,SAAUzuC,WACV0uC,WAAY1uC,eACX,CACDgH,MAAO,IACP2a,OAAQ,IACR5T,KAAM/N,6BACNyuC,SAAUzuC,YACV0uC,WAAY1uC,aACX,CACDgH,MAAO,IACP2a,OAAQ,IACR5T,KAAM/N,mCACNyuC,SAAUzuC,YACV0uC,WAAY1uC,mBACX,CACDgH,MAAO,IACP2a,OAAQ,IACR5T,KAAM/N,8BACNyuC,SAAUzuC,YACV0uC,WAAY1uC,eAGR2uC,EAAS,CAAC,CACd3nC,MAAO,IACP2a,OAAQ,IACR5T,KAAM/N,4CACNyuC,SAAUzuC,YACV0uC,WAAY1uC,4BACX,CACDgH,MAAO,IACP2a,OAAQ,IACR5T,KAAM/N,2CACNyuC,SAAUzuC,YACV0uC,WAAY1uC,2BACX,CACDgH,MAAO,IACP2a,OAAQ,IACR5T,KAAM/N,gCACNyuC,SAAUzuC,YACV0uC,WAAY1uC,gBACX,CACDgH,MAAO,IACP2a,OAAQ,GACR5T,KAAM/N,8BACNyuC,SAAUzuC,WACV0uC,WAAY1uC,eACX,CACDgH,MAAO,IACP2a,OAAQ,GACR5T,KAAM/N,yBACNyuC,SAAUzuC,WACV0uC,WAAY1uC,UACX,CACDgH,MAAO,IACP2a,OAAQ,GACR5T,KAAM/N,+BACNyuC,SAAUzuC,WACV0uC,WAAY1uC,gBACX,CACDgH,MAAO,IACP2a,OAAQ,GACR5T,KAAM/N,gCACNyuC,SAAUzuC,WACV0uC,WAAY1uC,iBACX,CACDgH,MAAO,IACP2a,OAAQ,GACR5T,KAAM/N,+BACNyuC,SAAUzuC,WACV0uC,WAAY1uC,iBAGR4uC,EAAmB,SAACC,EAAeC,GACvC,OAAKD,GAAkBC,EAIhBA,EAAOrnC,QAAO,SAAAsnC,GAAU,OAAIF,EAAc99B,MAAK,SAAAi+B,GAAQ,OAAIA,EAAShoC,QAAU+nC,EAAW/nC,OAASgoC,EAASrtB,SAAWotB,EAAWptB,MAAM,GAAC,IAHtI,EAIX,EAEMstB,EAAiB,WAkBrB,OAAOL,EAjBe,CAAC,CACrB5nC,MAAO,IACP2a,OAAQ,KACP,CACD3a,MAAO,IACP2a,OAAQ,IACP,CACD3a,MAAO,IACP2a,OAAQ,KACP,CACD3a,MAAO,IACP2a,OAAQ,KACP,CACD3a,MAAO,IACP2a,OAAQ,MAG6B6sB,EACzC,EAEMU,EAAoB,WAwBxB,OAAON,EAvBe,CAAC,CACrB5nC,MAAO,IACP2a,OAAQ,KACP,CACD3a,MAAO,IACP2a,OAAQ,KACP,CACD3a,MAAO,IACP2a,OAAQ,KACP,CACD3a,MAAO,IACP2a,OAAQ,IACP,CACD3a,MAAO,IACP2a,OAAQ,IACP,CACD3a,MAAO,IACP2a,OAAQ,IACP,CACD3a,MAAO,IACP2a,OAAQ,MAG6B6sB,EACzC,EAEMW,EAAe,WAMnB,OAAOP,EALe,CAAC,CACrB5nC,MAAO,IACP2a,OAAQ,KAG6BgtB,EACzC,EAEMS,EAAkB,WAwBtB,OAAOR,EAvBe,CAAC,CACrB5nC,MAAO,IACP2a,OAAQ,KACP,CACD3a,MAAO,IACP2a,OAAQ,KACP,CACD3a,MAAO,IACP2a,OAAQ,KACP,CACD3a,MAAO,IACP2a,OAAQ,IACP,CACD3a,MAAO,IACP2a,OAAQ,IACP,CACD3a,MAAO,IACP2a,OAAQ,IACP,CACD3a,MAAO,IACP2a,OAAQ,KAG6BgtB,EACzC,EAEMU,EAAuB,SAC3BzwC,EACA0wC,EACAC,EACAC,GAEA,IAAMC,EAAgB,GAoBtB,OAnBAD,EAAcz1B,SAAQ,SAAAhd,GAMf,IALLiK,EAAKjK,EAALiK,MACA2a,EAAM5kB,EAAN4kB,OACA5T,EAAIhR,EAAJgR,KACA0gC,EAAQ1xC,EAAR0xC,SACAC,EAAU3xC,EAAV2xC,aAEMa,GAAgBA,GAAgB5tB,MAAa2tB,GAAeA,GAAetoC,IAC/EyoC,EAAc5vB,KAAK,CACjB0I,IAAI,QAAD5Y,OAAU3I,EAAK,KAAA2I,OAAIgS,GACtB3a,MAAAA,EACA2a,OAAAA,EACA5T,KAAMnP,EAAKmB,UAAUgO,GACrB0gC,SAAU7vC,EAAKmB,UAAU0uC,GACzBC,WAAY9vC,EAAKmB,UAAU2uC,IAGjC,IAEOe,CACT,EAsEaC,EAAmB,SAAHn4B,GAItB,IAHL3Y,EAAI2Y,EAAJ3Y,KACA0wC,EAAW/3B,EAAX+3B,YACAC,EAAYh4B,EAAZg4B,aAEMI,EAAkB,GACxBnB,EAASz0B,SAAQ,SAAAnC,GAMV,IALL5Q,EAAK4Q,EAAL5Q,MACA2a,EAAM/J,EAAN+J,OACA5T,EAAI6J,EAAJ7J,KACA0gC,EAAQ72B,EAAR62B,SACAC,EAAU92B,EAAV82B,aAEMa,GAAgBA,GAAgB5tB,MAAa2tB,GAAeA,GAAetoC,IAC/E2oC,EAAgB9vB,KAAK,CACnB0I,IAAI,QAAD5Y,OAAU3I,EAAK,KAAA2I,OAAIgS,GACtB3a,MAAAA,EACA2a,OAAAA,EACA5T,KAAMnP,EAAKmB,UAAUgO,GACrB0gC,SAAU7vC,EAAKmB,UAAU0uC,GACzBC,WAAY9vC,EAAKmB,UAAU2uC,IAGjC,IAEA,IAAMkB,EAAgB,GAuCtB,OAtCAjB,EAAO50B,SAAQ,SAAA81B,GAMR,IALL7oC,EAAK6oC,EAAL7oC,MACA2a,EAAMkuB,EAANluB,OACA5T,EAAI8hC,EAAJ9hC,KACA0gC,EAAQoB,EAARpB,SACAC,EAAUmB,EAAVnB,aAEMa,GAAgBA,GAAgB5tB,MAAa2tB,GAAeA,GAAetoC,IAC/E4oC,EAAc/vB,KAAK,CACjB0I,IAAI,QAAD5Y,OAAU3I,EAAK,KAAA2I,OAAIgS,GACtB3a,MAAAA,EACA2a,OAAAA,EACA5T,KAAMnP,EAAKmB,UAAUgO,GACrB0gC,SAAU7vC,EAAKmB,UAAU0uC,GACzBC,WAAY9vC,EAAKmB,UAAU2uC,IAGjC,IAEa,GAAA/+B,QAAAmQ,EAAAA,EAAAA,GACP6vB,EAAgBnvC,OAAS,EAAI,CAAC,CAChC+nB,IAAK,WACLxa,KAAMnP,EAAKmB,UAAUC,YACrB8vC,SAAUC,EAAAA,qBAAqBC,SAC7B,IACDL,GAAe7vB,EAAAA,EAAAA,GACd6vB,EAAgBnvC,OAAS,EAAI,CAAC,CAChC+nB,IAAK,UACLunB,SAAUC,EAAAA,qBAAqBE,UAC7B,KAAEnwB,EAAAA,EAAAA,GACF8vB,EAAcpvC,OAAS,EAAI,CAAC,CAC9B+nB,IAAK,SACLxa,KAAMnP,EAAKmB,UAAUC,UACrB8vC,SAAUC,EAAAA,qBAAqBC,SAC9B,IACAJ,EAIP,EClXaM,EAAY,SAAC1gC,GACxB,IACE5Q,EAME4Q,EANF5Q,KACAuxC,EAKE3gC,EALF2gC,IACAC,EAIE5gC,EAJF4gC,0BACAC,EAGE7gC,EAHF6gC,kBACAC,EAEE9gC,EAFF8gC,oBACAC,EACE/gC,EADF+gC,uBAGIC,EAAcL,GAAOA,EAAIv1B,MAAS,GAClC61B,GAAiBtvC,EAAAA,EAAAA,kBAAiBkpC,GAClCqG,GAAgBvvC,EAAAA,EAAAA,kBAAiBmvC,GACjCpvC,EAAUqvC,EAAyBG,EAAgBD,EACjDE,EAAqBR,EAArBQ,iBACR5xC,GAA8CC,EAAAA,EAAAA,UAAS,GAAEC,GAAAC,EAAAA,EAAAA,GAAAH,EAAA,GAAlD6xC,EAAe3xC,EAAA,GAAE4xC,EAAkB5xC,EAAA,GACpC6xC,GAAgBzxC,EAAAA,EAAAA,UAAQ,kBAAMqwC,EAAiB,CAAE9wC,KAAAA,GAAO,GAAE,CAACA,IAE3DmyC,EAAuB,SAACC,GAK5B,OAzBmB,MAoBwB33B,UAAA7Y,OAAA,QAAAkS,IAAA2G,UAAA,GAAAA,UAAA,GAAG,OACnBs3B,GAEL,GAAuBK,CAG/C,EAUMC,EAAiB,SAACD,GACtBH,EAAmBG,EACrB,EAGME,GADkBpzC,IAAAA,QAAU0yC,GAAcA,EAAa,IACpBW,MAAMJ,EAAqB,GAAIA,EAAqB,GAAK,GAC5FK,EAAYZ,EAAWO,EAAqBH,KAAqBJ,EAAW,GAC5Ea,EAAgBD,GAAaA,EAAUx2B,MAAQw2B,EAAUx2B,KAAK9T,YAAU4L,EACxE4+B,GAAoBjyC,EAAAA,EAAAA,UAAQ,WAChC,GAAIgyC,GAAgBA,EAAaE,YAAcF,EAAaG,UAAW,CACrE,IAAMC,EAAcJ,EAAaG,UAAYH,EAAaE,WAE1D,OAAOxQ,KAAK9T,IADK,IACUwkB,EAAa,IAC1C,CACA,OAAO,CACT,GAAG,CAACJ,IAEEK,GAAqBryC,EAAAA,EAAAA,UAAQ,WACjC,OAAKgyC,GAGUP,EAAcvtC,MAAK,SAAAouC,GAAM,OAAIA,EAAOppB,MAAG,QAAA5Y,OAAa0hC,EAAaO,YAAW,KAAAjiC,OAAI0hC,EAAaQ,aAAc,KAFjH,IAKX,GAAG,CAACR,EAAcP,IAclB,OAZAh/B,EAAAA,EAAAA,YAAU,WACR++B,EAAmB,EACrB,GAAG,CAACF,KAEJ7+B,EAAAA,EAAAA,YAAU,WACJ8+B,EAAkBM,EAAiB1wC,OAAS,GAC9CqwC,EAAmB,GAErBT,EAA0BQ,EAE5B,GAAG,CAACA,EAAiBM,EAAiB1wC,UAGpCtC,EAAAA,EAAAA,MAAA,OAAKL,UAAWqD,EAAQyqC,cAAczuC,SAAA,EACpCD,EAAAA,EAAAA,KAAA,OAAKY,UAAWqD,EAAQ4wC,oBAAoB50C,UAC1CgB,EAAAA,EAAAA,MAACf,EAAAA,KAAI,CAACU,UAAWqD,EAAQ2qC,mBAAmB3uC,SAAA,CAAC,IAAC,GAAAyS,OAAI/Q,EAAKmB,UAAUC,WAAgB,MAAA2P,OAAK/Q,EAAKmB,UAAUC,MAAW,KAAA2P,OAAIihC,EAAkB,GAAI,UAE5I1yC,EAAAA,EAAAA,MAAA,OAAKL,UAAWqD,EAAQ8qC,eAAe9uC,SAAA,EACrCD,EAAAA,EAAAA,KAAA,OAAKY,UAAWqD,EAAQ0qC,oBAAoB1uC,SACzCw0C,IACCxzC,EAAAA,EAAAA,MAAA,OAAAhB,SAAA,EACEgB,EAAAA,EAAAA,MAACf,EAAAA,KAAI,CAACU,UAAWqD,EAAQ4qC,mBAAmB5uC,SAAA,CAAC,IAAEw0C,EAAmBjD,aAElEvwC,EAAAA,EAAAA,MAACf,EAAAA,KAAI,CAACU,UAAWqD,EAAQ6wC,qBAAqB70C,SAAA,CAAC,IAAEw0C,EAAmBhD,oBAK1EzxC,EAAAA,EAAAA,KAAA,OAAKY,UAAWqD,EAAQuqC,iBAAiBvuC,SACrCm0C,GACAp0C,EAAAA,EAAAA,KAACkxC,EAAW,CACVpO,IAAKsR,EAAatR,IAClBiS,cAAeX,EAAaW,cAC5BP,YAAaJ,EAAaG,UAAYH,EAAaE,WACnDD,kBAAmBA,EACnBW,QAASZ,EAAaa,MACtBC,QAASd,EAAae,MACtBC,YAAahB,EAAaG,aAE1Bv0C,EAAAA,EAAAA,KAAA,OAAKY,UAAWqD,EAAQwqC,kBAK3B2E,GAAqBa,EAAiB1wC,OAAS,IAChDvD,EAAAA,EAAAA,KAAA,OAAKY,UAAWqD,EAAQkrC,WAAWlvC,UACjCgB,EAAAA,EAAAA,MAAA,OAAKL,UAAWqD,EAAQmrC,aAAcluC,MAAO,CAAEsK,eAAgB,iBAAkBvL,SAAA,EAC/EgB,EAAAA,EAAAA,MAAC6D,EAAAA,GAAI,CACHsc,QAlFQ,WACpBwyB,EAAmBD,EAAkB,EACvC,EAiFc0B,SAA8B,IAApB1B,EACV/yC,UAAWqD,EAAQorC,YAAYpvC,SAAA,EAE/BD,EAAAA,EAAAA,KAACs1C,EAAAA,SAAQ,CAAC10C,UAAWqD,EAAQqrC,wBAAyBiG,SAAS,gBAAgB,KAACt0C,EAAAA,EAAAA,MAACf,EAAAA,KAAI,CAAAD,SAAA,CAAC,IAAE0B,EAAKmB,UAAUC,eAAqB,WAE9H/C,EAAAA,EAAAA,KAAA,OAAKY,UAAWqD,EAAQ0rC,oBAAoB1vC,SACzCg0C,EAAiBvzC,KAAI,SAACmJ,EAAOkqC,GAAG,OAC/B/zC,EAAAA,EAAAA,KAAA,OAAAC,UACED,EAAAA,EAAAA,KAAA,QACEw1C,SAAU,EACVC,KAAK,SACLC,UAAW,WAAF,OAAQ1B,EAAeD,EAAI,EACpC3yB,QAAS,WAAF,OAAQ4yB,EAAeD,EAAI,EAClCnzC,UAAWqD,EAAQurC,uBACnBtuC,MAAO,CAAE4sC,gBAAiBgG,EAAqBC,KAASD,EAAqBH,GAAmB,UAAY,cAE1G,OAGV1yC,EAAAA,EAAAA,MAAC6D,EAAAA,GAAI,CACHsc,QAnGQ,WACpBwyB,EAAmBD,EAAkB,EACvC,EAkGc0B,SAAU1B,IAAoBM,EAAiB1wC,OAAS,GAAiC,IAA5B0wC,EAAiB1wC,OAC9E3C,UAAWqD,EAAQorC,YAAYpvC,SAAA,EAE/BgB,EAAAA,EAAAA,MAACf,EAAAA,KAAI,CAAAD,SAAA,CAAC,IAAE0B,EAAKmB,UAAUC,WAAiB,OAAQ,KAAC/C,EAAAA,EAAAA,KAACs1C,EAAAA,SAAQ,CAAC10C,UAAWqD,EAAQsrC,oBAAqBgG,SAAS,0BAMpHv1C,EAAAA,EAAAA,KAAA,OAAKY,UAAWqD,EAAQgrC,WAAWhvC,UACjCD,EAAAA,EAAAA,KAACE,EAAAA,KAAI,CAACU,UAAWqD,EAAQirC,eAAejvC,SACrC0B,EAAKmB,UAAUC,4IAM5B,EAgBAkwC,EAAU7xC,aAAe,CACvBgyC,mBAAmB,EACnBC,oBAAqBxyC,IAAAA,KACrByyC,wBAAwB,EACxBH,0BAA2BtyC,IAAAA,M,wCC7KhB80C,EAAa,SAAH71C,GAQhB,IAPL81C,EAAU91C,EAAV81C,WACAxC,EAAiBtzC,EAAjBszC,kBACAnvC,EAAOnE,EAAPmE,QACA4xC,EAAY/1C,EAAZ+1C,aACAC,EAAYh2C,EAAZg2C,aACAC,EAAQj2C,EAARi2C,SACArC,EAAgB5zC,EAAhB4zC,iBAEM/xC,GAAOC,EAAAA,EAAAA,YAAWC,EAAAA,aAExB,OACE7B,EAAAA,EAAAA,KAAAk4B,EAAAA,SAAA,CAAAj4B,SACG21C,EAAa,IAAMxC,IAClBpzC,EAAAA,EAAAA,KAAA,OAAKY,UAAWqD,EAAQkrC,WAAWlvC,UACjCgB,EAAAA,EAAAA,MAAA,OAAKL,UAAWqD,EAAQmrC,aAAanvC,SAAA,EACnCgB,EAAAA,EAAAA,MAAC6D,EAAAA,GAAI,CACHsc,QAASy0B,EACTR,SAAU3B,GAAoB,EAAEzzC,SAAA,EAEhCD,EAAAA,EAAAA,KAACs1C,EAAAA,SAAQ,CAACC,SAAS,gBAAgB,KAACv1C,EAAAA,EAAAA,KAACE,EAAAA,KAAI,CAAAD,SAAC,eAE5CD,EAAAA,EAAAA,KAACkD,EAAAA,GAAS,CACR9C,OAAQ,CAAEC,KAAM,CAAE0J,MAAO,KACzB/I,MAAO0yC,EACPpwC,SAAU,SAACqY,EAAGq6B,GAAG,OAAKD,EAASC,EAAI,KAErC/0C,EAAAA,EAAAA,MAAA,QAAAhB,SAAA,CAAM,IAAE0B,EAAKmB,UAAUC,MAAY,IAAE6yC,EAAW,QAChD30C,EAAAA,EAAAA,MAAC6D,EAAAA,GAAI,CACHsc,QAAS00B,EACTT,SAAU3B,IAAqBkC,EAAW31C,SAAA,EAE1CgB,EAAAA,EAAAA,MAACf,EAAAA,KAAI,CAAAD,SAAA,CAAC,IAAE0B,EAAKmB,UAAUC,QAAc,OAAQ,KAAC/C,EAAAA,EAAAA,KAACs1C,EAAAA,SAAQ,CAACC,SAAS,0BAO/E,EAeAI,EAAWv0C,aAAe,CACxBgyC,mBAAmB,G,uVC3DR6C,GAAwB,SAACC,GACpC,IAAMzzC,EAAO,oBAAoB0zC,KAAKD,EAAWzzC,MAC3CsH,EAAQqsC,SAAS3zC,EAAK,GAAI,IAC1BiiB,EAAS0xB,SAAS3zC,EAAK,GAAI,IAiBjC,MAhBc,CACZ4M,GAAI6mC,EAAW7mC,GACfgnC,YAAaH,EAAWG,YACxBC,QAAS,uBACT3B,YAAa5qC,EACb6qC,aAAclwB,EACduwB,MAAOiB,EAAWK,aAAavB,QAC/BG,MAAOe,EAAWK,aAAarB,QAC/BX,UAAW2B,EAAWK,aAAanB,YACnCd,WAAY4B,EAAWK,aAAaC,aACpC1T,IAAKoT,EAAWpT,IAChBhyB,KAAMolC,EAAWplC,KACjBikC,cAAemB,EAAWnsC,MAC1B0sC,eAAgBP,EAAWxxB,OAI/B,EAEagyB,GAAyB,SAAH52C,GAAuC,IAAjC62C,EAAK72C,EAAL62C,MAAOC,EAAQ92C,EAAR82C,SAAUlmC,EAAQ5Q,EAAR4Q,SAClDmmC,EAAWF,EAAMnsC,QAAO,SAAAhK,GAA8B,IAA3BiC,EAAIjC,EAAJiC,KAAMsH,EAAKvJ,EAALuJ,MAAO2a,EAAMlkB,EAANkkB,OACtC8vB,EAAcsC,GAAAA,GAA0Br0C,GAC9Cs0C,GAAA90C,EAAAA,EAAAA,GAA2CuyC,EAAnCwC,QAAO,GAAGC,EAAQF,EAAA,GAAEjkC,EAASikC,EAAA,GACrC,OAAOhtC,GAASktC,GAAYvyB,GAAU5R,CACxC,IAEIokC,EAAgB,KACpB,GAAIxmC,EAAU,CACZ,IAAMymC,EAAgBN,EAASO,WAAU,SAAAt9B,GAAO,OAAAA,EAAJrX,OAAe,QAAAiQ,OAAahC,EAAS2mC,YAAW,KAAA3kC,OAAIhC,EAAS4mC,aAAc,IACvHT,EAASM,GAAeZ,cAAY1vC,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAC/BgwC,EAASM,GAAeZ,cAAY,IACvCnB,YAAa1kC,EAAS6mC,UACtBf,aAAc9lC,EAAS8mC,WACvBxC,QAAStkC,EAAS+mC,MAClBvC,QAASxkC,EAASgnC,QAEpBR,EAAgBL,EAASM,EAC3B,MACED,EAAgBr2C,IAAAA,IAAMg2C,GAAU,SAAAv8B,GAAA,IAAAq9B,EAAAr9B,EAAGi8B,aAA0D,OAA9BoB,EAAZnB,aAAyBmB,EAAXvC,YAAoB96B,EAALvQ,MAAauQ,EAANoK,MAA0D,IAGnJ,MAAO,CACL/G,MAAI9W,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACC+vC,GAAQ,IACX/sC,MAAOosC,GAAsBiB,GAC7BU,gBAAiBf,IAGvB,E,0BChDagB,GAAW,SAAH/3C,GA0Bd,IAzBLg4C,EAAoBh4C,EAApBg4C,qBACAC,EAASj4C,EAATi4C,UACAp2C,EAAI7B,EAAJ6B,KACAq2C,EAAUl4C,EAAVk4C,WACA1T,EAAiBxkC,EAAjBwkC,kBACArV,EAAWnvB,EAAXmvB,YACAgpB,EAAWn4C,EAAXm4C,YACAC,EAAep4C,EAAfo4C,gBACAC,EAAgBr4C,EAAhBq4C,iBACAC,EAAOt4C,EAAPs4C,QACAC,EAASv4C,EAATu4C,UACAC,EAAiBx4C,EAAjBw4C,kBACAC,EAAgBz4C,EAAhBy4C,iBACAC,EAAU14C,EAAV04C,WACApgB,EAAQt4B,EAARs4B,SACAqgB,EAAc34C,EAAd24C,eACA3e,EAAYh6B,EAAZg6B,aACA4e,EAAkB54C,EAAlB44C,mBACAC,EAAqB74C,EAArB64C,sBACAC,EAAwB94C,EAAxB84C,yBACAC,EAA2B/4C,EAA3B+4C,4BACAC,EAAkBh5C,EAAlBg5C,mBACAC,EAASj5C,EAATi5C,UACAC,EAAmBl5C,EAAnBk5C,oBACA5rC,EAAatN,EAAbsN,cAEAtL,GAAkCC,EAAAA,EAAAA,WAAS,kBAAMi2C,EAAWhgC,YAAY,cAAc,IAA/EihC,GAAgFh3C,EAAAA,EAAAA,GAAAH,EAAA,GAAzD,GACxBo3C,GAAiBd,GAAWA,IAAO,GAAA1lC,OAAQ2lC,EAAS,OAE1Dc,GAeIC,EAAAA,GAAAA,IAA2B,CAC7Bl6B,IAAK44B,EAAqBzoB,WAC1BlQ,IAAK44B,EAAU1oB,WACf4oB,YAAAA,EACAa,mBAAAA,EACAn3C,KAAAA,EACAstB,YAAAA,EACAoqB,cAAc,IArBdC,EAAgBH,EAAhBG,iBACAC,EAAmBJ,EAAnBI,oBACAC,EAAqBL,EAArBK,sBACAC,EAAWN,EAAXM,YACAC,EAAoBP,EAApBO,qBACA1C,EAAOmC,EAAPnC,QACA2C,EAAaR,EAAbQ,cACAC,EAAcT,EAAdS,eACAC,EAAeV,EAAfU,gBACAC,EAAkBX,EAAlBW,mBACAC,EAAeZ,EAAfY,gBACAC,EAAgBb,EAAhBa,iBACAC,EAAqBd,EAArBc,sBACAC,EAAuBf,EAAvBe,wBAWFC,EAA4BjC,EAApBkC,WAAAA,OAAU,IAAAD,EAAG,CAAC,EAACA,EAEvB,OACEn6C,EAAAA,EAAAA,KAACq6C,GAAAA,GAAuB,CACtBC,OAAQ5B,EACR6B,UAAW,SAACC,GACR7B,EAAsB6B,GACjBA,GACHhB,GAEJ,EACFC,YAAaA,EACbC,qBAAsBA,EACtB1C,QAASA,EACTld,aAAcA,EACd2gB,qBAAsB,CAClBL,WAAAA,EACAjC,iBAAAA,EACAliC,SAAUijC,EAAgB,GAAKd,EAC/BsC,iBAAiB,GAADhoC,OAAK2lC,EAAS,OAC9BsC,iBAAkBpC,EAClBqC,uBAAwBtC,EACxBuC,gBAAgB,EAChBC,YAAaC,GAAAA,GAAUC,mBACvB3B,cAAc,GAElBM,cAAeA,EACfsB,0BAA2BrC,EAC3BsC,gCAAiCrC,EACjCsC,iBAAkB,CACdvB,eAAAA,EACAE,mBAAAA,GAEJsB,kBAAmB,CACjBvB,gBAAAA,GAEFwB,kBAAmB,CACfpB,sBAAAA,EACAxB,eAAAA,GAEJ6C,mBAAoB,CAChBp8B,IAAK44B,EAAqBzoB,WAC1BlQ,IAAK44B,EAAU1oB,WACf4oB,YAAAA,EACAO,WAAAA,EACApgB,SAAAA,EACAmjB,mBAAoBjX,EACpBmU,eAAAA,EACAsB,gBAAAA,EACAC,iBAAAA,EACAwB,gBAAiB,SAAA7/B,GAAC,OAAI49B,EAAoB59B,EAAE,EAC5C8/B,8BAA8B,EAC9BC,+BAA+B,EAC/BC,gCAAgC,GAEpCh6C,KAAMA,EACNud,IAAK44B,EAAqBzoB,WAC1BlQ,IAAK44B,EAAU1oB,WACfusB,aAActC,EACduC,UAAW,KACX3B,wBAAyBA,EACzBlC,WAAYiB,EACZhqB,YAAaA,EACb8pB,UAAWA,EACXC,oBAAqBA,EACrB5rC,cAAeA,GAGrB,EAuEAyqC,GAASz2C,aAAe,CACtB6tB,YAAa,CAAC,EACd6sB,uBAAmBrmC,EACnB2iC,QAAS,GACTC,UAAW,GACXC,kBAAmB5iC,EAAAA,KACnB6iC,iBAAkB7iC,EAAAA,KAClB8iC,WAAY,WACZpgB,SAAU,GACVqgB,eAAgB,CAAC,EACjBC,oBAAoB,EACpB5e,aAAc,EACdif,WAAW,EACXC,yBAAqBvjC,GCnMvB,IAAMjS,GAAY,WAAH,MAAU,CACvBu4C,gBAAiB,CACf56C,QAAS,OACT8R,QAAS,OACTyR,OAAQ,QACRhZ,cAAe,SACfF,eAAgB,gBAChBN,WAAY,SACZuiC,aAAc,OACdxhC,UAAW,OACXoZ,OAAQ,sBAEX,EAEK22B,GAAiB,SAAHl8C,GAoBb,IAnBLqf,EAAGrf,EAAHqf,IACAxd,EAAI7B,EAAJ6B,KACAq2C,EAAUl4C,EAAVk4C,WACA1T,EAAiBxkC,EAAjBwkC,kBACArV,EAAWnvB,EAAXmvB,YACAgpB,EAAWn4C,EAAXm4C,YACA7qC,EAAatN,EAAbsN,cACA0rC,EAAkBh5C,EAAlBg5C,mBACAF,EAAwB94C,EAAxB84C,yBACAC,EAA2B/4C,EAA3B+4C,4BACAH,EAAkB54C,EAAlB44C,mBACAC,EAAqB74C,EAArB64C,sBACAsD,EAAen8C,EAAfm8C,gBACAttC,EAAU7O,EAAV6O,WACAutC,EAAWp8C,EAAXo8C,YACA9D,EAAOt4C,EAAPs4C,QACAte,EAAYh6B,EAAZg6B,aACAqiB,EAAar8C,EAAbq8C,cACAnD,EAAmBl5C,EAAnBk5C,oBAEM/0C,GAAUC,EAAAA,EAAAA,kBAAiBV,IAC3BiR,GAAW7S,EAAAA,EAAAA,YAAW8S,EAAAA,iBACtBkpB,GAAWh8B,EAAAA,EAAAA,YAAWw6C,EAAAA,iBAC5Bt6C,GAAoCC,EAAAA,EAAAA,UAAS,IAAGC,GAAAC,EAAAA,EAAAA,GAAAH,EAAA,GAAzCu6C,EAAUr6C,EAAA,GAAEs6C,EAAat6C,EAAA,GAE1BwK,GAAMpK,EAAAA,EAAAA,UAAQ,WAClB,OAA8B,QAA1Bm6C,EAAAA,GAAAA,IAAcnE,GACTA,EAGFiE,GAAc,UACvB,GAAG,CAACjE,EAASiE,IAEPG,GAAiBp6C,EAAAA,EAAAA,UAAQ,WAC7B,IAAAq6C,GAAiBC,EAAAA,GAAAA,IAA2BlwC,GAC5C,OADgDvK,EAAAA,EAAAA,GAAAw6C,EAAA,GAAnC,EAEf,GAAG,CAACjwC,IAEJmwC,GAGIC,EAAAA,GAAAA,IAAqB,CACvB3E,YAAAA,EACA4E,UAAW,CACT/E,sBAAsBvnC,EAAAA,EAAAA,KAAInD,EAAe,CAAC,iBAAkB,yBAC5D2qC,UAAW54B,EACXxQ,WAAAA,GAEFstC,gBAAAA,EACAa,YAAaroC,EAASyL,OACtB+O,YAAAA,EACAmpB,QAAS5rC,EACTuwC,cAAsC,QAAvBR,EAAAA,GAAAA,IAAc/vC,GAC7BsvC,kBAAmB,CACjBkB,aAAa,GAADtqC,OAAKkrB,EAAS7rB,KAAI,cAC9BkrC,cAAc,GAADvqC,OAAKkrB,EAAS7rB,KAAI,iBAhBjCmmC,EAAeyE,EAAfzE,gBACAC,EAAgBwE,EAAhBxE,iBAwCF,OACEl3C,EAAAA,EAAAA,MAAAi3B,EAAAA,SAAA,CAAAj4B,SAAA,CACIk8C,IACAn8C,EAAAA,EAAAA,KAAA,OAAKY,UAAWkW,IAAW7S,EAAQ83C,gBAAiB,8BAA8B97C,UAChFD,EAAAA,EAAAA,KAACu8B,EAAAA,cAAa,CACZzrB,KAAMnP,EAAKmB,UAAUC,cACrBqe,QAAS,WACPu3B,GAAsB,EACxB,EACA/3C,UAAU,mBACVR,OAAQ,CAAEC,KAAM,CAAE42C,SAAU,QAAShrC,UAAW,UAItDjM,EAAAA,EAAAA,KAAC63C,GAAQ,CACPa,mBAAoBA,EACpBC,sBAAuBA,EACvBC,yBAA0BA,EAC1BC,4BAA6BA,EAC7BC,mBAAoBA,EACpBhB,sBAAsBvnC,EAAAA,EAAAA,KAAInD,EAAe,CAAC,iBAAkB,yBAC5D2qC,UAAW54B,EACXxd,KAAMA,EACNq2C,WAAYA,EACZ1T,kBAAmBA,EACnBrV,YAAaA,EACbgpB,YAAaA,EACbC,gBAAiBA,EACjBC,iBAAkBA,EAClBC,QAAS5rC,EACT6rC,UAAWmE,EACXlE,kBA1CkB,SAAC4E,EAAG18C,GAAgB,IAAZsQ,EAAItQ,EAAJsQ,KACxBqsC,EAAYrsC,EAAKssC,UAAU,EAAGtsC,EAAKvN,OAAS,GAClD85C,GAAqBX,EAAAA,GAAAA,IAA2BlwC,GAAvC8wC,GAA2Cr7C,EAAAA,EAAAA,GAAAo7C,EAAA,GAAnC,GACXE,GAASC,EAAAA,GAAAA,IAAgCF,EAAUH,GACrDjB,EACFA,EAAYqB,GAEZjB,EAAciB,EAElB,EAkCMhF,iBArDY,SAAC2E,GACjB,IAAQl8C,EAAUk8C,EAAI16C,OAAdxB,MACFu8C,GAASE,EAAAA,GAAAA,IAA8BjB,EAAgBx7C,GACzDk7C,EACFA,EAAYqB,GAEZjB,EAAciB,EAElB,EA8CM/E,YAAYjoC,EAAAA,EAAAA,KAAInD,EAAe,CAAC,cAAe,wBAAyB,qBACxEgrB,UAAU7nB,EAAAA,EAAAA,KAAInD,EAAe,CAAC,iBAAkB,aAChDqrC,eAAgBhkC,EAChBqlB,aAAcA,EACdif,UAAW3rC,GAAiBA,EAAcswC,UAC1C1E,oBAAqBA,EACrB5rC,cAAeA,MAGvB,EAiDA4uC,GAAe56C,aAAe,CAC5B86C,iBAAazmC,EACb2iC,QAAS,GACTte,aAAc,GACdqiB,eAAe,EACfnD,yBAAqBvjC,GAGvB,I,GAAMkoC,IAAUC,EAAAA,EAAAA,iBAAeC,EAAAA,GAAAA,qBAAoB7B,K,aClNtCv7C,GAAS,CACpBq9C,kBAAmB/6C,kDACnBg7C,SAAUh7C,wDACVi7C,QAASj7C,sCAIEk7C,GAAa,CACxBC,iBAAkB,CAChBnsC,KAAMhP,2BACN8B,KAAM,UAERs5C,YAAa,CACXpsC,KAAMhP,qBACN8B,KAAM,UAERu5C,WAAY,CACVrsC,KAAMhP,qBACN8B,KAAM,UAERw5C,iBAAkB,CAChBtsC,KAAMhP,2BACN8B,KAAM,UAERy5C,OAAQ,CACNvsC,KAAMhP,gBACN8B,KAAM,UAER05C,YAAa,CACXxsC,KAAMhP,sBACN8B,KAAM,UAER25C,aAAc,CACZzsC,KAAMhP,uBACN8B,KAAM,UAER45C,YAAa,CACX1sC,KAAMhP,sBACN8B,KAAM,UAER65C,WAAY,CACV3sC,KAAMhP,qBACN8B,KAAM,UAER85C,UAAW,CACT5sC,KAAMhP,oBACN8B,KAAM,WAER+5C,qBAAsB,CACpB7sC,KAAMhP,iCACN8B,KAAM,WAERg6C,UAAW,CACT9sC,KAAMhP,oBACN8B,KAAM,WAERi6C,eAAgB,CACd/sC,KAAMhP,0BACN8B,KAAM,WAERk6C,gBAAiB,CACfhtC,KAAMhP,2BACN8B,KAAM,WAERm6C,UAAW,CACTjtC,KAAMhP,oBACN8B,KAAM,WAERo6C,OAAQ,CACNltC,KAAMhP,iBACN8B,KAAM,WAERq6C,SAAU,CACRntC,KAAMhP,mBACN8B,KAAM,WAERs6C,SAAU,CACRptC,KAAMhP,oBACN8B,KAAM,WAERu6C,eAAgB,CACdrtC,KAAMhP,0BACN8B,KAAM,WAERw6C,WAAY,CACVttC,KAAMhP,qBACN8B,KAAM,YAIJy6C,IAAMC,GAAA,IAAAn2C,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,GAAAm2C,GACTtB,GAAWC,iBAAiBr5C,KAAO,oBACnCo5C,GAAWE,YAAYt5C,KAAO,eAC9Bo5C,GAAWG,WAAWv5C,KAAO,cAC7Bo5C,GAAWI,iBAAiBx5C,KAAO,oBACnCo5C,GAAWK,OAAOz5C,KAAO,UACzBo5C,GAAWM,YAAY15C,KAAO,eAC9Bo5C,GAAWO,aAAa35C,KAAO,gBAC/Bo5C,GAAWQ,YAAY55C,KAAO,eAC9Bo5C,GAAWS,WAAW75C,KAAO,cAC7Bo5C,GAAWU,UAAU95C,KAAO,cAAWuE,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,GAAAm2C,GACvCtB,GAAWW,qBAAqB/5C,KAAO,wBACvCo5C,GAAWY,UAAUh6C,KAAO,aAC5Bo5C,GAAWa,eAAej6C,KAAO,kBACjCo5C,GAAWc,gBAAgBl6C,KAAO,mBAClCo5C,GAAWe,UAAUn6C,KAAO,aAC5Bo5C,GAAWgB,OAAOp6C,KAAO,UACzBo5C,GAAWiB,SAASr6C,KAAO,YAC3Bo5C,GAAWkB,SAASt6C,KAAO,YAC3Bo5C,GAAWmB,eAAev6C,KAAO,kBACjCo5C,GAAWoB,WAAWx6C,KAAO,eAGnB26C,GAAgB,CAC3BC,MAAO,CACLH,GAAOrB,GAAWC,iBAAiBr5C,MACnCy6C,GAAOrB,GAAWE,YAAYt5C,MAC9By6C,GAAOrB,GAAWG,WAAWv5C,MAC7By6C,GAAOrB,GAAWI,iBAAiBx5C,MACnCy6C,GAAOrB,GAAWK,OAAOz5C,MACzBy6C,GAAOrB,GAAWM,YAAY15C,MAC9By6C,GAAOrB,GAAWO,aAAa35C,MAC/By6C,GAAOrB,GAAWQ,YAAY55C,OAEhCg6C,UAAW,CACTS,GAAOrB,GAAWS,WAAW75C,MAC7By6C,GAAOrB,GAAWU,UAAU95C,MAC5By6C,GAAOrB,GAAWW,qBAAqB/5C,MACvCy6C,GAAOrB,GAAWY,UAAUh6C,OAE9Bo6C,OAAQ,CACNK,GAAOrB,GAAWa,eAAej6C,MACjCy6C,GAAOrB,GAAWc,gBAAgBl6C,MAClCy6C,GAAOrB,GAAWe,UAAUn6C,MAC5By6C,GAAOrB,GAAWgB,OAAOp6C,OAE3B66C,SAAU,CACRJ,GAAOrB,GAAWiB,SAASr6C,MAC3By6C,GAAOrB,GAAWkB,SAASt6C,MAC3By6C,GAAOrB,GAAWmB,eAAev6C,MACjCy6C,GAAOrB,GAAWoB,WAAWx6C,QAUpB86C,GAAmB,SAACzM,GAU/B,OATyBA,EAAIxyC,KAAI,SAACk/C,GAChC,IAAMC,EAPkB,SAAAD,GAAE,OAAIN,GAAOM,EAAGzjB,SAAS2jB,aAAan4C,MAAM,KAAK,GAAGo4C,OAAQ,CAOhEC,CAAaJ,GAEjC,OAAA/4C,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACK+4C,GAAE,IACLK,UAAWJ,GAEf,GAGF,EA4BMK,GAAkC,SAACC,GACvC,IAAMC,EAAe,GAkBrB,OAhBAv/C,IAAAA,KAAOs/C,GAAoB,SAACjN,GAC1B,IAAMmN,EAAcx/C,IAAAA,UAAYqyC,GAAK,SAACoN,GACpC,IAAMC,EAAW1/C,IAAAA,OAASy/C,GAQ1B,MANmC,CACjCE,aAAcD,EAAS/zC,IACvB4rC,QAASmI,EAASpkB,SAAStyB,MAAM2C,IACjCi0C,aAAcF,EAASG,iBAI3B,IAEAN,EAAax9B,KAAI+9B,MAAjBP,GAAYv9B,EAAAA,EAAAA,GAAShiB,IAAAA,OAASw/C,IAChC,IAEOD,CACT,EAGaQ,GAAqB,SAAC1N,GACjC,IACM2N,EAlDwB,SAAC3N,GAE/B,OADmBryC,IAAAA,QAAUqyC,GAAK,SAAA0M,GAAE,OAAIA,EAAGzjB,SAAStyB,MAAM2C,GAAG,GAE/D,CA+CqBs0C,CADMnB,GAAiBzM,IAEpCiN,EA9CuB,SAACU,GAC9B,IAAMV,EAAqB,CAAC,EAEtBY,EAAYlgD,IAAAA,KAAOggD,GAczB,OAXAhgD,IAAAA,KAAOkgD,GAAW,SAACC,GACjB,IAAM9N,EAAM2N,EAAWG,GACjBC,EAAqBpgD,IAAAA,QAAUqyC,GAAK,SAAC0M,GACzC,IAAQK,EAAcL,EAAdK,UAER,OADmBp/C,IAAAA,QAAU2+C,IAAe,SAAA0B,GAAS,OAAIrgD,IAAAA,SAAWqgD,EAAWjB,EAAU,GAE3F,IAEAE,EAAmBa,GAAYC,CACjC,IAEOd,CACT,CA4B6BgB,CAAgBN,GAE3C,MAAO,CACLO,gBAAiBlB,GAAgCC,GACjDU,WAAYV,EAEhB,EAGakB,GAAgC,SAACR,GAC5C,IAAMxvC,EAAQ,GAoBd,OAlBAxQ,IAAAA,KAAOggD,GAAY,SAACS,GAClBzgD,IAAAA,KAAOygD,GAAa,SAACpO,GACnB,IAAMqO,EAAW1gD,IAAAA,OAASqyC,GAEpBsO,EAAU,CACdnyC,GAAIkyC,EAASb,iBACbe,WAAYF,EAAS/0C,IACrBk1C,YAAaH,EAAStB,UACtBhC,WAAY/K,EAAIxyC,KAAI,SAAAk/C,GAAE,MAAK,CACzBvwC,GAAIuwC,EAAGc,iBACPj+C,KAAMm9C,EAAGK,UACV,KAGH5uC,EAAMuR,KAAK4+B,EACb,GACF,IAEOnwC,CACT,EAEaswC,GAAwB,SAACd,EAAYxxC,GAChD,IAAMuyC,EAAgB/gD,IAAAA,KAAOggD,GAAY,SAAAS,GAAW,OAAIzgD,IAAAA,KAAOygD,GAAa,SAAApO,GAAG,OAAIryC,IAAAA,KAAOqyC,GAAK,SAAA0M,GAAE,OAAIA,EAAGc,mBAAqBrxC,CAAE,GAAC,GAAC,IAGjI,OAFoBxO,IAAAA,KAAO+gD,GAAe,SAAA1O,GAAG,OAAIryC,IAAAA,KAAOqyC,GAAK,SAAA0M,GAAE,OAAIA,EAAGc,mBAAqBrxC,CAAE,GAAC,GAGhG,EAEawyC,GAAiB,SAACz0C,GAC7B,IAMM00C,EANU,WACd,IAAMhsC,EAAWisC,SAAS/kC,SAASlH,SAASrE,cAC5C,OAAkD,IAA3CqE,EAASksC,QAAQ,uBAC2B,IAA/ClsC,EAASksC,QAAQ,wBACvB,CAEkBC,GAAY,gBAAkB,cAShD,MAPoB,CAClBC,WAAY90C,EAAcM,MAC1By0C,WAAY/0C,EAAcM,MAC1Bo0C,UAAU,GAADpvC,OAAKtF,EAAckB,kBAAkBiV,aAAW7Q,OAAGovC,GAC5DM,UAAU,GAAD1vC,OAAKtF,EAAckB,kBAAkBiV,aAAW7Q,OAAGovC,GAIhE,E,8BChPMO,IAAyBC,EAAAA,GAAAA,IAA0BC,GAAAA,GAAkB,0BAKrE/+C,GAAY,WAAH,MAAU,CACvBg/C,cAAe,CACbrhD,QAAS,OACT+J,WAAY,SACZC,UAAW,QAEbs3C,eAAgB,CACdjhC,SAAU,WACVkD,OAAO,GAADhS,OAVmB,IAUM,MAC/B3I,MAAM,GAAD2I,OAZmB,IAYK,MAC7By+B,SAAU,SACV1D,aAAc,MACdK,gBAAiB,UACjB3sC,QAAS,OACTqK,eAAgB,SAChBN,WAAY,UAEdw3C,qBAAsB,CACpBvhD,QAAS,OACTqgB,SAAU,WACVmhC,OAAQ,MACR54C,MAAO,OACPyB,eAAgB,gBAElBo3C,kBAAmB,CACjB,oBAAqB,CACnBx9B,OAAQ,KAEV,UAAW,CACTnS,QAAS,YACT3R,WAAY,WAGjB,EAEKuhD,GAAiB,CACrBC,SAAU,CAAE/4C,MAAO,MAGfg5C,GAAkB,CACtB1iD,KAAM,CACJotC,aAAc,OACd/oB,OAAQ,GACR3a,MAAO,GACP+jC,gBAAiB,cAUfkV,IAAal4B,EAAAA,EAAAA,IAAS/E,EAAAA,GAAak9B,IACnCC,GAAqB,SAAAr5C,GAAK,cAAA6I,OAAY7I,EAAM8qC,YAAW,KAAAjiC,OAAI7I,EAAM+qC,aAAY,EAsCnF,IAAMuO,GAAqB,WACrBC,GAAmB,SACnBC,GPmHqCrR,IAAiBt/B,OAAOu/B,KOlH7DqR,GPoHmCpR,IAAex/B,OAAOy/B,KOhGzDoR,GAAkB,SAAChxC,GACvB,IACE5Q,EAaE4Q,EAbF5Q,KACAqtC,EAYEz8B,EAZFy8B,UACApmC,EAWE2J,EAXF3J,iBACAqvC,EAUE1lC,EAVF0lC,YACAtpC,EASE4D,EATF5D,WACAuQ,EAQE3M,EARF2M,IACAC,EAOE5M,EAPF4M,IACA8P,EAME1c,EANF0c,YACA7hB,EAKEmF,EALFnF,cACA4qC,EAIEzlC,EAJFylC,WACAwL,EAGEjxC,EAHFixC,eACAxK,EAEEzmC,EAFFymC,oBACAyK,EACElxC,EADFkxC,6BAGFC,GAKIC,EAAAA,GAAAA,MAJFjL,EAAkBgL,EAAlBhL,mBACAC,EAAqB+K,EAArB/K,sBACAC,EAAwB8K,EAAxB9K,yBACAC,EAA2B6K,EAA3B7K,4BAGI+K,EAA+B30B,GAAeA,EAAY5qB,SAAW4qB,EAAY5qB,QAAQw/C,6BACzFjmB,GAAWh8B,EAAAA,EAAAA,YAAWw6C,EAAAA,iBACtBH,GAAkBr6C,EAAAA,EAAAA,YAAWkiD,GAAAA,wBACnChiD,GAAwDC,EAAAA,EAAAA,WAAS,GAAMC,GAAAC,EAAAA,EAAAA,GAAAH,EAAA,GAAhEiiD,EAAoB/hD,EAAA,GAAEgiD,GAAuBhiD,EAAA,GACpDiiD,IAAsEliD,EAAAA,EAAAA,WAAS,GAAMmiD,IAAAjiD,EAAAA,EAAAA,GAAAgiD,GAAA,GAA9EE,GAA2BD,GAAA,GAAEE,GAA8BF,GAAA,GAC5DjgD,IAAUC,EAAAA,EAAAA,kBAAiBV,IAC3B8gC,IAAoB1iC,EAAAA,EAAAA,YAAW2iC,EAAAA,mBAErC8f,IAAgDtiD,EAAAA,EAAAA,UAASohD,IAAmBmB,IAAAriD,EAAAA,EAAAA,GAAAoiD,GAAA,GAArEE,GAAgBD,GAAA,GAAEE,GAAmBF,GAAA,GACtCG,IAAkBriD,EAAAA,EAAAA,UAAQ,kBAAM,IAAIsiD,EAAAA,GAAgB,CACxDxlC,IAAAA,EACAC,IAAAA,EACAwlC,MAAOh2C,EACPspC,YAAAA,GACA,GAAE,CAAC94B,EAAKxQ,EAAYuQ,EAAK+4B,IAErB2M,IAAwBxiD,EAAAA,EAAAA,UAAQ,WACpC,GAAI4sC,GAAaA,EAAUnlC,OAASmlC,EAAUnlC,MAAM8qC,aAAe3F,EAAUnlC,MAAM+qC,aAAc,CAC/F,IAAMnyC,EAAOygD,GAAmBlU,EAAUnlC,OAE1C,OAD4BhJ,IAAAA,UAAYmuC,EAAU4I,iBAAiB,SAAAqI,GAAS,OAAIA,EAAUx9C,OAASA,CAAI,GAEzG,CACA,OAAQ,CACV,GAAG,CAACusC,IAEE6V,IAAoBC,EAAAA,GAAAA,+BAC1BC,IAAkDC,EAAAA,GAAAA,MAA1CC,GAAmBF,GAAnBE,oBAAqBC,GAAgBH,GAAhBG,kBAE7BrwC,EAAAA,EAAAA,YAAU,WACR,IAAMswC,IAAgBtkD,IAAAA,YAAcmuC,IAAcnuC,IAAAA,OAASmuC,IAC3D,IAAqC,IAAjC4U,EAAuC,CACzC,IAAMwB,EAzEkB,SAACpW,GAC7B,IAAKA,IAAcA,EAAUnlC,QAAUmlC,EAAUnlC,MAAM+qC,eAAiB5F,EAAUnlC,MAAM8qC,YACtF,OAAOwO,GAET,IAAAkC,EAAsCrW,EAAUnlC,MAAxC8qC,EAAW0Q,EAAX1Q,YAAaC,EAAYyQ,EAAZzQ,aACf0Q,EAAiB,SAAAzgD,GAAI,OAAIA,EAAKkF,QAAU4qC,GAAe9vC,EAAK6f,SAAWkwB,CAAa,EAE1F,OAAIyO,GAAcjM,UAAUkO,IAAkB,EACrCnC,GAGLG,GAAYlM,UAAUkO,IAAkB,EACnClC,GAGFD,EACT,CAyDyBoC,CAAqBvW,GACxCwV,GAAoBY,EACtB,CAGAx8C,EAAiBomC,IAAcA,EAAUnlC,OAAS25C,IAAgCxU,EAAUnlC,MA/H7E,IA+H4F,CAAClI,EAAKmB,UAAUC,yBAAgC,CACzJ8G,MAAOmlC,EAAYA,EAAUnlC,MAAQ,KACrC+tC,gBAAiB5I,EAAYA,EAAU4I,gBAAkB,KACzD4N,aAAcxW,EAAYA,EAAUwW,aAAe,MAClDL,EACL,GAAG,CAACnW,EAAWrtC,EAAM6hD,EAAgB56C,EAAkBg7C,IAEvD,IAAM6B,IAASnjD,EAAAA,EAAAA,cAAY,WACrB0sC,GAAaA,EAAUwW,aAEvBxW,EAAUwW,aAAaE,cACvB1W,EAAUwW,aAAaE,aAAavpB,UACpCpI,OAAOib,EAAUwW,aAAaE,aAAavpB,SAASwpB,UAAY,IAEhEvB,IAA+B,GAE/BzL,GAAsB,GAGxBqL,IAAwB,EAE5B,GAAG,CAAChV,EAAW2J,IAETiN,IAAgBtjD,EAAAA,EAAAA,cAAY,WAChCsG,EAAiB,CAACjH,EAAKmB,UAAUC,yBAAgC,CAC/D8G,MAAO,KACP27C,aAAc,MAElB,GAAG,CAAC7jD,EAAMiH,IAEJi9C,IAAkBzjD,EAAAA,EAAAA,UAAQ,WAC9B,OAAqC,IAAjCwhD,EACuB,WAArBW,GPsC4B,SAAHzqC,GAI5B,IAHLnY,EAAImY,EAAJnY,KACA0wC,EAAWv4B,EAAXu4B,YACAC,EAAYx4B,EAAZw4B,aAEMwT,EAAY5T,IACZ6T,EAAmB3T,EAAqBzwC,EAAM0wC,EAAaC,EAAcwT,GACzEE,EAAe7T,IACf8T,EAAqB7T,EAAqBzwC,EAAM0wC,EAAaC,EAAc0T,GAqBjF,MAnBa,GAAAtzC,QAAAmQ,EAAAA,EAAAA,GACPkjC,EAAiBxiD,OAAS,EAAI,CAAC,CACjC+nB,IAAK,sBACLxa,KAAMnP,EAAKmB,UAAUwuC,GACrBuB,SAAUC,EAAAA,qBAAqBC,SAC7B,KAAElwB,EAAAA,EAAAA,GACHkjC,IAAgBljC,EAAAA,EAAAA,GACfkjC,EAAiBxiD,OAAS,EAAI,CAAC,CACjC+nB,IAAK,UACLunB,SAAUC,EAAAA,qBAAqBE,UAC7B,KAAEnwB,EAAAA,EAAAA,GACFojC,EAAmB1iD,OAAS,EAAI,CAAC,CACnC+nB,IAAK,wBACLxa,KAAMnP,EAAKmB,UAAUuuC,GACrBwB,SAAUC,EAAAA,qBAAqBC,SAC9B,KAAElwB,EAAAA,EAAAA,GACFojC,GAIP,COnEeC,CAAuB,CAC5BvkD,KAAAA,EACA0wC,YAAarD,GAAaA,EAAUnlC,MAAQmlC,EAAUnlC,MAAMkrC,cAAgB,KAC5EzC,aAActD,GAAaA,EAAUnlC,MAAQmlC,EAAUnlC,MAAM4sC,eAAiB,OPEhD,SAAHj2C,GAI9B,IAHLmB,EAAInB,EAAJmB,KACA0wC,EAAW7xC,EAAX6xC,YACAC,EAAY9xC,EAAZ8xC,aAEM6T,EAAcnU,IACdoU,EAAqBhU,EAAqBzwC,EAAM0wC,EAAaC,EAAc6T,GAC3EE,EAAiBpU,IACjBqU,EAAuBlU,EAAqBzwC,EAAM0wC,EAAaC,EAAc+T,GAqBnF,MAnBa,GAAA3zC,QAAAmQ,EAAAA,EAAAA,GACPujC,EAAmB7iD,OAAS,EAAI,CAAC,CACnC+nB,IAAK,wBACLxa,KAAMnP,EAAKmB,UAAUwuC,GACrBuB,SAAUC,EAAAA,qBAAqBC,SAC7B,KAAElwB,EAAAA,EAAAA,GACHujC,IAAkBvjC,EAAAA,EAAAA,GACjBujC,EAAmB7iD,OAAS,EAAI,CAAC,CACnC+nB,IAAK,UACLunB,SAAUC,EAAAA,qBAAqBE,UAC7B,KAAEnwB,EAAAA,EAAAA,GACFyjC,EAAqB/iD,OAAS,EAAI,CAAC,CACrC+nB,IAAK,0BACLxa,KAAMnP,EAAKmB,UAAUuuC,GACrBwB,SAAUC,EAAAA,qBAAqBC,SAC9B,KAAElwB,EAAAA,EAAAA,GACFyjC,GAIP,CO5BaC,CAAyB,CAC9B5kD,KAAAA,EACA0wC,YAAarD,GAAaA,EAAUnlC,MAAQmlC,EAAUnlC,MAAMkrC,cAAgB,KAC5EzC,aAActD,GAAaA,EAAUnlC,MAAQmlC,EAAUnlC,MAAM4sC,eAAiB,OAI3EhE,EAAiB,CACtB9wC,KAAAA,EACA0wC,YAAarD,GAAaA,EAAUnlC,MAAQmlC,EAAUnlC,MAAMkrC,cAAgB,KAC5EzC,aAActD,GAAaA,EAAUnlC,MAAQmlC,EAAUnlC,MAAM4sC,eAAiB,MAElF,GAAG,CAAC90C,EAAMqtC,EAAWuV,GAAkBX,IAEjC4C,IAAsBpkD,EAAAA,EAAAA,UAAQ,iBAAM,CACxC,CACEkpB,IAAK63B,GACLryC,KAAMnP,EAAKmB,UAAUC,aACpB,CACDuoB,IAAK83B,GACLtyC,KAAMnP,EAAKmB,UAAUC,WAExB,GAAE,CAACpB,IAEE8kD,IAAiBnkD,EAAAA,EAAAA,cAAY,SAACokD,EAAO32C,EAAM42C,GAC/C,IAAM98C,EAAQmlC,GAAaA,EAAUnlC,MAAQmlC,EAAUnlC,MAAQ,CAAC,EAC1D+8C,EAAc72C,GAAQ42C,EAC5B,GAAI98C,EAAO,CACT,IAAMg9C,EAAsBhmD,IAAAA,UAAYmuC,EAAU4I,iBAAiB,SAAAqI,GAAS,OAAIA,EAAUx9C,OAASmkD,EAAYt7B,GAAG,IAClH,GAAIu7B,GAAsB,EAAG,CAC3B,IAAMC,EAAiB7Q,GAAsBjH,EAAU4I,gBAAgBiP,IAEvEj+C,EAAiB,GAAI,CACnBiB,OAAKhD,EAAAA,EAAAA,GAAA,GACAigD,GAELlP,gBAAiB5I,EAAU4I,iBAE/B,CACF,MACEhvC,EAAiB,CAACjH,EAAKmB,UAAUC,yBAAgC,CAC/D8G,MAAO,CACL8qC,YAAaiS,EAAY78C,MACzB6qC,aAAcgS,EAAYliC,SAIlC,GAAG,CAACsqB,EAAWrtC,EAAMiH,IAEfm+C,IAAe3kD,EAAAA,EAAAA,UAAQ,WAC3B,GAAI4sC,GAAaA,EAAUnlC,OAASmlC,EAAUnlC,MAAM8qC,aAAe3F,EAAUnlC,MAAM+qC,aAAc,CAC/F,IAAqC,IAAjCgP,EAAuC,CACzC,IAAMoD,EAAW9D,GAAmBlU,EAAUnlC,OAE9C,GADeg8C,GAAgBv/C,MAAK,SAAAouC,GAAM,OAAIA,EAAOppB,MAAQ07B,CAAQ,IAEnE,OAAOA,EAGT,IAAMC,EAAYpB,GAAgBv/C,MAAK,SAAAouC,GAAM,OAAKA,EAAO7B,QAAQ,IAC7DoU,IACFA,EAAU37B,IACVm7B,GAAe,KAAM,KAAMQ,GAE/B,CAEA,OAAO/D,GAAmBlU,EAAUnlC,MACtC,CAEF,GAAG,CAACmlC,EAAW6W,GAAiBY,GAAgB7C,IAE1CsD,IAAc9kD,EAAAA,EAAAA,UAAQ,WAC1B,OAAI4sC,GAAaA,EAAU4I,iBAAmB5I,EAAU4I,gBAAgBgN,IAC/D7J,GAAAA,GAAUoM,uBACfnY,EAAU4I,gBAAgBgN,IAAuBniD,MACjD,EACAs4C,GAAAA,GAAUC,oBACV,GACA,GACA,GAGG,IACT,GAAG,CAAC4J,GAAuB5V,IAErBoY,IAAYhlD,EAAAA,EAAAA,UAAQ,WACxB,GAAI4sC,GAAaA,EAAU4I,iBAAmB5I,EAAU4I,gBAAgBgN,IAAwB,CAC9F,IAAMyC,EAAOrY,EAAU4I,gBAAgBgN,IACvC,MAAO,CACLv9B,KAAMggC,EAAK5kD,KACX6kD,IAAKD,EAAKvkB,IACVykB,MAAOF,EAAKt9C,MACZy9C,OAAQH,EAAK3iC,OAEjB,CACA,OAAO,IACT,GAAG,CAACkgC,GAAuB5V,IAErByY,IAAkBnlD,EAAAA,EAAAA,cAAY,SAAAxC,GAAuB,IAApBy2C,EAAYz2C,EAAZy2C,aACxBvH,EAAU4I,gBAAgBgN,IAElCrO,aAAeA,EAEpB3tC,EAAiB,GAAI,CACnBiB,OAAKhD,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACAmoC,EAAUnlC,OAAK,IAClB0qC,UAAWgC,EAAanB,YACxBd,WAAYiC,EAAaC,aACzBvB,MAAOsB,EAAavB,QACpBG,MAAOoB,EAAarB,UAEtB0C,gBAAiB5I,EAAU4I,gBAC3B4N,aAAcxW,EAAUwW,eAG1BxB,IAAwB,EAC1B,GAAG,CAACY,GAAuB5V,EAAWpmC,IAEhCkwC,IAAqBx2C,EAAAA,EAAAA,cAAY,SAACs1C,GACtC,GAAIA,GAAmBA,EAAgB,IAAMA,EAAgB,GAAG4N,aAC9D58C,EAAiB,IAAE/B,EAAAA,EAAAA,GAAA,GACd+wC,EAAgB,SAEhB,CACL,IAAM8P,EAAYhR,GAAuB,CAAEC,MAAOiB,EAAgB,KAClEhvC,EAAiB,IAAE/B,EAAAA,EAAAA,GAAA,GACd6gD,EAAU/pC,MAEjB,CACAg7B,GAAsB,EACxB,GAAG,CAACA,EAAuB/vC,IAErB++C,IAAiBvlD,EAAAA,EAAAA,UAAQ,WAC7B,IAAK42C,EACH,MAAO,GAET,IAIA1+B,IAJyB0+B,GAAuB,CAAC,GAAzCwM,cAEiC,CAAC,GAAlCE,cAE6C,CAAC,EAA9CzF,EAAS3lC,EAAT2lC,UAAS2H,EAAAttC,EAAE6hB,SAEnB,IAAK8jB,EAAW,CACd,IAAM4H,EDxP4B,SAAA1rB,GAAQ,OAAImjB,GAAOnjB,EAAS2jB,aAAan4C,MAAM,KAAK,GAAGo4C,OAAQ,CCwPnE+H,MAHL,IAAAF,EAAG,CAAC,EAACA,GAK9B,OAAO3J,GAAW4J,GAAuB91C,IAC3C,CACA,OAAOksC,GAAWgC,GAAWluC,IAC/B,GAAG,CAACinC,IAEE+O,IAAgC3lD,EAAAA,EAAAA,UAAQ,WAC5C,GAAI4sC,GAAaA,EAAUnlC,OAASmlC,EAAUnlC,MAAMyqC,YAActF,EAAUnlC,MAAM0qC,UAAW,CAC3F,IAAMC,EAAcxF,EAAUnlC,MAAM0qC,UAAYvF,EAAUnlC,MAAMyqC,WAEhE,OAAOxQ,KAAK9T,IADK,IACUwkB,EAAa,IAC1C,CACA,OAAO,CACT,GAAG,CAACxF,IAEEgZ,IAAe5lD,EAAAA,EAAAA,UAAQ,WAC3B,OAAK4sC,GAKH/tC,EAAAA,EAAAA,MAAA,OAAKL,UAAWqD,GAAQu+C,cAAcviD,SAAA,EACpCgB,EAAAA,EAAAA,MAAA,OAAKL,UAAWqD,GAAQw+C,eAAexiD,SAAA,EACrCD,EAAAA,EAAAA,KAAA,OAAAC,UACIujD,GAAkBxU,EAAUnlC,QAE9B7J,EAAAA,EAAAA,KAACoxC,EAAAA,EAAgB,CACftO,IAAKkM,EAAUnlC,MAAMi5B,IACrBiS,cAAe/F,EAAUnlC,MAAMkrC,cAC/BP,YAAaxF,EAAUnlC,MAAM0qC,UAAYvF,EAAUnlC,MAAMyqC,WACzDD,kBAAmB0T,GACnB3S,YAAapG,EAAUnlC,MAAM0qC,UAC7BS,QAAShG,EAAUnlC,MAAMorC,MACzBC,QAASlG,EAAUnlC,MAAMsrC,WAK7Bl0C,EAAAA,EAAAA,MAAA,OACEL,UAAWkW,IAAW,CAAC,cAAe7S,GAAQy+C,uBAAuBziD,SAAA,EAErED,EAAAA,EAAAA,KAACioD,EAAAA,GAAU,CACTn9C,UAAWnJ,EAAKmB,UAAUC,cAC1Bqe,QAASqkC,GACTyC,UAAW,CAAE3S,SAAU,QACvB30C,UAAU,mBACVR,OAAQ2iD,MAEV/iD,EAAAA,EAAAA,KAACioD,EAAAA,GAAU,CACTn9C,UAAWnJ,EAAKmB,UAAUC,gBAC1Bqe,QAASwkC,GACTsC,UAAW,CAAE3S,SAAU,UACvB30C,UAAU,qBACVR,OAAQ2iD,WAKZ/J,GACEh5C,EAAAA,EAAAA,KAACE,EAAAA,EAAI,CAAAD,SACF0B,EAAKmB,UAAU6kD,OAGlB1mD,EAAAA,EAAAA,MAAA,OAAAhB,SAAA,EACmC,IAAhC2jD,IAEG3iD,EAAAA,EAAAA,MAAA,OAAAhB,SAAA,EACED,EAAAA,EAAAA,KAAA,OAAAC,UACED,EAAAA,EAAAA,KAACgR,EAAAA,MAAK,CAAA/Q,UACJgB,EAAAA,EAAAA,MAACyB,EAAAA,MAAK,CAACC,YAAU,EAACwX,cAAc,SAAQla,SAAA,CACrC0B,EAAKmB,UAAUC,kBAChB/C,EAAAA,EAAAA,KAACmoD,EAAAA,gBAAe,CAACllD,MAAM,oDAI7BjD,EAAAA,EAAAA,KAACooD,EAAAA,EAAW,CACVnrB,QAASupB,GACTljD,SAAU,SAACqY,EAAG5L,GAAI,OAAKy0C,GAAoBz0C,EAAKub,IAAI,EACpD+8B,YAAa9D,GACb3jD,UAAWqD,GAAQ2+C,qBAErB5iD,EAAAA,EAAAA,KAAA,OAAAC,UACED,EAAAA,EAAAA,KAACgR,EAAAA,MAAK,CAAA/Q,UACJgB,EAAAA,EAAAA,MAACyB,EAAAA,MAAK,CAACC,YAAU,EAACwX,cAAc,SAAQla,SAAA,CACrC0B,EAAKmB,UAAUC,SAChB/C,EAAAA,EAAAA,KAACmoD,EAAAA,gBAAe,CAACllD,MAAM,sCAOnCjD,EAAAA,EAAAA,KAACsoD,EAAAA,SAAQ,CACPD,YAAatB,GACbzjD,SAAUmjD,GACVhlD,YAAaE,EAAKmB,UAAUC,kBAC5Bk6B,QAAS4oB,GACTzlD,OAAQyiD,WAhFX,IAsFX,GAAG,CAAC5+C,GAAQ2+C,kBAAmB3+C,GAAQy+C,qBAAsBz+C,GAAQw+C,eAAgBx+C,GAAQu+C,cAAeoB,EAA8BW,GAAkBiC,GAAqBxN,EAAqBhK,EAAW6W,GAAiBlkD,EAAM6hD,EAAgBiD,GAAgBhB,GAAQG,GAAe+B,GAAgBI,GAA+BhB,KAExUwB,IAAiBnmD,EAAAA,EAAAA,UAAQ,WAC7B,OAAIqhD,EACKA,EAA6B,CAClC9K,sBAAAA,KAKF34C,EAAAA,EAAAA,KAACu8B,EAAAA,GAAa,CACZ37B,UAAU,mBACVsnD,UAAW,CAAE3S,SAAU,OACvBzkC,KAAMnP,EAAKmB,UAAUC,aACrBqe,QAAS,WAAF,OAAQu3B,GAAsB,EAAK,GAGhD,GAAG,CAACh3C,EAAM8hD,EAA8B9K,IAExC,OACE13C,EAAAA,EAAAA,MAAA,OAAAhB,SAAA,EACED,EAAAA,EAAAA,KAAA,OAAAC,SACG+uC,IAAcA,EAAUnlC,OAAS25C,GAClCwE,GAAeO,MAGjBvoD,EAAAA,EAAAA,KAACg8C,GAAc,CACbG,eAAe,EACfh9B,IAAKA,EACLxQ,WAAYA,EACZhN,KAAMA,EACNq2C,WAAYA,EACZ/oB,YAAaA,EACbgpB,YAAaA,EACb7qC,cAAeA,EACf0rC,mBAAoBA,GACpBF,yBAA0BA,EAC1BC,4BAA6BA,EAC7BH,mBAAoBA,EACpBC,sBAAuBA,EACvB7e,aAAc,EACdse,QAASpJ,GAAaA,EAAUwZ,WAAaxZ,EAAUwZ,UAAUjlD,OAAS,EAAIyrC,EAAUwZ,UAAU,GAAK,KACvGxP,oBAAqBA,KAEvBh5C,EAAAA,EAAAA,KAACyoD,EAAAA,EAAgB,CACfnO,OAAQyJ,EACR2E,UAAW,WAAF,OAAQ1E,IAAwB,EAAM,EAC/C2E,QAASlB,GACThD,gBAAiBA,GACjBmE,kBAAmB9R,GAAAA,GACnBP,aAAcvH,GAAaA,EAAU4I,iBAAmB5I,EAAU4I,gBAAgBgN,IAAyB5V,EAAU4I,gBAAgBgN,IAAuBrO,aAAe,KAC3K2Q,YAAaA,GACbE,UAAWA,GACXyB,cAAY,EACZC,yBAA0B,SAAFnuC,GAGjB,IAFLouC,EAAepuC,EAAfouC,gBAAeC,EAAAruC,EACf47B,aAEA3D,QAFY,IAAAoW,EAAG,CAAC,EAACA,IAIK,CAAC,EADtB5T,EAAWxC,EAAXwC,YAAaJ,EAAOpC,EAAPoC,QAASE,EAAOtC,EAAPsC,QAEjBV,EAAcxF,EAAUnlC,MAAM0qC,UAAYvF,EAAUnlC,MAAMyqC,WAE1DD,EAAoBvQ,KAAK9T,IADd,IAC6BwkB,EAAa,KAEzD,OACEx0C,EAAAA,EAAAA,KAACipD,GAAAA,EAA6B,CAC5BC,aAAcvnD,EAAKmB,UAAU,cAC7BqmD,gBAAiB,CACfrmB,IAAKimB,EACLhU,cAAe/F,EAAUnlC,MAAMkrC,cAC/BP,YAAAA,EACAH,kBAAAA,EACAW,QAAAA,EACAE,QAAAA,EACAE,YAAAA,GAEFgU,QAASlY,GAGjB,EACA4K,kBAAmB,CACjBkB,aAAa,GAADtqC,OAAKkrB,EAAS7rB,KAAI,cAC9BkrC,cAAc,GAADvqC,OAAKkrB,EAAS7rB,KAAI,eAEjCs3C,sBAAuBj8C,EAAcswC,UACrC4L,WAAWC,EAAAA,EAAAA,IAAkBxH,SAAStrC,QACtC+yC,sBAAuB,CAACC,EAAAA,GAAaC,QACrCC,sCAAuCF,EAAAA,GAAaG,OAGpDzF,KACAnkD,EAAAA,EAAAA,KAACqiD,GAAsB,CACrBwH,mBAAoB5lD,GAAQ6lD,gBAC5BnoD,KAAMA,EACNooD,qBAAsBx3C,EAAMy3C,YAC5BhS,WAAYA,EACZiN,oBAAqBA,GACrBC,iBAAkBA,GAClBj2B,YAAaA,EACbgpB,YAAaA,EACb7qC,cAAeA,EACf6uC,gBAAiBA,EACjBzvC,IAAKwiC,GAAaA,EAAUwZ,WAAaxZ,EAAUwZ,UAAUjlD,OAAS,EAAIyrC,EAAUwZ,UAAU,GAAK,KACnGyB,gBAAc,EACdC,uBAAqB,EACrB5lB,kBAAmBA,GACnB6lB,4BAA6BtF,GAC7BvK,OAAQ6J,GACR5J,UAAW6J,GACXgG,WAASvjD,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACJmoC,EAAUnlC,OAAK,IAClBwgD,SAAUrb,EAAUwW,aAAaE,eAEnC4E,gBAAiBtR,EAAoBsR,gBACrC1sB,SAAUA,EACVze,IAAKA,EACLD,IAAKA,EACLqrC,WAAYvb,EAAUnlC,MAAM2gD,uBAKtC,EAgEAjH,GAAgBniD,aAAe,CAC7B43C,yBAAqBvjC,EACrBguC,kCAA8BhuC,GAGhC,IAAMg1C,IAAgCC,EAAAA,GAAAA,KAAkBh8B,EAAAA,EAAAA,KAAyBC,EAAAA,EAAAA,KAA6BR,EAAAA,EAAAA,YAAUxlB,EAAAA,EAAAA,sBAAqB46C,QAEhIoH,GAA2B,SAACp4C,GACvC,IACEy8B,EACEz8B,EADFy8B,UAAW+E,EACTxhC,EADSwhC,IAAKpyC,EACd4Q,EADc5Q,KAASmH,GAAIC,EAAAA,EAAAA,GAC3BwJ,EAAKvJ,IAEH4hD,GAAY5/B,EAAAA,EAAAA,IAAQg4B,IAAY96C,EAAAA,EAAAA,IAAW,oBAADwK,OAAqBqhC,KAE/D8W,EAAU,CACdhhD,MAAQmlC,GAAaA,EAAUnlC,OAAU,KACzC+tC,gBAAkB5I,GAAaA,EAAU4I,iBAAoB,MAG/D,OACE53C,EAAAA,EAAAA,KAACyqD,IAA6B5jD,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACxBiC,GAAI,IACRkmC,UAAWA,EACX+E,IAAKA,EACLpyC,KAAMA,EACN0U,gBAAiB,CACf8U,MAAO,QACPxN,KAAMktC,EACNpyB,aAAcoyB,GAEhBtgD,eAAgB,CAAEC,OAAQogD,KAGhC,EC/rBME,IAAoBp8B,EAAAA,EAAAA,KAAyBC,EAAAA,EAAAA,KAA6BR,EAAAA,EAAAA,YAAUxlB,EAAAA,EAAAA,sBAAqBoiD,EAAAA,OAElGC,GAAiB,SAAHlrD,GAiBpB,IAhBL6B,EAAI7B,EAAJ6B,KACAq2C,EAAUl4C,EAAVk4C,WACA94B,EAAGpf,EAAHof,IACAC,EAAGrf,EAAHqf,IACAxQ,EAAU7O,EAAV6O,WACAs8C,EAAQnrD,EAARmrD,SACAC,EAAaprD,EAAborD,cACAC,EAAiBrrD,EAAjBqrD,kBACAl8B,EAAWnvB,EAAXmvB,YACA+f,EAASlvC,EAATkvC,UACAoc,EAAQtrD,EAARsrD,SACAC,EAAevrD,EAAfurD,gBACApT,EAAWn4C,EAAXm4C,YACA5E,EAAmBvzC,EAAnBuzC,oBACAC,EAAsBxzC,EAAtBwzC,uBACAkQ,EAAc1jD,EAAd0jD,eAEMhQ,GAAiBtvC,EAAAA,EAAAA,kBAAiBkpC,GAElCqG,GAAgBvvC,EAAAA,EAAAA,kBAAiBmvC,GAEjCpvC,EAAUqvC,EAAyBG,EAAgBD,EAEnD8X,GAAalpD,EAAAA,EAAAA,UAAQ,kBAAMyhC,OAAO0nB,iBAAiBh7C,IAAI,uBAAuB,GAAE,IAChFi7C,GAAappD,EAAAA,EAAAA,UAAQ,kBAAMqpD,EAAAA,EAAAA,GAAUH,EAAY3pD,EAAK,GAAE,CAAC2pD,EAAY3pD,IACrE+pD,EAAe,CAAElD,UAAWxZ,GAAaA,EAAUwZ,WAEnDmD,EAA6B,CACjCC,yBAA0B5c,GAAaA,EAAU4c,0BAG7CC,EAAsBhrD,IAAAA,OAASouB,EAAY5qB,QAAS,+BAA+B,GACnFynD,EACJjrD,IAAAA,OAASouB,EAAY5qB,QAAS,gCAAgC,IAC9DxD,IAAAA,OAASouB,EAAY5qB,QAAS,8BAA8B,GAExD0nD,EACJlrD,IAAAA,OAASouB,EAAa,iDAAiD,GAEnE+8B,EAAgBnrD,IAAAA,OAASouB,EAAa,iBAAiB,GAEvDg9B,GAAqB3pD,EAAAA,EAAAA,cAAY,SAACsU,GACtCq0C,EAASr0C,EACX,GAAG,CAACq0C,IAEEiB,GAAmB9pD,EAAAA,EAAAA,UAAQ,kBAC/BpC,EAAAA,EAAAA,KAACmsD,EAAAA,GAAgB,CACf/rB,oBAAqB4O,GAAaA,EAAU3O,oBAC5CC,eAAgB0O,GAAaA,EAAUzO,eACvCC,oBAAqBwO,GAAaA,EAAUvO,oBAC5C2rB,uBAAwBpd,GAAaA,EAAUqd,uBAC/CC,yBAA0BX,EAA2BC,yBACrDW,WAAS,EACTC,SAAS,GACT,GACD,CAACb,EAA2BC,yBAA0B5c,IAEzD,OACEhvC,EAAAA,EAAAA,KAAA,OAAKY,UAAWkW,IAAW,CAAC7S,EAAQopC,mBAAoBge,EAAkBpnD,EAAQ+pC,cAAgB,GAAI,0BAA0B/tC,UAC9HD,EAAAA,EAAAA,KAACysD,EAAAA,gBAAe,CACdp2C,gBAAiB,CACf+U,OAAQshC,EAAAA,aACRC,WAAYV,GACZhsD,UAGFgB,EAAAA,EAAAA,MAACyB,EAAAA,MAAK,CAACE,OAAQ,CAAEC,YAAa,IAAK5C,SAAA,EAC9BkrD,IACDnrD,EAAAA,EAAAA,KAAA,OAAKY,UAAWqD,EAAQgqC,qBAAqBhuC,UAC3CD,EAAAA,EAAAA,KAACioD,EAAAA,GAAU,CAACC,UAAW,CAAE3S,SAAU,UAAY9rC,MAAM,YAAY7I,UAAU,kBAAkBwgB,QAAS8pC,OAG1GlrD,EAAAA,EAAAA,KAAC8qD,GAAiB,CAChBjB,mBAAoB/yC,IAAW7S,EAAQssC,gCAAiC,uBACxE5uC,KAAMA,EACN0U,gBAAiB,CACfsH,KAAM+tC,EACNjzB,aAAcizB,GAEhBkB,kBAAgB,KAElB3rD,EAAAA,EAAAA,MAAA,OAAAhB,SAAA,EACED,EAAAA,EAAAA,KAAA,OAAKY,UAAWqD,EAAQusC,kBAAkBvwC,UACxCD,EAAAA,EAAAA,KAACgR,EAAAA,MAAK,CAAA/Q,UACJgB,EAAAA,EAAAA,MAACyB,EAAAA,MAAK,CAACC,YAAU,EAACwX,cAAc,SAAQla,SAAA,CACrC0B,EAAKmB,UAAUC,UAChB/C,EAAAA,EAAAA,KAACmoD,EAAAA,gBAAe,CAACllD,MAAM,iCAI7BjD,EAAAA,EAAAA,KAAC2qD,GAAwB,CACvBhpD,KAAM6pD,EACNxT,WAAYA,EACZ/oB,YAAaA,EACbgpB,YAAaA,EACb/4B,IAAKA,EACLC,IAAKA,EACLxQ,WAAYA,EACZk+C,kBAAgB,EAChBC,gBAAc,EACd9d,UAAWA,EAEX+E,IAAKqX,EACL2B,iCAA+B,EAC/BC,wBAAsB,EACtBC,2BAA2B,OAC3BzJ,eAAgBA,GAAe,GAAA9wC,OALvB04C,EAAQ,0BAQhBU,GAA6CC,IAC9CF,IACH7rD,EAAAA,EAAAA,KAACktD,EAAAA,GAA4C,CAC3CvrD,KAAMA,EACNwrD,QAASne,EACT34B,gBAAiB,CACXsH,KAAMguC,EACNlzB,aAAckzB,GAEpByB,OAAO,UACPpB,cAAeA,KAGdF,GAA6CC,KAC9C/rD,EAAAA,EAAAA,KAAA,OAAAC,SACGisD,QAGC,GAAAx5C,OA/DA04C,EAAQ,sBAmExB,EA2BAJ,GAAe5pD,aAAe,CAC5B62C,YAAa,KACb5E,oBAAqBxyC,IAAAA,KACrByyC,wBAAwB,GC1KnB,IAAM+Z,GAAsB,SAAC96C,GAClC,IACE4M,EAiBE5M,EAjBF4M,IACAD,EAgBE3M,EAhBF2M,IACAvd,EAeE4Q,EAfF5Q,KACAq2C,EAcEzlC,EAdFylC,WACAsV,EAaE/6C,EAbF+6C,gBACAC,EAYEh7C,EAZFg7C,kBAAiBC,EAYfj7C,EAXF2gC,IAAAA,OAAG,IAAAsa,EAAG,GAAEA,EACRvV,EAUE1lC,EAVF0lC,YACA7E,EASE7gC,EATF6gC,kBACAnkB,EAQE1c,EARF0c,YACAokB,EAOE9gC,EAPF8gC,oBACAC,EAME/gC,EANF+gC,uBACAma,EAKEl7C,EALFk7C,YACAC,EAIEn7C,EAJFm7C,mBACA/+C,EAGE4D,EAHF5D,WACA60C,EAEEjxC,EAFFixC,eACAmK,EACEp7C,EADFo7C,gBAGIl5C,GAAW7S,EAAAA,EAAAA,YAAW8S,EAAAA,iBAEtB8+B,GAAiBtvC,EAAAA,EAAAA,kBAAiBkpC,GAElCqG,GAAgBvvC,EAAAA,EAAAA,kBAAiBmvC,GAEjCpvC,EAAUqvC,EAAyBG,EAAgBD,EAEzD1xC,GAAoCC,EAAAA,EAAAA,UAASmxC,GAAO,IAAGlxC,GAAAC,EAAAA,EAAAA,GAAAH,EAAA,GAAhD8rD,EAAU5rD,EAAA,GAAE6rD,EAAa7rD,EAAA,GAEhC8rD,GAYIC,EAAAA,EAAAA,IAAe7a,EAAKya,GAXtB7X,EAAYgY,EAAZhY,aACAD,EAAYiY,EAAZjY,aACAE,EAAQ+X,EAAR/X,SACAjC,EAAoBga,EAApBha,qBACAka,EAAWF,EAAXE,YACAta,EAAgBoa,EAAhBpa,iBACAua,EAAKH,EAALG,MACAC,EAASJ,EAATI,UACAC,EAAUL,EAAVK,WACAvY,EAAUkY,EAAVlY,WACAwY,EAAQN,EAARM,SAGIC,GAAU/rD,EAAAA,EAAAA,cAAY,WAC1B4rD,IACIz5C,GACFA,EAASyL,OAAO,wCAADxN,OAAyCs7C,EAAYM,mBAExE,GAAG,CAAC75C,EAAUu5C,EAAYM,kBAAmBJ,IA2BvCK,EAAa,WACjB,IAAIC,GAAQ,EAQZ,OANA3tD,IAAAA,KAAO+sD,GAAY,SAAChO,GACbA,EAAGrpB,UACNi4B,GAAQ,EAEZ,IAEOA,CACT,EAEMC,GAAa,WACjB,IAAIC,GAAQ,EAQZ,OANA7tD,IAAAA,KAAO+sD,GAAY,SAAChO,GACdA,EAAG7kC,UACL2zC,GAAQ,EAEZ,IAEOA,CACT,EA4CA,OA1CA75C,EAAAA,EAAAA,YAAU,WACR,IAAM+B,EAAS,CACb+G,MAAIkF,EAAAA,EAAAA,GAAM+qC,GAAar3B,QAASg4B,IAAcxzC,QAAS0zC,KAAc/a,iBAAAA,GAEvE4Z,EAAgB12C,GACZnC,GACFA,EAASyL,OAAO,oCAADxN,OAAqC5F,KAAKC,UAAU6J,IAIvE,GAAG,CAAC88B,EAAkBka,KAEtB/4C,EAAAA,EAAAA,YAAU,WACJ44C,GACFI,EAAc,GAElB,GAAG,CAACJ,KAEJ54C,EAAAA,EAAAA,YAAU,YACR85C,EAAAA,EAAAA,eAAc,kBAAmB,OACnC,GAAG,KAEH95C,EAAAA,EAAAA,YAAU,WACR,IAAKhU,IAAAA,QAAUqyC,EAAK0a,KAAgBF,EAAoB,CAEtD,IAAIkB,GAAe,EAEnB/tD,IAAAA,KAAOqyC,GAAK,SAAC0M,GACX,IAAM5Q,EAAYnuC,IAAAA,OAAS+sD,GAAY,SAAAiB,GAAG,OAAIA,EAAIC,MAAQlP,EAAGkP,GAAG,IAE5D9f,GAAaA,EAAU,IAAMnuC,IAAAA,YAAcmuC,EAAU,GAAGnhC,KAAO+xC,EAAG/xC,KACpE+gD,GAAe,EAEnB,IAEIA,GACFf,EAAc3a,EAElB,CAEF,GAAG,CAACA,KAGFjyC,EAAAA,EAAAA,MAAA,OAAKL,UAAWqD,EAAQ8qD,wBAAwB9uD,SAAA,CAE5CY,IAAAA,IAAMotD,GAAO,SAACe,GA+BZ,OA9BenuD,IAAAA,IAAMA,IAAAA,MAAQmuD,EAAKV,oBAAoB,SAACva,GACrD,IAAM/E,EAAa4e,EAAW9Z,EAAqBC,EAAKib,EAAKC,cAAgBrB,EAAW9Z,EAAqBC,EAAKib,EAAKC,aAAatxC,KAE9HmxC,EAAOlB,EAAW9Z,EAAqBC,EAAKib,EAAKC,cAAgBrB,EAAW9Z,EAAqBC,EAAKib,EAAKC,aAAaH,KAAQjuD,IAAAA,SAAW,cAE3IquD,EAAgBF,EAAK3/C,KAAO2+C,EAAY3+C,GAE9C,OACErP,EAAAA,EAAAA,KAAA,OAAKkB,MAAO,CAAEC,QAAS+tD,EAAgB,QAAU,QAAUtuD,UAAS,mBAAA8R,OAAqBqhC,GAAM9zC,UAC7FD,EAAAA,EAAAA,KAACgrD,GAAc,CAEbrpD,KAAMA,EACNq2C,WAAYA,EACZ94B,IAAKA,EACLC,IAAKA,EACLxQ,WAAYA,EACZsgB,YAAaA,EACb+f,UAAWA,EACXic,SAAU,SAAAr0C,GAAM,OAjHL,SAACA,EAAQm9B,EAAK+a,GACvC,IAAIK,EAAYvB,EAAW7Z,IAAQ,CAAElqC,MAAO,KAAM2+C,UAAW,GAAIsG,IAAK,MAKpEK,EAHGA,EAAUL,KAGJjoD,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAQ+P,GAAM,IAAEk4C,IAAKK,EAAUL,IAAKjhD,GAAIshD,EAAUthD,MAFlDhH,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAQ+P,GAAM,IAAEk4C,IAAAA,EAAKjhD,GAAIshD,EAAUthD,KAK9C,IAAMuhD,EAAcxB,EAAW1Z,MAAM,EAAGH,GAClCsb,EAAazB,EAAW1Z,MAAMH,EAAM,EAAG6Z,EAAWrqD,QACxDsqD,EAAc,GAADn7C,QAAAmQ,EAAAA,EAAAA,GAAKusC,GAAW,EAAAvoD,EAAAA,EAAAA,GAAA,GAAOsoD,KAAStsC,EAAAA,EAAAA,GAAOwsC,IACtD,CAqGoCC,CAAmB14C,EAAQk9B,EAAqBC,EAAKib,EAAKC,YAAaH,EAAI,EAC/F5D,cAAe,WAAF,OApGP,SAACnX,GACjBt/B,GACFA,EAASyL,OAAO,4BAADxN,OAA6BqhC,IAE9C6Z,EAAW2B,OAAOxb,EAAK,GAEvB8Z,GAAahrC,EAAAA,EAAAA,GAAK+qC,IAElBO,GACF,CA2FqCjD,CAAcpX,EAAqBC,EAAKib,EAAKC,YAAkB,EACpF9D,kBAA8C,IAA3B6D,EAAKV,kBACxBlD,SAAU0D,EACVzD,gBAAiBkC,IAAsBxZ,EACvCkE,YAAaA,EACbuL,eAAgBA,GAAe,GAAA9wC,OAdvBo8C,EAAG,iBAkBnB,GAGF,IAGCd,EAAYM,kBAAoBF,IAAahb,IAAsBvyC,IAAAA,QAAU+sD,KAC9E5tD,EAAAA,EAAAA,KAAA,OAAKkB,MAAO,CAAE+K,UAAW,IAAKhM,UAC5BgB,EAAAA,EAAAA,MAAC6D,EAAAA,GAAI,CAAClE,UAAU,aAAawgB,QAASitC,EAAQpuD,SAAA,EAC5CD,EAAAA,EAAAA,KAACs1C,EAAAA,SAAQ,CAACC,SAAS,QAAQ,OAAO5zC,EAAKmB,UAAUC,2BAIvD/C,EAAAA,EAAAA,KAAC21C,EAAU,CACTC,WAAYA,EACZxC,kBAAmBA,EACnBnvC,QAASA,EACT4xC,aAAcA,EACdC,aAAcA,EACdC,SAAUA,EACVrC,iBAAkBA,MAI1B,EA0BA2Z,GAAoBjsD,aAAe,CACjC62C,YAAa,KACb7E,mBAAmB,EACnBC,oBAAqBxyC,IAAAA,KACrByyC,wBAAwB,EACxBma,aAAa,EACbF,kBAAmB,EACnBG,oBAAoB,EACpBlK,gBAAgB,EAChBmK,gBAAiB,G,yGC/ObnqD,GAAY,WAAH,MAAU,CACvBgsD,UAAW,CACThuC,SAAU,YAEb,EAEYiuC,GAAsB,SAAH3vD,GAAgC,IAA1B4vD,EAAM5vD,EAAN4vD,OAAQ/C,EAAU7sD,EAAV6sD,WACtChrD,GAAOC,EAAAA,EAAAA,YAAWC,EAAAA,aAElBoC,GAAUC,EAAAA,EAAAA,kBAAiBV,IAE3ByrB,GAAcrtB,EAAAA,EAAAA,YAAWwC,GAAAA,oBAE/B,OACEpE,EAAAA,EAAAA,KAACysD,EAAAA,gBAAe,CACdp2C,gBAAiB,CACb+U,OAAQpF,EAAAA,WACR2mC,WAAAA,EACAhvC,KAAM+xC,EACN/tD,KAAAA,EACAguD,iBAAiB,GAErB/C,kBAAgB,EAAA3sD,UAEhBD,EAAAA,EAAAA,KAAC4vD,GAAAA,GAA2B,CAC1B5uD,MAAO0uD,EAAOG,aACdC,UAAWJ,EAAOK,kBAClBC,QAASN,EAAOO,iBAChBtuD,KAAMA,EACNuuD,oBAAkB,EAClBtvD,UAAWqD,EAAQurD,UACnBvgC,YAAaA,KAIrB,E,iECvBMkhC,GAAuB,SAACC,GAC5B,GAAIjhD,MAAMyE,QAAQw8C,GAChB,OAAOA,EAAI1vD,IAAIyvD,IACV,GAAY,OAARC,GAA+B,kBAARA,EAAkB,CAClD,IAAMC,EAAe,CAAC,EAUtB,OATApyB,OAAOqyB,KAAKF,GAAKtzC,SAAQ,SAACwO,GACZ,OAARA,EACF+kC,EAAaxiD,GAAKuoC,SAASga,EAAI9kC,GAAM,IACpB,YAARA,EACT+kC,EAAaE,QAAU,OACN,SAARjlC,IACT+kC,EAAa/kC,GAAO6kC,GAAqBC,EAAI9kC,IAEjD,IACO+kC,CACT,CACA,OAAOD,CACT,EAEaI,GAAuB,WAClC,IAAAj5C,GAAqC3V,EAAAA,EAAAA,YAAW6uD,GAAAA,IAAvCC,GAA6DzuD,EAAAA,EAAAA,GAAAsV,EAAA,GAArC,GACzBo5C,GAAuBC,EAAAA,GAAAA,MAAvBD,mBACR7uD,GAAkDC,EAAAA,EAAAA,WAAS,GAAMC,GAAAC,EAAAA,EAAAA,GAAAH,EAAA,GAA1D+uD,EAAiB7uD,EAAA,GAAE8uD,EAAoB9uD,EAAA,GAC9CiiD,GAAgCliD,EAAAA,EAAAA,UAAS,MAAKmiD,GAAAjiD,EAAAA,EAAAA,GAAAgiD,EAAA,GAAvC8M,EAAQ7M,EAAA,GAAE8M,EAAW9M,EAAA,GAC5BG,GAA8CtiD,EAAAA,EAAAA,WAAS,GAAKuiD,GAAAriD,EAAAA,EAAAA,GAAAoiD,EAAA,GAArD4M,EAAe3M,EAAA,GAAE4M,EAAkB5M,EAAA,GAGlCnlC,IAFUvd,EAAAA,EAAAA,YAAWk7B,GAAAA,eAAiB,CAAC,GAAvC5e,MAEce,OAAdE,IACF8P,GAAcrtB,EAAAA,EAAAA,YAAWwC,GAAAA,oBACzBgJ,GAAgBxL,EAAAA,EAAAA,YAAWkd,GAAAA,IAC3BqyC,EAAoBliC,GAAeA,EAAY5qB,SAAW4qB,EAAY5qB,QAAQ+sD,WAE9EnjD,GAAa62C,EAAAA,GAAAA,+BAGjBuM,EAIEpjD,EAJFojD,oCACAC,EAGErjD,EAHFqjD,kCACAC,EAEEtjD,EAFFsjD,mCACAt7C,EACEhI,EADFgI,SAGMu7C,GAA2BC,EAAAA,GAAAA,MAA3BD,uBAEFE,GAAgBpvD,EAAAA,EAAAA,cAAWqvD,EAAAA,GAAAA,IAAAC,EAAAA,GAAAA,KAAAC,MAAC,SAAAC,IAAA,IAAAC,EAAAnlD,EAAAolD,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAA,OAAAT,EAAAA,GAAAA,KAAAU,MAAA,SAAAC,GAAA,cAAAA,EAAAC,KAAAD,EAAAE,MAAA,WAC5BtB,EAAkB,CAADoB,EAAAE,KAAA,SAMQ,OALrBV,GAAkBW,EAAAA,GAAAA,2BAA0B,CAChDC,QAAS,kBACT1jC,YAAAA,EACA7hB,cAAAA,IAEF0jD,GAAqB,GAAMyB,EAAAE,KAAA,EACJjB,EAAuB,CAAEoB,MAAOzzC,IAAO,KAAD,EAA/C,OAARvS,EAAQ2lD,EAAAM,KAAAN,EAAAE,KAAA,EACaV,EAAgB,KAAD,EAAxBQ,EAAAM,MAgBhB3B,GAAmB,GACnBJ,GAAqB,MAfgB,OAARlkD,QAAQ,IAARA,GAAmB,QAAXolD,EAARplD,EAAUkmD,iBAAS,IAAAd,OAAX,EAARA,EAAsB,KAAM/zB,OAAOqyB,KAAK1jD,EAASkmD,UAAU,IAAIvvD,OAAS,IAA8C,KAAb,QAA3B0uD,EAAArlD,EAASkmD,UAAU,GAAGC,aAAK,IAAAd,OAAA,EAA3BA,EAA6B1uD,SAC7F,KAAb,QAA5B2uD,EAAAtlD,EAASkmD,UAAU,GAAGE,cAAM,IAAAd,OAAA,EAA5BA,EAA8B3uD,SACmB,KAAb,QAApC4uD,EAAAvlD,EAASkmD,UAAU,GAAGG,sBAAc,IAAAd,OAAA,EAApCA,EAAsC5uD,SACK,KAAb,QAA9B6uD,EAAAxlD,EAASkmD,UAAU,GAAGI,gBAAQ,IAAAd,OAAA,EAA9BA,EAAgC7uD,SACc,KAAb,QAAjC8uD,EAAAzlD,EAASkmD,UAAU,GAAGK,mBAAW,IAAAd,OAAA,EAAjCA,EAAmC9uD,UAEnC2tD,GAAmB,IACnBvC,EAAAA,EAAAA,eAAc,CAAEyE,uBAAwB,SACxCpC,EAAYb,GAAqBvjD,EAASkmD,UAAU,MAEpD5B,GAAmB,GAErBJ,GAAqB,IAItB,yBAAAyB,EAAAc,OAAA,GAAAvB,EAAA,KAEF,CAACX,EAAmBK,EAAwBryC,EAAK/R,EAAe6hB,EAAa+hC,EAAaE,IAEvFrkD,GAAQvK,EAAAA,EAAAA,cAAWqvD,EAAAA,GAAAA,IAAAC,EAAAA,GAAAA,KAAAC,MAAC,SAAAyB,IAAA,IAAAliD,EAAA44C,EAAAuJ,EAAAn3C,UAAA,OAAAw1C,EAAAA,GAAAA,KAAAU,MAAA,SAAAkB,GAAA,cAAAA,EAAAhB,KAAAgB,EAAAf,MAAA,OAA8B,GAAvBrhD,EAAKmiD,EAAAhwD,OAAA,QAAAkS,IAAA89C,EAAA,GAAAA,EAAA,GAAG,GAAIvJ,EAAWuJ,EAAAhwD,OAAA,EAAAgwD,EAAA,QAAA99C,EACjDQ,EAAS,CAADu9C,EAAAf,KAAA,eAAAe,EAAAC,OAAA,iBAIb/C,EAAyB,CACvBnlC,WAAW,IAGRslC,GACHQ,EAAoCjgD,EAAQ44C,GAAe+G,EAAYA,EAAW,KAAMI,EAAoB,MAAQ,OAAOhgD,MAAK,SAACvE,GAC/H,IAAQ8mD,EAAqB9mD,EAArB8mD,YAAaC,EAAQ/mD,EAAR+mD,IAErBC,EAGIhT,GAAmB+S,GAFrB9S,EAAU+S,EAAV/S,WACAO,EAAewS,EAAfxS,gBAGFsP,EAAyB,CACvBgD,YAAAA,EACAC,IAAAA,EACApoC,WAAW,EACXtV,SAAAA,EACA4qC,WAAAA,EACAO,gBAAAA,EACAxF,aAAc,OAGhB+U,EAAmB16C,EA7GuB,CAChD49C,kBAAmB,CACjBH,YA2G2DC,EA3GlCjzD,KAAI,SAAAZ,GAAmB,MAC7C,CAAEg0D,iBAD2Ch0D,EAAhB4gD,iBACS,MA2GvC,IAAG/gC,OAAM,SAAChE,GACU,sBAAdA,EAAErG,SACJo7C,EAAyB,CACvBnlC,WAAW,EACXtV,SAAAA,EACAmrC,gBAAiB,GACjBuS,IAAK,GACL9S,WAAY,GACZjF,aAAcn7C,GAAOq9C,oBAIzB4S,EAAyB,CACvBnlC,WAAW,EACXtV,SAAAA,EACAmrC,gBAAiB,GACjBuS,IAAK,GACL9S,WAAY,GACZjF,aAAejgC,GAAKA,EAAElb,QAAUkb,EAAElb,OAAO,IAAMA,GAAOkb,EAAElb,OAAO,GAAG+B,SAAY/B,GAAOu9C,SAEzF,IACD,wBAAAwV,EAAAH,OAAA,GAAAC,EAAA,KACA,CAACjC,EAAqCp7C,EAAU06C,EAAoBI,EAAUF,EAAmBH,EAA0BS,IAa9H,MAAO,CACLtkD,MAAAA,EACAknD,6BAbkCzxD,EAAAA,EAAAA,cAAY,SAAA0xD,GAAU,OAAI1C,EAAkC0C,GAC7F7iD,MAAK,SAAAvE,GAAQ,OAAIA,CAAQ,IACzB+S,OAAM,SAAAs0C,GAAG,MAAK,CAAEA,IAAAA,EAAK,GAAE,GAAE,CAAC3C,IAY3B4C,UATe5xD,EAAAA,EAAAA,cAAY,SAAA4wC,GAAG,OAAIqe,EAAmCre,GAAK/hC,MAAK,SAACgjD,GAChF,IAAQR,EAAQQ,EAARR,IAER,OAAOA,GAAOA,EAAI,EACpB,GAAE,GAAE,CAACpC,IAMH6C,mBAAoBn+C,EACpBg7C,gBAAAA,EACAS,cAAAA,EAEJ,EC/IM2C,IAAoBC,EAAAA,GAAAA,GAAW,CACnCC,OAAQ,CACNpzD,QAAS,OACT,YAAa,UAEfqzD,QAAS,CACPl0D,MAAO,UACPg0B,SAAU,UAIRw2B,IAAoBp8B,EAAAA,EAAAA,KAAyBC,EAAAA,EAAAA,KAA6BR,EAAAA,EAAAA,YAAUxlB,EAAAA,EAAAA,sBAAqBoiD,GAAAA,MAElG0J,GAA4B,SAAH30D,GAkB/B,IAjBL6B,EAAI7B,EAAJ6B,KACAq2C,EAAUl4C,EAAVk4C,WACA94B,EAAGpf,EAAHof,IACAC,EAAGrf,EAAHqf,IACAxQ,EAAU7O,EAAV6O,WACAs8C,EAAQnrD,EAARmrD,SACAC,EAAaprD,EAAborD,cACAC,EAAiBrrD,EAAjBqrD,kBACAl8B,EAAWnvB,EAAXmvB,YACA+f,EAASlvC,EAATkvC,UACAgb,EAAWlqD,EAAXkqD,YACAoB,EAAQtrD,EAARsrD,SACAC,EAAevrD,EAAfurD,gBACApT,EAAWn4C,EAAXm4C,YACA5E,EAAmBvzC,EAAnBuzC,oBACAC,EAAsBxzC,EAAtBwzC,uBACAkQ,EAAc1jD,EAAd0jD,eAEMhQ,GAAiBtvC,EAAAA,EAAAA,kBAAiBkpC,GAElCqG,GAAgBvvC,EAAAA,EAAAA,kBAAiBmvC,GAEjCpvC,EAAUqvC,EAAyBG,EAAgBD,EAEzDkhB,EAAkDlE,KAA1C0D,EAAQQ,EAARR,SAAUH,EAA2BW,EAA3BX,4BAEZY,EAAiBN,KAEjB/I,GAAalpD,EAAAA,EAAAA,UAAQ,kBAAMyhC,OAAO0nB,iBAAiBh7C,IAAI,uBAAuB,GAAE,IAChFi7C,GAAappD,EAAAA,EAAAA,UAAQ,kBAAMqpD,EAAAA,EAAAA,GAAUH,EAAY3pD,EAAK,GAAE,CAAC2pD,EAAY3pD,IACrE+pD,EAAe,CAAElD,UAAWxZ,GAAaA,EAAUwZ,WAEnDmD,EAA6B,CACjCC,yBAA0B5c,GAAaA,EAAU4c,0BAG7CC,EAAsBhrD,IAAAA,OAASouB,EAAY5qB,QAAS,+BAA+B,GACnFynD,EACNjrD,IAAAA,OAASouB,EAAY5qB,QAAS,gCAAgC,IAC9DxD,IAAAA,OAASouB,EAAY5qB,QAAS,8BAA8B,GAEtD0nD,EACNlrD,IAAAA,OAASouB,EAAa,iDAAiD,GAGjE+8B,EAAgBnrD,IAAAA,OAASouB,EAAa,iBAAiB,GAEvDg9B,GAAqB3pD,EAAAA,EAAAA,cAAY,SAACsU,GACtCq0C,EAASr0C,EACX,GAAG,CAACq0C,IAEEiB,GAAmB9pD,EAAAA,EAAAA,UAAQ,kBAC/BpC,EAAAA,EAAAA,KAACmsD,EAAAA,GAAgB,CACf/rB,oBAAqB4O,GAAaA,EAAU3O,oBAC5CC,eAAgB0O,GAAaA,EAAUzO,eACvCC,oBAAqBwO,GAAaA,EAAUvO,oBAC5C6rB,yBAA0BX,EAA2BC,yBACrDQ,uBAAwBpd,GAAaA,EAAUqd,uBAC/CE,WAAS,EACTC,SAAS,EACTV,0CAA2CA,EAC3C8I,yCAAyC,GACzC,GACD,CAACjJ,EAA2BC,yBAA0B5c,EAAW8c,IAE9D+I,GAAcvyD,EAAAA,EAAAA,cAAY,SAACqb,EAAMm3C,GAChCj0D,IAAAA,QAAU8c,IACbm3C,EAAOn3C,EAEX,GAAG,IAIGq7B,GAAsB52C,EAAAA,EAAAA,UAAQ,iBAAO,CACzC2yD,YAAa,SAACrF,EAAQoF,GAAM,OAAK90D,EAAAA,EAAAA,KAACyvD,GAAmB,CAACC,OAAQA,EAAQ/C,WAAY,SAAC/1C,GAAai+C,EAAYj+C,EAAO+G,KAAMm3C,EAAS,GAAK,EACvIxK,gBAAiB,SAAF9pD,GAGR,IAFLw0D,EAAQx0D,EAARw0D,SACAtP,EAAYllD,EAAZklD,aAEAuF,EAAS,CACPttC,MAAI9W,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACCmoC,GAAS,IACZnlC,MAAOmrD,EACPxP,aAAc,CACZE,aAAAA,KAGJnvB,SAAS,EACTxb,SAAS,GAEb,EACA9E,SAAU+4B,GAAaA,EAAUwZ,WAAaxZ,EAAUwZ,UAAU,GAClEhD,aAAcxW,GAAaA,EAAUwW,aACrCyP,mBAAoB,SAAAC,GAAiB,OAAIhB,EAAS,CAChD/3B,UAAQt1B,EAAAA,EAAAA,GAAA,GACHquD,IAEL,EACFnB,4BAAAA,EACD,GAAG,CAAC/kB,EAAWklB,EAAUH,EAA6Bc,EAAa5J,IAE9DxH,GAA+BnhD,EAAAA,EAAAA,cAAY,SAAAwX,GAAA,IAAG6+B,EAAqB7+B,EAArB6+B,sBAAqB,OACvE34C,EAAAA,EAAAA,KAAA,OAAKY,UAAWkW,IAAW,CAAC7S,EAAQ8pC,kBAAmB,cAAc9tC,UACnED,EAAAA,EAAAA,KAACihB,GAAAA,EAAM,CAACC,WAAW,cAActgB,UAAW+zD,EAAeJ,OAAQnzC,QAAS,WAAF,OAAQu3B,GAAsB,EAAK,EAAC14C,UAC5GD,EAAAA,EAAAA,KAACm1D,GAAAA,IAAU,CAACv0D,UAAW+zD,EAAeH,aAEpC,GAEL,CAACvwD,EAAQ8pC,kBAAmB4mB,EAAeH,QAASG,EAAeJ,SAEtE,OACEv0D,EAAAA,EAAAA,KAAA,OAAKY,UAAWkW,IAAW,CAAC7S,EAAQopC,mBAAoBge,EAAkBpnD,EAAQ+pC,cAAgB,GAAI,0BAA0B/tC,UAC9HD,EAAAA,EAAAA,KAACysD,EAAAA,gBAAe,CACdp2C,gBAAiB,CACf+U,OAAQshC,EAAAA,aACRC,WAAYV,GACZhsD,UAGFgB,EAAAA,EAAAA,MAACyB,EAAAA,MAAK,CAACE,OAAQ,CAAEC,YAAa,IAAK5C,SAAA,EAC9BkrD,IACDnrD,EAAAA,EAAAA,KAAA,OAAKY,UAAWqD,EAAQgqC,qBAAqBhuC,UAC3CD,EAAAA,EAAAA,KAACioD,EAAAA,GAAU,CAACC,UAAW,CAAE3S,SAAU,UAAY9rC,MAAM,YAAY7I,UAAU,kBAAkBwgB,QAAS8pC,OAG1GlrD,EAAAA,EAAAA,KAAC8qD,GAAiB,CAChBjB,mBAAoB/yC,IAAW7S,EAAQssC,gCAAiC,uBACxE5uC,KAAMA,EACN0U,gBAAiB,CACfsH,KAAM+tC,EACNjzB,aAAcizB,GAEhBkB,kBAAgB,KAElB3rD,EAAAA,EAAAA,MAAA,OAAAhB,SAAA,EACED,EAAAA,EAAAA,KAAA,OAAKY,UAAWqD,EAAQusC,kBAAkBvwC,UACxCD,EAAAA,EAAAA,KAACgR,EAAAA,MAAK,CAAA/Q,UACJgB,EAAAA,EAAAA,MAACyB,EAAAA,MAAK,CAACC,YAAU,EAACwX,cAAc,SAAQla,SAAA,CACrC0B,EAAKmB,UAAUC,aAChB/C,EAAAA,EAAAA,KAACmoD,EAAAA,gBAAe,CAACllD,MAAM,yCAI7BjD,EAAAA,EAAAA,KAAC2qD,GAAwB,CACvBhpD,KAAM6pD,EACNxT,WAAYA,EACZ/oB,YAAaA,EACbgpB,YAAaA,EACb/4B,IAAKA,EACLC,IAAKA,EACLxQ,WAAYA,EACZk+C,kBAAgB,EAChBC,gBAAc,EACd9d,UAAWA,EACXgb,YAAaA,EAEbjW,IAAKqX,EACL2B,iCAA+B,EAC/BC,wBAAsB,EACtBC,2BAA2B,OAC3BzJ,eAAgBA,EAChBxK,oBAAsBhK,GAAaA,EAAUwW,aAAgBxM,EAAsB,KACnFyK,6BAA8BA,GAA6B,GAAA/wC,OAPnD04C,EAAQ,0BAUhBU,GAA6CC,IAAkDF,IACnG7rD,EAAAA,EAAAA,KAACktD,EAAAA,GAA4C,CAC3CvrD,KAAMA,EACNwrD,QAASne,EACT34B,gBAAiB,CACXsH,KAAMguC,EACNlzB,aAAckzB,GAEpByB,OAAO,UACPpB,cAAeA,KAGdF,GAA6CC,KAC9C/rD,EAAAA,EAAAA,KAAA,OAAAC,SACGisD,QAGC,GAAAx5C,OAjEA04C,EAAQ,sBAqExB,EA4BAqJ,GAA0BrzD,aAAe,CACvC62C,YAAa,KACb5E,oBAAqBxyC,IAAAA,KACrByyC,wBAAwB,G,kQC/Ob8hB,GAA0B,SAAHt1D,GAAwD,IAAlDw6C,EAAMx6C,EAANw6C,OAAQoO,EAAS5oD,EAAT4oD,UAAW2M,EAAuBv1D,EAAvBu1D,wBACrD1zD,GAAOC,EAAAA,EAAAA,YAAWC,EAAAA,aAClB4S,GAAW7S,EAAAA,EAAAA,YAAW8S,EAAAA,iBAE5B6C,GAAyC3V,EAAAA,EAAAA,YAAW6uD,GAAAA,IAAsB6E,GAAArzD,EAAAA,EAAAA,GAAAsV,EAAA,MAAAg+C,OAAA,IAAAD,EAAvC,CAAC,EAACA,EAA5B/pC,EAASgqC,EAAThqC,UAAWs1B,EAAU0U,EAAV1U,WACZ5qC,GAAa6uC,EAAAA,GAAAA,+BAAb7uC,SAEF+jB,GAAS53B,EAAAA,EAAAA,UAAQ,kBAAMi/C,GAA8BR,EAAW,GAAE,CAACA,IAEnE2U,GAAgBlzD,EAAAA,EAAAA,cAAY,WAC5BmS,GACFA,EAASyL,OAAO,+CAGlBwoC,GACF,GAAG,CAACj0C,EAAUi0C,IAER+M,GAA8BnzD,EAAAA,EAAAA,cAAY,SAAC+M,GAC3CoF,GACFA,EAASyL,OAAO,iDAADxN,OAAkDrD,IAGnE,IAAMqmD,EAAc/T,GAAsBd,EAAYxxC,GAEtDgmD,EAAwBK,GACxBhN,GACF,GAAG,CAACj0C,EAAUosC,EAAYwU,EAAyB3M,IAEnD,OACE1oD,EAAAA,EAAAA,KAAC21D,GAAAA,EAAK,CACJv1D,OAAQ,CACNiM,QAAS,CACPqY,OAAQ,qBAEVkxC,kBAAmB,CACjBlxC,OAAQ,QAEVmxC,KAAM,CACJC,UAAW,SAGfrzD,KAAMszD,GAAAA,EAAUC,OAChBC,YAAY,QACZC,qBAAsBv0D,EAAKmB,UAAU,SACrCqzD,WAAYx0D,EAAKmB,UAAUC,yBAC3Bu3C,OAAQA,EACRoO,UAAW8M,EAAcv1D,UAEzBD,EAAAA,EAAAA,KAACo2D,GAAAA,EAAc,CAACC,MAAOC,GAAAA,EAAep1D,MAAO,CAAEwjB,OAAQ,QAASzkB,UAC9DD,EAAAA,EAAAA,KAACu2D,GAAAA,uBAAsB,CACrBC,UAAWx8B,EACX/jB,SAAUA,EACVsV,UAAWA,EACXkrC,kBAAmB51D,IAAAA,KACnB61D,mBAAoBjB,OAK9B,EC1EMkB,GAAY,CAChB5sD,MAAO,IACP2a,OAAQ,GACRkpB,YAAa,GAOFgpB,GAA2B,SAAC7sD,GACvC,IAAKA,EACH,OAAO,EAGT,IAAM8sD,EAAYF,GAAU5sD,MAAQ4sD,GAAU/oB,YAE9C,OAAO9J,KAAKgzB,MAAM/sD,EAAQ8sD,EAC5B,EAEaE,GAAoB,SAACC,GAAU,IAAuBC,GAAvB76C,UAAA7Y,OAAA,QAAAkS,IAAA2G,UAAA,GAAAA,UAAA,GAAqB,CAAC,GAAlB86C,QAAAA,OAAO,IAAAD,EAAG,CAAC,EAACA,EAASE,EAAc/6C,UAAA7Y,OAAA,QAAAkS,IAAA2G,UAAA,GAAAA,UAAA,GAAG,oBAAmB,MAAM,CAC7Gg7C,eAAgB,CACd51C,SAAU,WACVrgB,QAAS,cACT4I,MAAO,OACPmB,WAAY,OAEdmsD,uBAAwB,CACtBC,cAAe,OACf5nB,QAAS,IAEX7lC,OAAKhD,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACA8vD,IAAS,IACZnpB,UAAW,0EACX+pB,UAAW,QACX9pB,aAAc,IAEhBgV,eAAgB,SAAFjiD,GAAA,IAAKg3D,EAAwBh3D,EAAxBg3D,yBAAuC,MAAQ,CAChE9yC,OAAQ,GACR+yC,UAAW,SACXC,UAAW,SACXv2D,QAAS,OACTiS,WALwD5S,EAAbm3D,cAKfH,EAA2B,EACvDrkD,SAAU,EACX,EACDykD,qBAAsB,SAAF99C,GAAA,IAAK+9C,EAAqB/9C,EAArB+9C,sBAAuBC,EAAch+C,EAAdg+C,eAAc,MAAQ,CACpE/tD,OAAQ4sD,GAAU5sD,MAAQ4sD,GAAU/oB,aAAekqB,EACnDt2C,SAAU,WACV6sB,OAAS,EAAIsoB,GAAU5sD,MAAS4sD,GAAU/oB,aAAeiqB,EACzD12D,QAAS,OACTgK,UAAW,OACZ,EACD4sD,wBAAyB,CACvB52D,QAAS,SACT4I,MAAO,IACP,WAAY,CACVokC,OAAQ,WAEV,QAAS,CACPh0B,cAAe,QAGnB69C,wBAAyB,CACvB/rD,UAAW,GACXmH,WAAY,IAEd6kD,YAAa,CACX92D,QAAS,eACTmzB,SAAU,OACVphB,WAAY,OACZiH,cAAe,OAEjB+9C,MAAO,CAAC,EACRC,aAAc,CACZh3D,QAAS,OACT+J,WAAY,UAEdktD,WAAY,CACVjlD,SAAU,GAEZklD,UAAW,CACTzqB,YAAa,EACbN,cAAe,GACf,WAAY,CACVO,WAAYspB,EACZ9qD,QAAS,aAGbisD,gBAAiB,CACfn3D,QAAS,QAEXo3D,eAAgB,CACdp3D,QAAS,eACTqgB,SAAU,WACV+rB,WAAY,gLACZxjC,MAAO,GACP2a,OAAQiyC,GAAUjyC,OAClB8zC,MAAO,IAETC,cAAe,CACbt3D,QAAS,eACTqgB,SAAU,WACV+rB,WAAY,gLACZxjC,MAAO,GACP2a,OAAQiyC,GAAUjyC,OAClB2pB,KAAM,GACNE,UAAW,mBAEbmqB,UAAW,CACT/V,OAvGsB,IAyGxBgW,SAAU,CACRrkC,SAAU,OACV5P,OAAQ,OACR3a,MAAO,OACPzJ,MAAO42D,EAAQ0B,cAEjBC,OAAQ,CACN13D,QAAS,eACTqgB,SAAU,WACVg3C,MAAO,EACP7V,OAAQ,GACRmW,WAAY,SACZ9sD,SAAU,GACVmlC,SAAU,SACV4nB,aAAc,YAEhBC,eAAgB,CACd5lD,WAAY,OACZ,MAAO,CACLoO,SAAU,SACVlhB,MAAO42D,EAAQ+B,aACf3kC,SAAU,GACV,6BAA8B,CAC5Bh0B,MAAO42D,EAAQ0B,cAEjB,UAAW,CACT9qB,gBAAiB,iBAIvBorB,kBAAmB,CACjBxrB,MAAO,SAETyrB,SAAOtyD,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACFmwD,EAAWoC,gBAAgB,GAAIlC,IAAQ,IAC1C/1D,QAAS,eACT+R,WAAY,SAEdmmD,gBAAiB,CACf,WAAY,CACVjmD,WAAY,EACZnH,UAAW,IAEb,kBAAmB,CACjBoZ,OAAQ,OACR,kCAAmC,CACjCiP,SAAU,OACVhzB,WAAY,IACZ4R,WAAY,OACZ,QAAS,CACP,gBAAiB,CACfohB,SAAU,OACVphB,WAAY,OACZ/R,QAAS,SACTgZ,cAAe,WAGnBlO,UAAW,IAGf,kBAAmB,CACjBA,UAAW,EACX,MAAO,CACL3L,MAAO42D,EAAQ0B,gBAItB,EC3JKU,GAAiB,WACrB,IAAM33D,GAAOC,EAAAA,EAAAA,YAAWC,EAAAA,aAElBgjB,GAAkBziB,EAAAA,EAAAA,UAAQ,WAC9B,IAAMm3D,EAAiB,GAOvB,OALA14D,IAAAA,KAAOA,IAAAA,MATsB,IASa,WACxC04D,EAAe32C,KAAK,CAAEngB,KAAM+hB,GAAAA,EAAmBC,KAAMC,OAAQ,GAAI3a,MAAO,MACxEwvD,EAAe32C,KAAK,CAAEngB,KAAM+hB,GAAAA,EAAmBO,IAAKhb,MAAO,GAAI2a,OAAQ,IACzE,IAEO60C,CACT,GAAG,IAEH,OACEt4D,EAAAA,EAAAA,MAAA,OAAKC,MAAO,CAAEC,QAAS,OAAQ4I,MAAO,QAAS4jC,SAAU,QAAS1tC,SAAA,EAChED,EAAAA,EAAAA,KAACw5D,GAAAA,EAAO,CAACC,cAAc,QAAQ50D,KAAK,aAAa2W,MAAO7Z,EAAKmB,UAAUC,8CACvE/C,EAAAA,EAAAA,KAAC4kB,GAAAA,EAAO,CAAC1jB,MAAO,CAAE6I,MAAO,QAAU2vD,qBAAqB15D,EAAAA,EAAAA,KAAC25D,GAAAA,EAAoB,CAAC5vD,MAAM,OAAO8a,gBAAiBA,QAGlH,EAeM+0C,GAAY,SAAH95D,GAAiB,IAAXgjC,EAAGhjC,EAAHgjC,IACnBhhC,GAA0BC,EAAAA,EAAAA,UAAS,GAAEC,GAAAC,EAAAA,EAAAA,GAAAH,EAAA,GAA9BiI,EAAK/H,EAAA,GAAE63D,EAAQ73D,EAAA,GACtBiiD,GAA4BliD,EAAAA,EAAAA,UAAS,GAAEmiD,GAAAjiD,EAAAA,EAAAA,GAAAgiD,EAAA,GAAhCv/B,EAAMw/B,EAAA,GAAE4V,EAAS5V,EAAA,GAElB1P,EAAczqC,EAAQ2a,EAGtBq1C,EAAej2B,KAAK9T,IAFT,IAEwBwkB,EAAa,IAStD,OAPA3/B,EAAAA,EAAAA,YAAU,YAtBc,SAAAiuB,GAAG,OAAI,IAAIkC,SAAQ,SAACC,GAC5C,IAAM+0B,EAAM,IAAIC,MAChBD,EAAIl3B,IAAMA,EACVk3B,EAAIE,OAAS,WACX,IAAMnwD,EAAQiwD,EAAIG,aACZz1C,EAASs1C,EAAII,cAEnBn1B,EAAQ,CACNo1B,SAAUtwD,EAAOuwD,UAAW51C,GAEhC,CACF,GAAG,EAYC61C,CAAkBz3B,GAAK3xB,MAAK,SAAA3Q,GAA8B,IAA3B65D,EAAQ75D,EAAR65D,SAAUC,EAAS95D,EAAT85D,UACvCT,EAASQ,GACTP,EAAUQ,EACZ,GACF,GAAG,CAACx3B,IAEC/4B,GAAU2a,GAKb1kB,EAAAA,EAAAA,KAACoxC,EAAAA,EAAgB,CACftO,IAAKA,EACLiS,cAAehrC,EACfyqC,YAAaA,EACbH,kBAAmB0lB,EACnB3kB,YAAarrC,KATR/J,EAAAA,EAAAA,KAAA,SAYX,EAMaw6D,GAAoC,SAAH1gD,GAMvC,IAAD2gD,EAAA3gD,EALJggB,aAAAA,OAAY,IAAA2gC,EAAG,EAACA,EAChBpF,EAAuBv7C,EAAvBu7C,wBAAuBqF,EAAA5gD,EACvBkwC,YAAAA,OAAW,IAAA0Q,GAAQA,EACnBzJ,EAAen3C,EAAfm3C,gBACA0J,EAAc7gD,EAAd6gD,eAEAtW,GAAkDtiD,EAAAA,EAAAA,WAAS,GAAMuiD,GAAAriD,EAAAA,EAAAA,GAAAoiD,EAAA,GAA1DuW,EAAiBtW,EAAA,GAAEuW,EAAoBvW,EAAA,GAC9CwW,GAA8C/4D,EAAAA,EAAAA,UAAS,IAAGg5D,GAAA94D,EAAAA,EAAAA,GAAA64D,EAAA,GAAnD1Z,EAAe2Z,EAAA,GAAEC,EAAkBD,EAAA,GAC1CE,GAAgDl5D,EAAAA,EAAAA,WAAS,GAAMm5D,GAAAj5D,EAAAA,EAAAA,GAAAg5D,EAAA,GAAxDE,EAAgBD,EAAA,GAAEE,EAAmBF,EAAA,GACtCzmD,GAAW7S,EAAAA,EAAAA,YAAW8S,EAAAA,iBAE5B6C,GAAyD3V,EAAAA,EAAAA,YAAW6uD,GAAAA,IAAsB4K,GAAAp5D,EAAAA,EAAAA,GAAAsV,EAAA,GAAnF+jD,EAAqBD,EAAA,GAAIE,EAAqBF,EAAA,GAC7CG,GAAyB5K,EAAAA,GAAAA,MAAzB4K,qBACFvsC,GAAcrtB,EAAAA,EAAAA,YAAWwC,GAAAA,oBACzBgJ,GAAgBxL,EAAAA,EAAAA,YAAWkd,GAAAA,IAC3BqyC,EAAoBliC,GAAeA,EAAY5qB,SAAW4qB,EAAY5qB,QAAQ+sD,WAEpF92C,EAKIghD,GAAyB,CAAC,EAJXG,EAAgBnhD,EAAjC8mC,gBACA71B,EAASjR,EAATiR,UACAs1B,EAAUvmC,EAAVumC,WACAjF,EAAYthC,EAAZshC,aAGIj6C,GAAOC,EAAAA,EAAAA,YAAWC,EAAAA,aAElBoC,GAAUC,EAAAA,EAAAA,kBAAiB2sC,GAkBjCl2B,GAhB0BvY,EAAAA,EAAAA,UAAQ,iBAAO,CACvCs5D,cAAe,CACbC,SAAU,CACRC,QAAS/6D,IAAAA,QAAU46D,IAErBrhB,WAAY,CACVpgB,OAAQyhC,IAGZI,WAAY,CACVC,YAAaL,EACbM,SAAS,GAEZ,GAAG,CAACN,IAbGC,eAgB0C,CAAC,EAA3CthB,EAAUz/B,EAAVy/B,WAAYuhB,EAAQhhD,EAARghD,SACJK,GAAqB5hB,GAAc,CAAC,GAA5CpgB,OAEFiiC,GAAiB35D,EAAAA,EAAAA,cAAY,SAAC45D,GAClC,IAAMC,EAAe/a,EAAgBlN,MAAMgoB,EAAQA,EA1HtB,GA2HvBE,EAAgBv7D,IAAAA,MAAQs7D,EAAc,gBAC5CZ,EAAsB,CAAE5oC,KAAMypC,IAC9BZ,EAAqBY,EACvB,GAAG,CAAChb,EAAiBma,EAAuBC,IAEtCa,GAAgB/5D,EAAAA,EAAAA,cAAY,SAAC81C,EAASr7B,GAE1C,IAAMu/C,EAAgBzb,EAAWzI,GAGzBoI,EAAiBY,EAAgBrkC,GAAjCyjC,aAGFtN,EAAMryC,IAAAA,KAAOy7D,GAAe,SAAAhc,GAAK,OAAIz/C,IAAAA,KAAOy/C,GAAO,SAAAV,GAAE,OAAIA,EAAGpzC,MAAQg0C,CAAY,GAAC,IAEvF6U,EAAwBniB,EAC1B,GAAG,CAAC2N,EAAYO,EAAiBiU,IAE3BkH,GAAuBj6D,EAAAA,EAAAA,cAAY,WACvC,IAAM85D,EAAgBJ,EAAiBt7D,KAAI,SAAA87D,GAAe,OAAAA,EAAZ/b,YAA+B,IAE7Eoa,GAAqB,GACrBW,EAAqBY,EACvB,GAAG,CAACZ,EAAsBQ,IAEpBS,GAAgBn6D,EAAAA,EAAAA,cAAY,SAACwgC,EAAK45B,GAAW,OACjD18D,EAAAA,EAAAA,KAAA,OAAKY,UAAWkW,IAAW4lD,EAAY7yD,MAAO5F,EAAQ8sC,cAAc9wC,UAClED,EAAAA,EAAAA,KAAC45D,GAAS,CAAC92B,IAAKA,KACZ,GACL,CAAC7+B,EAAQ8sC,eAEN4rB,GAAmBr6D,EAAAA,EAAAA,cAAY,SAACtB,GAChCyT,GACFA,EAASyL,OAAO,sDAADxN,OAAuD1R,IAExE25D,EAAe35D,EACjB,GAAG,CAACyT,EAAUkmD,IAmBd,OAjBA9lD,EAAAA,EAAAA,YAAU,WACR,IAAM+nD,EAAkB/7D,IAAAA,QAAUm7D,IAAqBA,EAAiB9nB,MAAM,EAjKjD,IAkK7B8mB,EAAmB4B,GAAmB,GACxC,GAAG,CAACZ,KAEJnnD,EAAAA,EAAAA,YAAU,WACJs8C,GACFuB,EAAAA,GAAAA,2BAA0B,CACxBC,QAAS,kBACT1jC,YAAAA,EACA7hB,cAAAA,IACC+D,MAAK,SAAA0rD,GAAY,OAAIzB,GAAqByB,EAAa,IAE1DzB,GAAoB,EAExB,GAAG,CAACjK,EAAmBliC,EAAa7hB,KAGlCnM,EAAAA,EAAAA,MAAA,OAAKL,UAAWqD,EAAQ6sC,4BAA4B7wC,SAAA,CAChDsrB,GACAvrB,EAAAA,EAAAA,KAACs5D,GAAc,KACbt5D,EAAAA,EAAAA,KAAC88D,GAAAA,EAAuB,CACtBrzD,MAAO1G,wBACPg6D,UAAU,iCACVxxC,UAAWA,EACXyO,OAAQF,EAAe,EAAIsnB,EAAkB,GAC7Cz/C,KAAMA,EACNosB,QAAS4tC,GAAYA,EAASC,QAC9BS,cAAeA,EACfW,eAAgBT,EAChBU,8BAA4B,EAC5BC,qBAAmB,EACnBC,eAAgBhM,IAAsBF,GAAmBkK,EACzDnR,YAAaA,EACb2Q,eAAgBgC,EAChBS,iBAAkB,CAClBrG,kBAAAA,GACAH,yBAAAA,GACAyG,gCDnNmC,GCoNnCC,eAAgBv6D,YAEhBk5D,eAAgBA,EAChBQ,cAAeA,IAGpB7B,IACC56D,EAAAA,EAAAA,KAACo1D,GAAuB,CACtB9a,OAAQsgB,EACRlS,UAAW,WAAF,OAAQmS,GAAqB,EAAM,EAC5CxF,wBAAyBA,IAI3BzZ,IACE57C,EAAAA,EAAAA,KAACuE,GAAAA,EAAU,CAACg5D,eAAgBC,GAAAA,EAAe78D,MAAMV,SAC9C0B,EAAKmB,UAAU84C,OAM5B,ECtNMkP,IAAoB38B,EAAAA,EAAAA,YAAUxlB,EAAAA,EAAAA,sBAAqBoiD,GAAAA,IAE5C0S,GAAoB,SAAH39D,GAMvB,IALL49D,EAAkB59D,EAAlB49D,mBACAC,EAAW79D,EAAX69D,YACAC,EAAS99D,EAAT89D,UACA5T,EAAWlqD,EAAXkqD,YACA2Q,EAAc76D,EAAd66D,eAEA74D,GAAkCC,EAAAA,EAAAA,UAAS,CACzC4b,KAAM,CAAC,IACP3b,GAAAC,EAAAA,EAAAA,GAAAH,EAAA,GAFK+7D,EAAS77D,EAAA,GAAE87D,EAAY97D,EAAA,GAIxByb,GAAYsgD,EAAAA,GAAAA,IAAM,WACxBr/C,GAAqDC,EAAAA,GAAAA,GAAmBlB,GAAhEmB,EAAaF,EAAbE,cAAeC,EAAYH,EAAZG,aAAcm/C,EAAWt/C,EAAXs/C,YAE/B/5D,GAAUC,EAAAA,EAAAA,kBAAiBusC,GAEjCl5B,GAAqC3V,EAAAA,EAAAA,YAAW6uD,GAAAA,IAAvCC,GAA6DzuD,EAAAA,EAAAA,GAAAsV,EAAA,GAArC,GACf0mD,GAAwBnZ,EAAAA,GAAAA,+BAAlC7uC,SAEFxB,GAAW7S,EAAAA,EAAAA,YAAW8S,EAAAA,iBAEtB/S,GAAOC,EAAAA,EAAAA,YAAWC,EAAAA,aAIxB6yD,EAAsElE,KAA9D4D,EAAkBM,EAAlBN,mBAAoBvnD,EAAK6nD,EAAL7nD,MAAOokD,EAAeyD,EAAfzD,gBAAiBS,EAAagD,EAAbhD,cAoB9CwM,EAA0B,CAC9BvgD,KAAM,CACJ6qC,UAAWqV,EAAUlgD,KAAK6qC,WAE5B/vB,aAAc,CACZ+vB,UAAWqV,EAAUlgD,KAAK6qC,YAIxB2V,GAA4B/7D,EAAAA,EAAAA,UAAQ,kBACxCpC,EAAAA,EAAAA,KAAC6gB,GAAAA,EAAK,CAAA5gB,UACJD,EAAAA,EAAAA,KAAC8gB,GAAAA,EAAU,CAACs9C,OAAOp+D,EAAAA,EAAAA,KAACw5D,GAAAA,EAAO,CAAC30D,KAAK,SAAU5E,SACxC0B,EAAKmB,UAAUC,4BAEZ,GACP,CAACpB,IAEE08D,GAAwBj8D,EAAAA,EAAAA,UAAQ,kBACpCnB,EAAAA,EAAAA,MAAC4f,GAAAA,EAAK,CAAA5gB,SAAA,EACJD,EAAAA,EAAAA,KAAC8gB,GAAAA,EAAU,CACTC,QACE/gB,EAAAA,EAAAA,KAACihB,GAAAA,EAAM,CAACrX,MAAM5J,EAAAA,EAAAA,KAACs+D,GAAAA,IAAc,IAAKl9C,QAAS,WAAF,OAAQvC,EAAapB,EAAU,IACzExd,SAEA0B,EAAKmB,UAAUC,kCAElB/C,EAAAA,EAAAA,KAACqhB,GAAAA,EAAS,CAAAphB,SACP0B,EAAKmB,UAAUC,kFAEZ,GACP,CAAC8b,EAAcld,EAAM8b,IAElB43C,GAA0B/yD,EAAAA,EAAAA,cAAY,SAAC4wC,GAK3C,GAJIz+B,GACFA,EAASyL,OAAO,0DAADxN,OAA2D5F,KAAKC,UAAUmmC,KAGvFA,GAAsB,IAAfA,EAAI3vC,OAcb,OAbAqb,EAAcu/C,EAA2B,CAAE19C,QAAShD,EAAW8D,SAAU,SACzEo8C,EAAYzqB,GACT/hC,MAAK,kBAAM0N,EAAapB,EAAU,IAClCkC,OAAM,SAAChf,GACN8T,EAAS9T,MAAM,+DAAD+R,OAAgE5F,KAAKC,UAAUpM,GAAM,aAAA+R,OAAY5F,KAAKC,UAAUmmC,KAE9H8qB,EAAY,CACV3xD,QAASgyD,EACT39C,OAAQ,QACRD,QAAShD,EACT8D,QAAS,KAEb,IAIJmvC,EAAyB,CACvB6N,iBAAiB,EACjB/H,UAAWtjB,GAEf,GAAG,CAACz+B,EAAU0pD,EAA2Bt/C,EAAcD,EAAey/C,EAAuBV,EAAajN,EAA0BjzC,EAAWugD,IAsB/I,OApBAnpD,EAAAA,EAAAA,YAAU,WACJopD,GACFH,EAAa,CACXngD,KAAM,CACJ6qC,UAAW,CAACyV,KAIpB,GAAG,CAACA,KAEJppD,EAAAA,EAAAA,YAAU,WACJu/C,GACFvnD,EA9FgB,GA8FGm9C,EAEvB,GAAG,CAACn9C,EAAOunD,EAAoBpK,KAE/Bn1C,EAAAA,EAAAA,YAAU,WACR68C,GACF,GAAG,KAGDzwD,EAAAA,EAAAA,MAAA,OAAKL,UAAWkW,IAAW,CAAC7S,EAAQysC,sBAAuB,4BAA4BzwC,SAAA,EACrFgB,EAAAA,EAAAA,MAAA,OAAKL,UAAWkW,IAAW,CAAC7S,EAAQ0sC,OAAQ,WAAW1wC,SAAA,EACvDD,EAAAA,EAAAA,KAACw+D,GAAAA,YAAW,CACV35D,KAAK,QACLvE,MAAOs9D,EAAY,aAAc,OACjCn0D,MAAO9H,EAAKmB,UAAUC,gBACtB+G,WAAY7F,EAAQ2sC,cAGlBjvC,EAAKmB,UAAUC,8BAGnB/C,EAAAA,EAAAA,KAAA,OAAKY,UAAWqD,EAAQyG,YAAYzK,SAEhC0B,EAAKmB,UAAUC,yGAGnB/C,EAAAA,EAAAA,KAAA,OAAAC,UACED,EAAAA,EAAAA,KAACysD,EAAAA,gBAAe,CAACp2C,gBAAiB,CAChCs2C,WAtHW,SAAC/1C,GAClBknD,EAAalnD,EACf,EAqHQ+G,KAAMkgD,EACNlO,iBAAiB,GACjB1vD,UAEAD,EAAAA,EAAAA,KAAC8qD,GAAiB,CAChBnpD,KAAMA,EACN0U,gBAAiB6nD,EACjBO,qBAAsB,CAAEC,OA1HL,WAC3B,IAAMnoC,EAAU11B,IAAAA,OAASg9D,EAAW,WAAW,GACzCc,EAAY99D,IAAAA,OAASg9D,EAAW,CAAC,OAAQ,kBAAcpoD,GACvDQ,EAAWpV,IAAAA,MAAQ89D,GAErBpoC,IACE9hB,GACFA,EAASyL,OAAO,8CAADxN,OAA+CuD,IAGhEynD,EAAmBznD,GAEvB,UAkHIjW,EAAAA,EAAAA,KAAA,OAAAC,UACED,EAAAA,EAAAA,KAACw6D,GAAiC,CAChCxQ,YAAaA,EACbiH,gBAAiBA,EACjB0J,eAAgBA,EAChBtF,wBAAyBA,OAG7Br1D,EAAAA,EAAAA,KAAC+iB,GAAAA,EAAO,CAAC67C,QAAM,EAACnhD,UAAWA,EAAW+D,SAAS,aAGrD,EAUAi8C,GAAkBr8D,aAAe,CAC/Bw8D,WAAW,G,yMClMPiB,IAAYvK,EAAAA,GAAAA,GAAW,CAC3BwK,0BAAwBj4D,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,CACtB1F,QAAS,eACTqgB,SAAU,YACPu9C,GAAAA,GAAW9rD,QAAQ,QACnB8rD,GAAAA,GAAW15C,OAAO,MAAO,QAASziB,GAAAA,EAAOo8D,6BAE9CC,wBAAsBp4D,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACjBk4D,GAAAA,GAAW15C,OAAO,MAAO,QAASziB,GAAAA,EAAOs8D,+BACzCH,GAAAA,GAAWtxB,aAAa,QAE7B0xB,qBAAmBt4D,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,CACjB1F,QAAS,OACTi+D,oBAAqB,WAClBL,GAAAA,GAAWh6C,IAAI,SACfg6C,GAAAA,GAAW35C,OAAO,OAAQ,MAAO,QAEtCi6C,iBAAkB,CAChB79C,SAAU,WACVmhC,OAAQ,MACRtU,KAAM,OAERixB,cAAe,CACb99C,SAAU,WACV8sB,IAAK,MACLkqB,MAAO,SAIL+G,GAAkB,SAAChtD,GACvB,IACElD,EACEkD,EADFlD,GAAIyzB,EACFvwB,EADEuwB,IAAKp4B,EACP6H,EADO7H,YAAa7F,EACpB0N,EADoB1N,KAAM26D,EAC1BjtD,EAD0BitD,SAAUC,EACpCltD,EADoCktD,QAGlCC,GAAcp9D,EAAAA,EAAAA,cAAY,WAC9Bk9D,EAASnwD,EACX,GAAG,CAACA,EAAImwD,IAEFG,GAAiBv9D,EAAAA,EAAAA,UAAQ,WAC7B,IAAMw9D,EAAgB/6D,EAAK8C,MAAM,KAC3BoC,EAAQgqB,OAAO6rC,EAAc,IAC7Bl7C,EAASqP,OAAO6rC,EAAc,IAGpC,GAAIl7C,EAAS3a,EAAO,CAClB,IAAM81D,EAAiB,IAAMn7C,EACvBo7C,EAAgB,IAAM/1D,EAEtBg2D,EAAQj8B,KAAK9T,IAAI6vC,EAAgBC,GAEvC,MAAO,CACL/1D,MAAOA,EAAQg2D,EACfr7C,OAAQA,EAASq7C,EAErB,CAEA,OAAO,IACT,GAAG,CAACl7D,IAEEzE,EAASy+D,KAEf,OACE7+D,EAAAA,EAAAA,KAAA,OAAAC,UACEgB,EAAAA,EAAAA,MAAA,OACEL,WAAWo/D,EAAAA,GAAAA,GAAa,6BAA8B5/D,EAAO0+D,yBAA0BW,EAAUr/D,EAAO6+D,uBAAyB,IAAIh/D,SAAA,EAErID,EAAAA,EAAAA,KAACigE,GAAAA,EAAQ,CAACr/D,WAAWo/D,EAAAA,GAAAA,GAAa,iBAAkB5/D,EAAOk/D,eAAgBG,QAASA,EAASn8D,SAAUo8D,KACvG1/D,EAAAA,EAAAA,KAAA,OAAAC,UACED,EAAAA,EAAAA,KAACi6D,GAAAA,EAAK,CACJj3B,IAAKt4B,EACLw1D,UAAQ,EACRC,MAAM,UACNr9B,IAAKA,EACLs9B,IAAI,UACJh/C,QAASs+C,EACT31D,MAAO41D,GAAkBA,EAAe51D,MACxC2a,OAAQi7C,GAAkBA,EAAej7C,YAG7C1kB,EAAAA,EAAAA,KAACqgE,GAAAA,EAAK,CACJz/D,WAAWo/D,EAAAA,GAAAA,GAAa,oBAAqB5/D,EAAOi/D,kBACpDn+C,WAAW,SACX5gB,MAAM,YACN6/D,MAAM,UACN/+C,QAASs+C,EAAYz/D,SAEpByK,QAKX,EAWM41D,GAAsB,SAAC/tD,GAC3B,IACEguD,EAKEhuD,EALFguD,KACA/J,EAIEjkD,EAJFikD,UACA7N,EAGEp2C,EAHFo2C,QACA6X,EAEEjuD,EAFFiuD,aACAC,EACEluD,EADFkuD,kBAEI9+D,GAAOC,EAAAA,EAAAA,YAAWC,EAAAA,aACxBC,GAAoDC,EAAAA,EAAAA,UAASoN,MAAMqnD,EAAUjzD,QAAQm9D,MAAK,IAAM1+D,GAAAC,EAAAA,EAAAA,GAAAH,EAAA,GAAzF6+D,EAAkB3+D,EAAA,GAAE4+D,EAAqB5+D,EAAA,GAEhDiiD,GAAoCliD,EAAAA,EAAAA,WAAS,GAAMmiD,GAAAjiD,EAAAA,EAAAA,GAAAgiD,EAAA,GAA5C4c,EAAU3c,EAAA,GAAE4c,EAAa5c,EAAA,GAE1BzvC,GAAW7S,EAAAA,EAAAA,YAAW8S,EAAAA,kBAG5BG,EAAAA,EAAAA,YAAU,WACR+rD,EAAsBpK,EAAU91D,KAAI,kBAAM,CAAI,IAChD,GAAG,CAAC81D,IAEJ,IAAMuK,GAAez+D,EAAAA,EAAAA,cAAY,WAC/B,IAAM0+D,EAAoBxK,EAAUhsD,QAAO,SAACy2D,EAAUlkD,GAAK,OAAK4jD,EAAmB5jD,EAAM,IAEzF+jD,GAAc,GAEdnY,EAAQqY,GAAmB5pC,SAAQ,WACjC0pC,GAAc,GACVrsD,GACFA,EAASyL,OAAO,wDAADxN,OAAyD5F,KAAKC,UAAUi0D,IAE3F,GACF,GAAG,CAACvsD,EAAUksD,EAAoBnK,EAAW7N,IAEvCuY,GAAgB5+D,EAAAA,EAAAA,cAAY,SAAC+M,GACjC,IAAM0N,EAAQy5C,EAAUpf,WAAU,SAAA6pB,GAAQ,OAAIA,EAASvgB,mBAAqBrxC,CAAE,IACxE8xD,GAAmBt+C,EAAAA,EAAAA,GAAO89C,GAChCQ,EAAoBpkD,IAAUokD,EAAoBpkD,GAElD6jD,EAAsBO,EACxB,GAAG,CAAC3K,EAAWmK,IAETvgE,EAASy+D,KAEf,OACE7+D,EAAAA,EAAAA,KAACohE,GAAAA,EAAM,CACLb,KAAMA,EACNC,aAAc,SAAC9Z,EAAO/oC,GACpB6iD,EAAa7iD,EAAK4iD,KACpB,EAAEtgE,UAEFD,EAAAA,EAAAA,KAACqhE,GAAAA,EAAa,CAAAphE,UACZD,EAAAA,EAAAA,KAAA,OAAKY,UAAU,sBAAqBX,UAClCgB,EAAAA,EAAAA,MAACqgE,GAAAA,EAAU,CAAArhE,SAAA,EACTD,EAAAA,EAAAA,KAACuhE,GAAAA,EAAW,CACVxgD,QACE/gB,EAAAA,EAAAA,KAACwhE,GAAAA,EAAa,CAACzgD,OAAO,QAAO9gB,UAC3BD,EAAAA,EAAAA,KAACihB,GAAAA,EAAM,CACLC,WAAW,SACXtgB,UAAU,wBACV,aAAYe,EAAKmB,UAAUC,SAC3B6G,MAAM5J,EAAAA,EAAAA,KAACmhB,GAAAA,IAAgB,QAG9BlhB,SAEE0B,EAAKmB,UAAUC,uEAElB9B,EAAAA,EAAAA,MAACwgE,GAAAA,EAAa,CAAAxhE,SAAA,CACX0B,EAAKmB,UAAUC,wHAChB/C,EAAAA,EAAAA,KAAA,OAAKY,WAAWo/D,EAAAA,GAAAA,GAAa,wBAAyB5/D,EAAO++D,qBAAqBl/D,SAEhFu2D,EAAU91D,KAAI,SAACugE,EAAUlkD,GAAK,OAC5B/c,EAAAA,EAAAA,KAACu/D,GAAe,CAEdlwD,GAAI4xD,EAASvgB,iBACb5d,IAAKm+B,EAASz0D,IACd9B,YAAauzC,GAAWgjB,EAAShhB,WAAWluC,KAC5ClN,KAAMo5C,GAAWgjB,EAAShhB,WAAWp7C,KACrC46D,QAASkB,EAAmB5jD,GAC5ByiD,SAAU0B,GANLD,EAASvgB,iBAOd,UAKRz/C,EAAAA,EAAAA,MAACygE,GAAAA,EAAa,CAAAzhE,SAAA,EACZD,EAAAA,EAAAA,KAACwhE,GAAAA,EAAa,CAACG,0BAAwB,EAAA1hE,UACrCD,EAAAA,EAAAA,KAACihB,GAAAA,EAAM,CAACC,WAAW,YAAYtgB,UAAU,SAAQX,SAAE0B,EAAKmB,UAAUC,eAEpE/C,EAAAA,EAAAA,KAACihB,GAAAA,EAAM,CACLC,WAAW,UACXE,QAAS2/C,EACT1rB,UAAWsrB,EAAmB7sD,MAAK,SAAApD,GAAQ,OAAIA,CAAQ,KAAKmwD,EAC5DjgE,UAAU,aAAYX,SAGtB4gE,GACI7gE,EAAAA,EAAAA,KAACw5D,GAAAA,EAAO,CAAC30D,KAAK,OAAOqc,WAAW,aAChCu/C,GAAqB9+D,EAAKmB,UAAUC,2BASxD,EAUAu9D,GAAoBl/D,aAAe,CACjCm/D,MAAM,EACN/J,UAAW,GACXiK,uBAAmBhrD,GAGrB,IA6CamsD,GA7CgC,SAACrvD,GAC5C,IACEorD,EAEEprD,EAFForD,YACG70D,GAAIC,EAAAA,EAAAA,GACLwJ,EAAKvJ,IAETuO,GAA0D3V,EAAAA,EAAAA,YAAW6uD,GAAAA,IAAsB4K,GAAAp5D,EAAAA,EAAAA,GAAAsV,EAAA,GAApF+jD,EAAqBD,EAAA,GAAE3K,EAAwB2K,EAAA,GAC9CG,GAAyB5K,EAAAA,GAAAA,MAAzB4K,qBAEA+C,EAA+BjD,EAA/BiD,gBAAiB/H,EAAc8E,EAAd9E,UAEnBqL,GAAyBv/D,EAAAA,EAAAA,cAAY,SAACwV,GAC1C44C,EAAyB,CACvB6N,gBAAiBzmD,GAErB,GAAG,CAAC44C,IAEE/H,GAAUrmD,EAAAA,EAAAA,cAAY,SAAA0+D,GAAiB,OAAIrD,EAAYqD,GAAmB7vD,MAAK,kBAAM0wD,GAAuB,EAAM,GAAC,GAAE,CAAClE,EAAakE,IAQzI,OANAhtD,EAAAA,EAAAA,YAAU,WACJhU,IAAAA,QAAU21D,IAEdgF,EAAqBhF,EAAU91D,KAAI,SAAAugE,GAAQ,OAAIA,EAASvgB,gBAAgB,IAC1E,GAAG,CAAC8V,EAAWgF,IAEX36D,IAAAA,QAAU21D,GACL,MAIPx2D,EAAAA,EAAAA,KAACsgE,IAAmBz5D,EAAAA,EAAAA,GAAA,CAElB2vD,UAAWA,EACX+J,KAAMhC,EACNiC,aAAcqB,EACdlZ,QAASA,GACL7/C,GALC0tD,EAAUjzD,OAAS,EAAIizD,EAAU,GAAG9V,iBAAmB,QAQlE,E,0FC/QaohB,GAAsB,SAAHhiE,GAGzB,IAFLiiE,EAAcjiE,EAAdiiE,eACAC,EAAyBliE,EAAzBkiE,0BAEMrgE,GAAOC,EAAAA,EAAAA,YAAWC,EAAAA,aAClB4S,GAAW7S,EAAAA,EAAAA,YAAW8S,EAAAA,iBAEtButD,GAAqB3/D,EAAAA,EAAAA,cAAY,WACrCy/D,IAEIttD,GACFA,EAASyL,OAAO,kCAEpB,GAAG,CAAC6hD,EAAgBttD,IAEdytD,GAAgC5/D,EAAAA,EAAAA,cAAY,WAChD0/D,IAEIvtD,GACFA,EAASyL,OAAO,8CAEpB,GAAG,CAAC8hD,EAA2BvtD,IAE/B,OACExT,EAAAA,EAAAA,MAACkhE,GAAAA,EAAI,CAAAliE,SAAA,EACHD,EAAAA,EAAAA,KAACoiE,GAAAA,EAAW,CAAAniE,UACVD,EAAAA,EAAAA,KAACihB,GAAAA,EAAM,CAACrX,MAAM5J,EAAAA,EAAAA,KAACqiE,GAAAA,IAAY,IAAIpiE,SAC5B0B,EAAKmB,UAAUC,0BAGpB/C,EAAAA,EAAAA,KAACsiE,GAAAA,EAAW,CAAAriE,UACVgB,EAAAA,EAAAA,MAACshE,GAAAA,EAAQ,CAAAtiE,SAAA,EACPD,EAAAA,EAAAA,KAACwiE,GAAAA,EAAQ,CAAC54D,MAAM5J,EAAAA,EAAAA,KAACyiE,GAAAA,IAAiC,IAAKrhD,QAAS6gD,EAAmBhiE,SAChF0B,EAAKmB,UAAUC,qBAElB/C,EAAAA,EAAAA,KAACwiE,GAAAA,EAAQ,CAAC54D,MAAM5J,EAAAA,EAAAA,KAAC0iE,GAAAA,IAAc,IAAKthD,QAAS8gD,EAA8BjiE,SACxE0B,EAAKmB,UAAUC,+BAM5B,ECvCa4/D,GAAuB,SAAH7iE,GAK1B,IAJLw6C,EAAMx6C,EAANw6C,OACAoO,EAAS5oD,EAAT4oD,UACAgV,EAAkB59D,EAAlB49D,mBACAC,EAAW79D,EAAX69D,YAEMlpD,GAAW7S,EAAAA,EAAAA,YAAW8S,EAAAA,iBAE5B6C,GAAyC3V,EAAAA,EAAAA,YAAW6uD,GAAAA,IAAsB6E,GAAArzD,EAAAA,EAAAA,GAAAsV,EAAA,MAAAg+C,OAAA,IAAAD,EAAvC,CAAC,EAACA,EAA5B/pC,EAASgqC,EAAThqC,UAAWs1B,EAAU0U,EAAV1U,WACoD+hB,GAA7B9d,EAAAA,GAAAA,+BAAnC7uC,SAAU4sD,OAAe,IAAAD,EAAG,GAAEA,EAEtC9gE,GAAgCC,EAAAA,EAAAA,UAAS8gE,GAAgB7gE,GAAAC,EAAAA,EAAAA,GAAAH,EAAA,GAAlDmU,EAAQjU,EAAA,GAAE8gE,EAAW9gE,EAAA,GAC5BiiD,GAA4BliD,EAAAA,EAAAA,UAAS,IAAGmiD,GAAAjiD,EAAAA,EAAAA,GAAAgiD,EAAA,GAAjCjqB,EAAMkqB,EAAA,GAAE6e,EAAS7e,EAAA,GACxBG,GAA4CtiD,EAAAA,EAAAA,UAAS,IAAGuiD,GAAAriD,EAAAA,EAAAA,GAAAoiD,EAAA,GAAjD2e,EAAc1e,EAAA,GAAE2e,EAAiB3e,EAAA,GAElC4e,GAAuB5gE,EAAAA,EAAAA,cAAY,SAACkK,GACpCA,IAAQyJ,IAERxB,GACFA,EAASyL,OAAO,mDAGlB4iD,EAAYt2D,GACZu2D,EAAU,IACVE,EAAkB,IAElBvF,EAAmBlxD,GACrB,GAAG,CAACyJ,EAAUynD,EAAoBjpD,KAElCI,EAAAA,EAAAA,YAAU,WACRkuD,EAAU1hB,GAA8BR,GAC1C,GAAG,CAACA,IAEJ,IAAMsiB,GAAqB7gE,EAAAA,EAAAA,cAAY,SAAC8gE,GACtC,GAAI3uD,EAAU,CAEZ,IAAM4uD,EAASxiE,IAAAA,WAAaA,IAAAA,MAAQuiE,EAAKJ,GAAiBniE,IAAAA,aAAeuiE,EAAKJ,IAAiB,GAE3FI,EAAI1xD,SAAS2xD,GACf5uD,EAASyL,OAAO,gDAADxN,OAAiD2wD,IAEhE5uD,EAASyL,OAAO,kDAADxN,OAAmD2wD,GAEtE,CAEAJ,EAAkBG,EACpB,GAAG,CAACJ,EAAgBvuD,IAEd6uD,GAAkBhhE,EAAAA,EAAAA,cAAY,SAAC8gE,GAC/B3uD,GACFA,EAASyL,OAAO,6CAGlB,IAAMw1C,EAAc70D,IAAAA,MAAQuiE,GACzB1iE,KAAI,SAAA2O,GAAE,OAAIsyC,GAAsBd,EAAYxxC,EAAG,IAC/Ck0D,UACAviE,QAEH,OAAO28D,EAAYjI,GAAavkD,KAAKu3C,EACvC,GAAG,CAAC7H,EAAY8c,EAAajV,EAAWj0C,IAElC+gD,GAAgBlzD,EAAAA,EAAAA,cAAY,WAC5BmS,GACFA,EAASyL,OAAO,+CAGlBwoC,GACF,GAAG,CAACA,EAAWj0C,IAEf,OACEzU,EAAAA,EAAAA,KAAA,OAAAC,UACED,EAAAA,EAAAA,KAACwjE,GAAAA,sBAAqB,CACpBvtD,SAAUA,EACV+jB,OAAQA,EACRgpC,eAAgBA,EAChB1oB,OAAQA,EACR/uB,UAAWA,EACXoyC,YAAa2F,EACb5a,UAAW8M,EACXiO,iBAAkBP,EAClBQ,uBAAwBP,KAIhC,EC1EaQ,GAAe,SAAH7jE,GAKlB,IAJLm4C,EAAWn4C,EAAXm4C,YACAhpB,EAAWnvB,EAAXmvB,YACA9P,EAAGrf,EAAHqf,IACAw+C,EAAW79D,EAAX69D,YAEMh8D,GAAOC,EAAAA,EAAAA,YAAWC,EAAAA,aAClBuL,GAAgBxL,EAAAA,EAAAA,YAAWkd,GAAAA,IACjCvH,GAAuB3V,EAAAA,EAAAA,YAAW6uD,GAAAA,IAAzBx6C,GAA+ChU,EAAAA,EAAAA,GAAAsV,EAAA,GAAvC,GAARtB,SAEH6hC,EAAuBj3C,IAAAA,IAAMuM,EAAe,CAAC,iBAAkB,yBAGrDw2D,GACZxqB,EAAAA,GAAAA,IAA2B,CAC7Bl6B,IAAK44B,EAAqBzoB,WAC1BlQ,IAAKA,EAAIkQ,WACT4oB,YAAAA,EACAa,mBAAoBj4C,IAAAA,KACpBc,KAAAA,EACAstB,YAAAA,EACAoqB,cAAc,IARdwqB,aAWF,OAAOvhE,EAAAA,EAAAA,cAAY,SAAAwhE,GAAc,OAAIF,EAAkB,CAAEpe,aAAcse,IACpE3yD,MAAK,SAAC4yD,GACL,IAAMvN,EAAYuN,EAAYrjE,KAAI,SAACsjE,EAAYjnD,GAAK,OAvC7B,SAAC9G,EAAUpM,EAAOo3D,GAAQ,MAAM,CAC3DtjD,KAAM,CACJ6qC,UAAW,CAACvyC,GACZpM,MAAAA,EACA27C,aAAc,CACZye,WAAYp6D,EAAMwF,GAClBq2C,cAAY7+C,EAAAA,EAAAA,GAAA,GACPo6D,KAIV,CA4B8DiD,CAAqBjuD,EAAU+tD,EAAYF,EAAe/mD,GAAO,IAE1H,OADA4gD,EAAYnH,GACLA,CACT,GAAE,GAAE,CAACoN,EAAmB3tD,EAAU0nD,GACtC,EC7BawG,GAAiC,SAAC5xD,GAC7C,IACE4M,EAkBE5M,EAlBF4M,IACAD,EAiBE3M,EAjBF2M,IACAvd,EAgBE4Q,EAhBF5Q,KACAq2C,EAeEzlC,EAfFylC,WACAsV,EAcE/6C,EAdF+6C,gBACAC,EAaEh7C,EAbFg7C,kBAAiBC,EAafj7C,EAZF2gC,IAAAA,OAAG,IAAAsa,EAAG,GAAEA,EACRvV,EAWE1lC,EAXF0lC,YACA7E,EAUE7gC,EAVF6gC,kBACAnkB,EASE1c,EATF0c,YACAokB,EAQE9gC,EARF8gC,oBACAC,EAOE/gC,EAPF+gC,uBACAma,EAMEl7C,EANFk7C,YACAC,EAKEn7C,EALFm7C,mBACA/+C,EAIE4D,EAJF5D,WACA60C,EAGEjxC,EAHFixC,eACAmK,EAEEp7C,EAFFo7C,gBACAyW,EACE7xD,EADF6xD,WAGIC,GAAiBjiE,EAAAA,EAAAA,UAAQ,kBAAMsrD,GAAsBxa,GAAOA,EAAI,MAAQA,EAAI,GAAGrlC,EAAE,GAAE,CAACqlC,EAAKwa,KAE/F4W,EAAAA,GAAAA,IAAsB,CAAE31D,WAAAA,EAAY01D,eAAAA,IAEpC,IAAM5vD,GAAW7S,EAAAA,EAAAA,YAAW8S,EAAAA,iBAEtB8+B,GAAiBtvC,EAAAA,EAAAA,kBAAiBkpC,GAElCqG,GAAgBvvC,EAAAA,EAAAA,kBAAiBmvC,GAEjCjmC,GAAgBxL,EAAAA,EAAAA,YAAWkd,GAAAA,IAEzBylD,GAAiB3T,EAAAA,GAAAA,MAAjB2T,aAEFtgE,EAAUqvC,EAAyBG,EAAgBD,EAEzD1xC,GAAoCC,EAAAA,EAAAA,UAASmxC,GAAIlxC,GAAAC,EAAAA,EAAAA,GAAAH,EAAA,GAA1C8rD,EAAU5rD,EAAA,GAAE6rD,EAAa7rD,EAAA,GAChCiiD,GAA8CliD,EAAAA,EAAAA,YAAUmiD,GAAAjiD,EAAAA,EAAAA,GAAAgiD,EAAA,GAAjDugB,EAAetgB,EAAA,GAAEugB,EAAkBvgB,EAAA,GAC1CG,GAAwDtiD,EAAAA,EAAAA,WAAS,GAAMuiD,GAAAriD,EAAAA,EAAAA,GAAAoiD,EAAA,GAAhEqgB,EAAoBpgB,EAAA,GAAEqgB,EAAuBrgB,EAAA,GACpDwW,GAAsC/4D,EAAAA,EAAAA,WAAS,GAAKg5D,GAAA94D,EAAAA,EAAAA,GAAA64D,EAAA,GAA7C9Q,EAAW+Q,EAAA,GAAEJ,GAAcI,EAAA,GAElCjN,IAaIC,EAAAA,EAAAA,IAAe7a,EAAKya,GAZtB7X,GAAYgY,GAAZhY,aACAD,GAAYiY,GAAZjY,aACAE,GAAQ+X,GAAR/X,SACAjC,GAAoBga,GAApBha,qBACAka,GAAWF,GAAXE,YACAta,GAAgBoa,GAAhBpa,iBACAwa,GAASJ,GAATI,UACAD,GAAKH,GAALG,MACA2W,GAAgB9W,GAAhB8W,iBACAzW,GAAUL,GAAVK,WACAvY,GAAUkY,GAAVlY,WACAwY,GAAQN,GAARM,SAGIC,IAAU/rD,EAAAA,EAAAA,cAAY,WAC1B4rD,KACIz5C,GACFA,EAASyL,OAAO,wCAADxN,OAAyCs7C,GAAYM,mBAExE,GAAG,CAAC75C,EAAUu5C,GAAYM,kBAAmBJ,KAEvCoB,IAAqBhtD,EAAAA,EAAAA,cAAY,SAACsU,EAAQm9B,EAAK+a,GACnD,IAAIK,EAAYvB,EAAW7Z,IAAQ,CAAElqC,MAAO,KAAM2+C,UAAW,GAAIsG,IAAK,MAKpEK,EAHGA,EAAUL,KAGJjoD,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAQ+P,GAAM,IAAEk4C,IAAKK,EAAUL,IAAKjhD,GAAIshD,EAAUthD,MAFlDhH,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAQ+P,GAAM,IAAEk4C,IAAAA,EAAKjhD,GAAIshD,EAAUthD,KAK9C,IAAMuhD,EAAcxB,EAAW1Z,MAAM,EAAGH,GAClCsb,EAAazB,EAAW1Z,MAAMH,EAAM,EAAG6Z,EAAWrqD,QACxDsqD,EAAc,GAADn7C,QAAAmQ,EAAAA,EAAAA,GAAKusC,GAAW,EAAAvoD,EAAAA,EAAAA,GAAA,GAAOsoD,KAAStsC,EAAAA,EAAAA,GAAOwsC,IACtD,GAAG,CAACzB,IAEE1C,IAAgB5oD,EAAAA,EAAAA,cAAY,SAACyxC,GAC7Bt/B,GACFA,EAASyL,OAAO,4BAADxN,OAA6BqhC,IAE9C6Z,EAAW2B,OAAOxb,EAAK,GAEvB8Z,GAAahrC,EAAAA,EAAAA,GAAK+qC,IAElBO,IACF,GAAG,CAACP,EAAYn5C,EAAU05C,KAEpBI,GAAa,WACjB,IAAIC,GAAQ,EAQZ,OANA3tD,IAAAA,KAAO+sD,GAAY,SAAChO,GACbA,EAAGrpB,UACNi4B,GAAQ,EAEZ,IAEOA,CACT,EAEMC,GAAa,WACjB,IAAIC,GAAQ,EAQZ,OANA7tD,IAAAA,KAAO+sD,GAAY,SAAChO,GACdA,EAAG7kC,UACL2zC,GAAQ,EAEZ,IAEOA,CACT,EAMMiP,IAAcr7D,EAAAA,EAAAA,cAAY,SAACk0D,GAC/B,IAAMqO,ElB1E8B,SAAHjyB,GAE9B,IADLW,EAAUX,EAAVW,WAAYijB,EAAS5jB,EAAT4jB,UAEZ,OAbwB,SAAH77C,GAEhB,IADL44B,EAAU54B,EAAV44B,WAEA,OAA0B,IAAtBA,EAAWhwC,OACNgwC,EAAW,GAAG51B,MAAqC,OAA7B41B,EAAW,GAAG51B,KAAK9T,OAA0D,IAAxC0pC,EAAW,GAAG51B,KAAK6qC,UAAUjlD,aAAoDkS,IAApC89B,EAAW,GAAG51B,KAAK6qC,UAAU,KAGrIjV,EAAWhwC,OAAS,EAC/B,CAKMuhE,CAAW,CAAEvxB,WAAAA,KAEf1wB,EAAAA,EAAAA,GAAW2zC,GAGP,GAAN9jD,QAAAmQ,EAAAA,EAAAA,GAAW0wB,IAAU1wB,EAAAA,EAAAA,GAAK2zC,GAC5B,CkBiEmBuO,CAAyB,CAAExxB,WAAYqa,EAAY4I,UAAAA,IAM5DwO,GAH6B/W,GAAM1qD,OAAS,EAAyB,IAApB0qD,GAAM1qD,OAAS,GAAU,GAG1B0qD,GAAMA,GAAM1qD,OAAS,GAAG+qD,kBAE1EuW,EAAOthE,OAASyhE,GAClBJ,GAAiBC,EAAOthE,OAASyhE,GAG/BvwD,GACFA,EAASyL,OAAO,8DAADxN,OAA+D8jD,EAAUjzD,SAE1FsqD,EAAcgX,EAChB,GAAG,CAACjX,EAAYgX,GAAkB3W,GAAOx5C,IAEnCwwD,GAAYtB,GAAa,CAC7B1rB,YAAAA,EACAhpB,YAAAA,EACA9P,IAAAA,EACAw+C,YAAAA,MAGF9oD,EAAAA,EAAAA,YAAU,kBAAM0vD,GAAc,GAAE,CAACA,KAEjC1vD,EAAAA,EAAAA,YAAU,WACR,IAAM+B,EAAS,CACb+G,MAAIkF,EAAAA,EAAAA,GAAM+qC,GAAar3B,QAASg4B,KAAcxzC,QAAS0zC,KAAc/a,iBAAAA,IAEvE4Z,EAAgB12C,GACZnC,GACFA,EAASyL,OAAO,oCAADxN,OAAqC5F,KAAKC,UAAU6J,IAIvE,GAAG,CAAC88B,GAAkBka,KAEtB/4C,EAAAA,EAAAA,YAAU,WACJ44C,GACFI,EAAc,GAElB,GAAG,CAACJ,KAEJ54C,EAAAA,EAAAA,YAAU,YACR85C,EAAAA,EAAAA,eAAc,kBAAmB,OACnC,GAAG,KAEH95C,EAAAA,EAAAA,YAAU,WACR,IAAKhU,IAAAA,QAAUqyC,EAAK0a,KAAgBF,EAAoB,CAEtD,IAAIkB,GAAe,EAEnB/tD,IAAAA,KAAOqyC,GAAK,SAAC0M,GACX,IAAM5Q,EAAYnuC,IAAAA,OAAS+sD,GAAY,SAAAiB,GAAG,OAAIA,EAAIC,MAAQlP,EAAGkP,GAAG,IAE5D9f,GAAaA,EAAU,IAAMnuC,IAAAA,YAAcmuC,EAAU,GAAGnhC,KAAO+xC,EAAG/xC,KACpE+gD,GAAe,GAIb3/B,EAAY5qB,QAAQ6gE,eAAiBrkE,IAAAA,QAAUmuC,IAAc4Q,EAAG/xC,KAClE+gD,GAAe,EAEnB,IAEIA,GACFf,EAAc3a,EAElB,CAEF,GAAG,CAACA,IAEJ,IAAMwqB,GAAqB,SAACznD,GAC1BwuD,EAAmBxuD,EACrB,EACM2nD,GAAY/8D,IAAAA,IAAMouB,EAAa,CAAC,UAAW,6BAE3Ck2C,IAAgB/iE,EAAAA,EAAAA,UAAQ,kBAC5BvB,IAAAA,IAAMA,IAAAA,MAAQmtD,GAAYM,oBAAoB,SAACva,GAC7C,IAAM/E,EAAa4e,EAAW9Z,GAAqBC,EAAKia,GAAYiB,cAAgBrB,EAAW9Z,GAAqBC,EAAKia,GAAYiB,aAAatxC,KAE5ImxC,EAAOlB,EAAW9Z,GAAqBC,EAAKia,GAAYiB,cAAgBrB,EAAW9Z,GAAqBC,EAAKia,GAAYiB,aAAaH,KAAQjuD,IAAAA,SAAW,cAE/J,OACEb,EAAAA,EAAAA,KAAA,OAAKY,UAAS,mBAAA8R,OAAqBqhC,GAAM9zC,UACvCD,EAAAA,EAAAA,KAACy0D,GAAyB,CAExB9yD,KAAMA,EACNq2C,WAAYA,EACZ94B,IAAKA,EACLC,IAAKA,EACLxQ,WAAYA,EACZsgB,YAAaA,EACb+f,UAAWA,EACXgb,YAAaA,EACbiB,SAAU,SAAAr0C,GAAM,OAAI04C,GAAmB14C,EAAQk9B,GAAqBC,EAAKia,GAAYiB,YAAaH,EAAI,EACtG5D,cAAe,WAAF,OAAQA,GAAcpX,GAAqBC,EAAKia,GAAYiB,YAAajB,GAAY,EAClG7C,kBAAqD,IAAlC6C,GAAYM,kBAC/BlD,SAAU0D,EACVzD,gBAAiBkC,IAAsBxZ,EACvCkE,YAAaA,EACbuL,eAAgBA,GAAe,GAAA9wC,OAfvBo8C,EAAG,iBAmBnB,GAAE,GACD,CAAClB,EAAYzuC,EAAKxQ,EAAYuQ,EAAKquC,EAAmBS,GAAala,GAAsBnyC,EAAM6hD,EAAgBvL,EAAaqX,GAAoBpE,GAAelT,EAAY/oB,IAE9K,OACEjvB,EAAAA,EAAAA,KAAA,OAAKY,UAAWqD,EAAQ8qD,wBAAwB9uD,UAC9CD,EAAAA,EAAAA,KAAColE,GAAAA,EAAqB,CAAAnlE,UACpBgB,EAAAA,EAAAA,MAACokE,GAAAA,0BAAyB,CACxB12D,WAAW,KACXsH,SAAUuuD,EACV31C,OAAQltB,EAAK2jE,YACbC,mBAAmB,UACnBn4D,cAAeA,EAAcnN,SAAA,EAE7BD,EAAAA,EAAAA,KAACy9D,GAAiB,CAChBC,mBAAoBA,GACpBC,YAAasH,GACbrH,UAAWA,GACX5T,YAAaA,EACb2Q,eAAgBA,MAElB36D,EAAAA,EAAAA,KAAC4hE,GAAW,CACVjE,YAAasH,MAEfhkE,EAAAA,EAAAA,MAAA,OAAAhB,SAAA,EACED,EAAAA,EAAAA,KAAA,MAAAC,SACG0B,EAAKmB,UAAUC,eAElB/C,EAAAA,EAAAA,KAAA,KAAAC,SAEI0B,EAAKmB,UAAUC,iGAIpBoiE,IAEEf,GAAepW,GAAYM,kBAAoBF,KAAahb,IAAsBvyC,IAAAA,QAAU+sD,KAC7F5tD,EAAAA,EAAAA,KAAA,OAAKkB,MAAO,CAAE+K,UAAW,IAAKhM,UAC5BD,EAAAA,EAAAA,KAAC8hE,GAAmB,CAClBE,0BAA2B3T,GAC3B0T,eAAgB,WAAF,OAAQ4C,GAAwB,EAAK,MAIxDD,IACC1kE,EAAAA,EAAAA,KAAC2iE,GAAoB,CACnBroB,OAAQoqB,EACR/G,YAAasH,GACbvc,UAAW,WAAF,OAAQic,GAAwB,EAAM,EAC/CjH,mBAAoBA,MAGxB19D,EAAAA,EAAAA,KAAC21C,EAAU,CACTC,WAAYA,GACZxC,kBAAmBA,EACnBnvC,QAASA,EACT4xC,aAAcA,GACdC,aAAcA,GACdC,SAAUA,GACVrC,iBAAkBA,WAM9B,EA2BAywB,GAA+B/iE,aAAe,CAC5C62C,YAAa,KACb7E,mBAAmB,EACnBC,oBAAqBxyC,IAAAA,KACrByyC,wBAAwB,EACxBma,aAAa,EACbF,kBAAmB,EACnBG,oBAAoB,EACpBlK,gBAAgB,EAChB4gB,YAAY,EACZzW,gBAAiB,GCrVnB,IAAMvgB,GAAmB,WAAC,MAA6B,CACrDC,mBAAoB,CAClBphC,UAAW,GACXlC,MAAO,IACP+I,UAAW,IACXG,QAAS,GACTq6B,cAAe,GACfC,WAAY,UACZC,UAAW,iCACXC,aAAc,EACd,sCAAuC,CACrCF,WAAY,6DACZE,aAAc,EACd1jC,MAAO,mBACP2a,OAAQ,kBACR3R,WAAY,kBACZ,UAAW,CACT,iBAAkB,CAChB5R,QAAS,SAGb,yBAA0B,CACxBb,MAAO,qBAGX,WAAY,CACVyJ,MAAO,IACPkC,UAAW,GACXyhC,MAAO,QAET,8BAA+B,CAC7B3jC,MAAO,IACP,cAAe,CACbwjC,WAAY,6DACZE,aAAc,EACd1jC,MAAO,mBACP2a,OAAQ,kBACR3R,WAAY,kBACZ5R,QAAS,OACTwsC,SAAU,OACVjiC,cAAe,SACfR,WAAY,SACZ,UAAW,CACT,iBAAkB,CAChB/J,QAAS,SAGb,yBAA0B,CACxBb,MAAO,oBAET,eAAgB,CACdyJ,MAAO,GACP2a,OAAQ,GACRzY,UAAW,IAEb,wBAAyB,CACvBlC,MAAO,mBACPsb,OAAQ,kBACRpS,QAAS,oBAIf,yBAA0B,CACxB9R,QAAS,OACT+J,WAAY,UAEd,sBAAuB,CACrB5J,WAAY,KAEd,wBAAyB,CACvByI,MAAO,mBACPsb,OAAQ,kBACRpS,QAAS,kBAEX,2BAA4B,CAC1BuO,SAAU,WACVzX,MAAO,mBACP,UAAW,CACT,iBAAkB,CAChB5I,QAAS,SAGb,yBAA0B,CACxBb,MAAO,qBAIX,4BAA6B,CAC3ByS,WAAY,IAEd,uBAAwB,CACtB06B,aAAc,EACdjjC,OAAQ,mGACRT,MAAO,mBACP2a,OAAQ,oBAGZspB,cAAe,CACb3oB,OAAQ,qBAEV4oB,qBAAsB,CACpB9sC,QAAS,OACT4I,MAAO,OACPyB,eAAgB,iBAElB0iC,qBAAsB,CACpB1iC,eAAgB,WAChBrK,QAAS,OACTgtC,OAAQ,UACRV,aAAc,GACdF,WAAY,UACZxjC,MAAO,GACP2a,OAAQ,IAEV0pB,8BAA+B,CAC7B5sB,SAAU,WACV6sB,KAAM,MACNC,IAAK,MACLC,UAAW,wBACXpjC,UAAW,MACXhK,QAAS,QAEX0tC,mBAAoB,CAClBva,SAAU,GACVhzB,WAAY,KAEdktC,iBAAkB,CAChB9pB,OAAQ,IACR3a,MAAO,KAET4kC,oBAAqB,CACnBjqB,OAAQ,IAEVqqB,eAAgB,CACdhlC,MAAO,IACPkJ,QAAS,GACTq6B,cAAe,GACfnsC,QAAS,OACTwsC,SAAU,OACVniC,eAAgB,UAElBwjC,UAAW,CACTvB,aAAc,MACdjjC,OAAQ,oGAEVykC,WAAY,CACVhjC,UAAW,IAEbwiC,aAAc,CACZ1kC,MAAO,OACP2a,OAAQ,OACRopB,gBAAiB,UACjBL,aAAc,GAEhB0B,WAAY,CACVp8B,WAAY,GACZhJ,MAAO,QAETqlC,aAAc,CACZjuC,QAAS,OACT+J,WAAY,SACZC,UAAW,QAEbqkC,uBAAwB,CACtB9qB,OAAQ,EACR3a,MAAO,EACP0jC,aAAc,MACdtsC,QAAS,eACTgtC,OAAQ,WAEVsB,iBAAkB,CAChB/qB,OAAQ,EACR3a,MAAO,EACP2lC,QAAS,GAEXC,oBAAqB,CACnBxuC,QAAS,OACTgK,UAAW,OAEbykC,sBAAuB,CACrBzuC,QAAS,OACTwsC,SAAU,QAEZkC,kBAAmB,CACjB98B,WAAY,GACZK,WAAY,IAEf,EAEKoyD,GAAiB,CACrBrkE,QAAS,OACT,wBAAyB,CACvBkkB,OAAQ,kBACRpS,QAAS,mBAIAwyD,GAAW,SAAH3lE,GAAA,IACnBqf,EAAGrf,EAAHqf,IACAD,EAAGpf,EAAHof,IACAvd,EAAI7B,EAAJ6B,KACAq2C,EAAUl4C,EAAVk4C,WACA/oB,EAAWnvB,EAAXmvB,YACAy2C,EAAQ5lE,EAAR4lE,SACApY,EAAextD,EAAfwtD,gBACArV,EAAWn4C,EAAXm4C,YACAwV,EAAW3tD,EAAX2tD,YACAkY,EAAY7lE,EAAZ6lE,aACAniB,EAAc1jD,EAAd0jD,eAAc,OAEdviD,EAAAA,EAAAA,MAAA,OAAKC,MAAOskE,GAAevlE,SAAA,EACzBgB,EAAAA,EAAAA,MAAA,OAAAhB,SAAA,EACED,EAAAA,EAAAA,KAACqtD,GAAmB,CAClBluC,IAAKA,EACLD,IAAKA,EACLvd,KAAMA,EACNstB,YAAaA,EACb+oB,WAAYA,EACZ9E,IAAKwyB,EAAS/nD,KACd2vC,gBAAiBA,EACjBrV,YAAaA,EACb7E,mBAAiB,EACjBC,oBAAqBjG,GACrBkG,wBAAsB,EACtBma,YAAaA,EACbC,oBAAkB,EAClBlK,eAAgBA,KAElBxjD,EAAAA,EAAAA,KAAC4lE,EAAAA,cAAa,CAACpvC,SAAUmvC,EAAeA,EAAajlE,KAAI,SAAAC,GAAK,OAAIA,EAAM2U,OAAO,IAAI,SAErFtV,EAAAA,EAAAA,KAACizC,EAAS,CACRtxC,KAAMA,EACNkkE,0BAA2B,WAAF,OAAQhlE,IAAAA,IAAM,EACvCqyC,IAAKwyB,EACLtyB,mBAAiB,EACjBC,oBAAqBjG,GACrBkG,wBAAsB,MAEpB,EAqBRmyB,GAASrkE,aAAe,CACtBukE,aAAc,M,6FCxPVG,GAAa,SAAHhmE,GAGT,IAFL2J,EAAK3J,EAAL2J,MACAiB,EAAW5K,EAAX4K,YAEM/I,GAAOC,EAAAA,EAAAA,YAAWC,EAAAA,aAExB,OACEZ,EAAAA,EAAAA,MAACuU,EAAAA,SAAc,CAAAvV,SAAA,EACbD,EAAAA,EAAAA,KAAA,MAAIY,UAAU,aAAYX,SACvB0B,EAAKmB,UAAU2G,KAEjBiB,IACC1K,EAAAA,EAAAA,KAAA,KAAGY,UAAU,mBAAkBX,SAC5B0B,EAAKmB,UAAU4H,OAK1B,EAOaq7D,GAAwB,SAAHvlE,GAM3B,IAADwlE,EAAAxlE,EALJmd,KAAAA,OAAI,IAAAqoD,EAAG,CAAC,EAACA,EACTlxC,EAAYt0B,EAAZs0B,aACAn0B,EAAKH,EAALG,MACA+sD,EAAkBltD,EAAlBktD,mBACA0W,EAAU5jE,EAAV4jE,WAIe6B,GAAXtlE,GAAS,CAAC,GADZF,OAAAA,OAAM,IAAAwlE,EAAG,GAAEA,EAIbjnD,IADkBpd,EAAAA,EAAAA,YAAWk7B,GAAAA,eAAiB,CAAC,GAAvC5e,MACmBe,OAAnBC,EAAGF,EAAHE,IAAKC,EAAGH,EAAHG,IAEP1K,GAAW7S,EAAAA,EAAAA,YAAW8S,EAAAA,iBAEpBoD,GAAUD,EAAAA,GAAAA,oBAAVC,MAEF7T,GAAUC,EAAAA,EAAAA,kBAAiB8sC,GAEjCk1B,EAAuCpuD,EAAMquD,QAAQC,WAAUC,EAAAH,EAAvD/wC,SAAAA,OAAQ,IAAAkxC,EAAG,CAAC,EAACA,EAAEC,EAAWJ,EAAXI,YAEX33D,EAAewmB,EAAnBtnB,GAEF04D,EAAgBzuD,EAAMC,YAAY,GAElCpW,GAAOC,EAAAA,EAAAA,YAAWC,EAAAA,aAElBuL,GAAgBxL,EAAAA,EAAAA,YAAWkd,GAAAA,IACjCnE,EAA4CvN,GAAiB,CAAC,EAAtD4hB,EAAWrU,EAAXqU,YAAaD,EAAkBpU,EAAlBoU,mBACfE,GAAc7sB,EAAAA,EAAAA,UAAQ,kBAAAyE,EAAAA,EAAAA,GAAC,CAAQxC,SAAOwC,EAAAA,EAAAA,GAAA,GAAOkoB,IAAyBC,EAAW,GAAK,CAACD,EAAoBC,IAE3GgpB,GAAap2C,EAAAA,EAAAA,YAAW4kE,GAAAA,IAE9B1kE,GAAkDC,EAAAA,EAAAA,UAAS,GAAEC,GAAAC,EAAAA,EAAAA,GAAAH,EAAA,GAAtDyrD,EAAiBvrD,EAAA,GAAEykE,EAAoBzkE,EAAA,GAExCi2C,GAAc71C,EAAAA,EAAAA,UAAQ,kBAAMy/C,GAAez0C,EAAc,GAAE,CAACA,IAEtCs5D,GAAmBC,EAAAA,GAAAA,kBAAvC7uD,MAASquD,QAAWO,WAKtBpZ,GAAkBhrD,EAAAA,EAAAA,cAAY,SAACskE,GACnC,IAAcC,EAA+BD,EAArCjpD,KAAqBmpD,GAAW/9D,EAAAA,EAAAA,GAAK69D,EAAO59D,IAE9C67D,EALe,SAAAgC,GAAU,OAAIA,EAAWr8D,QAAO,SAAAo1C,GAAE,OAAK/+C,IAAAA,QAAU++C,EAAGjiC,KAAK,GAAE,CAKjEopD,CAAeF,GAExBG,GAASngE,EAAAA,EAAAA,GAAA,CACb8W,MAAIkF,EAAAA,EAAAA,GACCgiD,IAEFiC,GAELhyC,EAAa,CAAEnX,KAAMqpD,EAAWzwC,QAASywC,EAAUzwC,SACrD,GAAG,CAACzB,IAYJ,OAVAjgB,EAAAA,EAAAA,YAAU,WACJJ,IAAYwyD,EAAAA,GAAAA,gBAAenvD,EAAOK,GAAAA,YAAYG,UAChD7D,EAASyL,OAAO,6BAADxN,OAA8B6zD,IAG3C9xD,IAAYwyD,EAAAA,GAAAA,gBAAenvD,EAAOK,GAAAA,YAAY+uD,SAChDzyD,EAASyL,OAAO,4BAADxN,OAA6B6zD,GAEhD,GAAG,CAAC9xD,EAAU8xD,EAAezuD,KAG3B9X,EAAAA,EAAAA,KAAA,OAAKY,UAAWkW,IAAW,CAAC7S,EAAQgtC,mBAAoB,qBAAqBhxC,UAC3ED,EAAAA,EAAAA,KAAA,OAAKY,UAAU,oBAAmBX,UAChCD,EAAAA,EAAAA,KAACmnE,GAAAA,GAAc,CAAC98D,eAAgB,CAAE+8D,SAAUV,GAAazmE,UACvDD,EAAAA,EAAAA,KAACqnE,GAAAA,GAAoB,CAAApnE,UACnBD,EAAAA,EAAAA,KAACsnE,EAAAA,GAAc,CAAC/8D,eAAgB,CAAE9J,OAAAA,EAAQ8mE,wBAAyBb,GAAazmE,UAC9EgB,EAAAA,EAAAA,MAACyB,GAAAA,EAAK,CAAAzC,SAAA,EACJD,EAAAA,EAAAA,KAAA,OAAAC,UACED,EAAAA,EAAAA,KAAC8lE,GAAU,CACTr8D,MAAO68D,EAAcvjE,wBAAgCA,0BACrD2H,YAAa3H,sEAGjB/C,EAAAA,EAAAA,KAAA,OAAKY,UAAU,gBAAeX,UAC5BD,EAAAA,EAAAA,KAACwnE,EAAAA,GAAkB,OAErBvmE,EAAAA,EAAAA,MAACyB,GAAAA,EAAK,CAACC,YAAU,EAACC,OAAQ,CAAEC,YAAa,IAAK5C,SAAA,EAC5CD,EAAAA,EAAAA,KAAA,OAAKkB,MAAO,CAAE6I,MAAO,SAAU9J,SAE3B0d,GAAQA,EAAKA,MACX3d,EAAAA,EAAAA,KAACmkE,GAA8B,CAC7BhlD,IAAKA,EACLD,IAAKA,EACLvQ,WAAYA,EACZhN,KAAMA,EACNq2C,WAAYA,EACZsV,gBAAiBA,EACjBC,kBAAmBA,EACnBra,IAAKv1B,EAAKA,KACVs6B,YAAaA,EACbhpB,YAAaA,EACb0+B,gBAAiB,EACjBD,mBAAoBA,EACpB0W,WAAYA,IAEZ,QAGRpkE,EAAAA,EAAAA,KAAA,OAAAC,UACED,EAAAA,EAAAA,KAACizC,EAAS,CACRC,IAAKv1B,EACLhc,KAAMA,EACNq2C,WAAYA,EACZ7E,0BAA2BszB,qBAYjD,EAcAV,GAAsB3kE,aAAe,CACnCuc,KAAM,CAAC,EACPhd,MAAO,CAAC,EACR+sD,oBAAoB,EACpB0W,YAAY,G,oECvLP,SAASqD,GAA4BrrC,GAC1C,IAAMkwB,EAA2BzrD,IAAAA,IAAMu7B,EAAO,4BAE9C,IAAKkwB,GAAgE,IAApCA,EAAyB/oD,OACxD,MAAO,CAAC,EAEV,IAAMqjE,EAAU,GAkDhB,OAhDAta,EAAyBxvC,SAAQ,SAAC4qD,GAChC,IAAMC,EAAS9mE,IAAAA,IAAM6mE,EAAS,0BAE9B,GAAK7mE,IAAAA,SAAW8mE,KAIX9mE,IAAAA,QAAU8mE,EAAQ,QAAW9mE,IAAAA,QAAU8mE,EAAQ,SAApD,CAIA,IAAM/wD,EAAS,CAAC,EAGhB,GADAA,EAAOgxD,WAAaD,EAChB9mE,IAAAA,QAAU8mE,EAAQ,QACpBf,EAAQhkD,KAAKhM,OADf,CAKA,IAAM+G,EAAO9c,IAAAA,IAAM6mE,EAAS,gCAE5B,GAAK7mE,IAAAA,SAAW8c,KAAS9c,IAAAA,QAAU8c,GAAnC,CAIA,IAAM2yC,EAAOzvD,IAAAA,IAAM8c,EAAM,QAEzB,GAAK9c,IAAAA,QAAUyvD,KAASzvD,IAAAA,QAAUyvD,GAAlC,CAIA,IAAMrxC,EAASpe,IAAAA,IAAM8c,EAAM,UAE3B,GAAK9c,IAAAA,QAAUoe,KAAWpe,IAAAA,QAAUoe,GAApC,CAIA,IAAM4oD,EAAS,CAAEC,uBAAwB,qBAAsBC,sBAAuB,qBAGtFlnE,IAAAA,KAAOyvD,GAAM,SAAChlC,EAAKvO,GACb8qD,EAAOv8C,KACT1U,EAAOixD,EAAOv8C,IAAQrM,EAAOlC,GAEjC,IACA6pD,EAAQhkD,KAAKhM,EAVb,CANA,CANA,CANA,CARA,CAqCF,IAEO,CAAEg1C,yBAA0Bgb,EACrC,CC1CO,I,0BCJDoB,GAAO,WACX,IAAMrmE,GAAOC,EAAAA,EAAAA,YAAWC,EAAAA,aAElB4S,GAAW7S,EAAAA,EAAAA,YAAW8S,EAAAA,iBAE5BuzD,GAAwBpwD,EAAAA,GAAAA,oBAAhBC,EAAKmwD,EAALnwD,MAAOowD,EAAID,EAAJC,KACTC,GAAalB,EAAAA,GAAAA,gBAAenvD,EAAOK,GAAAA,YAAYC,YAAa6uD,EAAAA,GAAAA,gBAAenvD,EAAOK,GAAAA,YAAYG,WAAY2uD,EAAAA,GAAAA,gBAAenvD,EAAOK,GAAAA,YAAY+uD,QAE5IkB,GAAgB9lE,EAAAA,EAAAA,cAAY,WAC5BmS,GACFA,EAASyL,OAAO,2BAElBgoD,EAAKG,GAAAA,cAAcC,mBAAoB,CAAEC,iBAAiB,IAC1DL,EAAKG,GAAAA,cAAcG,cACrB,GAAG,CAAC/zD,EAAUyzD,IAERO,GAAarmE,EAAAA,EAAAA,UAAQ,kBAAMT,EAAKmB,UAAUC,UAAgB,GAAE,CAACpB,IAEnE,OACE3B,EAAAA,EAAAA,KAAC0oE,GAAAA,EAAa,CACZrzB,SAAU8yB,EACV/mD,QAASgnD,EACTxnE,UAAU,+BAA8BX,SAEvCwoE,GAGP,EAEaE,GAAuB,WAClC,IAAMhnE,GAAOC,EAAAA,EAAAA,YAAWC,EAAAA,aAExB+mE,GAAwB/wD,EAAAA,GAAAA,oBAAhBC,EAAK8wD,EAAL9wD,MAAOowD,EAAIU,EAAJV,KACTC,GAAalB,EAAAA,GAAAA,gBAAenvD,EAAOK,GAAAA,YAAYC,YAAa6uD,EAAAA,GAAAA,gBAAenvD,EAAOK,GAAAA,YAAYG,WAAY2uD,EAAAA,GAAAA,gBAAenvD,EAAOK,GAAAA,YAAY+uD,QAE5IkB,GAAgB9lE,EAAAA,EAAAA,cAAY,WAChC4lE,EAAKG,GAAAA,cAAcC,mBAAoB,CAAEC,iBAAiB,IAC1DL,EAAKG,GAAAA,cAAcQ,cACrB,GAAG,CAACX,IAEJ,OACEloE,EAAAA,EAAAA,KAACu8B,GAAAA,EAAa,CACZ8Y,SAAU8yB,EACV/mD,QAASgnD,EACTxnE,UAAU,mBAAkBX,SAE3B0B,EAAKmB,UAAUC,6BAGtB,EAGa+lE,GAAe,SAAHhpE,GAAA,IACvBipE,EAAgBjpE,EAAhBipE,iBAAgB,OAEhB9nE,EAAAA,EAAAA,MAACyB,GAAAA,EAAK,CAACC,YAAU,EAACC,OAAQ,CAAEC,YAAa,IAAK5C,SAAA,EAC5CD,EAAAA,EAAAA,KAACgoE,GAAI,KACLhoE,EAAAA,EAAAA,KAAC2oE,GAAoB,KACrB3oE,EAAAA,EAAAA,KAACgpE,GAAAA,aAAY,CAACP,WAAYM,MACpB,EAKVD,GAAa1nE,aAAe,CAC1B2nE,sBAAkBtzD,GCtDpB,IAAMwzD,GAAa,aAEbC,GAAa,CAAC,CAClB75D,GAAI45D,GACJt2C,KAAM,SAAApgB,GAAK,OACTvS,EAAAA,EAAAA,KAACmpE,EAAAA,SAAQ,CAACp3D,KAAK,gBAAe9R,UAC5BD,EAAAA,EAAAA,KAAC+lE,IAAqBl/D,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAK0L,GAAK,IAAEm7C,oBAAkB,MAC3C,EAEbz/C,WFhBqC,WACrC,IAAMtM,GAAOC,EAAAA,EAAAA,YAAWC,EAAAA,aAElBuL,GAAgBxL,EAAAA,EAAAA,YAAWkd,GAAAA,IAC3BsqD,GAAkBxnE,EAAAA,EAAAA,YAAWw6C,EAAAA,iBAE7B3nC,GAAW7S,EAAAA,EAAAA,YAAW8S,EAAAA,iBACpBwJ,GAAUtc,EAAAA,EAAAA,YAAWk7B,GAAAA,cAArB5e,MACApG,GAAUD,EAAAA,GAAAA,oBAAVC,MACAuxD,GAA0BzY,EAAAA,GAAAA,MAA1ByY,sBAEFvxB,EAAuBj3C,IAAAA,IAAMuM,EAAe,CAAC,iBAAkB,yBAE/Dk8D,EAAkB,IAAIC,GAAAA,GAAgBzxB,EAAsB55B,EAAMe,OAAOE,IAAK0iC,GAAez0C,IA6HnG,MAAO,CACLo8D,KA5HW,WACX,IAAMC,EAAa3xD,EAAMquD,QAAQC,WAAWsD,aAE5C,IAAKD,EACH,OAAOzkC,QAAQC,QAAQ,CACrBtnB,KAAM,CACJ,CACEmxC,IAAKhrB,KAAK6lC,SACVhsD,KAAM,CACJ6qC,UAAW,GACX3+C,MAAO,UAMjB,IAAM+/D,EAAaH,EAAWzW,OAAO,GAAG6W,MAElCC,EAA0BrC,GAA4BgC,GA8D5D,OA5DqBH,EAAgBS,kBAAkBH,EAAWI,UAC/D74D,MAAK,SAAC84D,GACL,IAAMC,GAAcC,EAAAA,GAAAA,IAAqBF,EAAUlvB,GAAAA,GAAUqvB,aAAaC,UACpEC,GAAyBC,EAAAA,GAAAA,IAAqB,CAClDC,oBAAqBN,EACrBrvB,gBAAgB,EAChB4vB,6BAA6B,EAC7B3vB,YAAaC,GAAAA,GAAUC,mBACvB0vB,kBAAmB3vB,GAAAA,GAAU4vB,yBAC7BtxB,cAAc,IAEV+Q,EAAY1T,GAAuB,CACvCC,MAAO2zB,EACP55D,SAAU,CACR2mC,YAAauyB,EAAWvyB,YACxBC,aAAcsyB,EAAWtyB,aACzBC,UAAWqyB,EAAWryB,UACtBC,WAAYoyB,EAAWpyB,WACvBC,MAAOmyB,EAAWnyB,MAClBC,MAAOkyB,EAAWlyB,SAIhBkzB,EAAWV,EAAY7f,SACzBwgB,EAAqBD,EAGrBA,IACFC,EAAqBD,EAASE,QAAQ,OAAQ,MAGhD,IAAMC,GAAkBC,EAAAA,GAAAA,WAAUH,GAE5BrlB,EAAeulB,EAAkB,CACrC9G,WAAY2F,EAAWI,SACvBtkB,aAAcqlB,GACZ,KAEI1qC,EAAqFopC,EAArFppC,oBAAqBE,EAAgEkpC,EAAhElpC,eAAgBE,EAAgDgpC,EAAhDhpC,oBAAqB4rB,EAA2Bod,EAA3Bpd,uBAmBlE,MAjBgB,CACd1uC,KAAM,CAAC,CACLmxC,IAAKhrB,KAAK6lC,SACV97D,GAAI47D,EAAW57D,GAAK47D,EAAW57D,GAAK,KACpC8P,MAAI9W,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,CACF2hD,UAAWihB,EAAW57D,GAAK47D,GAAcA,EAAWjhB,UAAY,GAChEhD,aAAAA,GACG4E,EAAUzsC,MACVmsD,GAAuB,IAC1BzpC,oBAAAA,EACAE,eAAAA,EACAE,oBAAAA,EACA4rB,uBAAAA,MAMR,GAGJ,EA4CErwB,KA1CW,SAAHl8B,GAAkB,IAAZ6d,EAAI7d,EAAJ6d,KACduoD,EAKIpuD,EAAMquD,QAAQC,WAJhBmC,EAAerC,EAAfqC,gBACA0C,EAAM/E,EAAN+E,OACAC,EAAsBhF,EAAtBgF,uBACAC,EAAiBjF,EAAjBiF,kBAGF,OAAO,IAAInmC,SAAQ,SAACC,EAASmmC,IAC3BC,EAAAA,EAAAA,IAAQ,CACNn4B,IAAKi4B,GAAiBtkE,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAQ8W,GAAI,IAAE2tD,UAAW,YAAc3tD,EAC7DwX,SAAU,CAAEtnB,GAAIqQ,EAAMe,OAAOtQ,YAC7B48D,QAAS,CAAE19D,GAAIqQ,EAAMe,OAAOusD,WAC5B/2D,SAAAA,GACC,CAAEmpB,SAAUwrC,EAAgBr3D,KAAMpQ,KAAAA,EAAM82C,eAAgBhkC,IAAYtD,MAAK,SAACyF,GACvE2xD,EACF2C,EAAuBt0D,GAEvBq0D,EAAOr0D,GAGT,IAAMwlD,EAAgBv7D,IAAAA,MAAQ8c,EAAKA,MAChCjd,KAAI,SAAAk/C,GAAE,OAAI/+C,IAAAA,IAAM++C,EAAI,kDAAkD,IACtE6rB,UACAzqE,QAEHqoE,EACEnrD,EAAMe,OAAOtQ,WACbuP,EAAMe,OAAOusD,eACb/1D,EACA2mD,GAGFn3B,GACF,IAAGtlB,OAAM,WACPyrD,GACF,GACF,GACF,EAMF,IE3HMM,GAA8B,SAAH5rE,GAO1B,IANL6rE,EAAQ7rE,EAAR6rE,SACA3zB,EAAUl4C,EAAVk4C,WACA4zB,EAAQ9rE,EAAR8rE,SACAX,EAAMnrE,EAANmrE,OACAC,EAAsBprE,EAAtBorE,uBACAC,EAAiBrrE,EAAjBqrE,kBAEMlvB,GAAkBr6C,EAAAA,EAAAA,YAAWkiD,GAAAA,wBAE7B+nB,GAAmBzpE,EAAAA,EAAAA,UAAQ,kBAC/B41C,EAAWhgC,YAAY,wBAAwB,GAC9C,CAACggC,IAEE8zB,GAAS1pE,EAAAA,EAAAA,UAAQ,iBAAO,CAC5BiN,GAAI,sBACJ08D,YAAa9C,GACb+C,MAAO9C,GACP+C,QAAS,CACPC,OAAQ,WAAQ,EAChBC,SAAU,WAAF,OAAQP,GAAU,GAE5BQ,kBAAmB,CACjB1C,aAAciC,EACdV,OAAAA,EACAC,uBAAAA,EACAC,kBAAAA,GAEFkB,sBAAsB,EACvB,GAAG,CAACV,EAAUC,EAAUX,EAAQC,EAAwBC,IAEzD,OACEnrE,EAAAA,EAAAA,KAACssE,GAAAA,GAAyB,CACxBv6D,KAAK,wBACLkqC,gBAAiBA,EACjBswB,eAAe,EAAMtsE,UAErBD,EAAAA,EAAAA,KAACo2D,GAAAA,EAAc,CAACC,MAAOC,GAAAA,EAAcr2D,UACnCD,EAAAA,EAAAA,KAACwsE,EAAAA,SAAQ,CAACz6D,KAAK,wBAAuB9R,UACpCD,EAAAA,EAAAA,KAACmpE,EAAAA,SAAQ,CAACp3D,KAAK,wBAAuB9R,UACpCD,EAAAA,EAAAA,KAACysE,GAAAA,OAAM,CAACX,OAAQA,EAAO7rE,UACrBD,EAAAA,EAAAA,KAAC+Y,GAAAA,EAAgB,CAACC,WAAW,oBAAoBC,aAAc4yD,EAAiB5rE,UAC9EgB,EAAAA,EAAAA,MAACyrE,GAAAA,gBAAe,CAACvwC,SAAUwwC,GAAAA,gBAAgB1sE,SAAA,EACzCD,EAAAA,EAAAA,KAAC4sE,GAAAA,OAAM,CAACnqE,KAAK,gBAAgBoqE,UAAWC,GAAAA,iBACxC9sE,EAAAA,EAAAA,KAAC4sE,GAAAA,OAAM,CAACnqE,KAAK,UAAUoqE,UAAWE,GAAAA,YAAa9U,YAAY,gBAC3Dj4D,EAAAA,EAAAA,KAAC4sE,GAAAA,OAAM,CAACnqE,KAAK,eAAeoqE,UAAWG,GAAAA,sBACvChtE,EAAAA,EAAAA,KAAC4sE,GAAAA,OAAM,CAACnqE,KAAK,SAASoqE,UAAW/D,mBASnD,EAWA4C,GAA4BtqE,aAAe,CACzC+pE,mBAAmB,GAGd,IAAM8B,IAAsBC,EAAAA,GAAAA,KAAmBC,EAAAA,GAAAA,IAA0BzB,I,mmCC7FnEnvC,IAJgB6wC,EAAAA,EAAAA,YAAWC,EAAAA,cAAqB,CAC3DjsD,QAASksD,EAAAA,qBAGkBF,EAAAA,EAAAA,YAAWG,EAAAA,cAAqB,CAC3DnsD,QAASksD,EAAAA,qBAGExoE,GAAOsoE,EAAAA,EAAAA,YAAWI,EAAAA,KAAY,CACzCpsD,QAASksD,EAAAA,oBAGEpqE,GAAYkqE,EAAAA,EAAAA,YAAWK,EAAAA,UAAiB,CACnDnqE,SAAUgqE,EAAAA,oBAGCrlB,GAAamlB,EAAAA,EAAAA,YAAWM,EAAAA,WAAkB,CACrDtsD,QAASksD,EAAAA,oBC1BElgC,EAAmB,WAAC,MAA6B,CAC5DugC,eAAgB,CACd1hE,UAAW,GACXlC,MAAO,IACP+I,UAAW,IACXG,QAAS,GACTq6B,cAAe,GACfv6B,WAAY,GACZw6B,WAAY,UACZC,UAAW,iCACXC,aAAc,EACd,sCAAuC,CACrCF,WAAY,6DACZE,aAAc,EACd1jC,MAAO,mBACP2a,OAAQ,kBACR3R,WAAY,kBACZ,UAAW,CACT,iBAAkB,CAChB5R,QAAS,SAGb,yBAA0B,CACxBb,MAAO,qBAGX,WAAY,CACV2L,UAAW,IAEb,8BAA+B,CAC7BlC,MAAO,IACP,cAAe,CACbwjC,WAAY,6DACZE,aAAc,EACd1jC,MAAO,mBACP2a,OAAQ,kBACR3R,WAAY,kBACZ5R,QAAS,OACTwsC,SAAU,OACVjiC,cAAe,SACfR,WAAY,SACZ,UAAW,CACT,iBAAkB,CAChB/J,QAAS,SAGb,yBAA0B,CACxBb,MAAO,oBAET,eAAgB,CACdyJ,MAAO,GACP2a,OAAQ,GACRzY,UAAW,KAGf,sBAAuB,CACrBoZ,OAAQ,oBACRkoB,WAAY,qBACZjsC,WAAY,IACZmsC,aAAc,EACd,WAAY,CACVphC,QAAS,WACT/L,MAAO,UACPstC,YAAa,EACbC,WAAY,uBAIlB,yBAA0B,CACxB1sC,QAAS,OACT+J,WAAY,UAEd,sBAAuB,CACrB5J,WAAY,KAEd,wBAAyB,CACvByI,MAAO,mBACPsb,OAAQ,kBACRpS,QAAS,kBAEX,2BAA4B,CAC1BuO,SAAU,WACVssB,gBAAiB,kBACjB/jC,MAAO,mBACP,UAAW,CACT,iBAAkB,CAChB5I,QAAS,SAGb,yBAA0B,CACxBb,MAAO,qBAIX,4BAA6B,CAC3ByS,WAAY,IAEd,uBAAwB,CACtB06B,aAAc,EACdjjC,OAAQ,mGACRT,MAAO,mBACP2a,OAAQ,oBAGZkpD,qBAAsB,CACpB3hE,UAAW,GACXlC,MAAO,IACP+I,UAAW,IACXG,QAAS,GACTq6B,cAAe,GACfv6B,WAAY,GACZw6B,WAAY,UACZC,UAAW,iCACXC,aAAc,EACd,sCAAuC,CACrCF,WAAY,6DACZE,aAAc,EACd1jC,MAAO,mBACP2a,OAAQ,kBACR3R,WAAY,kBACZ,UAAW,CACT,iBAAkB,CAChB5R,QAAS,SAGb,yBAA0B,CACxBb,MAAO,qBAGX,WAAY,CACV2L,UAAW,IAEb,8BAA+B,CAC7BlC,MAAO,IACP,cAAe,CACbwjC,WAAY,6DACZE,aAAc,EACd1jC,MAAO,mBACP2a,OAAQ,kBACR3R,WAAY,kBACZ5R,QAAS,OACTwsC,SAAU,OACVjiC,cAAe,SACfR,WAAY,SACZ,UAAW,CACT,iBAAkB,CAChB/J,QAAS,SAGb,yBAA0B,CACxBb,MAAO,oBAET,eAAgB,CACdyJ,MAAO,GACP2a,OAAQ,GACRzY,UAAW,KAGf,sBAAuB,CACrBoZ,OAAQ,oBACRkoB,WAAY,qBACZjsC,WAAY,IACZmsC,aAAc,EACd,WAAY,CACVphC,QAAS,WACT/L,MAAO,UACPstC,YAAa,EACbC,WAAY,uBAIlB,yBAA0B,CACxB1sC,QAAS,OACT+J,WAAY,UAEd,sBAAuB,CACrB5J,WAAY,KAEd,wBAAyB,CACvByI,MAAO,mBACPsb,OAAQ,kBACRpS,QAAS,kBAEX,2BAA4B,CAC1BuO,SAAU,WACVssB,gBAAiB,kBACjB/jC,MAAO,mBACP,UAAW,CACT,iBAAkB,CAChB5I,QAAS,SAGb,yBAA0B,CACxBb,MAAO,qBAIX,4BAA6B,CAC3ByS,WAAY,IAEd,uBAAwB,CACtB06B,aAAc,EACdjjC,OAAQ,mGACRT,MAAO,mBACP2a,OAAQ,oBAGZspB,cAAe,CACb3oB,OAAQ,qBAEVwoD,iBAAkB,CAChB1sE,QAAS,OACT4I,MAAO,OACPyB,eAAgB,WAChBkZ,OAAQ,GAEVopD,eAAgB,CACdx5C,SAAU,GACVhzB,WAAY,KAEdktC,iBAAkB,CAChBzkC,MAAO,QAETgkE,gBAAiB,CACfrpD,OAAQ,IAEVgqB,cAAe,CACb1iC,SAAU,QACVjC,MAAO,OACPkJ,QAAS,GACTq6B,cAAe,GACf9rB,SAAU,SACV8sB,IAAK,MACLntC,QAAS,OACTwsC,SAAU,QAEZqgC,MAAO,CACLvgC,aAAc,MACdjjC,OAAQ,oGAEVykC,WAAY,CACVhjC,UAAW,IAEbkjC,WAAY,CACVp8B,WAAY,GACZhJ,MAAO,QAETqlC,aAAc,CACZjuC,QAAS,OACT+J,WAAY,SACZC,UAAW,QAEbqkC,uBAAwB,CACtB9qB,OAAQ,EACR3a,MAAO,EACP0jC,aAAc,MACdtsC,QAAS,eACTgtC,OAAQ,WAEVsB,iBAAkB,CAChB/qB,OAAQ,EACR3a,MAAO,EACP2lC,QAAS,GAEXC,oBAAqB,CACnBxuC,QAAS,OACTgK,UAAW,OAEb8iE,kBAAmB,CACjB9sE,QAAS,OACTuK,cAAe,UAEjBmkC,kBAAmB,CACjB98B,WAAY,GACZK,WAAY,IAEd08B,eAAgB,CACd3uC,QAAS,OACTwsC,SAAU,OACVxiC,UAAW,GACX4kC,OAAQ,MACR7kC,WAAY,UAEd8kC,iBAAkB,CAChBlC,gBAAiB,UACjB76B,QAAS,UACTw6B,aAAc,GAEhBwC,YAAa,CACX3vC,MAAO,UACPgB,WAAY,IACZH,QAAS,OACT+J,WAAY,SACZC,UAAW,GAEb+kC,kBAAmB,CACjBpC,gBAAiB,UACjB76B,QAAS,UACTw6B,aAAc,GAEhB0C,aAAc,CACZ7vC,MAAO,UACPgB,WAAY,IACZH,QAAS,OACT+J,WAAY,SACZC,UAAW,GAEbilC,UAAW,CACT9b,SAAU,GACVhzB,WAAY,KAEd+uC,eAAgB,CACdt9B,WAAY,EACZu6B,cAAe,GAEjBgD,mBAAoB,CAClBv9B,WAAY,EACZu6B,cAAe,GAEjB4gC,4BAA6B,CAC3BnkE,MAAO,IAETokE,UAAW,CACT75C,SAAU,IAEb,EAEYuc,EAAmC,WAAH,MAAU,CACrDC,4BAA6B,CAC3B,oCAAqC,CACnC,WAAY,CACVhD,gBAAiB,cAEjB,gBAAiB,CACf1oB,OAAQ,aAIdnZ,UAAW,IAEb8kC,aAAc,CACZ5vC,QAAS,OACTqK,eAAgB,SAChBN,WAAY,SACZnB,MAAO,QACP2a,OAAQ,OACR6oB,WAAY,WAEf,E,YC9UY0F,EAAY,SAAC1gC,GACxB,IACE5Q,EAQE4Q,EARF5Q,KACAuxC,EAOE3gC,EAPF2gC,IACA2yB,EAMEtzD,EANFszD,0BACAzyB,EAKE7gC,EALF6gC,kBACAC,EAIE9gC,EAJF8gC,oBACAC,EAGE/gC,EAHF+gC,uBACArkB,EAEE1c,EAFF0c,YACAm/C,EACE77D,EADF67D,oBAGIC,EAAUn7B,GAAOA,EAAIv1B,MAAQ9c,IAAAA,QAAUqyC,EAAIv1B,MAASu1B,EAAIv1B,KAAO,GAE/D2wD,GAAW/3D,EAAAA,EAAAA,UAEXi9B,GAAiBtvC,EAAAA,EAAAA,kBAAiBkpC,GAElCqG,GAAgBvvC,EAAAA,EAAAA,kBAAiBmvC,GAEjCpvC,EAAUqvC,EAAyBG,EAAgBD,EAEjDE,EAAqBR,EAArBQ,iBAER5xC,GAA8CC,EAAAA,EAAAA,UAAS,GAAEC,GAAAC,EAAAA,EAAAA,GAAAH,EAAA,GAAlDysE,EAAevsE,EAAA,GAAEwsE,EAAkBxsE,EAAA,GAE1CiiD,GAAsCliD,EAAAA,EAAAA,UAAS,OAAMmiD,GAAAjiD,EAAAA,EAAAA,GAAAgiD,EAAA,GAA9CwqB,EAAWvqB,EAAA,GAAEwqB,EAAcxqB,EAAA,GAC5ByqB,EAAyB1/C,GAAeA,EAAY5qB,SAAW4qB,EAAY5qB,QAAQuqE,gBAEnF96B,EAAuB,SAACC,GAK5B,OApCmB,MA+BwB33B,UAAA7Y,OAAA,QAAAkS,IAAA2G,UAAA,GAAAA,UAAA,GAAG,OACnBs3B,GAEL,GAAuBK,CAG/C,EAUM86B,EAAiB,SAAC96B,GACtBy6B,EAAmBz6B,EACrB,EAEM+6B,EAAeT,EAAOn6B,MAAMJ,EAAqB,GAAIA,EAAqB,GAAK,GAE/Ei7B,EAAeV,EAAOv6B,EAAqBy6B,KAAqBF,EAAO,IAE7Ex5D,EAAAA,EAAAA,YAAU,WACR25D,EAAmB,EACrB,GAAG,CAAC96B,KAEJ7+B,EAAAA,EAAAA,YAAU,WACJ05D,EAAkBO,EAAavrE,OAAS,GAC1CirE,EAAmB,GAErB3I,EAA0B0I,EAE5B,GAAG,CAACA,EAAiBO,EAAavrE,SAElC,IAAMsuC,EAAUk9B,GAAgBA,EAAapxD,MAAQoxD,EAAapxD,KAAKqwD,OAASe,EAAapxD,KAAKqwD,MAAMlrC,KAAQ,GAsBhH,OApBAjuB,EAAAA,EAAAA,YAAU,WACJy5D,EAAS93D,SACX83D,EAAS93D,QAAQgzD,MAErB,GAAG,CAAC33B,KAGJh9B,EAAAA,EAAAA,YAAU,WAAO,IAADm6D,EACd,GAAgB,OAAZD,QAAY,IAAZA,GAAkB,QAANC,EAAZD,EAAcpxD,YAAI,IAAAqxD,GAAlBA,EAAoBhB,MAAO,CAC7B,IAAAiB,EAA0BF,EAAapxD,KAAKqwD,MAApCtpD,EAAMuqD,EAANvqD,OAAQ3a,EAAKklE,EAALllE,MAId2kE,EAHiBhqD,EAAS3a,EAGX,MAEA,MAEnB,CACF,GAAG,CAACglE,KAGF9tE,EAAAA,EAAAA,MAAA,OAAKL,UAAWqD,EAAQyqC,cAAczuC,SAAA,EACpCD,EAAAA,EAAAA,KAAA,OAAKY,UAAWqD,EAAQ8pE,gBAAgB9tE,UACtCgB,EAAAA,EAAAA,MAACf,EAAAA,KAAI,CAACU,UAAWqD,EAAQ6pE,eAAe7tE,SAAA,CAAC,IAAE0B,EAAKmB,UAAUC,cAAoB,UAEhF/C,EAAAA,EAAAA,KAAA,OAAKY,UAAWqD,EAAQuqC,iBAAiBvuC,SACtC0uE,GACC3uE,EAAAA,EAAAA,KAACkvE,EAAAA,EAAe,CAACC,SAAUt9B,EAAQ9nC,MAAM,OAAOqkE,oBAAqBA,EAAqBzsE,KAAMA,KAEhG3B,EAAAA,EAAAA,KAAA,SAAOY,UAAWqD,EAAQ+pE,MAAOtpD,OAAQ+pD,EAAa1kE,MAAM,OAAOqlE,UAAQ,EAACC,IAAKf,EAASruE,UACxFD,EAAAA,EAAAA,KAAA,UAAQ8iC,IAAK+O,SAKhBuB,GAAqB07B,EAAavrE,OAAS,IAC5CvD,EAAAA,EAAAA,KAAA,OAAKY,UAAWqD,EAAQkrC,WAAWlvC,UACjCgB,EAAAA,EAAAA,MAAA,OAAKL,UAAWqD,EAAQmrC,aAAcluC,MAAO,CAAEsK,eAAgB,iBAAkBvL,SAAA,EAC/EgB,EAAAA,EAAAA,MAAC6D,EAAI,CACHsc,QArEU,WACpBotD,EAAmBD,EAAkB,EACvC,EAoEYl5B,SAA8B,IAApBk5B,EAAsBtuE,SAAA,EAEhCD,EAAAA,EAAAA,KAACs1C,EAAAA,SAAQ,CAACC,SAAS,gBAAgB,KAACt0C,EAAAA,EAAAA,MAACf,EAAAA,KAAI,CAAAD,SAAA,CAAC,IAAE0B,EAAKmB,UAAUC,eAAqB,WAElF/C,EAAAA,EAAAA,KAAA,OAAKY,UAAWqD,EAAQ0rC,oBAAoB1vC,SAE5C6uE,EAAapuE,KAAI,SAACstE,EAAOj6B,GAAG,OAC1B/zC,EAAAA,EAAAA,KAAA,OAAAC,UACED,EAAAA,EAAAA,KAAA,QAAM01C,UAAW,WAAF,OAAQm5B,EAAe96B,EAAI,EAAE3yB,QAAS,WAAF,OAAQytD,EAAe96B,EAAI,EAAEnzC,UAAWqD,EAAQurC,uBAAwBtuC,MAAO,CAAE4sC,gBAAiBgG,EAAqBC,KAASD,EAAqBy6B,GAAmB,UAAY,cACnO,OAIRttE,EAAAA,EAAAA,MAAC6D,EAAI,CACHsc,QAhFU,WACpBotD,EAAmBD,EAAkB,EACvC,EA+EYl5B,SAAUk5B,IAAoBO,EAAavrE,OAAS,GAA6B,IAAxBurE,EAAavrE,OAAatD,SAAA,EAEnFgB,EAAAA,EAAAA,MAACf,EAAAA,KAAI,CAAAD,SAAA,CAAC,IAAE0B,EAAKmB,UAAUC,WAAiB,OAAQ,KAAC/C,EAAAA,EAAAA,KAACs1C,EAAAA,SAAQ,CAACC,SAAS,0BAM5Ev1C,EAAAA,EAAAA,KAAA,OAAKY,UAAWqD,EAAQgrC,WAAWhvC,UACjCD,EAAAA,EAAAA,KAACE,EAAAA,KAAI,CAAAD,SACF0B,EAAKmB,UAAUC,uIAK1B,EAiBAkwC,EAAU7xC,aAAe,CACvBgyC,mBAAmB,EACnBC,oBAAqBxyC,IAAAA,KACrByyC,wBAAwB,EACxB86B,oBAAqBvtE,IAAAA,M,+YCrKjBg+D,GAAYvK,EAAAA,EAAAA,GAAW,CAC3BvY,iBAAel1C,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,CACbkD,MAAO,SACJg1D,EAAAA,GAAW15C,OAAO,MAAO,SAAU,YAAU,IAChDX,OAAQ,OACRvjB,QAAS,QACN49D,EAAAA,GAAWtxB,aAAa,QAE7B6hC,wBAAyB,CACvBvlE,MAAO,QACP2a,OAAQ,QAEV6vC,OAAQ,CACNpzD,QAAS,OACTuK,cAAe,SACfyH,SAAU,GAEZqhD,QAAS,CACPl0D,MAAO,UACPg0B,SAAU,QAEZi7C,gBAAiB,CACfj7C,SAAU,UAIDk7C,GAAiB,SAAH1vE,GAAqC,IAA/BshB,EAAOthB,EAAPshB,QAASquD,EAAc3vE,EAAd2vE,eAClCxrE,EAAU46D,IACVl9D,GAAOC,EAAAA,EAAAA,YAAWC,EAAAA,aAExB,OACE7B,EAAAA,EAAAA,KAAA,OAAKY,WAAWo/D,EAAAA,EAAAA,GAAa/7D,EAAQ83C,gBAAiB,YAAa0zB,GAAkBxrE,EAAQqrE,yBAAyBrvE,UACpHD,EAAAA,EAAAA,KAACihB,EAAAA,EAAM,CAACC,WAAW,cAActgB,UAAWqD,EAAQswD,OAAQnzC,QAASA,EAAS,aAAYzf,EAAKmB,UAAUC,oBAA0B9C,UACjID,EAAAA,EAAAA,KAACm1D,EAAAA,IAAU,CAACv0D,WAAWo/D,EAAAA,EAAAA,GAAa/7D,EAAQuwD,QAASib,GAAkBxrE,EAAQsrE,sBAIvF,EAOAC,GAAepuE,aAAe,CAC5BquE,gBAAgB,G,2FCpDLC,GAAkB,CAC7B7lE,MAAO,CACL4jC,aAAc,GAEhBgV,eAAgB,CACd/9B,OAAQ,GACRvjB,QAAS,QAEXy2D,qBAAsB,CACpBz2D,QAAS,OACTgK,UAAW,QAEb4sD,wBAAyB,CACvBhuD,MAAO,IACP,QAAS,CACPoQ,cAAe,QAGnB0+C,OAAQ,CACNlW,OAAQ,GACR32C,SAAU,WAEZqtD,gBAAiB,CACf,kBAAmB,CACjBl4D,QAAS,OACTkkB,OAAQ,OACR,kCAAmC,CACjClS,SAAU,EACVmhB,SAAU,OACVhzB,WAAY,IACZ4R,WAAY,OACZ,QAAS,CACP,gBAAiB,CACfohB,SAAU,OACVphB,WAAY,OACZ/R,QAAS,SACTgZ,cAAe,WAGnBlO,UAAW,M,kHCtBb4yD,IAAYvK,EAAAA,EAAAA,GAAW,CAC3B9E,WAAS3oD,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,CACP2a,SAAU,WACVrgB,QAAS,OACTqK,eAAgB,SAChBN,WAAY,SACZsiC,UAAW,oFACRuxB,EAAAA,GAAWtxB,aAAa7qC,GAAAA,EAAO+sE,oBAC/B5Q,EAAAA,GAAW5tB,SAAS,WAEzBy+B,QAAS,CACPpuD,SAAU,WACV8sB,IAAK,EACLD,KAAM,EACNmqB,MAAO,EACP7V,OAAQ,EACRruB,SAAU1xB,GAAAA,EAAOitE,iBAEnBC,iBAAkB,CAChB3uE,QAAS,OACT+J,WAAY,SACZC,UAAW,MACXc,UAAW,OAEb8jE,MAAIlpE,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,CACF2a,SAAU,WACV8sB,IAAK,QACLD,KAAMzrC,GAAAA,EAAOkJ,mBACbgiC,gBAAiB,QACjBxtC,MAAO,QACPyJ,MAAO,OACPuqB,SAAU1xB,GAAAA,EAAOitE,gBACjBnrD,OAAQ9hB,GAAAA,EAAOotE,mBACf7uE,QAAS,OACT+J,WAAY,SACZM,eAAgB,UACbuzD,EAAAA,GAAWtxB,aAAa7qC,GAAAA,EAAOqtE,qBAC/BlR,EAAAA,GAAW5tB,SAAS,WAEzBvnC,KAAM,CACJ0qB,SAAU1xB,GAAAA,EAAOstE,iBAEnBC,eAAgB,CACd3uD,SAAU,WACV8sB,IAAK,EACLD,KAAM,EACNmqB,MAAO,EACP7V,OAAQ,GAEVqrB,MAAO,CACLjkE,MAAO,OACP2a,OAAQ,UAcC0rD,GAAsB,SAAH5vE,GAEzB,IADL6vE,EAAU7vE,EAAV6vE,WAAYtW,EAAYv5D,EAAZu5D,aAAcuW,EAAuB9vE,EAAvB8vE,wBAAyB3uE,EAAInB,EAAJmB,KAAM4uE,EAAW/vE,EAAX+vE,YAEnDtsE,EAAU46D,KAChB2R,EAAkCh7D,EAAAA,UAAe,GAAMi7D,GAAAxuE,EAAAA,EAAAA,GAAAuuE,EAAA,GAAhDE,EAASD,EAAA,GAAEE,EAAYF,EAAA,GACxB3tC,EAAMutC,EAAW7vB,aACfz2C,EAAUsmE,EAAWl0C,SAArBpyB,MAEFyqC,EAAczqC,EADDsmE,EAAWl0C,SAAtBzX,OAKFksD,EADeP,EAAWl0C,SAAxB00C,SACwB,IAC1BC,EAAUhtC,KAAKgzB,MAAO8Z,EAAgB,IACtCG,EAAUjtC,KAAKgzB,MAAO8Z,EAAgB,IACtCI,EAAc,GAAAt+D,OAAMo+D,EAAU,GAAK,IAAM,IAAEp+D,OAAGo+D,EAAO,KAAAp+D,OAAIq+D,EAAU,GAAK,IAAM,IAAEr+D,OAAGq+D,GACnFrmE,EAzBoB,SAAH5K,GAA8B,IAAxBuwE,EAAUvwE,EAAVuwE,WAAY1uE,EAAI7B,EAAJ6B,KACjCkvE,EAAaR,EAAWl0C,SAAxB00C,SACFI,EAAQZ,EAAWl0C,SAAS+0C,OAAOxwE,KAAI,SAAAywE,GAAK,OAAIA,EAAMrgE,KAAKrJ,KAAK,IAAI,IAC1E,OAAO2pE,EAAAA,GAAAA,eAAczvE,EAAKmB,UAAUC,yFAA7BquE,CAA6H,CAClIP,SAAAA,EACAnmE,YAAaumE,EAAMxpE,KAAK,MAE5B,CAkBsB4pE,CAAoB,CAAEhB,WAAAA,EAAY1uE,KAAAA,IAEtD,OACEV,EAAAA,EAAAA,MAAA,OAAKL,UAAU,kCAAiCX,SAAA,EAC9CgB,EAAAA,EAAAA,MAAA,OACEL,WAAWo/D,EAAAA,EAAAA,GAAa/7D,EAAQurD,UAAW,8BAC3CpuC,QAASkvD,EACT56B,WAAW47B,EAAAA,GAAAA,aAAYhB,GACvB76B,KAAK,SACLD,SAAU,EACV+7B,YAAa,WAAF,OAAQZ,GAAa,EAAK,EACrCa,WAAY,WAAF,OAAQb,GAAa,EAAM,EACrCc,QAAS,WAAF,OAAQd,GAAa,EAAK,EACjCjS,OAAQ,WAAF,OAAQiS,GAAa,EAAM,EACjC,aAAYjmE,EAAYzK,SAAA,EAExBD,EAAAA,EAAAA,KAACoxC,GAAAA,EAAgB,CACftO,IAAKA,EACLiS,cAAehrC,EACfyqC,YAAaA,EACbH,kBAAmB0lB,EACnB3kB,YAAarrC,IAEd2mE,IACC1wE,EAAAA,EAAAA,KAAA,OAAKY,UAAWqD,EAAQksE,eAAelwE,UACrCD,EAAAA,EAAAA,KAAA,SACE0xE,UAAQ,EACRC,MAAI,EACJ/wE,UAAWqD,EAAQ+pE,MAAM/tE,UAEzBD,EAAAA,EAAAA,KAAA,UAAQ8iC,IAAKutC,EAAW7jE,WAI9BxM,EAAAA,EAAAA,KAAA,OAAKY,WAAWo/D,EAAAA,EAAAA,GAAa/7D,EAAQ2rE,QAAS,4BAA4B3vE,UACxEgB,EAAAA,EAAAA,MAAA,OAAKL,WAAWo/D,EAAAA,EAAAA,GAAa/7D,EAAQ8rE,KAAM,yBAAyB9vE,SAAA,EAClED,EAAAA,EAAAA,KAAC4xE,GAAAA,IAAY,CAAChxE,UAAWqD,EAAQ2F,OAChConE,UAKLT,IACEtvE,EAAAA,EAAAA,MAAA,OAAKL,UAAWqD,EAAQ6rE,iBAAiB7vE,SAAA,EACvCD,EAAAA,EAAAA,KAACgR,GAAAA,MAAK,CAAA/Q,SAAE0B,EAAKmB,UAAUC,eACvB/C,EAAAA,EAAAA,KAACqgE,GAAAA,EAAK,CAAC//D,MAAM,UAASL,SAAE0B,EAAKmB,UAAU+uE,GAAuBxB,EAAWyB,iBAMrF,ECxIMC,GAAiB,SAAC/a,GAAU,IAAuBC,GAAvB76C,UAAA7Y,OAAA,QAAAkS,IAAA2G,UAAA,GAAAA,UAAA,GAAqB,CAAC,GAAlB86C,QAAY,MAAa,CAC7DgB,MAAO,CACL5pB,IAAK,IAEP0jC,SAAU,CACRj/D,WAAY,GACZzS,YANyC,IAAA22D,EAAG,CAAC,EAACA,GAM/Bgb,aAEjBC,YAAa,CACXxuE,YAAa,GACborC,aAAc,GACdqjC,UAAW,gBACXh/D,SAAU,GAEZilD,WAAY,CACV9jC,SAAU,GACVhzB,WAAY,IACZH,QAAS,eACT+R,WAAY,QAEdk/D,eAAgB,CACdr/D,WAAY,GACZuhB,SAAU,OACVgZ,cAAe,IAEjB+kC,cAAe,CACblxE,QAAS,OACTgK,UAAW,OACX4kC,OAAQ,OACRqvB,oBAAqB,eAExB,EAEYkT,GAA4B,SAAH9xE,GAE/B,IADLmB,EAAInB,EAAJmB,KAAM24C,EAAM95C,EAAN85C,OAAQi4B,EAAK/xE,EAAL+xE,MAAOjC,EAAuB9vE,EAAvB8vE,wBAAyBrhD,EAAWzuB,EAAXyuB,YAExChrB,GAAUC,EAAAA,EAAAA,kBAAiB6tE,IAC3BS,GAAaj8D,EAAAA,EAAAA,QAAO,MAClBN,GAAa6uC,EAAAA,EAAAA,+BAAb7uC,SACRsB,GAAgC3V,EAAAA,EAAAA,YAAW6uD,EAAAA,IAEzCgiB,IAF+DxwE,EAAAA,EAAAA,GAAAsV,EAAA,GAArC,IAGC,CAAC,GAD5Bk7D,YAEIC,EAA0BzjD,EAAY5qB,QAAQsuE,iBAAmB1jD,EAAY2jD,iBAE7ElqB,GAAYpmD,EAAAA,EAAAA,cAAY,SAAC46C,GAC7B,IAAM16C,EAAS06C,GAAOA,EAAI21B,eACV,WAAZ31B,EAAI5xB,KAAqBknD,EAAWh8D,SAAWg8D,EAAWh8D,QAAQs8D,QAAQ,IAADpgE,OAAKzO,EAAQi0D,QAAS6a,SAASvwE,KAC1G+vE,GAEJ,GAAG,CAACtuE,EAAQi0D,MAAOqa,IAUbS,EAAc,SAACj2D,GACnBuzD,EAAwBvzD,GACxBw1D,GACF,EAEA,OACEvyE,EAAAA,EAAAA,KAAC21D,EAAAA,MAAK,CACJrb,OAAQA,EACR73C,KAAMszD,EAAAA,UAAUC,OAChBtN,UAAWA,EACXyN,WAAYx0D,EAAKmB,UAAUC,sBAC3BnC,UAAW2a,IAAWtX,EAAQi0D,MAAO,wCACrC+a,kBAAgB,EAChBhd,YAAY,QACZC,qBAAsBv0D,EAAKmB,UAAUC,SACrCmwE,sBAvB0B,WAAH,OACzBlzE,EAAAA,EAAAA,KAACu8B,EAAAA,cAAa,CACZ37B,UAAW2a,IAAW,gBAAiB,gCACvC6F,QAAS,WAAF,OAAQmxD,GAAO,EACtBzhE,KAAMnP,EAAKmB,UAAUC,WACrB,EAkB6C9C,UAE7CgB,EAAAA,EAAAA,MAACm1D,GAAAA,EAAc,CAACC,MAAOC,GAAAA,EAAcr2D,SAAA,EACnCD,EAAAA,EAAAA,KAAA,OAAKqvE,IAAKmD,EAAY/8B,KAAK,UAAU,aAAW,IAAI70C,UAAWqD,EAAQmuE,eAAenyE,UACpFD,EAAAA,EAAAA,KAACk8B,GAAAA,cAAa,CACZE,MAAO,CACL+2C,OAAQ,SAAAriE,GAAI,OAAI9Q,EAAAA,EAAAA,KAAA,UAAAC,SAAS6Q,GAAc,EACvCmF,SAAAA,GAEFkmB,SAAUx6B,EAAKmB,UAAUC,qDAG7B/C,EAAAA,EAAAA,KAAA,OAAKY,UAAW2a,IAAWtX,EAAQouE,cAAe,gCAAgCpyE,SAC/EwyE,GACCA,EAAY/xE,KAAI,SAAC2vE,EAAYtzD,GAAK,OAAM/c,EAAAA,EAAAA,KAACowE,GAAmB,CAE1DC,WAAYA,EACZC,wBAAyB,WAAF,OAAQ0C,EAAYj2D,EAAM,EACjDg9C,aAAc,IACdp4D,KAAMA,EACN4uE,YAAamC,GALRrC,EAAW5vB,aAMhB,UAMd,ECpGMkW,GAAY,CAChB5sD,MAAO,IACP2a,OAAQ,GACRkpB,YAAa,GAOT0rB,GAAiB,SAAHx5D,GAAkB,IAAZ6B,EAAI7B,EAAJ6B,KAClBkjB,GAAkBziB,EAAAA,EAAAA,UAAQ,WAC9B,IAAMm3D,EAAiB,GAOvB,OALA14D,IAAAA,KAAOA,IAAAA,MAPsB,IAOa,WACxC04D,EAAe32C,KAAK,CAAEngB,KAAM+hB,GAAAA,EAAmBC,KAAMC,OAAQ,GAAI3a,MAAO,MACxEwvD,EAAe32C,KAAK,CAAEngB,KAAM+hB,GAAAA,EAAmBO,IAAKhb,MAAO,GAAI2a,OAAQ,IACzE,IAEO60C,CACT,GAAG,IAEH,OACEt4D,EAAAA,EAAAA,MAAA,OAAKC,MAAO,CAAEC,QAAS,OAAQ4I,MAAO,QAAS4jC,SAAU,QAAS1tC,SAAA,EAChED,EAAAA,EAAAA,KAACw5D,GAAAA,EAAO,CAACC,cAAc,QAAQ50D,KAAK,aAAa2W,MAAO7Z,EAAKmB,UAAUC,8CACvE/C,EAAAA,EAAAA,KAAC4kB,GAAAA,EAAO,CAAC1jB,MAAO,CAAE6I,MAAO,QAAU2vD,qBAAqB15D,EAAAA,EAAAA,KAAC25D,GAAAA,EAAoB,CAAC5vD,MAAM,OAAO8a,gBAAiBA,QAGlH,EAqBM+0C,GAAY,SAAHp5D,GAAiB,IAAXsiC,EAAGtiC,EAAHsiC,IACnBhhC,GAA0BC,EAAAA,EAAAA,UAAS,GAAEC,GAAAC,EAAAA,EAAAA,GAAAH,EAAA,GAA9BiI,EAAK/H,EAAA,GAAE63D,EAAQ73D,EAAA,GACtBiiD,GAA4BliD,EAAAA,EAAAA,UAAS,GAAEmiD,GAAAjiD,EAAAA,EAAAA,GAAAgiD,EAAA,GAAhCv/B,EAAMw/B,EAAA,GAAE4V,EAAS5V,EAAA,GAElB1P,EAAczqC,EAAQ2a,EAGtBq1C,EAAej2B,KAAK9T,IAFT,IAEwBwkB,EAAa,IAStD,OAPA3/B,EAAAA,EAAAA,YAAU,YAtBc,SAAAiuB,GAAG,OAAI,IAAIkC,SAAQ,SAACC,GAC5C,IAAM+0B,EAAM,IAAIC,MAChBD,EAAIl3B,IAAMA,EACVk3B,EAAIE,OAAS,WACX,IAAMnwD,EAAQiwD,EAAIG,aACZz1C,EAASs1C,EAAII,cAEnBn1B,EAAQ,CACNo1B,SAAUtwD,EAAOuwD,UAAW51C,GAEhC,CACF,GAAG,EAYC61C,CAAkBz3B,GAAK3xB,MAAK,SAAA2I,GAA8B,IAA3BugD,EAAQvgD,EAARugD,SAAUC,EAASxgD,EAATwgD,UACvCT,EAASQ,GACTP,EAAUQ,EACZ,GACF,GAAG,CAACx3B,IAEC/4B,GAAU2a,GAKb1kB,EAAAA,EAAAA,KAACoxC,GAAAA,EAAgB,CACftO,IAAKA,EACLiS,cAAehrC,EACfyqC,YAAaA,EACbH,kBAAmB0lB,EACnB3kB,YAAarrC,KATR/J,EAAAA,EAAAA,KAAA,SAYX,EAMaozE,GAA6B,SAAH94D,GAOhC,IANLg2D,EAAuBh2D,EAAvBg2D,wBACA3uE,EAAI2Y,EAAJ3Y,KACAstB,EAAW3U,EAAX2U,YAAWokD,EAAA/4D,EACX0vC,YAAAA,OAAW,IAAAqpB,GAAQA,EACnBpiB,EAAe32C,EAAf22C,gBACA0J,EAAcrgD,EAAdqgD,eAGMxJ,EAAoBliC,GAAeA,EAAY5qB,SAAY4qB,EAAY5qB,QAAQ+sD,YAAcniC,EAAY5qB,QAAQuqE,gBACvHvqB,GAAkDtiD,EAAAA,EAAAA,WAAS,GAAMuiD,GAAAriD,EAAAA,EAAAA,GAAAoiD,EAAA,GAA1DuW,EAAiBtW,EAAA,GAAEuW,EAAoBvW,EAAA,GAC9CwW,GAA8C/4D,EAAAA,EAAAA,UAAS,IAAGg5D,GAAA94D,EAAAA,EAAAA,GAAA64D,EAAA,GAAnDwY,EAAevY,EAAA,GAAEwY,EAAkBxY,EAAA,GAE1CxjD,GAAyD3V,EAAAA,EAAAA,YAAW6uD,EAAAA,IAAsB4K,GAAAp5D,EAAAA,EAAAA,GAAAsV,EAAA,GAAnF+jD,EAAqBD,EAAA,GAAIE,EAAqBF,EAAA,GAC7CG,GAAyB5K,EAAAA,EAAAA,MAAzB4K,qBAER7gD,EAII2gD,GAAyB,CAAC,EAHfkY,EAAgB74D,EAA7B83D,YACAlnD,EAAS5Q,EAAT4Q,UACAqwB,EAAYjhC,EAAZihC,aAGI33C,GAAUC,EAAAA,EAAAA,kBAAiB2sC,GAiBjC+B,GAf0BxwC,EAAAA,EAAAA,UAAQ,iBAAO,CACvCs5D,cAAe,CACbC,SAAU,CACRC,QAAS/6D,IAAAA,QAAU2yE,IAErBp5B,WAAY,CACVpgB,OAAQw5C,IAGZ3X,WAAY,CACVC,YAAa0X,EACbzX,SAAS,GAEZ,GAAG,CAACyX,IAbG9X,eAe0C,CAAC,EAA3CthB,EAAUxH,EAAVwH,WAAYuhB,EAAQ/oB,EAAR+oB,SACJK,GAAqB5hB,GAAc,CAAC,GAA5CpgB,OAEFiiC,GAAiB35D,EAAAA,EAAAA,cAAY,SAAC45D,GAClC,IAAMC,EAAemX,EAAgBp/B,MAAMgoB,EAAQA,EAxHtB,GAyHvBE,EAAgBv7D,IAAAA,MAAQs7D,EAAc,gBAC5CZ,EAAsB,CAAE5oC,KAAMypC,IAC9BZ,OAAqB/lD,EAAoC2mD,EAC3D,GAAG,CAACkX,EAAiB/X,EAAuBC,IAEtCiY,GAAgBnxE,EAAAA,EAAAA,cAAY,SAACya,GACjCuzD,EAAwBgD,EAAgBv2D,GAC1C,GAAG,CAACu2D,EAAiBhD,IAEfjU,GAAgB/5D,EAAAA,EAAAA,cAAY,SAACoxE,EAAI32D,GACrC02D,EAAc12D,EAChB,GAAG,CAAC02D,IAEElX,GAAuBj6D,EAAAA,EAAAA,cAAY,WACvC,IAAM85D,EAAgBJ,EAAiBt7D,KAAI,SAAAizE,GAAe,OAAAA,EAAZlzB,YAA+B,IAE7Eoa,GAAqB,GACrBW,OAAqB/lD,EAAoC2mD,EAC3D,GAAG,CAACZ,EAAsBQ,IAEpBS,GAAgBn6D,EAAAA,EAAAA,cAAY,SAACwgC,EAAK45B,GAAW,OACjD18D,EAAAA,EAAAA,KAAA,OAAKY,UAAWkW,IAAW4lD,EAAY7yD,MAAO5F,EAAQ8sC,cAAc9wC,UAClED,EAAAA,EAAAA,KAAC45D,GAAS,CAAC92B,IAAKA,KACZ,GACL,CAAC7+B,EAAQ8sC,eAOZ,OALAl8B,EAAAA,EAAAA,YAAU,WACR,IAAM+nD,EAAkB/7D,IAAAA,QAAUm7D,IAAqBA,EAAiB9nB,MAAM,EAnJjD,IAoJ7Bq/B,EAAmB3W,GAAmB,GACxC,GAAG,CAACZ,KAGF/6D,EAAAA,EAAAA,MAAA,OAAKL,UAAWqD,EAAQ6sC,4BAA4B7wC,SAAA,CACjDsrB,GACCvrB,EAAAA,EAAAA,KAACs5D,GAAc,CAAC33D,KAAMA,KACpB3B,EAAAA,EAAAA,KAAC88D,GAAAA,EAAuB,CACtBrzD,MAAO1G,qBACPg6D,UAAU,gCACVxxC,UAAWA,EACXyO,OAAQs5C,EACR3xE,KAAMA,EACNosB,QAAS4tC,GAAYA,EAASC,QAC9BS,cAAeA,EACfW,eAAgBT,EAChBW,qBAAmB,EACnBC,eAAgBhM,IAAsBF,EACtCjH,YAAaA,EACb2Q,eAAgBA,EAChBiZ,mBAAiB,EACjBxW,iBAAkB,CAChByW,eAAgBnE,GAChBrS,gCA7K0B,GA8K1BC,eAAgBv6D,YAElBk5D,eAAgBA,EAChBQ,cAAeA,EACfkD,eAAgBhJ,KAErBiE,IACC56D,EAAAA,EAAAA,KAACsyE,GAAyB,CACxB3wE,KAAMA,EACN24C,OAAQsgB,EACR2X,MAAO,WAAF,OAAQ1X,GAAqB,EAAM,EACxCyV,wBAAyBmD,EACzBxkD,YAAaA,IAEhB2sB,IACC57C,EAAAA,EAAAA,KAACuE,EAAAA,EAAU,CAACg5D,eAAgBC,GAAAA,EAAe78D,MAAMV,SAC9C0B,EAAKmB,UAAU84C,OAI1B,E,2FC1Mak4B,GAAqB,WAChC,IAAAv8D,GAAqC3V,EAAAA,EAAAA,YAAW6uD,EAAAA,IAAvCC,GAA6DzuD,EAAAA,EAAAA,GAAAsV,EAAA,GAArC,GAE3BtJ,GAAa62C,EAAAA,EAAAA,+BAEX6L,GAAuBC,EAAAA,EAAAA,MAAvBD,mBAEAojB,EAAgD9lE,EAAhD8lE,kCAAmC99D,EAAahI,EAAbgI,SAC3CnU,GAAkDC,EAAAA,EAAAA,WAAS,GAAMC,GAAAC,EAAAA,EAAAA,GAAAH,EAAA,GAA1D+uD,EAAiB7uD,EAAA,GAAE8uD,EAAoB9uD,EAAA,GAC9CiiD,GAAgCliD,EAAAA,EAAAA,UAAS,MAAKmiD,GAAAjiD,EAAAA,EAAAA,GAAAgiD,EAAA,GAAvC8M,EAAQ7M,EAAA,GAAE8M,EAAW9M,EAAA,GAC5BG,GAA8CtiD,EAAAA,EAAAA,WAAS,GAAKuiD,GAAAriD,EAAAA,EAAAA,GAAAoiD,EAAA,GAArD4M,EAAe3M,EAAA,GAAE4M,EAAkB5M,EAAA,GAGlCnlC,IAFUvd,EAAAA,EAAAA,YAAWk7B,GAAAA,eAAiB,CAAC,GAAvC5e,MAEce,OAAdE,IACF8P,GAAcrtB,EAAAA,EAAAA,YAAWwC,GAAAA,oBAEzB+sD,EAAoBliC,GAAeA,EAAY5qB,SAAY4qB,EAAY5qB,QAAQ+sD,YAAcniC,EAAY5qB,QAAQuqE,gBAE/Gpd,GAA2BC,EAAAA,GAAAA,MAA3BD,uBAEFE,GAAgBpvD,EAAAA,EAAAA,cAAWqvD,EAAAA,GAAAA,IAAAC,EAAAA,GAAAA,KAAAC,MAAC,SAAAC,IAAA,IAAAllD,EAAAonE,EAAA,OAAApiB,EAAAA,GAAAA,KAAAU,MAAA,SAAAC,GAAA,cAAAA,EAAAC,KAAAD,EAAAE,MAAA,WAC5BtB,EAAkB,CAADoB,EAAAE,KAAA,QACQ,OAA3B3B,GAAqB,GAAMyB,EAAAE,KAAA,EACJjB,EAAuB,CAAEoB,MAAOzzC,IAAO,KAAD,EAAvDvS,EAAQ2lD,EAAAM,KACd/B,GAAqB,GACQlkD,GAAYA,EAASkmD,WAAalmD,EAASkmD,UAAU,MAAQjyD,IAAAA,QAAU+L,EAASkmD,UAAU,GAAGC,SACvHlyD,IAAAA,QAAU+L,EAASkmD,UAAU,GAAGE,UAChCnyD,IAAAA,QAAU+L,EAASkmD,UAAU,GAAGG,kBAChCpyD,IAAAA,QAAU+L,EAASkmD,UAAU,GAAGI,YAChCryD,IAAAA,QAAU+L,EAASkmD,UAAU,GAAGK,eAEjCjC,GAAmB,GACb8iB,GAAentE,EAAAA,EAAAA,GAAA,GAChB+F,EAASkmD,UAAU,IAExB9B,GAAYb,EAAAA,GAAAA,KAAqB6jB,KAEjC9iB,GAAmB,GACpB,wBAAAqB,EAAAc,OAAA,GAAAvB,EAAA,KAEF,CAACX,EAAmBK,EAAwBryC,EAAK6xC,EAAaE,IA+DjE,MAAO,CACLrkD,OA9DYvK,EAAAA,EAAAA,cAAY,SAAC2xE,EAAajqB,GACjC/zC,IAAY46C,IAIjBH,EAAyB,CACvBnlC,WAAW,EACXqwB,kBAAcnmC,IAGhBw+D,EAAYC,QAAQ,CAClBC,OAAQhjB,EAAiB,GAAAz+C,OAAMuD,EAAQ,cAAAvD,OAAas3C,GAAgB/zC,EACpEm+D,OAAQ,WACN1jB,EAAyB,CAAEnlC,WAAW,IACtC,IACM8oD,GADeC,EAAAA,GAAAA,mBACkB/jE,IAAI,qBAE3C,OAAOwjE,EA7DI,IA6D0C,EADJ,cAAtBM,EAAoC,MAAQ,MACS,KAAOrqB,GAAe+G,EAAYA,EAAW,KAC/H,IACC5/C,MAAK,SAACvE,GACP,IAEM6lE,EAFU7lE,EAAS+Q,KAAjBu1B,IAEgBxyC,KAAI,SAACk/C,GAC3B,IACEpzC,EACEozC,EADFpzC,IAAKg0C,EACHZ,EADGY,aAAcE,EACjBd,EADiBc,iBAAkBvkB,EACnCyjB,EADmCzjB,SAAUo4C,EAC7C30B,EAD6C20B,cAGjD,MAAO,CACL/nE,IAAAA,EACAg0C,aAAAA,EACAsxB,QAASyC,EAAczC,QACvB/nE,MAAOwqE,EAAcxqE,MACrB2a,OAAQ6vD,EAAc7vD,OACtB8vD,mBAAoBD,EAAcC,mBAClC/zB,aAAcC,EACdoT,iBAAkBpT,EAClBvkB,SAAAA,EAEJ,IAEAw0B,EAAmB16C,EAAU,CAC3B49C,kBAAmB,CACjB4gB,YAAahC,KAIjB/hB,EAAyB,CACvBnlC,WAAW,EACXtV,SAAAA,EACAw8D,YAAAA,GAEJ,IAAG9yD,OAAM,WACP+wC,EAAyB,CACvBnlC,WAAW,EACXtV,SAAAA,EACAw8D,YAAa,GACb72B,aAAc74C,yDAElB,IACF,GAAG,CAACgxE,EAAmC99D,EAAU06C,EAAoBD,EAA0BG,EAAmBE,IAIhHqD,mBAAoBn+C,EACpBg7C,gBAAAA,EACAS,cAAAA,EAEJ,E,0BCjHMgjB,GAAmB,SAACC,GAExB,IAAMC,EAAOD,EAAG7wC,KAAA+wC,IAAI,GAAM,GAE1B,OAAO/wC,KAAKgzB,MAAM8d,EACpB,EAEME,GACc/xE,gCADd+xE,GAES/xE,cAFT+xE,GAGK/xE,cAGEgyE,GACF,EADEA,GAEY,EAFZA,GAGO,EAHPA,GAIG,EAJHA,GAKA,EALAA,GAMK,EANLA,GAOL,EAPKA,GAQL,EAOKlD,IAAsBzoE,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,GAAA,GAChC2rE,GAA6BhyE,aAC7BgyE,GAA+BhyE,QAC/BgyE,GAA0BhyE,QAC1BgyE,GAA0BhyE,QAC1BgyE,GAAsChyE,aACtCgyE,GAA2ChyE,aAC3CgyE,GAAkChyE,aAClCgyE,GAAoChyE,QAcjCiyE,KAXmB5rE,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,GAAA,GACtB2rE,GAA6B,CAAEE,QAAS,CAACH,GAA6BA,GAAwBA,IAAqBz/B,SAAU,KAC7H0/B,GAA+B,CAAEE,QAAS,CAACH,GAA6BA,IAAyBz/B,SAAU,CAACy/B,MAC5GC,GAA0B,CAAEE,QAAS,CAACH,IAA8Bz/B,SAAU,CAACy/B,GAAwBA,MACvGC,GAA0B,CAAEE,QAAS,GAAI5/B,SAAU,CAACy/B,GAA6BA,GAAwBA,MACzGC,GAAsC,CAAEE,QAAS,CAACH,GAA6BA,IAAyBz/B,SAAU,CAACy/B,MACnHC,GAA2C,CAAEE,QAAS,CAACH,GAAwBA,IAAqBz/B,SAAU,CAACy/B,MAC/GC,GAAkC,CAAEE,QAAS,CAACH,IAAqBz/B,SAAU,CAACy/B,GAA6BA,MAC3GC,GAAoC,CAAEE,QAAS,CAACH,IAAyBz/B,SAAU,CAACy/B,GAA6BA,OAGhG1rE,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,GAAA,GACjB2rE,GAA6B,GAC7BA,GAA2C,GAC3CA,GAAsC,GACtCA,GAAkC,GAClCA,GAA+B,GAC/BA,GAAoC,GACpCA,GAA0B,GAC1BA,GAA0B,IAGhBG,GAAiB,SAAHp1E,GAAA,IAAM6B,EAAI7B,EAAJ6B,KAAMsC,EAAOnE,EAAPmE,QAASkxE,EAASr1E,EAATq1E,UAAS,OACvDl0E,EAAAA,EAAAA,MAAA,OAAKC,MAAO,CAAEC,QAAS,OAAQ+J,WAAY,UAAWjL,SAAA,EACpDgB,EAAAA,EAAAA,MAAC+P,EAAAA,MAAK,CAACpQ,UAAWqD,EAAQosC,eAAepwC,SAAA,CAAC,IAAE0B,EAAKmB,UAAUqyE,GAAW,QACtEn1E,EAAAA,EAAAA,KAACmoD,GAAAA,gBAAe,CAACllD,MAAM,uCACnB,EA+DKmyE,GAAyB,SAAC7iE,GACrC,IACE5Q,EAEE4Q,EAFF5Q,KACAwrD,EACE56C,EADF46C,QAKIlpD,GAFiBC,EAAAA,EAAAA,kBAAiBkpC,GAIxC,GAAI+f,GAAWA,EAAQ6gB,MAAO,CAC5B,IAAAqH,EAEIloB,EAAQ6gB,MADVjkE,EAAKsrE,EAALtrE,MAAO2a,EAAM2wD,EAAN3wD,OAAM4wD,EAAAD,EAAEvD,QAAAA,OAAO,IAAAwD,EAAG,EAACA,EAAEd,EAAkBa,EAAlBb,mBAGxBe,EAAgBP,GAAelD,IAAY,EAE3C0D,EAAwB,EAAID,EAElC,OACEt0E,EAAAA,EAAAA,MAAA,OAAKL,UAAWqD,EAAQ4rC,kBAAkB5vC,SAAA,EACxCD,EAAAA,EAAAA,KAACk1E,GAAc,CAACvzE,KAAMA,EAAMsC,QAASA,EAASkxE,UAAWpyE,aACzD9B,EAAAA,EAAAA,MAAA,OAAKL,UAAWqD,EAAQ6rC,eAAe7vC,SAAA,CAEnCY,IAAAA,MAAQ00E,GAAe70E,KAAI,SAAAqzC,GAAG,OAC5B/zC,EAAAA,EAAAA,KAACy1E,EAAAA,KAAI,CAAwB70E,UAAWkW,IAAW,CAAC,eAAgB7S,EAAQkqE,YAAa54B,SAAS,oBAAkB,GAAA7iC,OAAtGqhC,EAAG,YAAsG,IAIzHyhC,EAAwB,GAAK30E,IAAAA,MAAQ20E,GAAuB90E,KAAI,SAAAqzC,GAAG,OACjE/zC,EAAAA,EAAAA,KAACy1E,EAAAA,KAAI,CAAyB70E,UAAWkW,IAAW,CAAC,gBAAiB7S,EAAQkqE,YAAa54B,SAAS,gBAAc,GAAA7iC,OAApGqhC,EAAG,aAAoG,IAExH,IACC89B,GAAuBC,GAAS,IAAEnwE,EAAKmB,UAAUC,WAAiB,QAEtE9B,EAAAA,EAAAA,MAAA,OAAKC,MAAO,CAAEozB,SAAU,QAAU1zB,UAAWqD,EAAQqsC,mBAAmBrwC,SAAA,CAAC,IAAE8J,EAAM,QAAM2a,EAAO,OAAI,GAAAhS,OAAIgiE,GAAiBF,GAAmB,KAAA9hE,OAAI3P,QAAe,SAGnK,CAEA,OAAO,IACT,EChLa2yE,GAAwB,SAAAC,GAAU,OAAIrmE,EAAAA,EAAAA,KAAIqmE,EAAY,SAAU,E,aCChE5vD,GAAe,CAC1B/f,SAAU,WACVpB,QAAS,UACTohB,WAAY,aACZi9B,GAAI,KACJh9B,iBAAkB,mBAClBC,eAAgB,iBAChBC,yBAA0B,2BAC1BC,uBAAwB,yBACxBC,yBAA0B,2BAC1BC,wBAAyB,2BAGdsvD,GAAsB,SAACpjB,EAAMqjB,GAAI,UAAQ9nD,EAAAA,EAAAA,SAAQ8nD,MAAUC,EAAAA,EAAAA,SAAQtjB,EAAMqjB,GAAO,EAMhFE,GAAyB,SAAAC,GAAY,SAAAtjE,OAJlB,SAAAsjE,GAAY,OACzCA,EAAan0C,WAAW,qBAAuB,CAAC,GAAG7gC,OACpDg1E,EAAajkE,IAAK,CAGfkkE,CAAwBD,GAAa,WAE7BE,GAAgC,SAACz1E,EAAQ01E,EAA0Bv4C,EAAUj8B,EAAM82C,GAAc,OCtB3E,SAACh4C,EAAQ01E,GAAwB,IAAEC,EAAch6D,UAAA7Y,OAAA,QAAAkS,IAAA2G,UAAA,GAAAA,UAAA,GAAGi6D,EAAAA,SAAUz4C,EAAQxhB,UAAA7Y,OAAA,EAAA6Y,UAAA,QAAA3G,EAAE9T,EAAIya,UAAA7Y,OAAA,EAAA6Y,UAAA,QAAA3G,EAAEgjC,EAAcr8B,UAAA7Y,OAAA,EAAA6Y,UAAA,QAAA3G,EAAA,OAC7H6gE,EAAAA,GAAAA,IAAiB71E,EAAQm9B,EAAUj8B,EAAM82C,GAAgB/3C,KAAI,SAACC,GAC5D,IAAM41E,EAAY51E,EAAM8B,KAClB+zE,GAAkB5/D,EAAAA,EAAAA,QAAOu/D,EAA0BI,EAAWA,GAGpE,OADA51E,EAAM8B,KAAO+zE,EACNJ,EAAez1E,EACxB,GAAG,CDgBH81E,CAAoBh2E,EAAQ01E,EAA+CE,EAAAA,SAAUz4C,EAAUj8B,EAAM82C,EAAgB,EAEjHi+B,GAAkC,CAAC,mCAAoC,mCAAoC,mCACpGC,GAAwC,SAAAC,GAAU,OAC7DA,EAAWpsE,QAAO,SAAA1K,GAAA,IAAGmN,EAAKnN,EAALmN,MAAK,QAAQ8lE,EAAAA,EAAAA,UAAS2D,GAAiCzpE,EAAM,GAAE,EAEzE7C,GAAqB,SAAH5J,GAAoB,OAAAA,EAAdq2E,eAAuC,CAC1El2E,MAAOoC,uBACL,CAAC,CAAC,E,YEhCO+zE,GAAsB,WAAH,MAAU,CACxCC,YAAa,CACXhtE,MAAO,IACP,OAAQ,CACNuqB,SAAU,IAEZ,oBAAqB,CACnBnzB,QAAS,OACTqK,eAAgB,gBAChB8oB,SAAU,GACVjpB,aAAc,EACd,iBAAkB,CAChB2rE,KAAM,EACN12E,MAAO,WAET,kBAAmB,CACjBA,MAAO,aAId,E,uCCpBY22E,GAAa,CACxBC,UAAW,YACXC,QAAS,UACTC,YAAa,cACbC,aAAc,gBCET,SAASC,GAAsBC,EAAalqE,EAAM6R,EAAKC,GAC5D,GAA4B,IAAxBte,IAAAA,KAAO02E,GACT,OAAOvyC,QAAQC,QAAQ,IAEzB,IAAMuyC,EAAO32E,IAAAA,IAAM02E,GAAa,SAAAloE,GAAE,MAAK,CACrC5M,KAAM,MACN+J,IAAI,GAADkG,OAAKmL,GAAAA,YAAYuB,UAAUC,SAASH,GAAKI,SAASD,SAASF,GAAKI,UAAUF,SAAShQ,GAAItL,KAAI,8BAC9F4I,QAASU,EAAO,CACdA,KAAAA,QACEoI,EACL,IAED,OAAOgiE,GAAAA,QAAMC,MAAM,CAAEF,KAAAA,EAAMG,iBAAiB,GAC9C,CAEA,IAAMC,GACI,SADJA,GAEC,MAFDA,GAGI,SAHJA,GAIM,WAJNA,GAKM,WAGL,SAASC,GAAqBC,EAAMC,GACzC,IAAMC,EAAM,CACVC,UAAW,GACXpb,aAA4B,eAAdib,EAAKzwD,MAGrB,IAAKywD,IAASA,EAAKI,sBAAyB,OAAOF,EAEnD,IAAMG,EAAqBL,EAAKI,sBAAsB5xE,MAAK,SAAA9D,GAAM,OAAIA,EAAO41E,aAAeL,CAAU,IAErG,OAAKI,GAILH,EAAIC,UAAYE,EAAmBE,WAAa,GAChDL,EAAInb,aAAiE,eAAlDsb,EAAmBG,2BAE/BN,GANEA,CAOX,CAAC,SAEcO,GAAqBC,GAAA,OAAAC,GAAA93B,MAAC,KAADvkC,UAAA,UAAAq8D,KAoBnC,OApBmCA,IAAA9mB,EAAAA,GAAAA,IAAAC,EAAAA,GAAAA,KAAAC,MAApC,SAAAC,EAAAhyD,GAAA,IAAAsN,EAAA07B,EAAA5pB,EAAAC,EAAA9R,EAAAT,EAAA8rE,EAAA,OAAA9mB,EAAAA,GAAAA,KAAAU,MAAA,SAAAC,GAAA,cAAAA,EAAAC,KAAAD,EAAAE,MAAA,OAK0E,OAJxErlD,EAAatN,EAAbsN,cAAe07B,EAAShpC,EAATgpC,UAET5pB,EAAM9R,EAAcurE,gBAAgB9qE,GACpCsR,EAAM/R,EAAcQ,eAAeC,GACnCR,EAAOD,EAAgBA,EAAcE,YAAYsrE,SAAW,OAAMrmB,EAAAE,KAAA,EAEjD6kB,GAAsBxuC,EAAWz7B,EAAM6R,EAAKC,GAAK,KAAD,EAUpE,OAVGvS,EAAQ2lD,EAAAM,KACR6lB,EAAqB,IAE3BG,EAAAA,EAAAA,MAAKjsE,GAAU,SAACoQ,GACd,IAAMqmB,EAAYy1C,GAAwBC,uCACxC/7D,EAASW,KACT,CAAEoZ,KAAM,WAAYiiD,OAAQ,aAE9B31C,EAAUrmB,UAAWzM,EAAAA,EAAAA,KAAI8yB,EAAW,6CACpCq1C,EAAmB91D,KAAKygB,EAC1B,IAAGkvB,EAAAkB,OAAA,SAEIilB,GAAkB,yBAAAnmB,EAAAc,OAAA,GAAAvB,EAAA,MAC1BnR,MAAA,KAAAvkC,UAAA,CAEM,SAAe68D,GAAgBC,EAAAC,EAAAC,GAAA,OAAAC,GAAA14B,MAAC,KAADvkC,UAAA,CA8DrC,SAAAi9D,KAAA,OAAAA,IAAA1nB,EAAAA,GAAAA,IAAAC,EAAAA,GAAAA,KAAAC,MA9DM,SAAAyB,EAAgCwkB,EAAMvM,EAASn+D,GAAa,IAAAksE,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAA,OAAAloB,EAAAA,GAAAA,KAAAU,MAAA,SAAAkB,GAAA,cAAAA,EAAAhB,KAAAgB,EAAAf,MAAA,UAC5DqlB,GAASvM,EAAO,CAAA/X,EAAAf,KAAA,eAAAe,EAAAC,OAAA,SAAW8X,GAAO,OAUa,GAR9C+N,GAAc/N,EAAQ19D,GAEtB0rE,EAAoB1B,GAAqBC,EAAMF,IAC/C4B,EAAsB3B,GAAqBC,EAAMF,IACjD6B,EAAiB5B,GAAqBC,EAAMF,IAC5C8B,EAAoB7B,GAAqBC,EAAMF,IAC/C+B,EAAsB9B,GAAqBC,EAAMF,IAEjDgC,EAAsBrO,EAAQ1nD,kBAChCy1D,GAAcE,IAA4D,IAArCA,EAAoB3c,cAA0B+c,GAAuBA,EAAoBt8D,sBAAoB,CAAAk2C,EAAAf,KAAA,SACpJmnB,EAAoBt8D,qBAAqBf,aAAe,aACxDq9D,EAAoBt8D,qBAAqBb,iBAAmB,GAAG+2C,EAAAf,KAAA,oBACoC,KAA1FliD,EAAAA,EAAAA,KAAIg7D,EAAS,CAAC,kBAAmB,uBAAwB,iBAAkB,IAAIhoE,OAAY,CAAAiwD,EAAAf,KAAA,gBAAAe,EAAAf,KAAA,GAE5E8lB,GAAsB,CAC5CnrE,cAAAA,EACA07B,UAAW0wC,EAAoBvB,YAC9B,KAAD,GAEuB,KALnB4B,EAASrmB,EAAAX,MAKDtvD,SACZq2E,EAAoBt8D,qBAAqBb,iBAAmBo9D,EAC5DD,EAAoBt8D,qBAAqBoK,cAAgB,GACzDkyD,EAAoBt8D,qBAAqBf,aAAe,WACxDq9D,EAAoBr8D,gBAAiB,GACtC,QAiBF,OAfKu8D,EAAe,CAAC,EAClBL,EAAe5c,eACjBid,EAAaC,UAAY,GACzBD,EAAaE,iBAAmB,GAChCF,EAAaG,kBAAoB,IAG/BP,EAAkB7c,eACpBid,EAAaI,mBAAqB,GAClCJ,EAAaK,oBAAsB,GACnCL,EAAaM,YAAc,IAGzBT,EAAoB9c,eACtBid,EAAaO,UAAY,IAC1B7mB,EAAAC,OAAA,UAAA5sD,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAGI0kE,GACAuO,GAAY,IACfhC,KAAAA,EACAj0D,gBAAiB+1D,EACjBU,iBAAkBd,EAAoBvB,UACtCsC,YAAajB,EAAaC,EAAkBtB,UAAY1M,EAAQgP,YAChEC,mBAAoBjB,EAAkB1c,aAAe5+B,OAAOqyB,KAAK2mB,KAAcwD,EAAAA,EAAAA,YAAWx8C,OAAOqyB,KAAK2mB,IAAasC,EAAkBtB,WACrIyC,iBAAkBnB,EAAkB1c,aACpC8d,mBAAoBnB,EAAoB3c,aAExC+d,cAAenB,EAAe5c,aAC9Bge,iBAAkBnB,EAAkB7c,aACpCie,mBAAoBnB,EAAoB9c,aACxCke,iBAAiB,KAAI,yBAAAvnB,EAAAH,OAAA,GAAAC,EAAA,MAExB3S,MAAA,KAAAvkC,UAAA,C,iBCjIY4+D,GAA0B,CACrCC,IAAK,EACLC,IAAK,EACLC,IAAK,GACLC,IAAK,EACLC,IAAK,GACLC,IAAK,GACLC,IAAK,EACLC,IAAK,EACLC,IAAK,GACLC,IAAK,GACLC,IAAK,EACLC,IAAK,GACLC,IAAK,EACLC,IAAK,GACLC,IAAK,GACLC,IAAK,GACLC,IAAK,GACLC,IAAK,GACLC,IAAK,EACLC,IAAK,GACLC,IAAK,EACLC,IAAK,GACLC,IAAK,GACLC,IAAK,GACLC,IAAK,GACLC,IAAK,GACLC,IAAK,GACLC,IAAK,GACLC,IAAK,GACLC,IAAK,GACLC,IAAK,GACLC,IAAK,GACLC,IAAK,GACLC,IAAK,GACLC,IAAK,GACLC,IAAK,GACLC,IAAK,GACLC,IAAK,GACLC,IAAK,GACLC,IAAK,GACLC,IAAK,GACLC,IAAK,GACLC,IAAK,GACLC,IAAK,GACLC,IAAK,GACLC,IAAK,GACLC,IAAK,IAGMC,GAAsB,CACjCC,iBAAkB,MAClBC,cAAe,MACfC,eAAgB,MAChBC,WAAY,MACZC,YAAa,MACbC,KAAM,MACNC,QAAS,MACTC,YAAa,MACbC,eAAgB,MAChBC,iBAAkB,MAClBC,aAAc,MACdC,SAAU,MACVC,iBAAkB,MAClBC,cAAe,MACfC,YAAa,MACbC,aAAc,MACdC,cAAe,MACfC,UAAW,MACXC,cAAe,MACfC,cAAe,MACfC,eAAgB,MAChBC,iBAAkB,MAClBC,cAAe,MACfC,YAAa,MACbC,cAAe,MACfC,eAAgB,MAChBC,YAAa,MACbC,iBAAkB,MAClBC,iBAAkB,MAClBC,eAAgB,MAChBC,MAAO,MACPC,WAAY,MACZC,WAAY,MACZC,gBAAiB,MACjBC,SAAU,MACVC,gBAAiB,MACjBC,kBAAmB,MACnBC,YAAa,MACbC,eAAgB,MAChBC,cAAe,MACfC,IAAK,OAGMC,GAAqC,SAACC,EAAYC,EAAcC,EAAiBC,GAC5F,GAAIH,GAAcE,GAAmBC,EAAqB,CACxD,IAAMC,EAAiB/F,GAAwBgD,GAAoB4C,IAAiB,QAAU,GACxFI,GAAoBzwE,EAAAA,EAAAA,MAAIjK,EAAAA,EAAAA,MAAKw6E,GAAqB,SAAA/wE,GAAI,OAAIA,EAAKkxE,aAAeF,CAAc,IAAG,oBAAqB,GAEpHG,EAAoBlG,GAAwB6F,IAAoB,GAChEM,GAAuB5wE,EAAAA,EAAAA,MAAIjK,EAAAA,EAAAA,MAAKw6E,GAAqB,SAAA/wE,GAAI,OAAIA,EAAKkxE,aAAeC,CAAiB,IAAG,oBAAqB,GAEhI,OAAOE,EAAAA,GAAAA,MAAMT,EAAaK,EAAqBG,EAAsB,EACvE,CACA,OAAOR,CACT,ECpGO,SAASU,GAA2BtK,EAAap1E,GACtD,IAAM2/E,GAAkB/wE,EAAAA,EAAAA,KAAIwmE,EAAa,+CACzC,OAAIuK,IAAmBC,EAAAA,EAAAA,UAASD,GACxB,GAAN5uE,OAAUoxB,KAAK09C,MAAMF,EAAgB,IAAM,GAAE,KAAA5uE,OAAI/Q,EAAKmB,UAAUC,YAE3DpB,EAAKmB,UAAUC,cACxB,CAEO,SAAS0+E,GAAc3J,GAC5B,OAAOA,EAAK4J,QAAU5J,EAAK4J,OAAOjwE,cAAcuwC,QAAQ,YAAc,CACxE,CAEO,SAAS2/B,GAAc7J,GAC5B,OAAOA,EAAK7qE,OAAwB,cAAf6qE,EAAK7qE,KAC5B,CAEA,IAAM20E,GAAY,CAChBC,qBAAsB9+E,QACtB++E,uBAAwB/+E,QACxBg/E,kBAAmBh/E,QACnBi/E,iBAAkBj/E,QAClBk/E,kBAAmBl/E,MACnBm/E,QAASn/E,WAOLo/E,GAAkB,SAACpI,EAAWp4E,GAClC,OAAOygF,EAAAA,EAAAA,OALa,SAAArI,GAAS,OAAIsI,EAAAA,EAAAA,QAAOtI,GAAW,SAAAuI,GAAQ,OAAIV,GAAUU,EAAS,GAAE,CAKvEC,CAAcxI,IACxBr5E,KAAI,SAAA4hF,GAAQ,OAJM,SAACA,EAAU3gF,GAAI,OAAMigF,GAAUU,GAAY3gF,EAAKmB,UAAU8+E,GAAUU,IAAaA,CAAQ,CAI3FE,CAAeF,EAAU3gF,EAAK,IAC9C8F,KAAK9F,EAAKmB,UAAUC,OACpB/B,OACL,EAEO,SAASyhF,GAAwB1L,EAAagB,EAAYp2E,GAAyB,IAAnB+gF,EAAWtmE,UAAA7Y,OAAA,QAAAkS,IAAA2G,UAAA,GAAAA,UAAA,GAAG,CAAC,EACpFumE,EAAoC9K,GAAqBd,EAAagB,GAA9DE,EAAS0K,EAAT1K,UAAWpb,EAAY8lB,EAAZ9lB,aAEnB,OAAyB,IAArBob,EAAU10E,OACRs5D,EACE4kB,GAAc1K,GACTp1E,EAAKmB,UAAUC,eAEjBpB,EAAKmB,UAAUC,cAEjBpB,EAAKmB,UAAUC,mBAGL,aAAfg1E,GACK6K,EAAAA,EAAAA,MAAK3K,EAAUv3E,KAAI,SAACsc,GAEzB,OADqB0lE,EAAY1lE,EAEnC,KAAIvV,KAAK,MACe,QAAfswE,EACFoK,GAAgBlK,EAAWt2E,GAE7Bs2E,EAAUxwE,KAAK,KACxB,CAEO,IAAMo7E,GAAc,SAACtwE,GAC1B,IAAQ5Q,EAA8C4Q,EAA9C5Q,KAAMo1E,EAAwCxkE,EAAxCwkE,YAAa71E,EAA2BqR,EAA3BrR,MAAO4hF,EAAoBvwE,EAApBuwE,gBAC5B7+E,GAAUC,EAAAA,EAAAA,kBAAiB4yE,IAC3BiM,GAActX,EAAAA,EAAAA,SAAQ,CAAC,CAC3B15D,KAAMpQ,EAAKmB,UAAUC,aACrB/B,MAAO+1E,EAAY2K,QAClB,CACD3vE,KAAMpQ,EAAKmB,UAAUC,gBACrB/B,MAAO+1E,EAAYiM,WAAU,GAAAtwE,OACxBuwE,GAAAA,QAAQC,kBAAkBnM,EAAYiM,WAAY,GAAE,KAAAtwE,OAAIsrE,GAAoBjH,EAAYzhD,WAAa,OAAK,GAAA5iB,OAAQ/Q,EAAKmB,UAAUC,iBACrI,CACDgP,KAAMpQ,EAAKmB,UAAUC,aACrB/B,MAAM,GAAD0R,OAAK2uE,GAA2BtK,EAAap1E,KACjD,CACDoQ,KAAMpQ,EAAKmB,UAAUC,WACrB/B,MAAO+1E,EAAYoM,aAAexhF,EAAKmB,UAAUC,eAChD,CACDgP,KAAMpQ,EAAKmB,UAAUC,oBACrB/B,MAAOyhF,GAAwB1L,EAAa,SAAUp1E,IACrD,CACDoQ,KAAMpQ,EAAKmB,UAAUC,oBACrB/B,MAAOyhF,GAAwB1L,EAAa,SAAUp1E,IACrD,CACDoQ,KAAMpQ,EAAKmB,UAAUC,iBACrB/B,MAAO+1E,EAAYqM,UAAYX,GAAwB1L,EAAa,MAAOp1E,IAC1E,CACDoQ,KAAMpQ,EAAKmB,UAAUC,sBACrB/B,MAAOyhF,GAAwB1L,EAAa,WAAYp1E,IACvDmhF,GAAmB,CACpB/wE,KAAMpQ,EAAKmB,UAAUC,mBACrB/B,MAAO+1E,EAAYsM,MAAQtgF,YAAoBA,iBAGjD,OACE/C,EAAAA,EAAAA,KAAA,OAAKY,UAAWqD,EAAQ8yE,YAAa71E,MAAOA,EAAMjB,UAChDgB,EAAAA,EAAAA,MAAA,OAAAhB,SAAA,EACED,EAAAA,EAAAA,KAAA,MAAAC,SAAK0B,EAAKmB,UAAUC,yBACpB/C,EAAAA,EAAAA,KAAA,OAAKY,UAAU,kBAAiBX,SAC7B8iF,EAAYriF,KAAI,SAAAg0C,GAAM,OACrBzzC,EAAAA,EAAAA,MAAA,OAAuBL,UAAU,iBAAgBX,SAAA,EAC/CD,EAAAA,EAAAA,KAAA,OAAKY,UAAU,cAAaX,SAAGy0C,EAAO3iC,QACtC/R,EAAAA,EAAAA,KAAA,OAAKY,UAAU,eAAcX,SAAGy0C,EAAO1zC,UAF/B0zC,EAAO3iC,KAGX,UAMlB,ECrHO,SAASuxE,GAAcC,GAC5B,IAAKA,EACH,MAAO,GAOT,IALA,IAAIC,EAAMD,EAGNE,EAAI,EAEAD,EAAM,IAAMC,GAAK,EACvBD,GAAO,IAGT,MAAM,GAAN9wE,OAAU8wE,EAAIE,QAAQ,GAAE,KAAAhxE,OARV,CAAC,GAAI,IAAK,IAAK,IAAK,IAAK,KAQL+wE,GACpC,CD2HAZ,GAAYzhF,aAAe,CACzBF,MAAO,CAAC,G,yCEpHGyiF,GAAwB,SAAH7jF,GAAwE,IAAlE8jF,EAAY9jF,EAAZ8jF,aAAczuD,EAAQr1B,EAARq1B,SAAUo2C,EAAOzrE,EAAPyrE,QAAWsY,EAAiBznE,UAAA7Y,OAAA,QAAAkS,IAAA2G,UAAA,IAAAA,UAAA,GAEpF0nE,EAAc,GAyDpB,OAvDAjL,EAAAA,EAAAA,MAAK+K,GAAc,SAAChkC,GAClB,IAAM3pC,EAAW2pC,EAAGjiC,KAAK6qC,UACnBpoB,EAAsBwf,EAAGjiC,KAAK0iB,oBAC9BC,EAAiBsf,EAAGjiC,KAAK4iB,eACzBC,EAAsBof,EAAGjiC,KAAK8iB,oBAE9ButC,EAAQpuB,EAAGjiC,KAAKqwD,MAAQlhE,KAAKC,UAAU,CAAC,CAAEsC,GAAIuwC,EAAGjiC,KAAKqwD,MAAM3+D,GAAI00E,SAAUnkC,EAAGjiC,KAAKqwD,MAAM+V,SAAUztC,QAASsJ,EAAGjiC,KAAKqwD,MAAMvrE,aAAWgT,EACpI5L,EAAQ+1C,EAAGjiC,KAAK9T,MAAQiD,KAAKC,UAAU,CAAC,CAC5CsC,GAAIuwC,EAAGjiC,KAAK9T,MAAMwF,GAClBinC,QAAS,uBACT3B,YAAaiL,EAAGjiC,KAAK9T,MAAM8qC,YAC3BC,aAAcgL,EAAGjiC,KAAK9T,MAAM+qC,aAC5BK,MAAO2K,EAAGjiC,KAAK9T,MAAMorC,MACrBE,MAAOyK,EAAGjiC,KAAK9T,MAAMsrC,MACrBZ,UAAWqL,EAAGjiC,KAAK9T,MAAM0qC,UACzBD,WAAYsL,EAAGjiC,KAAK9T,MAAMyqC,mBACtB7+B,EAEAuuE,EA5CgC,SAACpkC,GACzC,IAAM0M,EAA2B1M,EAAGjiC,KAAKiuC,yBACzC,IAAIq4B,EAAAA,EAAAA,aAAY33B,KAA6B43B,EAAAA,EAAAA,QAAO53B,GAClD,MAAO,CAAC,EAGV,IAAIv+B,EAAAA,EAAAA,SAAQu+B,GACV,MAAO,CAAE63B,qBAAsB,IAEjC,IAAMvd,EAAU,GAUhB,OARAiS,EAAAA,EAAAA,MAAKvsB,GAA0B,SAACob,GAC9B,IAAM9wD,EAAS,IACfwtE,EAAAA,EAAAA,WAAU1c,GAAS,SAAC1mE,EAAOsqB,GACzB1U,EAAOgM,KAAK,CAAE7hB,IAAKuqB,EAAKxqB,MAAOE,GACjC,IACA4lE,EAAQhkD,KAAKhM,EACf,IAEO,CAAEutE,qBAAsBr3E,KAAKC,UAAU65D,GAChD,CAwBiDyd,CAAkCzkC,GACzEwM,EAAyBxM,EAAGjiC,KAAK0uC,uBAAyB,CAAEA,uBAAwBzM,EAAGjiC,KAAK0uC,wBAA2B,CAAC,EAExHi4B,GAAMz9E,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,CACV,YAAY,GAAD6L,OAAKktC,EAAGkP,KACnBtG,UAAWvyC,EACXoqB,oBAAqBD,EACrBG,eAAgBD,EAChBG,oBAAqBD,EACrBx6B,UAAUu+E,EAAAA,EAAAA,MAAKpvD,EAAU,MACzBvwB,SAAS2/E,EAAAA,EAAAA,MAAKhZ,EAAS,OACpByY,GACA53B,GAGDviD,IACF26E,EAAAA,EAAAA,QAAOF,EAAQ,CAAEtxB,OAAQnpD,IAEvBmkE,IACFwW,EAAAA,EAAAA,QAAOF,EAAQ,CAAEG,OAAQzW,IAGvBpuB,EAAG/xC,KACLy2E,EAAOz2E,GAAK+xC,EAAG/xC,IAGbg2E,IACFS,EAAO78D,OAAS,WAGdm4B,EAAG0rB,YACLgZ,EAAOI,UAAY9kC,EAAG0rB,WAGxBwY,EAAYlhE,KAAK0hE,EACnB,IAEOR,CACT,EAoBaa,GAA4B,SAAHnkF,GAapC,MAPoB,CAClBmd,KAzBuB,SAACinE,EAAcC,GACxC,IAAM3xC,EAAM,GAcZ,OAZA2lC,EAAAA,EAAAA,MAAKgM,GAAY,SAACjlC,EAAI7L,GAGpB,IAAM+wC,GAAct6E,EAAAA,EAAAA,QAAOo6E,GAAc,SAAAG,GAAG,OAAIA,EAAI,eAAY,GAAAryE,OAAQktC,EAAGkP,IAAK,IAE5Eg2B,GAAeA,EAAY,IAAMA,EAAY,GAAGj3E,GAClDqlC,EAAIa,IAAIltC,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAQ+4C,GAAE,IAAE/xC,GAAIi3E,EAAY,GAAGj3E,KAEvCqlC,EAAIa,IAAIltC,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAQ+4C,GAAE,IAAE/xC,QAAI4H,GAE5B,IAEOy9B,CACT,CAMuB8xC,CAHbxkF,EAARklE,SACgBllE,EAAhBykF,iBAEmEtnE,MAIjE4Y,SAAS,EACTxb,SAAS,EACT24B,iBAAkB,EAItB,EAGawxC,GAAwB,SAAHprE,GAE3B,IADL4rD,EAAQ5rD,EAAR4rD,SAIA,OAFmB7+D,EAAAA,EAAAA,GAAA,GAAQ6+D,EAG7B,EC3GMyf,GAAa,IADLtnE,GAAAA,YAAYunE,MAAMngD,QAAQ,sBACXogD,oBAOvBC,IAAkCl8E,EAAAA,GAAAA,GAAA,GACrC2sE,GAAuBrpB,EAAAA,cAAgB3mC,GAAak9B,IAG1CpB,GAAiB,SAACz0C,GAC7B,IAMM00C,EANU,WACd,IAAMhsC,EAAWisC,SAAS/kC,SAASlH,SAASrE,cAC5C,OAAkD,IAA3CqE,EAASksC,QAAQ,uBAC2B,IAA/ClsC,EAASksC,QAAQ,wBACvB,CAEkBC,GAAY,gBAAkB,cAShD,MAPoB,CAClBC,WAAY90C,EAAcM,MAC1By0C,WAAY/0C,EAAcM,MAC1Bo0C,UAAU,GAADpvC,OAAKtF,EAAckB,kBAAkBiV,aAAW7Q,OAAGovC,GAC5DM,UAAU,GAAD1vC,OAAKtF,EAAckB,kBAAkBiV,aAAW7Q,OAAGovC,GAIhE,EAEayjC,GAAwB,WAAH,MAAU,CAC1CC,aAAc,GACd7f,aAAc,GACf,EAoBK8f,GAAc,SAAHjlF,GAAA,IAAMo/C,EAAEp/C,EAAFo/C,GAAE,OAlBF,SAAH9/C,GAAsB,IAAhBqvE,EAAQrvE,EAARqvE,SAClBuW,EAAa,IAAIC,GAAAA,WAAW9hD,OAAO7mB,UAKzC,OAHA0oE,EAAWE,OAAO,CAAC,YAAa,gBACNC,EAAAA,GAAAA,oBAAmBH,GAArCI,cAGLrB,OAAO,uBACPtkE,UAAU,CACT4lE,eAAgB,CAAC,EACjBxlE,QAAS,CACP4uD,SAAAA,EACAzkE,YAAa,MAGhBgV,WACL,CAEgCsmE,CAAe,CAAE7W,SAAUvvB,EAAGjiC,KAAKqwD,MAAMxhE,MAAO2E,MAAK,SAAC80E,GACpFplF,IAAAA,OAAS++C,EAAGjiC,KAAKqwD,OAAOkY,EAAAA,EAAAA,IAAqB,CAAE31B,QAAS,iBAAkB9oC,OAAQ,QAAS5Z,GAAIo4E,EAAIjlF,QACrG,GAAG,EAiBUqqE,GAAU,SAAH/wD,EAAAK,GAAA,IAClBu4B,EAAG54B,EAAH44B,IACAizC,EAAW7rE,EAAX6rE,YACAhxD,EAAQ7a,EAAR6a,SACAo2C,EAAOjxD,EAAPixD,QAAO6a,EAAA9rE,EACP7F,SAAAA,OAAQ,IAAA2xE,EAAG,KAAIA,EACZxoD,EAAQjjB,EAARijB,SAAUj8B,EAAIgZ,EAAJhZ,KAAI,OArBS,SAAHmY,GAAiB,IAAXo5B,EAAGp5B,EAAHo5B,IACvBmzC,EAAgB,GAOtB,OANAnzC,EAAIv1B,KAAKb,SAAQ,SAAC8iC,GACZA,EAAGjiC,MAAQiiC,EAAGjiC,KAAKqwD,QAAUpuB,EAAGjiC,KAAKqwD,MAAM3+D,IAC7Cg3E,EAAczjE,KAAK6iE,GAAY,CAAE7lC,GAAAA,IAErC,IAEI/+C,IAAAA,QAAUwlF,GACLrhD,KAAAA,QAAgBkO,GAGlBlO,KAAAA,IAAYqhD,GAAel1E,MAAK,kBAAM+hC,CAAG,GAClD,CAQ0BozC,CAAoB,CAAEpzC,IAAAA,IAAO/hC,MAAK,SAACyyE,GAC3D,IA5EiBjmE,EA4EjB4oE,ED8BqC,SAAHjsE,GAE7B,IADLspE,EAAYtpE,EAAZspE,aAAcuC,EAAW7rE,EAAX6rE,YAAahxD,EAAQ7a,EAAR6a,SAAUo2C,EAAOjxD,EAAPixD,QAE/Bib,EAAQ,GAERC,EAAc,GACdC,EAAc,GACdC,EAAc,GAsCpB,OApCA9N,EAAAA,EAAAA,OAAK55D,EAAAA,EAAAA,QAAO2kE,EAAajmE,OAAO,SAACiiC,GAC/B,GAAIA,EAAGjiC,OAASiiC,EAAGjiC,KAAKqwD,OAASpuB,EAAGjiC,KAAK9T,OAAQ,CAC/C,IAAM+8E,GAAQ//E,EAAAA,EAAAA,GAAA,GAAQ+4C,GAClBgkC,EAAatY,YACfsb,EAAStb,UAAYsY,EAAatY,WAIhCsb,EAAS/4E,IACX64E,EAAY9jE,KAAKgkE,GAIjBJ,EAAM5jE,KAAKgkE,EAAS/4E,KAEpB44E,EAAY7jE,KAAKgkE,EAErB,CACF,IAEIT,IAEFtN,EAAAA,EAAAA,OAAK55D,EAAAA,EAAAA,QAAOknE,EAAYxoE,OAAO,SAACkpE,GAC1BA,EAAMh5E,KAAO24E,EAAM90E,SAASm1E,EAAMh5E,KACpC84E,EAAY/jE,KAAKikE,EAErB,IAUK,CAAEC,kBAPiBnD,GAAsB,CAAEC,aAAc6C,EAAatxD,SAAAA,EAAUo2C,QAAAA,IAO3Dwb,kBALL,GAAAr0E,QAAAmQ,EAAAA,EAAAA,GAClB8gE,GAAsB,CAAEC,aAAc8C,EAAavxD,SAAAA,EAAUo2C,QAAAA,MAAU1oD,EAAAA,EAAAA,GACvE8gE,GAAsB,CAAEC,aAAc+C,EAAaxxD,SAAAA,EAAUo2C,QAAAA,IAAW,KAI/E,CC5EmDyb,CAAwB,CACvEpD,aAAAA,EAAcuC,YAAAA,EAAahxD,SAAAA,EAAUo2C,QAAAA,IAD/Bub,EAAiBP,EAAjBO,kBAAmBC,EAAiBR,EAAjBQ,kBAIrBE,EAAW,CAAC,EAUlB,OARIH,EAAkBvjF,OAAS,IAC7B0jF,EAAShiB,WAnFMtnD,EAmFiBmpE,EAnFT3B,GAAW+B,WAAWC,KAAKhC,GAA3BA,CAAuCxnE,KAsF5DopE,EAAkBxjF,OAAS,IAC7B0jF,EAASG,UArFM,SAAAzpE,GAAI,OAAIwnE,GAAWkC,WAAWF,KAAKhC,GAA3BA,CAAuCxnE,EAAM,CAqF/C2pE,CAAWP,IAG3B/hD,KAAAA,MAAciiD,GAAU91E,MAAK,SAACy1D,GACnC,IAAM2gB,EAAa3gB,EAAQwgB,WAAa,GAClCI,EAAa5gB,EAAQ3B,WAAa,GAElCruD,EAAM,GAAAlE,QAAAmQ,EAAAA,EAAAA,GAAO0kE,IAAU1kE,EAAAA,EAAAA,GAAK2kE,IAE5B7pE,GAAI9W,EAAAA,EAAAA,GAAA,CACRqsC,IAAKyxC,GAA0B,CAC7Bjf,SAAU9uD,EACVquE,iBAAkBrB,KAEjB2B,MAOL,OAHI9wE,GACFA,EAASyL,OAAO,wEAADxN,OAAyEkE,EAAOrT,SAE1Foa,CACT,IAAG,SAAC8pE,GACF,GAAI/R,GAAsB+R,GAAoB,CAC5C,IAAQ10D,EAAmB00D,EAAnB10D,OAIF20D,EAhIqB,SAAAjnF,GAAM,OAAII,IAAAA,IAAMJ,GAAQ,SAACE,GAIxD,OAFAA,EAAMgnF,SAAQ,GAAAj1E,OAAM/R,EAAMgnF,SAAQ,KAAAj1E,OAAI/R,EAAM,cAErCA,CACT,GAAG,CA2HyCinF,CAJXH,EAAXhnF,QAMVonF,EAAW90D,EACf4xD,GAA0B,CACxBjf,SAAU3yC,EACVkyD,iBAAkBrB,IAEpBA,EAEIje,EAAeuQ,GACnBwR,EACApC,GACA1nD,EACAj8B,EACA8S,GAOF,OAJIA,GACFA,EAASyL,OAAO,6BAADxN,OAA8B5F,KAAKC,UAAU44D,KAGvD3gC,KAAAA,OAAe,CACpBkO,KAAGrsC,EAAAA,EAAAA,GAAA,GAAOghF,GACVliB,aAAAA,GAEJ,CAMA,OAFA/lD,QAAQkoE,KAAK,sCAADp1E,OAAuC+0E,EAAkBM,OAASN,EAAkBnyE,SAAWmyE,IAEpGziD,KAAAA,OAAe,CACpBkO,IAAK0wC,EACL4B,aAAc,CAAC7jF,EAAKmB,UA1JQC,mGA6JhC,GACF,GAAG,ECzKI,SAASilF,GAA0B18D,EAAK3N,EAAMsqE,GACnD,IAAM73B,EAAM,CACVzyC,KAAAA,EACAuqE,KAAMxvD,KAAKyvD,MACXF,OAAAA,GAEFG,aAAaC,QAAQ/8D,EAAKxe,KAAKC,UAAUqjD,GAC3C,CAoBO,SAASk4B,KACd,IAAMrkD,EAAO,IAAIvL,KACjB,MAAM,GAANhmB,OAAUuxB,EAAKskD,YAAW,KAAA71E,OAAIuxB,EAAKukD,SAAQ,KAAA91E,OAAIuxB,EAAKpU,OACtD,CAiBC,SAAA44D,KAAA,OAAAA,IAAA92B,EAAAA,GAAAA,IAAAC,EAAAA,GAAAA,KAAAC,MAfM,SAAAC,EAAwC1kD,GAAa,IAAA6qC,EAAAywC,EAAAl8E,EAAAoK,EAAA,OAAAg7C,EAAAA,GAAAA,KAAAU,MAAA,SAAAC,GAAA,cAAAA,EAAAC,KAAAD,EAAAE,MAAA,OAGpC,OAFhBxa,EAAc4J,GAAez0C,GAC7Bs7E,EAAO,GAAAh2E,OAAMulC,EAAYmK,UAAS,eAAA1vC,OAActF,EAAcurE,gBAAgB9qE,GAAE,eAAA6E,OAActF,EAAcQ,eAAeC,GAAE,MAC7HrB,EAAG,GAAAkG,OAAMg2E,EAAO,4BAAAn2B,EAAAC,KAAA,EAAAD,EAAAE,KAAA,EAGCglB,GAAAA,MAAMlnE,IAAI/D,EAAKyrC,GAAa,KAAD,EAApC,KAANrhC,EAAM27C,EAAAM,QACEj8C,EAAO5V,MAAK,CAAAuxD,EAAAE,KAAA,SAC6C,OAArEu1B,GAA0BM,KAAU1xE,EAAO5V,MA3CvB,OA2CiDuxD,EAAAkB,OAAA,SAC9D78C,EAAO5V,OAAK,QAAAuxD,EAAAE,KAAA,iBAAAF,EAAAC,KAAA,GAAAD,EAAAo2B,GAAAp2B,EAAA,SAGrB3yC,QAAQjf,MAAM4xD,EAAAo2B,GAAQn8E,GAAK,eAAA+lD,EAAAkB,OAAA,SAEtBzuB,QAAQC,WAAS,yBAAAstB,EAAAc,OAAA,GAAAvB,EAAA,oBACzBnR,MAAA,KAAAvkC,UAAA,CAEM,SAASwsE,GAAuCx7E,GACrD,IAAI0zE,EAzCN,SAAmCx1D,GACjC,IAAI0qB,EAAMoyC,aAAaS,QAAQv9D,GAC/B,IAAK0qB,EACH,OAAO,KAET,IACEA,EAAMlpC,KAAKg8E,MAAM9yC,EACnB,CAAE,MAAOr1C,GAEP,OADAif,QAAQjf,MAAM,2BAA4BA,GACnC,IACT,CACA,OAAI+3B,KAAKyvD,MAAQnyC,EAAIkyC,KAAOlyC,EAAIiyC,QAC9BG,aAAaj6B,WAAW7iC,GACjB,CAAE0qB,IAAKA,EAAIr4B,KAAMorE,SAAS,IAE5B,CAAE/yC,IAAKA,EAAIr4B,KAAMorE,SAAS,EACnC,CAyB4BC,CAA0BV,MAMpD,OAJKxH,IAAuBA,EAAoBiI,UAC9CjI,EArBG,SAAuCtI,GAAA,OAAAiQ,GAAA9nC,MAAC,KAADvkC,UAAA,CAqBpB6sE,CAAyB77E,IAG1C0zE,CACT,C,8BC5DaoI,GAAiB,WAAH,OAASlsE,SAASmsE,SAASz3E,SAAS,qBAAsB,EACxE03E,GAAgB,WAAH,OAASpsE,SAASmsE,SAASz3E,SAAS,eAAiBw3E,IAAiB,EAEnFG,GAAe,WAC1B,IAAKH,KACH,OAAO,KAET,IAAII,EAAYxd,GAAAA,QAAOv7D,IAAI,kBAQ3B,OAPK+4E,GACClB,GAAAA,EAAamB,oBACfD,EAAYlB,GAAAA,EAAa73E,IAAI,kBAC7Bu7D,GAAAA,QAAO0d,IAAI,iBAAkBF,IAI1BA,CACT,E,yXCMMtmC,IAAal4B,EAAAA,EAAAA,IAAS/E,GAAak9B,IAEnCwmC,GAAkB,CAAC,uCAAwC,wCAEpDC,GAAgB,SAAC1b,EAAOrsE,EAAMgoF,EAAyBC,GAClE,IAAMpzD,EAAW,GAEjB,OAAKw3C,EAKgB,WAAjBA,EAAMvmD,OACD,IAIa,IAAlBumD,EAAM8D,SAAkB8X,GAC1BpzD,EAAS5T,KAAKjhB,EAAKmB,UAAUC,0IAG1BirE,EAAMtpD,OAAS,KAAOspD,EAAMjkE,MAAQ,OAAS6/E,GAChDpzD,EAAS5T,KAAKjhB,EAAKmB,UAAUC,0FAI3B4mF,GAA2B3b,EAAM8D,QAAU6X,IACb,IAA5BA,EACFnzD,EAAS5T,KAAKjhB,EAAKmB,UAAUC,qEACQ,IAA5B4mF,GACTnzD,EAAS5T,KAAKjhB,EAAKmB,UAAUC,wEAI7ByzB,EAASjzB,OAAS,EACI,WAAjByqE,EAAMvmD,OAAsB,CAAC5mB,IAAAA,MAAQ21B,IAAa,GAIpDA,IA/BLA,EAAS5T,KAAKjhB,EAAKmB,UAAUC,wBACtByzB,EA+BX,EAEMhzB,GAAY,WAAC,MAA6B,CAC9CqmF,iBAAkB,CAChBr+E,eAAgB,WAChBrK,QAAS,OACTgtC,OAAQ,UACRV,aAAc,GACdF,WAAY,UACZxjC,MAAO,GACP2a,OAAQ,IAEVolE,0BAA2B,CACzBtoE,SAAU,WACV6sB,KAAM,MACNC,IAAK,MACLC,UAAW,wBACXpjC,UAAW,OACXhK,QAAS,QAEZ,EAggBK4oF,GAAgClpF,IAAAA,QACpC6tB,EAAAA,GACAC,EAAAA,GACAR,EAAAA,UACAxlB,EAAAA,qBACAqhF,EAAAA,GALoCnpF,EA9fd,SAAC0R,GAuBnBA,EApBFuiB,aAFF,IAGEif,EAmBExhC,EAnBFwhC,IACApyC,EAkBE4Q,EAlBF5Q,KACAwrD,EAiBE56C,EAjBF46C,QACAvkD,EAgBE2J,EAhBF3J,iBACA+gF,EAeEp3E,EAfFo3E,wBACA16D,EAcE1c,EAdF0c,YACAg7D,EAaE13E,EAbF03E,YACA3uC,EAYE/oC,EAZF+oC,mBACA4uC,EAWE33E,EAXF23E,YACAC,EAUE53E,EAVF43E,eACAC,EASE73E,EATF63E,MACA3a,EAQEl9D,EARFk9D,eACA4a,EAOE93E,EAPF83E,gBACAT,EAMEr3E,EANFq3E,sBACAxb,EAKE77D,EALF67D,oBACApkB,EAIEz3C,EAJFy3C,YACA2Q,EAGEpoD,EAHFooD,eACA1J,EAEE1+C,EAFF0+C,gBACGnoD,GAAIC,EAAAA,EAAAA,GACLwJ,EAAKvJ,IAEPshF,EACEJ,EADFI,SAGAprE,EACEpW,EADFoW,IAAKC,EACHrW,EADGqW,IAAK64B,EACRlvC,EADQkvC,WAAY5qC,EACpBtE,EADoBsE,cAGlB4gE,EAAQ7gB,GAAWA,EAAQ6gB,MAAQ7gB,EAAQ6gB,MAAQ,KAEnDW,EAAyB1/C,GAAeA,EAAY5qB,SAAW4qB,EAAY5qB,QAAQuqE,gBACnF2b,EAAmCt7D,GAAeA,EAAYu7D,+BACxB,mBAAvC3pF,IAAAA,IAAMssD,EAAS,qBACoB,WAAnCtsD,IAAAA,IAAMssD,EAAS,gBAEd14C,GAAW7S,EAAAA,EAAAA,YAAW8S,EAAAA,iBAEtBzQ,GAAUC,EAAAA,EAAAA,kBAAiBV,IAEjC1B,GAAsCC,EAAAA,EAAAA,WAAS,GAAMC,GAAAC,EAAAA,EAAAA,GAAAH,EAAA,GAA9C2oF,EAAWzoF,EAAA,GAAE0oF,EAAc1oF,EAAA,GAClCiiD,GAA8CliD,EAAAA,EAAAA,WAAS,GAAMmiD,GAAAjiD,EAAAA,EAAAA,GAAAgiD,EAAA,GAAtD0mC,EAAezmC,EAAA,GAAE0mC,EAAkB1mC,EAAA,GAC1CG,IAA8CtiD,EAAAA,EAAAA,WAAS,GAAMuiD,IAAAriD,EAAAA,EAAAA,GAAAoiD,GAAA,GAAtDwmC,GAAevmC,GAAA,GAAEwmC,GAAkBxmC,GAAA,GAC1CwW,IAA4C/4D,EAAAA,EAAAA,WAAS,kBAAOorD,GAAWA,EAAQkhB,QAAMxrD,EAAAA,EAAAA,GAAOsqC,EAAQkhB,QAAU,EAAE,IAAEtT,IAAA94D,EAAAA,EAAAA,GAAA64D,GAAA,GAA3GiwB,GAAchwB,GAAA,GAAEiwB,GAAiBjwB,GAAA,GACxCE,IAAsEl5D,EAAAA,EAAAA,UAAS,CAC7Eu4C,QAAQ,IACR4gB,IAAAj5D,EAAAA,EAAAA,GAAAg5D,GAAA,GAFKgwB,GAA2B/vB,GAAA,GAAEgwB,GAA8BhwB,GAAA,GAGlEiwB,IAA4CppF,EAAAA,EAAAA,WAAS,GAAMqpF,IAAAnpF,EAAAA,EAAAA,GAAAkpF,GAAA,GAApDE,GAAcD,GAAA,GAAEE,GAAiBF,GAAA,GAElCG,GAAavd,GAASA,EAAM7xC,SAC5B63B,GAAaga,GAASA,EAAM7xC,UAAY6xC,EAAM7xC,SAAS63B,WACvDw3B,GAAmB/B,GAAgB/3E,SAASsiD,IAE5Cy3B,GAAkB,SAAChrF,GAGnBA,GACFmI,EAAiBnI,EAAQ,CAAEutE,MAAO,MAEtC,EAcM0d,IAA2BppF,EAAAA,EAAAA,cAAY,SAACqpF,GAC5C,IAAMC,EAAcD,EAAKnhF,QAAO,SAAAqhF,GAAU,YAAmBp2E,IAAfo2E,CAAwB,IACtEb,GAAkBY,GAElB,IAAIE,EAAqB,GACrBF,EAAYroF,OAAS,IACvBuoF,EAAqBF,EAAYlrF,KAAI,SAAAqrF,GAAQ,OAAIrC,GAAcqC,EAAUpqF,EAAMgoF,EAAyBC,EAAsB,KAGhI,IAAMoC,EAAqBF,EAAmBG,OAE9CrjF,EAAiBojF,EAAoB,CAAE3d,OAAQud,IAC3Cn3E,GACFA,EAASyL,OAAO,gCAADxN,OAAiCs5E,EAAkB,gBAAAt5E,OAA6C,IAA9Bs5E,EAAmBzoF,QAExG,GAAG,CAAC5B,EAAMiH,EAAkB+gF,EAAyBl1E,EAAUm1E,KAE/D/0E,EAAAA,EAAAA,YAAU,WACJ41E,IACF7hF,EAAiB,CAACjH,EAAKmB,UAAUC,4CAAmD,CAAEirE,MAAO,OAEzFv5D,GACFA,EAASyL,OAAO,sBAItB,GAAG,CAACuqE,KAEJ51E,EAAAA,EAAAA,YAAU,WACR,IAAMswC,IAAgBtkD,IAAAA,YAAcssD,IAAYtsD,IAAAA,OAASssD,KACpC,IAAnBsiB,GAA6B7mE,EAC7BukD,EAAUu8B,GAAcv8B,EAAQ6gB,MAAOrsE,EAAMgoF,EAAyBC,GAAyB,CAACjoF,EAAKmB,UAAUC,wBAC/G,CAAEirE,MAAO7gB,GAAWA,EAAQ6gB,MAAQ7gB,EAAQ6gB,MAAQ,MACpD7oB,EAGJ,GAAG,IAEH,IAmBM+mC,GAA8B,SAACjtE,GACnC,OAA2B,OAAvBA,EAAOwmE,YACF,MAIPxkF,EAAAA,EAAAA,MAAA,OAAKL,UAAWkW,IAAW7S,EAAQ6lF,2BAA2B7pF,SAAA,CAC3DsrF,KACCvrF,EAAAA,EAAAA,KAAA,OAAKY,UAAWkW,IAAW7S,EAAQ4lF,iBAAkB,eAAe5pF,UAClED,EAAAA,EAAAA,KAACioD,EAAU,CACT7mC,QAAS,WAAF,OAAQwpE,GAAmB,EAAK,EACvC1iC,UAAW,CAAE3S,SAAU,QACvB30C,UAAU,mBACVR,OAAQ,CAAEC,KAAM,CAAEotC,aAAc,OAAQ/oB,OAAQ,GAAI3a,MAAO,UAIjE/J,EAAAA,EAAAA,KAAA,OAAKY,UAAWkW,IAAW7S,EAAQ4lF,iBAAkB,eAAe5pF,UAClED,EAAAA,EAAAA,KAACioD,EAAU,CACT7mC,QAAS,WACP,IAAM+qE,EAAoBzC,GAAc,KAAM/nF,EAAMgoF,EAAyBC,GAC7EhhF,EAAiBujF,EAAmB,CAAEne,MAAO,MAC/C,EACA9lB,UAAW,CAAE3S,SAAU,UACvB30C,UAAU,qBACVR,OAAQ,CAAEC,KAAM,CAAEotC,aAAc,OAAQ/oB,OAAQ,GAAI3a,MAAO,WAKrE,EAEMqiF,IAA8C9pF,EAAAA,EAAAA,cAAY,SAAC+pF,EAAeC,GAC9E,IAAMC,EAAqBxB,GAAeuB,GAG1C,OACErrF,EAAAA,EAAAA,MAAA,OAAKC,MAAO,CAAEC,QAAS,OAAQgK,UAAW,GAAIlL,SAAA,CAE1CosF,EAAclwD,WACZn8B,EAAAA,EAAAA,KAAA,OAAKY,UAAWkW,IAAW7S,EAAQ4lF,iBAAkB,gBAAgB5pF,UACnED,EAAAA,EAAAA,KAACioD,EAAU,CACT7mC,QAAS,WAAF,OAAQ8pE,GAA+B,CAC5C5wC,QAAQ,EACR0zB,MAAOue,EACPx4C,IAAKu4C,GACL,EACFpkC,UAAW,CAAE3S,SAAU,QACvB30C,UAAU,mBACVR,OAAQ,CAAEC,KAAM,CAAEotC,aAAc,OAAQ/oB,OAAQ,GAAI3a,MAAO,UAKnE/J,EAAAA,EAAAA,KAAA,OAAKY,UAAWkW,IAAW7S,EAAQ4lF,iBAAkB,gBAAgB5pF,UACnED,EAAAA,EAAAA,KAACioD,EAAU,CACT7mC,QAAS,WAEP,IAAMorE,GAAa3pE,EAAAA,EAAAA,GAAOkoE,IAC1ByB,EAAcj9B,OAAO+8B,EAAa,GAClCZ,GAAyBc,EAC3B,EAEAtkC,UAAW,CAAE3S,SAAU,UACvB30C,UAAU,qBACVR,OAAQ,CAAEC,KAAM,CAAEotC,aAAc,OAAQ/oB,OAAQ,GAAI3a,MAAO,WAKrE,GAAG,CAACghF,GAAgB9mF,EAAQ4lF,iBAAkB6B,KAExCe,IAAoBnqF,EAAAA,EAAAA,cAAY,SAACoqF,GACrC,IAAMP,EAAoBzC,GAAcgD,EAAU/qF,EAAMgoF,EAAyBC,GAC3E+C,EAAc,IAAIC,EAAAA,GAAoB/lF,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAC,CAAC,EACzC6lF,GAAQ,IACX3iF,MAAO2iF,EAASvwD,SAASpyB,MACzB2a,OAAQgoE,EAASvwD,SAASzX,OAC1Boe,IAAK4pD,EAAS5pD,KAAO4pD,EAASlgF,IAC9B/J,KAAM,iBACN+9C,aAAcksC,EAASlsC,gBAOzB,OALAmsC,EAAYngF,IAAMkgF,EAASlgF,IACtBmgF,EAAYjsC,mBACfisC,EAAYjsC,iBAAmBgsC,EAAShsC,kBAAoBgsC,EAASjsC,cAGhE,CAAEksC,YAAAA,EAAaR,kBAAAA,EACxB,GAAG,CAACxqF,EAAMgoF,EAAyBC,IAE7BiD,IAAqBvqF,EAAAA,EAAAA,cAAY,SAACoqF,GACtC,IAAAI,EAA2CL,GAAkBC,GAArDC,EAAWG,EAAXH,YAAaR,EAAiBW,EAAjBX,kBAEjB1c,EACkBsb,GAAezkF,MAAK,SAAAymF,GAAC,OAAIA,EAAErsC,mBAAqBisC,EAAYjsC,gBAAgB,KAE9FgrC,GAAyB,GAADh5E,QAAAmQ,EAAAA,EAAAA,GAAKkoE,IAAc,CAAE4B,KAG/C/jF,EAAiBujF,EAAmB,CAClCne,MAAO2e,GAGb,GAAG,CAACF,GAAmBhd,EAAgBsb,GAAgBW,GAA0B9iF,IAE3EokF,IAA0B1qF,EAAAA,EAAAA,cAAY,SAACoqF,EAAUO,GACrD,IAAMN,EAAc,IAAIC,EAAAA,GAAoB/lF,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAC,CAAC,EACzC6lF,GAAQ,IACX3iF,MAAO2iF,EAASvwD,SAASpyB,MACzB2a,OAAQgoE,EAASvwD,SAASzX,OAC1Boe,IAAK4pD,EAAS5pD,KAAO4pD,EAASlgF,IAC9B/J,KAAM,iBACN+9C,aAAcksC,EAASlsC,gBAEzBmsC,EAAYngF,IAAMkgF,EAASlgF,IACtBmgF,EAAYjsC,mBACfisC,EAAYjsC,iBAAmBgsC,EAAShsC,kBAAoBgsC,EAASjsC,cAGvE,IAAM+rC,GAAa3pE,EAAAA,EAAAA,GAAOkoE,IAC1ByB,EAAcS,GAAeN,EAC7BjB,GAAyBc,EAC3B,GAAG,CAACzB,GAAgBW,KAEdwB,IAAgB5qF,EAAAA,EAAAA,cAAY,SAACoqF,GACjCG,IAAkBhmF,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAC,CAAC,EAAI6lF,GAAQ,IAAE1T,OAAQ,WAC5C,GAAG,CAAC6T,KAEEM,IAAqB7qF,EAAAA,EAAAA,cAAY,SAACoqF,EAAUO,GAChDD,IAAuBnmF,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAC,CAAC,EAAI6lF,GAAQ,IAAE1T,OAAQ,WAAYiU,EAC7D,GAAG,CAACD,MAEJn4E,EAAAA,EAAAA,YAAU,YACH46D,GAAkBzB,GAASA,EAAM3+D,IAAM2+D,EAAM3jB,WAAa2jB,EAAM7xC,WACnE2uD,IAAmB,GACnBR,EAAS,CAAEj7E,GAAI2+D,EAAM3+D,GAAI+9E,eAAe,IAAQj8E,MAAK,SAACu7E,GACpDG,IAAmB3G,EAAAA,EAAAA,IAAqBwG,GAC1C,IAAGt1D,SAAQ,WACT0zD,IAAmB,EACrB,IAEJ,GAAG,CAACR,EAAUuC,GAAoB7e,EAAOyB,KAEzC56D,EAAAA,EAAAA,YAAU,WACR,IAAKg2E,IAAmBQ,IAAkBlB,GAAkB1a,GAAkBsb,GAAexnF,OAAS,GAAKwnF,GAAej3E,MAAK,SAAAi5E,GAAC,OAAIA,GAAKA,EAAE19E,IAAM09E,EAAE1iC,WAAa0iC,EAAE5wD,QAAQ,IAAG,CAC3K2uD,IAAmB,GACnB,IAAMuC,EAAmB,GACnBb,EAAgB,GACtBzB,GAAejuE,SAAQ,SAACiwE,EAAGhwE,GACrBgwE,GAAKA,EAAE19E,IAAM09E,EAAE1iC,WAAa0iC,EAAE5wD,SAChCkxD,EAAiBzqE,KAAK0nE,EAAS,CAAEj7E,GAAI09E,EAAE19E,GAAI+9E,eAAe,IAAQj8E,MAAK,SAACu7E,GACtE,IAAQC,EAAgBF,IAAkBvG,EAAAA,EAAAA,IAAqBwG,IAAvDC,YACRH,EAAc5pE,KAAK,CAAC+pE,EAAa5vE,GACnC,KAEAyvE,EAAc5pE,KAAK,CAACmqE,EAAGhwE,GAE3B,IAEAioB,QAAQsoD,IAAID,GAAkBj2D,SAAQ,WACpC,IAAMm2D,GAAc1qE,EAAAA,EAAAA,GAAOkoE,IAC3ByB,EAAc1vE,SAAQ,SAAAhd,GAAwB,IAADU,GAAAyB,EAAAA,EAAAA,GAAAnC,EAAA,GAArB4sF,EAAQlsF,EAAA,GAAEuc,EAAKvc,EAAA,GACrC+sF,EAAexwE,GAAS2vE,CAC1B,IAEAhB,GAAyB6B,GACzBzC,IAAmB,GACnBQ,IAAkB,EACpB,GACF,CACF,GAAG,CAAChB,EAAUuC,GAAoBpd,EAAgBsb,GAAgBF,GAAiBa,GAA0BvB,EAAgBkB,GAAgBoB,MAE7I53E,EAAAA,EAAAA,YAAU,WACJ46D,GAAkB4a,GAAmBxpF,IAAAA,QAAUssD,EAAQkhB,SACzDzlE,EAAiB,CAACjH,EAAKmB,UAAUC,wBAA+B,CAAEirE,MAAO,OAAQ,EAGrF,GAAG,IAEH,IAAQ5Z,GAAuB0f,KAAvB1f,mBAER,OACEnzD,EAAAA,EAAAA,MAAAi3B,EAAAA,SAAA,CAAAj4B,SAAA,EACEgB,EAAAA,EAAAA,MAACusF,EAAAA,UAAS,CACRC,SAAU5C,GACV5yB,YAAat2D,EAAKmB,UAAUC,cAC5BkB,QAAS,CACPypF,iBAAkB,iBAClBC,iBAAkB,qBAClB1tF,SAAA,EAEmB,IAAnBwvE,GACAxuE,EAAAA,EAAAA,MAACyB,EAAAA,MAAK,CAACC,YAAU,EAACC,OAAQ,CAAEC,YAAa,IAAK5C,SAAA,EAC5CD,EAAAA,EAAAA,KAAA,OAAKkB,MAAO,CAAE6I,MAAO,SAAU9J,UAC7BD,EAAAA,EAAAA,KAAA,OAAAC,UACE2tF,EAAAA,EAAAA,eAACC,EAAAA,IAAehnF,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACViC,GAAI,IACRmmB,YAAaA,EACb6+D,UAAqB,OAAV9f,EAAiB,GAAK,CAACA,GAClC+f,mBA5QU,SAACpC,GACzB,GAAIA,EAAKpoF,OAAS,EAAG,CACnB,IAAM4oF,EAAoBzC,GAAciC,EAAK,GAAIhqF,EAAMgoF,EAAyBC,GAChFhhF,EAAiBujF,EAAmB,CAAEne,MAAO2d,EAAK,KAC9Cl3E,GACFA,EAASyL,OAAO,gCAADxN,OAAiCy5E,EAAiB,gBAAAz5E,OAA4C,IAA7By5E,EAAkB5oF,QAEtG,MACEqF,EAAiB,CAACjH,EAAKmB,UAAUC,wBAA+B,CAAEirE,MAAO,MAE7E,EAmQgBggB,0BAA2BtD,EAC3Be,gBAAiBA,GACjBngE,IAAG,GAAA5Y,OAAKqhC,EAAG,6BACXpyC,KAAMA,EACN82C,eAAgBhkC,EAChBw5E,YAAY,EACZC,oBAAqB9D,EAAQ,gCAAkC,8BAC/D+D,sBAAuBhE,EAAiB3a,QAAiB/5D,EACzD24E,qBAAsBjE,EAAiB+B,GAnO1B,SAACjtE,EAAQoxD,GACpC,OAA2B,OAAvBpxD,EAAOwmE,YACF,MAIPzlF,EAAAA,EAAAA,KAAA,OAAKY,UAAWqD,EAAQ6lF,0BAA0B7pF,UAChDD,EAAAA,EAAAA,KAAA,OAAKY,UAAWkW,IAAW,CAAC7S,EAAQ4lF,iBAAkB,gBAAgB5pF,UACpED,EAAAA,EAAAA,KAACioD,EAAU,CACT7mC,QAAS,WAAF,OAAQnC,EAAOovE,UAAUhe,EAAWhpD,KAAK,EAChD6gC,UAAW,CAAE3S,SAAU,QACvB30C,UAAU,mBACVR,OAAQ,CAAEC,KAAM,CAAEotC,aAAc,OAAQ/oB,OAAQ,GAAI3a,MAAO,UAKrE,EAmNgBukF,qBAAqB,UAIzB/D,GAAoCp9B,GAAWA,EAAQ6gB,YAAmCv4D,IAA1B03C,EAAQ6gB,MAAM8D,UAC9E9xE,EAAAA,EAAAA,KAACo1E,GAAsB,CACrBjoB,QAASA,EACTxrD,KAAMA,QAGV3B,EAAAA,EAAAA,KAAA,OAAAC,UACE2tF,EAAAA,EAAAA,eAACC,EAAAA,IAAehnF,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACViC,GAAI,IACRmmB,YAAaA,EACb6+D,UAAW/C,GACXgD,mBAAoBrC,GACpBsC,0BAA2BtD,EAC3Be,gBAAiBA,GACjBngE,IAAG,GAAA5Y,OAAKqhC,EAAG,6BACXpyC,KAAMA,EACN8tE,gBAAc,EACdh3B,eAAgBhkC,EAChBw5E,YAAY,EACZC,oBAAoB,8BACpBC,sBAAuB3e,GACvB4e,qBAAsBjE,EAAiBiC,GAA8CF,GACrFoC,qBAAqB,OAG5BrE,EACAE,KAAoB1a,GAAmBA,GAAkBsb,GAAexnF,OAAS,KAChFvD,EAAAA,EAAAA,KAACozE,GAA0B,CACzBzxE,KAAMA,EACN2uE,wBAAyB4c,GACzBj+D,YAAaA,EACb+6B,YAAaA,EACbiH,gBAAiBA,EACjB0J,eAAgBA,OAKpBwvB,GAAkBnc,GAASA,EAAM7xC,WAC/BwyC,IAA2B6c,IACzBxrF,EAAAA,EAAAA,KAACuuF,EAAAA,EAAiC,CAChC5sF,KAAMA,EACN24C,OAAQqwC,EACR6D,cAAexgB,EACfrlB,QAASukC,GACT3yC,UAAW,SAACC,GACVowC,EAAmBpwC,EACrB,EACA4vC,MAAOA,EACPlrE,IAAKA,EACLC,IAAKA,EACLlJ,SAAUm+C,GACV9Y,mBAAoBA,EACpBrsB,YAAaA,EACb8pB,UAAW3rC,GAAiBA,EAAcswC,UAC1CtwC,cAAeA,EACf4qC,WAAYA,EAAWhgC,YAAY,uBACnCy2E,UAAQ,EACRrgB,oBAAqBA,KAGvBpuE,EAAAA,EAAAA,KAAC0uF,EAAAA,EAAkB,CACjBF,cAAexgB,EACf1zB,OAAQqwC,EACRpwC,UAAW,SAACC,GACZowC,EAAmBpwC,EACrB,EACEmO,QAASukC,GACThuE,IAAKA,EACLC,IAAKA,EACLlJ,SAAUm+C,GACV9Y,mBAAoBA,EACpBrsB,YAAaA,EACb8pB,UAAW3rC,GAAiBA,EAAcswC,UAC1C/7C,KAAMA,EACNq2C,WAAYA,EAAWhgC,YAAY,sBACnCoyE,MAAOA,KAMbD,GAAkB1a,IAChBd,GACE3uE,EAAAA,EAAAA,KAACuuF,EAAAA,EAAiC,CAChC5sF,KAAMA,EACN24C,OAAQ2wC,GAA4B3wC,OACpCk0C,cAAevD,GAA4Bjd,MAC3CrlB,QAAS,SAAA+jC,GAAQ,OAAIS,GAAmBT,EAAUzB,GAA4Bl3C,IAAI,EAClFwG,UAAW,SAACC,GACV0wC,GAA+B,CAAE5wC,OAAQE,GAC3C,EACA4vC,MAAOA,EACPlrE,IAAKA,EACLC,IAAKA,EACLlJ,SAAUm+C,GACV9Y,mBAAoBA,EACpBrsB,YAAaA,EACb8pB,UAAW3rC,GAAiBA,EAAcswC,UAC1CtwC,cAAeA,EACf4qC,WAAYA,EAAWhgC,YAAY,uBACnCy2E,UAAQ,EACRrgB,oBAAqBA,KAGvBpuE,EAAAA,EAAAA,KAAC0uF,EAAAA,EAAkB,CACjBF,cAAevD,GAA4Bjd,MAC3C1zB,OAAQ2wC,GAA4B3wC,OACpCC,UAAW,SAACC,GACZ0wC,GAA+B,CAAE5wC,OAAQE,GAC3C,EACEmO,QAAS,SAAA+jC,GAAQ,OAAIS,GAAmBT,EAAUzB,GAA4Bl3C,IAAI,EAClF70B,IAAKA,EACLC,IAAKA,EACLlJ,SAAUm+C,GACV9Y,mBAAoBA,EACpBrsB,YAAaA,EACb8pB,UAAW3rC,GAAiBA,EAAcswC,UAC1C/7C,KAAMA,EACNq2C,WAAYA,EAAWhgC,YAAY,sBACnCoyE,MAAOA,OAOrB,IA8CMuE,GAA2B,SAACp8E,GAChC,IACE46C,EACE56C,EADF46C,QAASpZ,EACPxhC,EADOwhC,IAAKpyC,EACZ4Q,EADY5Q,KAAM8tE,EAClBl9D,EADkBk9D,eAAgB2a,EAClC73E,EADkC63E,MAAOC,EACzC93E,EADyC83E,gBAAoBvhF,GAAIC,EAAAA,EAAAA,GACjEwJ,EAAKmoB,IAGPttB,EACEtE,EADFsE,cAAek3B,EACbx7B,EADaw7B,kBAAmBplB,EAChCpW,EADgCoW,IAAKC,EACrCrW,EADqCqW,IAAK84B,EAC1CnvC,EAD0CmvC,YAGxC22C,GAAY5jE,EAAAA,EAAAA,IAAQg4B,IAAY96C,EAAAA,EAAAA,IAAW,wBAADwK,OAAyBqhC,KAEnE63C,EAAcz+B,GAAWh+C,MAAMyE,QAAQu5C,EAAQkhB,QAAUlhB,EAAQkhB,OAAO7jE,QAAO,SAAAwjE,GAAK,YAAcv4D,IAAVu4D,CAAmB,IAAI,GAE/G6gB,EAAiB,CAAExgB,OAAQud,GAE3B/gC,EAAU,CAAEmjB,MAAO7gB,EAAUA,EAAQ6gB,MAAQ,MAE7C8gB,EAAoBntF,EAAKmB,UAAUC,yMAEnCgsF,EAAkB5hC,GAAWA,EAAQ6gB,OAAkC,UAAzB7gB,EAAQ6gB,MAAMvmD,OAAqB,CAACqnE,GAAqB,GAEvGE,EAAiBvf,EAAiB,CAAEpB,OAAQud,GAAgBz+B,EAE5D1U,GAAiB72C,EAAAA,EAAAA,YAAW8S,EAAAA,iBAE5B4mC,EAAqB,CACzBp8B,IAAAA,EACAC,IAAAA,EACA84B,YAAAA,EACAO,WAAY33C,IAAAA,IAAMuM,EAAe,CAAC,cAAe,wBAAyB,qBAC1EgrB,SAAUv3B,IAAAA,IAAMuM,EAAe,CAAC,iBAAkB,aAClDmuC,mBAAoBjX,EACpBmU,eAAAA,GAGF,OACEz4C,EAAAA,EAAAA,KAAC+pF,IAA6BljF,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACxBiC,GAAI,IACRwyC,mBAAoBA,EACpB6R,QAAS6hC,EACTvf,eAAgBA,EAChB17B,IAAKA,EACLpyC,KAAMA,EACN0U,gBAAiB,CACf8U,MAAOskD,EAAiB,SAAW,QACnC9xD,KAAM8xD,EAAiBof,EAAiBhkC,EACxCpyB,aAAcoyB,EACdkkC,gBAAiBtf,EAAiB,GAAKsf,EACvCE,sBAAsB,GAExB1kF,eAAgB,CAAEC,OAAQokF,GAC1BxE,MAAOA,EACPC,gBAAiBA,IAGvB,EAkBAsE,GAAyBvtF,aAAe,CACtCquE,gBAAgB,EAChB2a,OAAO,EACPR,uBAAuB,GAGzB,IAAMsF,IAAgCtxC,EAAAA,EAAAA,gBAAe+wC,IAE/CQ,GAAmD,SAAC58E,GACxD,IAAM68E,GAA0BhtF,EAAAA,EAAAA,UAAQ,kBAAM,IAAIitF,EAAAA,WAAa,GAAE,IACjEC,EAAkDxb,KAA1CjnE,EAAKyiF,EAALziF,MAAOokD,EAAeq+B,EAAfr+B,gBAAiBS,EAAa49B,EAAb59B,cACxB1H,EAAgBz3C,EAAhBy3C,YAYR,OAVAn1C,EAAAA,EAAAA,YAAU,WACR68C,GACF,GAAG,CAACA,KAEJ78C,EAAAA,EAAAA,YAAU,WACJtC,EAAM43E,gBACRt9E,EAAMuiF,EAAyBplC,EAEnC,GAAG,CAACz3C,EAAO68E,EAAyBviF,KAE7B7M,EAAAA,EAAAA,KAACkvF,IAA6BroF,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAK0L,GAAK,IAAE0+C,gBAAiBA,IACpE,E,aCprBMnG,IAAoBp8B,EAAAA,EAAAA,KAAyBC,EAAAA,EAAAA,KAA6BR,EAAAA,EAAAA,YAAUxlB,EAAAA,EAAAA,sBAAqBoiD,GAAAA,OAElGwkC,GAAW,SAAHzvF,GAMd,IALL6B,EAAI7B,EAAJ6B,KACA+pD,EAAY5rD,EAAZ4rD,aACA7B,EAAkB/pD,EAAlB+pD,mBACA4a,EAAkB3kE,EAAlB2kE,mBACA/W,EAAkB5tD,EAAlB4tD,mBAEMj5C,GAAW7S,EAAAA,EAAAA,YAAW8S,EAAAA,iBAC5B5S,GAA8CC,EAAAA,EAAAA,UAAS,CAAC,GAAEC,GAAAC,EAAAA,EAAAA,GAAAH,EAAA,GAAnD0tF,EAAextF,EAAA,GAAEytF,EAAkBztF,EAAA,GAC1CiiD,GAA4DliD,EAAAA,EAAAA,WAAS,GAAMmiD,GAAAjiD,EAAAA,EAAAA,GAAAgiD,EAAA,GAApEyrC,EAAsBxrC,EAAA,GAAEyrC,EAAyBzrC,EAAA,GAMlD0rC,GAA8BttF,EAAAA,EAAAA,cAAY,WAC9C,IAAMi0B,EAAU11B,IAAAA,OAAS2uF,EAAiB,WAAW,GAC/C7wB,EAAY99D,IAAAA,OAAS2uF,EAAiB,CAAC,OAAQ,kBAAc/5E,GAC7DQ,EAAWpV,IAAAA,MAAQ89D,GAErBpoC,IACE9hB,GACFA,EAASyL,OAAO,4CAADxN,OAA6CuD,IAG9DwuD,EAAmBxuD,GACnB05E,GAA0B,GAE9B,GAAG,CAACl7E,EAAU+6E,EAAiB/qB,IAEzBorB,GAAcvtF,EAAAA,EAAAA,cAAY,SAACqZ,GAEnB,UADIA,EAAR2P,KAENskE,GAEJ,GAAG,CAACA,IAEEnxB,GAAuBr8D,EAAAA,EAAAA,UAAQ,iBAAO,CAAEs8D,OAAQkxB,EAA6BE,QAASD,EAAa,GAAG,CAACD,EAA6BC,IAS1I,OAPAh7E,EAAAA,EAAAA,YAAU,WAEJ64C,IAAuBgiC,GACzBE,GAEJ,GAAG,CAACliC,EAAoBkiC,EAA6BF,KAGnD1vF,EAAAA,EAAAA,KAACysD,EAAAA,gBAAe,CACdp2C,gBAAiB,CACfs2C,WAtCwB,SAAC/1C,GAC7B64E,EAAmB74E,EACrB,GAqCM3W,UAEFD,EAAAA,EAAAA,KAAC8qD,GAAiB,CAChBjB,mBAAoB/yC,IAAW+yC,EAAoB,uBACnDloD,KAAMA,EACN0U,gBAAiB,CACfsH,KAAM+tC,EACNjzB,aAAcizB,GAEhBkB,kBAAgB,EAChB6R,qBAAsBA,KAI9B,EAWA8wB,GAASnuF,aAAe,CACtByoD,mBAAoB,GACpB6D,oBAAoB,GCjEtB,IAAMqiC,GAAa,SAAHjwF,GA2BT,IA1BL6B,EAAI7B,EAAJ6B,KACAq2C,EAAUl4C,EAAVk4C,WACA94B,EAAGpf,EAAHof,IACAC,EAAGrf,EAAHqf,IACA8rC,EAAQnrD,EAARmrD,SACAC,EAAaprD,EAAborD,cACAC,EAAiBrrD,EAAjBqrD,kBACAl8B,EAAWnvB,EAAXmvB,YACAk+B,EAAOrtD,EAAPqtD,QACA/B,EAAQtrD,EAARsrD,SACAC,EAAevrD,EAAfurD,gBACAs+B,EAAuB7pF,EAAvB6pF,wBACaqG,EAAelwF,EAA5Bm4C,YACA5E,EAAmBvzC,EAAnBuzC,oBACAC,EAAsBxzC,EAAtBwzC,uBACA28C,EAAanwF,EAAbmwF,cACAC,EAASpwF,EAATowF,UACAC,EAAsBrwF,EAAtBqwF,uBACAC,EAAUtwF,EAAVswF,WACA3rB,EAAkB3kE,EAAlB2kE,mBACA/W,EAAkB5tD,EAAlB4tD,mBACA0hC,EAAuBtvF,EAAvBsvF,wBACAjF,EAAcrqF,EAAdqqF,eACA/b,EAAmBtuE,EAAnBsuE,oBACApkB,EAAWlqD,EAAXkqD,YACA2Q,EAAc76D,EAAd66D,eAEMnnB,GAAiBtvC,EAAAA,EAAAA,kBAAiBkpC,GAElCqG,GAAgBvvC,EAAAA,EAAAA,kBAAiBmvC,GAEjCpvC,EAAUqvC,EAAyBG,EAAgBD,EAInDpmC,GAAgBxL,EAAAA,EAAAA,YAAWkd,EAAAA,IAI7BuxE,EAEAjjF,EAHF2hB,mBACEshE,yBAIEp4C,EAAc+3C,GAAmBnuC,GAAez0C,GAEhDkjF,EAAwD,cAAjCzvF,IAAAA,IAAMovF,EAAe,QAE5C3kC,GAAalpD,EAAAA,EAAAA,UAAQ,kBAAMyhC,OAAO0nB,iBAAiBh7C,IAAI,uBAAuB,GAAE,IAEhFi7C,GAAappD,EAAAA,EAAAA,UAAQ,kBAAMqpD,EAAAA,EAAAA,GAAUH,EAAY3pD,EAAK,GAAE,CAAC2pD,EAAY3pD,IAErE+pD,EAAe,CAAElD,UAAW2E,GAAWA,EAAQ3E,WAErD+nC,EAAkDzc,KAA1CjnE,EAAK0jF,EAAL1jF,MAAOokD,GAAes/B,EAAft/B,gBAAiBS,GAAa6+B,EAAb7+B,cAE1B/F,IAA6BvpD,EAAAA,EAAAA,UAAQ,iBAAO,CAChDwpD,yBAA0BuB,GAAWA,EAAQvB,yBAC9C,GAAG,CAACuB,IAECqjC,GAAkCvhE,GAAeA,EAAYu7D,+BACvB,mBAAvC3pF,IAAAA,IAAMssD,EAAS,qBACoB,WAAnCtsD,IAAAA,IAAMssD,EAAS,iBAMpBt4C,EAAAA,EAAAA,YAAU,WACR68C,IACF,GAAG,CAACA,MAEJ78C,EAAAA,EAAAA,YAAU,WACJs1E,IACFt9E,EAAMuiF,EAAyBplC,IAC/B2E,EAAAA,EAAAA,eAAc,CAAE8hC,wBAAwB,IAE5C,GAAG,CAACtG,EAAgBiF,EAAyBviF,EAAOm9C,IAEpD,IAAMkC,IAAmB9pD,EAAAA,EAAAA,UAAQ,kBAC/BpC,EAAAA,EAAAA,KAACmsD,EAAAA,GAAgB,CACf/rB,oBAAqB+sB,GAAWA,EAAQ9sB,oBACxCC,eAAgB6sB,GAAWA,EAAQ5sB,eACnCC,oBAAqB2sB,GAAWA,EAAQ1sB,oBACxC6rB,yBAA0BX,GAA2BC,yBACrDQ,uBAAwBe,GAAWA,EAAQd,uBAC3C4jC,cAAepvF,IAAAA,IAAMovF,EAAe,QACpC1jC,WAAW,EACXC,SAAO,GACP,GACD,CAACyjC,EAAetkC,GAA2BC,yBAA0BuB,IAExE,OACEntD,EAAAA,EAAAA,KAAA,OAAKY,UAAWkW,IAAW,CAAC05E,GAAkCvsF,EAAQ2pE,qBAAuB3pE,EAAQ0pE,eAAgBtiB,EAAkBpnD,EAAQ+pC,cAAgB,KAAK/tC,UAClKD,EAAAA,EAAAA,KAACysD,EAAAA,gBAAe,CACdp2C,gBAAiB,CACf+U,OAAQshC,EAAAA,aACRC,WAjCmB,SAAC/1C,GAC1Bq0C,EAASr0C,EACX,GAgCQ3W,UAGFgB,EAAAA,EAAAA,MAACyB,EAAAA,MAAK,CAACE,OAAQ,CAAEC,YAAa,IAAK5C,SAAA,EAC/BkrD,IACAnrD,EAAAA,EAAAA,KAAA,OAAKY,UAAWqD,EAAQ4pE,iBAAiB5tE,UACvCD,EAAAA,EAAAA,KAACioD,EAAU,CAACC,UAAW,CAAE3S,SAAU,UAAY9rC,MAAM,YAAY7I,UAAU,kBAAkBwgB,QAAS8pC,OAG1GlrD,EAAAA,EAAAA,KAACuvF,GAAQ,CACP1lC,mBAAoB5lD,EAAQiqE,4BAC5BvsE,KAAMA,EACN+pD,aAAcA,EACd+Y,mBAAoBA,EACpBpuD,gBAAiB,CACf8U,MAAO,aAETuiC,mBAAoBA,KAEtB1tD,EAAAA,EAAAA,KAAA,OAAKY,UAAWqD,EAAQgqE,kBAAkBhuE,UACxCD,EAAAA,EAAAA,KAAC2uF,GAAwB,CACvBhtF,KAAM6pD,EACNxT,WAAYA,EACZ/oB,YAAaA,EACbgpB,YAAaA,EACb0xC,wBAAyBA,EACzBzqE,IAAKA,EACLC,IAAKA,EACLuxE,kBA5FgB,CAAC,kBA6FjB7jC,kBAAgB,EAChBC,gBAAc,EACdK,QAASA,EAETpZ,IAAKqX,EACLulC,iCAA+B,EAC/B3jC,wBAAsB,EACtB4jC,2BAA2B,OAC3BxjF,cAAeA,EACf+8E,eAAgBA,EAChBC,MAAOkG,EACPliB,oBAAqBA,EACrBpkB,YAAaA,EACb2Q,eAAgBA,EAChB1J,gBAAiBA,IAAgB,GAAAv+C,OAXzB04C,EAAQ,uBAkBlB+kC,GACAlhE,EAAY4hE,mEAAqEP,IAE/EtwF,EAAAA,EAAAA,KAACktD,EAAAA,GAA4C,CAC3CvrD,KAAMA,EACNwrD,QAASA,EACT92C,gBAAiB,CACfsH,KAAMguC,GACNlzB,aAAckzB,IAEhBykC,WAAYA,EACZF,UAAWA,EACXY,cAAe7hE,EAAY+8B,gBAK/BqkC,IACCH,IAAcI,KAA0B5iC,GAAsByiC,KAC/DnwF,EAAAA,EAAAA,KAAA,OAAAC,SACGisD,SAGC,GAAAx5C,OAxEA04C,EAAQ,sBA4ExB,EAsCA2kC,GAAW3uF,aAAe,CACxB62C,YAAa,KACb5E,oBAAqBxyC,IAAAA,KACrB8oF,wBAAyB,KACzBr2C,wBAAwB,EACxB48C,WAAW,EACXE,WAAY,KACZ1iC,oBAAoB,EACpByiC,wBAAwB,GAG1B,IA6BM99E,IAAmB86D,EAAAA,EAAAA,KA7BM,SAAH3sE,GAAsB,IAAb+R,EAAK0rB,OAAAC,OAAA,KAAAC,EAAAA,EAAAA,GAAA39B,GAAAA,IACxCgwE,EAA8Ch7D,EAAAA,SAAe,IAAGi7D,GAAAxuE,EAAAA,EAAAA,GAAAuuE,EAAA,GAAzDhM,EAAeiM,EAAA,GAAEhM,EAAkBgM,EAAA,GACpCrjE,GAAgBxL,EAAAA,EAAAA,YAAWkd,EAAAA,IACzBmQ,EAAgB1c,EAAhB0c,YACF8hE,EAAwB9hE,GAAeA,EAAY5qB,SAAW4qB,EAAY5qB,QAAQuqE,gBAExF,OACE5uE,EAAAA,EAAAA,KAAColE,EAAAA,EAAqB,CAAAnlE,UACpBD,EAAAA,EAAAA,KAACqlE,EAAAA,0BAAyB,CACxB12D,WAAW,KACXsH,SAAUuuD,EACV31C,OAAQtc,EAAM5Q,KAAK2jE,YACnBC,mBAAmB,QACnBn4D,cAAeA,EACf4jF,iBAAkBD,EAClBE,aAAcF,EAAsB9wF,UAEpCD,EAAAA,EAAAA,KAAC+vF,IAAUlpF,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAK0L,GAAK,IAAEkyD,mBAAoBA,QAGnD,ICzQMysB,GAAiB,GAIjBC,GAAkB,SAACljC,EAAOmjC,EAAUC,EAAejgF,GACvD,IAAM49C,EAAOoiC,EAEb,GAAIpiC,EAAKV,kBAAoBl9C,EAAQ8/E,GAAgB,CACnD,IAAMI,EAAYlgF,GAAS8/E,GAAiBliC,EAAKV,mBAC3Cc,EAAcnB,EAAM/Z,MAAM,EAAGm9C,EAAgB,GAC7ChiC,EAAapB,EAAM/Z,MAAMm9C,EAAepjC,EAAM1qD,QAE9CguF,EAAc,CAAEjjC,kBAAmB4iC,GAAgBjiC,WAAYD,EAAKC,WAAY5/C,GAAI2/C,EAAK3/C,IAEzFmiF,EAAe,CAAEljC,kBAAmB,EAAGW,WAAYD,EAAKC,WAAa,EAAG5/C,GAAIy0B,KAAK6lC,UAEvF,OAAOwnB,GAAgB,GAADz+E,QAAAmQ,EAAAA,EAAAA,GAAKusC,GAAW,CAAEmiC,IAAW1uE,EAAAA,EAAAA,GAAKwsC,IAAamiC,EAAcH,EAAgB,EAAGC,EACxG,CAEA,IAAMliC,EAAcnB,EAAM/Z,MAAM,EAAGm9C,EAAgB,GAC7ChiC,EAAapB,EAAM/Z,MAAMm9C,EAAepjC,EAAM1qD,QAE9CguF,EAAc,CAAEjjC,kBAAmBU,EAAKV,kBAAoBl9C,EAAO69C,WAAYD,EAAKC,WAAY5/C,GAAI2/C,EAAK3/C,IAE/G,MAAO,CACL2+C,YAAaujC,EACbtjC,MAAM,GAADv7C,QAAAmQ,EAAAA,EAAAA,GAAMusC,GAAW,CAAEmiC,IAAW1uE,EAAAA,EAAAA,GAAKwsC,IAE5C,EAEatB,GAAiB,SAAC7a,GAA8B,IAAzBya,EAAevxC,UAAA7Y,OAAA,QAAAkS,IAAA2G,UAAA,GAAAA,UAAA,GAAG,EAUpDta,GAAoCC,EAAAA,EAAAA,UAR9BlB,IAAAA,YAAcqyC,GACT,EAEUpP,KAAKs9C,KAAKluC,EAAI3vC,OAAS2tF,KAKuBlvF,GAAAC,EAAAA,EAAAA,GAAAH,EAAA,GAA5D8zC,EAAU5zC,EAAA,GAAEyvF,EAAazvF,EAAA,GAuBhCiiD,GAAgDliD,EAAAA,EAAAA,UAAS,GAAEmiD,GAAAjiD,EAAAA,EAAAA,GAAAgiD,EAAA,GAApDvQ,EAAgBwQ,EAAA,GAAEwtC,EAAmBxtC,EAAA,GAE5CG,GAA0BtiD,EAAAA,EAAAA,UArBN,WAClB,GAAIlB,IAAAA,YAAcqyC,GAChB,MAAO,CAAC,CAAEob,kBAAmBX,EAAiBsB,WAAY,EAAG5/C,GAAIy0B,KAAK6lC,WAGxE,GAAmB,IAAfz2B,EAAI3vC,OACN,MAAO,CAAC,CAAE+qD,kBAAmBX,EAAiBsB,WAAY,EAAG5/C,GAAIy0B,KAAK6lC,WAGxE,IAAIgoB,EAAWz+C,EAAI3vC,OAEnB,OAAO1C,IAAAA,IAAMA,IAAAA,MAAQ+0C,IAAa,SAAC7B,GACjC,IAAMua,EAAoBqjC,EAAWT,GAAiBA,GAAiBS,EAGvE,OADAA,GAAYT,GACL,CAAE5iC,kBAAAA,EAAmBW,WAAYlb,EAAM,EAAG1kC,GAAIy0B,KAAK6lC,SAC5D,GACF,CAImCioB,IAActtC,GAAAriD,EAAAA,EAAAA,GAAAoiD,EAAA,GAA1C4J,EAAK3J,EAAA,GAAEutC,EAAQvtC,EAAA,GAEtBwW,GAAsC/4D,EAAAA,EAAAA,UAASksD,EAAM,IAAG8M,GAAA94D,EAAAA,EAAAA,GAAA64D,EAAA,GAAjD9M,EAAW+M,EAAA,GAAE+2B,EAAc/2B,EAAA,GAU5Bg3B,GAAYzvF,EAAAA,EAAAA,cAAY,WAC5B,IAAM0vF,EAAU,CAAE1jC,kBAAmB,EAAGW,WAAYvb,EAAmB,EAAGrkC,GAAIy0B,KAAK6lC,UAEnFkoB,GAAQhvE,EAAAA,EAAAA,GAAKorC,EAAMv7C,OAAOs/E,KAC1BF,EAAeE,GACfN,EAAoBh+C,EAAmB,GACvC+9C,EAAc77C,EAAa,EAC7B,GAAG,CAAClC,EAAkBua,EAAOrY,IAkDvBq8C,EAAiB,WACrBH,GAAcjrF,EAAAA,EAAAA,GAAC,CAAC,EAAIonD,EAAOva,EAAmB,EAAK,KACnDm+C,GAAQhvE,EAAAA,EAAAA,GAAKorC,EAAMsB,OAAO,EAAGtB,EAAM1qD,OAAS,KAC5CmuF,EAAoBh+C,EAAmB,GACvC+9C,EAAc77C,EAAa,EAC7B,EA8BA,MAAO,CACLoY,YAAAA,EACAta,iBAAAA,EACAua,MAAAA,EACAna,qBAxG2B,SAACC,GAK5B,SAL2C33B,UAAA7Y,OAAA,QAAAkS,IAAA2G,UAAA,GAAAA,UAAA,GAAG,OACnBs3B,GAEL,GAAKw9C,GAAkBn9C,CAG/C,EAmGE8B,aArDmB,WACnB67C,EAAoBh+C,EAAmB,GACvCo+C,GAAcjrF,EAAAA,EAAAA,GAAC,CAAC,EAAIonD,EAAOva,EAAmB,EAAK,IACrD,EAmDEoC,aA3DmB,WACnB47C,EAAoBh+C,EAAmB,GACvCo+C,GAAcjrF,EAAAA,EAAAA,GAAC,CAAC,EAAIonD,EAAOva,EAAmB,EAAK,IACrD,EAyDEqC,SAlDe,SAACC,GAChB,IAAMk8C,EAAS97C,SAASJ,EAAK,IACzBk8C,EAAS,GAAKA,GAAUt8C,IAC1B/0C,IAAAA,SAAW6wF,EAAoBt7C,SAAS87C,EAAQ,KAAM,KACtDJ,EAAe7jC,EAAMikC,EAAS,IAElC,EA6CEH,UAAAA,EACA7jC,UA5FgB,WAChB,IAAMc,EAAOhB,EAEb,GAAIgB,EAAKV,oBAAsB4iC,GAC7Ba,QACK,CACL,IAAM3iC,EAAcnB,EAAM/Z,MAAM,EAAGR,EAAmB,GAChD2b,EAAapB,EAAM/Z,MAAMR,EAAkBua,EAAM1qD,QAEjDguF,EAAc,CAAEjjC,kBAAmBU,EAAKV,kBAAoB,EAAGW,WAAYD,EAAKC,WAAY5/C,GAAI2/C,EAAK3/C,IAC3GyiF,EAAeP,GACfM,EAAS,GAADn/E,QAAAmQ,EAAAA,EAAAA,GAAKusC,GAAW,CAAEmiC,IAAW1uE,EAAAA,EAAAA,GAAKwsC,IAC5C,CACF,EAgFEuV,iBA9EuB,SAACxzD,GACxB,IAAMggF,EAAWnjC,EAAMA,EAAM1qD,OAAS,GAEhC8tF,EAAgBpjC,EAAM1qD,OAGnB4uF,EACLhB,GAAgBljC,EAAOmjC,EAAUC,EAAejgF,GADlD68C,MAGF4jC,EAASM,GACTV,EAAcU,EAAS5uF,QACvBuuF,EAAeK,EAASA,EAAS5uF,OAAS,IAC1CmuF,EAAoBS,EAAS5uF,OAC/B,EAkEE4qD,WAxBiB,WACjB,GAAsC,IAAlCH,EAAYM,kBACd2jC,SACK,GAAqB,IAAjBhkC,EAAM1qD,OAAc,CAC7B,IAAMyuF,EAAU,CAAE3iF,GAAI2+C,EAAY3+C,GAAIi/C,kBAAmBN,EAAYM,kBAAoB,EAAGW,WAAYjB,EAAYiB,YAEpH6iC,GAAcjrF,EAAAA,EAAAA,GAAC,CAAC,EAAImrF,IACpBH,EAAS,CAACG,GACZ,MAvB6B,WAC7B,IAAMZ,EAAWnjC,EAAMA,EAAM1qD,OAAS,GAEtC,GAAmC,IAA/B6tF,EAAS9iC,kBACX2jC,QACK,CACL,IAAMD,EAAU,CAAE3iF,GAAI+hF,EAAS/hF,GAAIi/C,kBAAmB8iC,EAAS9iC,kBAAoB,EAAGW,WAAYmiC,EAASniC,YAErGG,EAAcnB,EAAM/Z,MAAM,EAAG+Z,EAAM1qD,OAAS,GAElDuuF,GAAcjrF,EAAAA,EAAAA,GAAC,CAAC,EAAImrF,IACpBH,EAAS,GAADn/E,QAAAmQ,EAAAA,EAAAA,GAAKusC,GAAW,CAAE4iC,IAC5B,CACF,CAWII,EAEJ,EAcEx8C,WAAAA,EACAwY,SApLc,GAsLlB,EC7JaikC,GAAoB,SAAC9/E,GAChC,IA6BI+/E,EA5BFnzE,EAsBE5M,EAtBF4M,IACAD,EAqBE3M,EArBF2M,IACAvd,EAoBE4Q,EApBF5Q,KACAq2C,EAmBEzlC,EAnBFylC,WACAsV,EAkBE/6C,EAlBF+6C,gBACAilC,EAiBEhgF,EAjBFggF,kBAAiB/kC,EAiBfj7C,EAhBF2gC,IAAAA,OAAG,IAAAsa,EAAG,GAAEA,EACRvV,EAeE1lC,EAfF0lC,YACA7E,EAcE7gC,EAdF6gC,kBACAnkB,EAaE1c,EAbF0c,YACA6oD,EAYEvlE,EAZFulE,KACAsY,EAWE79E,EAXF69E,WACA/8C,EAUE9gC,EAVF8gC,oBACAC,EASE/gC,EATF+gC,uBACAma,EAQEl7C,EARFk7C,YACAC,EAOEn7C,EAPFm7C,mBACA8kC,EAMEjgF,EANFigF,4BAA2BC,EAMzBlgF,EALF09E,cAAAA,OAAa,IAAAwC,EAAG,CAAC,EAACA,EAClB9jF,EAIE4D,EAJF5D,WACAy1D,EAGE7xD,EAHF6xD,WACA+rB,EAEE59E,EAFF49E,uBACA/hB,EACE77D,EADF67D,oBAGIub,EAA0B9oF,IAAAA,IAAMi3E,EAAM,CAAC,2BAA4B,IAAK,iBAExEoY,GAAarvF,IAAAA,QAAUi3E,GAGzB6R,IAA4B5U,GAC9Bud,EAA2B3wF,EAAKmB,UAAUC,0JACjC4mF,IAA4B5U,KACrCud,EAA2B3wF,EAAKmB,UAAUC,uEAG5C,IAAMshE,GAAiBjiE,EAAAA,EAAAA,UAAQ,kBAAMsrD,GAAsBxa,GAAOA,EAAI,IAAMA,EAAI,GAAGrlC,EAAE,GAAE,CAACqlC,EAAKwa,KAE7F4W,EAAAA,EAAAA,IAAsB,CAAE31D,WAAAA,EAAYgkD,QAAS,WAAY0R,eAAAA,IAEzD,IAAQE,GAAiB3T,EAAAA,EAAAA,MAAjB2T,aAEF/wB,GAAiBtvC,EAAAA,EAAAA,kBAAiBkpC,GAElC34B,GAAW7S,EAAAA,EAAAA,YAAW8S,EAAAA,iBAEtB++B,GAAgBvvC,EAAAA,EAAAA,kBAAiBmvC,GAEjCpvC,EAAUqvC,EAAyBG,EAAgBD,EAEzD1xC,GAAgCC,EAAAA,EAAAA,UAASmxC,GAAO,IAAGlxC,GAAAC,EAAAA,EAAAA,GAAAH,EAAA,GAA5C4wF,GAAQ1wF,EAAA,GAAE2wF,GAAW3wF,EAAA,GAE5BiiD,IAAsCliD,EAAAA,EAAAA,WAAS,GAAKmiD,IAAAjiD,EAAAA,EAAAA,GAAAgiD,GAAA,GAA7C+F,GAAW9F,GAAA,GAAEyW,GAAczW,GAAA,GAE5BkrC,IAA0BhtF,EAAAA,EAAAA,UAAQ,kBAAM,IAAIitF,EAAAA,WAAa,GAAE,IAE3DjiF,IAAgBxL,EAAAA,EAAAA,YAAWkd,EAAAA,IACjCulC,IAAwEtiD,EAAAA,EAAAA,WAAS,GAAKuiD,IAAAriD,EAAAA,EAAAA,GAAAoiD,GAAA,GAA/EuuC,GAA4BtuC,GAAA,GAAEuuC,GAA+BvuC,GAAA,IACpEzvC,EAAAA,EAAAA,YAAU,YACR69C,EAAAA,EAAAA,2BAA0B,CACxBC,QAAS,kBACT1jC,YAAAA,EACA7hB,cAAAA,KACC+D,KAAK0hF,GACV,GAAG,CAAC5jE,EAAa7hB,KAEjB,IAAM+8E,GAAiBqI,GACrBvjE,EAAY5qB,QAAQosF,yBACnBmC,MACCjJ,GAA2BA,EAA0B5U,IAEzDjnB,GAYIC,GAAe7a,GAXjB4C,GAAYgY,GAAZhY,aACAD,GAAYiY,GAAZjY,aACAE,GAAQ+X,GAAR/X,SACAjC,GAAoBga,GAApBha,qBACAka,GAAWF,GAAXE,YACAta,GAAgBoa,GAAhBpa,iBACAua,GAAKH,GAALG,MACAC,GAASJ,GAATI,UACAC,GAAUL,GAAVK,WACAvY,GAAUkY,GAAVlY,WACAwY,GAAQN,GAARM,SAmCIG,GAAa,WACjB,IAAIC,GAAQ,EAQZ,OANA3tD,IAAAA,KAAO6xF,IAAU,SAAC9yC,GACXA,EAAGrpB,UACNi4B,GAAQ,EAEZ,IAEOA,CACT,EAEMC,GAAa,WACjB,IAAIC,GAAQ,EAQZ,OANA7tD,IAAAA,KAAO6xF,IAAU,SAAC9yC,GACZA,EAAG7kC,UACL2zC,GAAQ,EAEZ,IAEOA,CACT,EA6DA,OA3DA75C,EAAAA,EAAAA,YAAU,WACJJ,GACFA,EAASyL,OAAO,oDAADxN,OAAqDs3C,IAExE,GAAG,CAACA,GAAav1C,KAEjBI,EAAAA,EAAAA,YAAU,WACR,IAAM+B,EAAS,CACb+G,MAAIkF,EAAAA,EAAAA,GAAM6vE,IAAWn8D,QAASg4B,KAAcxzC,QAAS0zC,KAAc/a,iBAAAA,IAErE4Z,EAAgB12C,GACZnC,GACFA,EAASyL,OAAO,kCAADxN,OAAmC5F,KAAKC,UAAU6J,IAIrE,GAAG,CAAC88B,GAAkBg/C,MAEtB79E,EAAAA,EAAAA,YAAU,WACJ44C,GACFklC,GAAY,GAEhB,GAAG,CAACllC,KAEJ54C,EAAAA,EAAAA,YAAU,YACR85C,EAAAA,EAAAA,eAAc,gBAAiB,OACjC,GAAG,KAEH95C,EAAAA,EAAAA,YAAU,WACR,IAAKhU,IAAAA,QAAUqyC,EAAKw/C,MAAchlC,EAAoB,CAEpD,IAAIkB,GAAe,EAEnB/tD,IAAAA,KAAOqyC,GAAK,SAAC0M,GACX,IAAMuN,EAAUtsD,IAAAA,OAAS6xF,IAAU,SAAA7jC,GAAG,OAAIA,EAAIC,MAAQlP,EAAGkP,GAAG,IAExD3B,GAAWA,EAAQ,IAAMtsD,IAAAA,YAAcssD,EAAQ,GAAGt/C,KAAO+xC,EAAG/xC,KAC9D+gD,GAAe,GAIb3/B,EAAY5qB,QAAQ6gE,eAAiBrkE,IAAAA,QAAUssD,IAAYvN,EAAG/xC,KAChE+gD,GAAe,EAEnB,IAEIA,GACF+jC,GAAYz/C,EAEhB,CAEF,GAAG,CAACA,KAEJr+B,EAAAA,EAAAA,YAAU,WACJs1E,IACF5lB,GAEJ,GAAG,CAAC4lB,GAAgB5lB,KAGlBtjE,EAAAA,EAAAA,MAAA,OAAKL,UAAWqD,EAAQ6uF,sBAAsB7yF,SAAA,CAE1CqyF,IACArxF,EAAAA,EAAAA,MAACsD,EAAAA,EAAU,CAAC3D,UAAU,6BAA6BR,OAAQ,CAAEC,KAAM,CAAEktC,WAAY,YAActtC,SAAA,CAC5FqyF,EACC3I,IAA4B5U,KAC9B9zE,EAAAA,EAAAA,MAAC6D,EAAI,CAACC,KAAK,2FAA2FvC,OAAO,SAAQvC,SAAA,CAClH0B,EAAKmB,UAAUC,mBAAyB,UAK7ClC,IAAAA,IAAMotD,IAAO,SAACe,GAyCZ,OAxCenuD,IAAAA,IAAMA,IAAAA,MAAQmuD,EAAKV,oBAAoB,SAACva,GACrD,IAAMoZ,EAAWulC,GAAS5+C,GAAqBC,EAAKib,EAAKC,cAAgByjC,GAAS5+C,GAAqBC,EAAKib,EAAKC,aAAatxC,KAExHmxC,EAAO4jC,GAAS5+C,GAAqBC,EAAKib,EAAKC,cAAgByjC,GAAS5+C,GAAqBC,EAAKib,EAAKC,aAAaH,KAAQhrB,KAAK6lC,SAEjIza,EAAgBF,EAAK3/C,KAAO2+C,GAAY3+C,GAE9C,OACErP,EAAAA,EAAAA,KAAA,OAAKkB,MAAO,CAAEC,QAAS+tD,EAAgB,QAAU,QAAUtuD,UAAS,mBAAA8R,OAAqBqhC,GAAM9zC,UAC7FD,EAAAA,EAAAA,KAAC+vF,GAAU,CACT7wE,IAAKA,EACLC,IAAKA,EACLxQ,WAAYA,EACZygF,wBAAyBA,GAEzBztF,KAAMA,EACNq2C,WAAYA,EACZ/oB,YAAaA,EACbk+B,QAASA,EACTlC,SAAU,SAAAr0C,GAAM,OA7IL,SAACA,EAAQm9B,EAAK+a,GACvC,IAAIK,EAAYujC,GAAS3+C,IAAQ,CAAEi6B,MAAO,KAAMxlB,UAAW,GAAIsG,IAAK,MAGlEK,EADoB,OAAlBA,EAAUL,KACHjoD,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAQ+P,GAAM,IAAEk4C,IAAAA,EAAKjhD,GAAIshD,EAAUthD,MAEnChH,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAQ+P,GAAM,IAAEk4C,IAAKK,EAAUL,IAAKjhD,GAAIshD,EAAUthD,KAG7D,IAAMuhD,EAAcsjC,GAASx+C,MAAM,EAAGH,GAChCsb,EAAaqjC,GAASx+C,MAAMH,EAAM,EAAG2+C,GAASnvF,QACpDovF,GAAY,GAADjgF,QAAAmQ,EAAAA,EAAAA,GAAKusC,GAAW,EAAAvoD,EAAAA,EAAAA,GAAA,GAAOsoD,KAAStsC,EAAAA,EAAAA,GAAOwsC,IACpD,CAiIoC0jC,CAAmBn8E,EAAQk9B,GAAqBC,EAAKib,EAAKC,YAAaH,EAAI,EAC/F5D,cAAe,WAAF,OAhIP,SAACnX,GACjBt/B,GACFA,EAASyL,OAAO,4BAADxN,OAA6BqhC,IAE9C2+C,GAASnjC,OAAOxb,EAAK,GAErB4+C,IAAW9vE,EAAAA,EAAAA,GAAK6vE,KAEhBvkC,IACF,CAuHqCjD,CAAcpX,GAAqBC,EAAKib,EAAKC,YAAkB,EACpF9D,kBAA8C,IAA3B6D,EAAKV,kBACxBlD,SAAU0D,EACV66B,wBAAyBA,EACzBt+B,gBAAiBknC,IAAsBx+C,EACvCkE,YAAaA,EACbg4C,cAAeA,EACfE,uBAAwBA,EACxBD,UAAWA,EACXE,WAAYA,EACZ1iC,mBAAoBA,EACpBy8B,eAAgBA,GAChB/b,oBAAqBA,EACrBpkB,YAAaA,GACb2Q,eAAgBA,IAAe,GAAAjoD,OApBvBo8C,EAAG,iBAwBnB,GAGF,KAEF9uD,EAAAA,EAAAA,KAAA,OAAKkB,MAAO,CAAE+K,UAAW,IAAKhM,UAExBmkE,GAAepW,GAAYM,kBAAoBF,KAAahb,IAC5DnyC,EAAAA,EAAAA,MAAC6D,EAAI,CAAClE,UAAU,aAAawgB,QA/KvB,WACd8sC,KACIz5C,GACFA,EAASyL,OAAO,wCAADxN,OAAyCs7C,GAAYM,mBAExE,EA0KwDruD,SAAA,EAC5CD,EAAAA,EAAAA,KAACs1C,EAAAA,SAAQ,CAACC,SAAS,QAAQ,OAAO5zC,EAAKmB,UAAUC,0BAKxD6yC,GAAa,IAAMxC,IACpBpzC,EAAAA,EAAAA,KAAA,OAAKY,UAAWqD,EAAQkrC,WAAWlvC,UACjCgB,EAAAA,EAAAA,MAAA,OAAKL,UAAWqD,EAAQmrC,aAAanvC,SAAA,EACnCgB,EAAAA,EAAAA,MAAC6D,EAAI,CACHsc,QAASy0B,GACTR,SAAU3B,IAAoB,EAAEzzC,SAAA,EAEhCD,EAAAA,EAAAA,KAACs1C,EAAAA,SAAQ,CAACC,SAAS,gBAAgB,KAACv1C,EAAAA,EAAAA,KAACE,EAAAA,KAAI,CAAAD,SAAC,eAE5CD,EAAAA,EAAAA,KAACkD,EAAS,CACR9C,OAAQ,CAAEC,KAAM,CAAE0J,MAAO,KACzB/I,MAAO0yC,GACPpwC,SAAU,SAACqY,EAAGq6B,GAAG,OAAKD,GAASC,EAAI,KAErC/0C,EAAAA,EAAAA,MAAA,QAAAhB,SAAA,CAAM,OAAK21C,GAAW,QACtB30C,EAAAA,EAAAA,MAAC6D,EAAI,CACHsc,QAAS00B,GACTT,SAAU3B,KAAqBkC,GAAW31C,SAAA,EAE1CD,EAAAA,EAAAA,KAACE,EAAAA,KAAI,CAAAD,SAAC,WAAa,KAACD,EAAAA,EAAAA,KAACs1C,EAAAA,SAAQ,CAACC,SAAS,2BAOnD,EAmCA88C,GAAkBjxF,aAAe,CAC/B62C,YAAa,KACb7E,mBAAmB,EACnBC,oBAAqBxyC,IAAAA,KACrByyC,wBAAwB,EACxBwkC,KAAM,KACNsY,YAAY,EACZ3iC,aAAa,EACb2W,YAAY,EACZmuB,kBAAmB,EACnB7kC,oBAAoB,EACpB8kC,6BAA6B,EAC7B7jF,YAAa,EACbwhF,wBAAwB,G,wDC7Wb6C,GAAmB,eAAAlzF,GAAA6xD,EAAAA,GAAAA,IAAAC,EAAAA,GAAAA,KAAAC,MAAG,SAAAC,EAAOgmB,EAAM1qE,GAAa,IAAAmqE,EAAAr4D,EAAAC,EAAA9R,EAAA4lF,EAAA9P,EAAA,OAAAvxB,EAAAA,GAAAA,KAAAU,MAAA,SAAAC,GAAA,cAAAA,EAAAC,KAAAD,EAAAE,MAAA,UACtDqlB,EAAK,CAADvlB,EAAAE,KAAA,eAAAF,EAAAkB,OAAA,SACAzuB,QAAQC,WAAS,OAM8C,OAJlEsyC,EAAcM,GAAqBC,EAAM,YAAYG,UAErD/4D,EAAM9R,EAAcurE,gBAAgB9qE,GACpCsR,EAAM/R,EAAcQ,eAAeC,GACnCR,EAAOD,EAAgBA,EAAcE,YAAYsrE,SAAW,OAAMrmB,EAAAE,KAAA,EAEhD6kB,GAAsBC,EAAalqE,EAAM6R,EAAKC,GAAK,KAAD,EACK,OADzE8zE,EAAS1gC,EAAAM,KACTswB,GAAcP,EAAAA,EAAAA,MAAKqQ,EAAUvyF,KAAI,SAAAulF,GAAG,OAAIA,EAAItoE,KAAKu1E,WAAW,KAAGzrF,KAAK,KAAI8qD,EAAAkB,OAAA,UAAA5sD,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAEzEixE,GAAI,IACPqL,YAAAA,KAAW,yBAAA5wB,EAAAc,OAAA,GAAAvB,EAAA,KAEd,gBAhB+B0mB,EAAAU,GAAA,OAAAp5E,EAAA6gD,MAAA,KAAAvkC,UAAA,KAkBnB+2E,GAAc,eAAA3yF,GAAAmxD,EAAAA,GAAAA,IAAAC,EAAAA,GAAAA,KAAAC,MAAG,SAAAyB,EAAOp0C,EAAKC,EAAKxQ,EAAYvB,GAAa,IAAA81B,EAAAkwD,EAAAC,EAAAC,EAAAC,EAAA,OAAA3hC,EAAAA,GAAAA,KAAAU,MAAA,SAAAkB,GAAA,cAAAA,EAAAhB,KAAAgB,EAAAf,MAAA,cAAAe,EAAAhB,KAAA,EAAAgB,EAAAf,KAAA,EAE9C50C,GAAAA,YACnBuB,UAAUC,SAASH,GACnBI,SAASD,SAASF,GAClBq0E,UAAUn0E,SAAS1Q,GACnB8kF,mBAAmBC,MAAM,2BACzBnjF,IAAI,CACH/F,OAAQ,CACN6V,MAAO,2CAGVX,YAAY,KAAD,EAE2C,GAZnDwjB,EAAOswB,EAAAX,KAYPugC,GAAS7iF,EAAAA,EAAAA,KAAI2yB,EAAS,6BAEhB,CAADswB,EAAAf,KAAA,eAAAe,EAAAC,OAAA,SACFzuB,QAAQC,WAAS,cAAAuuB,EAAAhB,KAAA,EAAAgB,EAAAf,KAAA,GAIC50C,GAAAA,YACtBuB,UAAUC,SAASH,GACnBI,SAASD,SAASF,GAClBw0E,MAAMt0E,SAAS6jB,EAAQliC,MAAM,GAAG2lB,UAAUitE,QAC1CrjF,MACAmP,YAAY,KAAD,GALE,GAAV2zE,EAAU7/B,EAAAX,MAOZzlD,EAAc,CAADomD,EAAAf,KAAA,gBAAAe,EAAAf,KAAA,GACUugC,GAAoBK,EAAYjmF,GAAe,KAAD,GAAvD,OAAVkmF,EAAU9/B,EAAAX,KAAAW,EAAAC,OAAA,SACT6/B,GAAU,eAAA9/B,EAAAC,OAAA,SAEZ4/B,GAAU,QAK4C,GAL5C7/B,EAAAhB,KAAA,GAAAgB,EAAAm1B,GAAAn1B,EAAA,SAEjB5zC,QAAQjf,MAAK6yD,EAAAm1B,MAGP4K,EAAkBM,GAAgBrgC,EAAAm1B,GAAQ,cAC5B,CAADn1B,EAAAf,KAAA,gBAAAe,EAAAC,OAAA,SACVzuB,QAAQC,QAAQ,CACrBp3B,GAAIulF,EACJnmF,MAAOsmF,KACP,eAAA//B,EAAAC,OAAA,SAEGzuB,QAAQC,WAAS,QAAAuuB,EAAAf,KAAA,iBAGL,OAHKe,EAAAhB,KAAA,GAAAgB,EAAAsgC,GAAAtgC,EAAA,SAG1B5zC,QAAQjf,MAAK6yD,EAAAsgC,IAAQtgC,EAAAC,OAAA,SACdzuB,QAAQC,WAAS,yBAAAuuB,EAAAH,OAAA,GAAAC,EAAA,0BAE3B,gBAlD0B6lB,EAAAC,EAAA2a,EAAAC,GAAA,OAAAxzF,EAAAmgD,MAAA,KAAAvkC,UAAA,KAoDrBy3E,GAAmB,SAAClzF,EAAOszF,GAC/B,GAAqB,MAAjBtzF,EAAMq4E,OACR,OAAO,KAGT,IAAMkb,GAAmB3jF,EAAAA,EAAAA,KAAI5P,EAAO,CAAC,eAAgB,UACrD,OAAIotB,EAAAA,EAAAA,SAAQmmE,GACH,MAGL3jF,EAAAA,EAAAA,KAAI2jF,EAAkB,CAAC,EAAG,WAAaD,EAClCA,EAEF,IACT,ECpFMp1B,IAAYvK,EAAAA,EAAAA,GAAW,CAC3B6/B,YAAa,CACXvmD,YAAahrC,GAAAA,EAAOkJ,mBACpBG,UAAWrJ,GAAAA,EAAO0I,oBAIT8oF,GAAiB,SAAHt0F,GAIpB,IAHLu0F,EAAMv0F,EAANu0F,OACAr4D,EAAIl8B,EAAJk8B,KACAs4D,EAAoBx0F,EAApBw0F,qBAEMrwF,EAAU46D,KACVl9D,GAAOC,EAAAA,EAAAA,YAAWC,EAAAA,aAExB,OACEZ,EAAAA,EAAAA,MAAA,OAAKL,UAAU,mBAAkBX,SAAA,EAC/BD,EAAAA,EAAAA,KAACihB,EAAAA,EAAM,CAACC,WAAW,UAAUE,QAAS4a,EAAMp7B,WAAWo/D,EAAAA,EAAAA,GAAa/7D,EAAQkwF,YAAa,QAAQl0F,SAC9F0B,EAAKmB,UAAUC,WAElB/C,EAAAA,EAAAA,KAACihB,EAAAA,EAAM,CAACG,QAASkzE,EAAsB1zF,WAAWo/D,EAAAA,EAAAA,GAAa/7D,EAAQkwF,YAAa,uBAAuBl0F,SACxG0B,EAAKmB,UAAUC,8BAElB/C,EAAAA,EAAAA,KAACihB,EAAAA,EAAM,CAACG,QAASizE,EAAQzzF,WAAWo/D,EAAAA,EAAAA,GAAa/7D,EAAQkwF,YAAa,UAAUl0F,SAC7E0B,EAAKmB,UAAUC,cAIxB,ECTMqqC,GAAmB,WAAC,MAA6B,CACrDugC,eAAgB,CACd1hE,UAAW,GACXlC,MAAO,IACP+I,UAAW,IACXG,QAAS,GACTq6B,cAAe,GACfC,WAAY,UACZC,UAAW,iCACXC,aAAc,EACd,sCAAuC,CACrCF,WAAY,6DACZE,aAAc,EACd1jC,MAAO,mBACP2a,OAAQ,kBACR3R,WAAY,kBACZ,UAAW,CACT,iBAAkB,CAChB5R,QAAS,SAGb,yBAA0B,CACxBb,MAAO,qBAGX,WAAY,CACV2L,UAAW,IAEb,8BAA+B,CAC7BlC,MAAO,IACP,cAAe,CACbwjC,WAAY,6DACZE,aAAc,EACd1jC,MAAO,mBACP2a,OAAQ,kBACR3R,WAAY,kBACZ5R,QAAS,OACTwsC,SAAU,OACVjiC,cAAe,SACfR,WAAY,SACZ,UAAW,CACT,iBAAkB,CAChB/J,QAAS,SAGb,yBAA0B,CACxBb,MAAO,oBAET,eAAgB,CACdyJ,MAAO,GACP2a,OAAQ,GACRzY,UAAW,IAEb,wBAAyB,CACvBlC,MAAO,mBACPsb,OAAQ,kBACRpS,QAAS,oBAIf,yBAA0B,CACxB9R,QAAS,OACT+J,WAAY,UAEd,sBAAuB,CACrB5J,WAAY,KAEd,wBAAyB,CACvByI,MAAO,mBACPsb,OAAQ,kBACRpS,QAAS,kBAEX,2BAA4B,CAC1BuO,SAAU,WACVzX,MAAO,mBACP,UAAW,CACT,iBAAkB,CAChB5I,QAAS,SAGb,yBAA0B,CACxBb,MAAO,qBAIX,4BAA6B,CAC3ByS,WAAY,IAEd,uBAAwB,CACtB06B,aAAc,EACdjjC,OAAQ,mGACRT,MAAO,mBACP2a,OAAQ,oBAGZspB,cAAe,CACb3oB,OAAQ,qBAEVwoD,iBAAkB,CAChB1sE,QAAS,OACT4I,MAAO,OACPyB,eAAgB,YAElBsiE,eAAgB,CACdx5C,SAAU,GACVhzB,WAAY,KAEdktC,iBAAkB,CAChB9pB,OAAQ,IACR3a,MAAO,KAETgkE,gBAAiB,CACfrpD,OAAQ,IAEVgqB,cAAe,CACb3kC,MAAO,IACPkJ,QAAS,GACTq6B,cAAe,GACfnsC,QAAS,OACTwsC,SAAU,QAEZqgC,MAAO,CACLvgC,aAAc,MACdjjC,OAAQ,oGAEVykC,WAAY,CACVhjC,UAAW,IAEbkjC,WAAY,CACVp8B,WAAY,GACZhJ,MAAO,QAETqlC,aAAc,CACZjuC,QAAS,OACT+J,WAAY,SACZC,UAAW,QAEbqkC,uBAAwB,CACtB9qB,OAAQ,EACR3a,MAAO,EACP0jC,aAAc,MACdtsC,QAAS,eACTgtC,OAAQ,WAEVsB,iBAAkB,CAChB/qB,OAAQ,EACR3a,MAAO,EACP2lC,QAAS,GAEXC,oBAAqB,CACnBxuC,QAAS,OACTgK,UAAW,OAEb8iE,kBAAmB,CACjB9sE,QAAS,OACTwsC,SAAU,QAEZkC,kBAAmB,CACjB98B,WAAY,GACZK,WAAY,IAEf,EAEKoyD,GAAiB,CACrBrkE,QAAS,OACT,wBAAyB,CACvBkkB,OAAQ,kBACRpS,QAAS,mBAIPwyD,GAAW,SAAH3lE,GAmBP,IAlBLqf,EAAGrf,EAAHqf,IACAD,EAAGpf,EAAHof,IACAvd,EAAI7B,EAAJ6B,KACAq2C,EAAUl4C,EAAVk4C,WACA/oB,EAAWnvB,EAAXmvB,YACAy2C,EAAQ5lE,EAAR4lE,SACA/2D,EAAU7O,EAAV6O,WACA68D,EAAS1rE,EAAT0rE,UACAle,EAAextD,EAAfwtD,gBACArV,EAAWn4C,EAAXm4C,YACAwV,EAAW3tD,EAAX2tD,YACAwiC,EAAanwF,EAAbmwF,cACAE,EAAsBrwF,EAAtBqwF,uBACAvkB,EAAQ9rE,EAAR8rE,SACAX,EAAMnrE,EAANmrE,OACAC,EAAsBprE,EAAtBorE,uBACAC,EAAiBrrE,EAAjBqrE,kBACAiD,EAAmBtuE,EAAnBsuE,oBAEAtsE,GAAwBC,EAAAA,EAAAA,UAAS,MAAKC,GAAAC,EAAAA,EAAAA,GAAAH,EAAA,GAA/Bg2E,EAAI91E,EAAA,GAAEuyF,EAAOvyF,EAAA,GACpBiiD,GAAoCliD,EAAAA,EAAAA,WAAS,GAAMmiD,GAAAjiD,EAAAA,EAAAA,GAAAgiD,EAAA,GAA5CmsC,EAAUlsC,EAAA,GAAEswC,EAAatwC,EAAA,GAChCG,GAAwCtiD,EAAAA,EAAAA,UAAS,MAAKuiD,GAAAriD,EAAAA,EAAAA,GAAAoiD,EAAA,GAA/CshB,EAAYrhB,EAAA,GAAEmwC,EAAenwC,EAAA,GACpCwW,GAAgC/4D,EAAAA,EAAAA,WAAS,GAAMg5D,GAAA94D,EAAAA,EAAAA,GAAA64D,EAAA,GAAxC2yB,EAAQ1yB,EAAA,GAAE25B,EAAW35B,EAAA,GACtB9e,GAAkBr6C,EAAAA,EAAAA,YAAWkiD,GAAAA,wBAC3BulB,GAA0BzY,EAAAA,EAAAA,MAA1ByY,uBAERx0D,EAAAA,EAAAA,YAAU,WACR,IAAM8/E,EAAS,eAAAn0F,GAAAmxD,EAAAA,GAAAA,IAAAC,EAAAA,GAAAA,KAAAC,MAAG,SAAAC,IAAA,IAAAuhC,EAAA,OAAAzhC,EAAAA,GAAAA,KAAAU,MAAA,SAAAC,GAAA,cAAAA,EAAAC,KAAAD,EAAAE,MAAA,cAAAF,EAAAE,KAAA,EACS0gC,GAAej0E,EAAKC,EAAKxQ,GAAY,KAAD,EAAvD0kF,EAAU9gC,EAAAM,KAChB0hC,EAAQlB,GACRmB,GAAc,GAAM,wBAAAjiC,EAAAc,OAAA,GAAAvB,EAAA,KACrB,kBAJc,OAAAtxD,EAAAmgD,MAAA,KAAAvkC,UAAA,KAMfu4E,GAEF,GAAG,IAEH,IAAM/2D,EAAWqe,EAAgB24C,eAAe,0BAC1CngF,EAAWmpB,EAASi3D,eAAe,MACnCC,GAAgBC,EAAAA,GAAAA,IAAc9lE,GAC9B+lE,GAASC,EAAAA,EAAAA,IAAyBxgF,EAAUqgF,EAAe,0BAE3DI,GAAkBC,EAAAA,EAAAA,IAAsB,CAC5Cl9C,YAAAA,EACA94B,IAAAA,EACAD,IAAAA,IAEIk2E,GAAmBC,EAAAA,EAAAA,IAAuB,CAC9C1zF,KAAAA,EACAqzF,OAAAA,EACA/8C,YAAAA,EACA94B,IAAAA,EACAD,IAAAA,IAEIoqD,IAAkBgsB,EAAAA,EAAAA,IAAsB,CAC5Cr9C,YAAAA,EACA94B,IAAAA,EACAD,IAAAA,EACA81E,OAAAA,EACArzF,KAAAA,EACA8S,SAAAA,IAGI8gF,GAAS,WAAH,OAASlqB,GAAQ,CAC3Bn4B,IAAKi4B,GAAiBtkE,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAQ6+D,GAAQ,IAAE4F,UAAW,UAAY5F,EAC/DvwC,SAAU,CAAEtnB,GAAIc,GAChB48D,QAAS,CAAE19D,GAAI29D,GACf/2D,SAAAA,GACC,CAAEmpB,SAAAA,EAAUj8B,KAAAA,IAAQwP,MAAK,SAACqkF,GAC3B,IAAMp5B,EAAgBv7D,IAAAA,MAAQ6kE,EAAS/nD,MACpCjd,KAAI,SAAAk/C,GAAE,OAAIA,EAAGjiC,KAAKqwD,MAAMttB,gBAAgB,IAAE+qB,UAAUzqE,QASvD,OAPAqoE,EACE16D,EACA68D,OACA/1D,OACAA,EACA2mD,GAEKo5B,CACT,IAAGp+D,SAAQ,kBAAMs9D,GAAY,EAAM,GAAE,EA2B/B14D,GAAO,SAACy5D,GAGZ,OAFAhB,EAAgB,MAEX/uB,EAASnvC,QA5BI,WAGlB,GAFAm+D,GAAY,GAERhvB,EAAS/nD,KAAK,GAAGA,KAAKqwD,MAAM3+D,GAC9B,OAAOkmF,KAGT,IAAM/G,EAAgB3tF,IAAAA,KAAO6kE,EAAS/nD,KAAK,GAAGA,KAAKqwD,MAAO,iBAC1Dl0D,EAAmC4rD,EAAS/nD,KAAK,GAAGA,KAAKqwD,MAAM0nB,eAAiB,CAAC,EAAzE3xB,EAAWjqD,EAAXiqD,YAAa4xB,EAAS77E,EAAT67E,UAErB,OAAOC,EAAAA,EAAAA,IAAoB,CACzBrhB,cAAeia,EACftI,qBAAAA,EAAAA,GACAniB,YAAAA,EACA4xB,UAAAA,EACAP,iBAAAA,EACA9rB,gBAAAA,GACA4rB,gBAAAA,IACC/jF,MAAK,SAAC0kF,GAGP,OADAnwB,EAAS/nD,KAAK,GAAGA,KAAKqwD,MAAQ6nB,EACvBN,IACT,GACF,CASSO,GAAc3kF,MAAK,SAACyF,GACrBA,GAAUA,EAAOs8B,KAAOt8B,EAAOs8B,IAAIv1B,OACjC83E,EACFvqB,EAAuBt0D,GAEvBq0D,EAAOr0D,GAGb,IAAG+I,OAAM,SAAC/I,GACR69E,EAAgB79E,EAAO+uD,aACzB,IAbS3gC,QAAQC,SAAQ,EAc3B,EAMA,OACEjlC,EAAAA,EAAAA,KAACo2D,GAAAA,EAAc,CAACC,MAAOC,GAAAA,EAAcr2D,UACnCD,EAAAA,EAAAA,KAACwtF,EAAAA,UAAS,CACRC,SAAUA,EACVx1B,YAAat2D,EAAKmB,UAAUC,cAC5BkB,QAAS,CACPypF,iBAAkB,iBAClBC,iBAAkB,qBAClB1tF,UAEFgB,EAAAA,EAAAA,MAAA,OAAAhB,SAAA,EACEgB,EAAAA,EAAAA,MAAA,OAAKC,MAAOskE,GAAevlE,SAAA,EACzBgB,EAAAA,EAAAA,MAAA,OAAAhB,SAAA,EACED,EAAAA,EAAAA,KAACqyF,GAAiB,CAChBlzE,IAAKA,EACLD,IAAKA,EACLvQ,WAAYA,EACZhN,KAAMA,EACNstB,YAAaA,EACb+oB,WAAYA,EACZ9E,IAAKwyB,EAAS/nD,KACd2vC,gBAAiBA,EACjBrV,YAAaA,EACb7E,mBAAiB,EACjB0kC,KAAMA,EACNsY,WAAYA,EACZ/8C,oBAAqBjG,GACrBkG,wBAAsB,EACtBma,YAAaA,EACbwiC,cAAeA,EACfE,uBAAwBA,EACxBqC,6BAA2B,EAC3B9kC,oBAAkB,EAClB0gB,oBAAqBA,KAEvBpuE,EAAAA,EAAAA,KAAC4lE,EAAAA,cAAa,CAACpvC,SAAUmvC,EAAeA,EAAajlE,KAAI,SAAAC,GAAK,OAAIA,EAAM2U,OAAO,IAAI,SAErFtV,EAAAA,EAAAA,KAACizC,EAAS,CACRtxC,KAAMA,EACNkkE,0BAA2B,WAAF,OAAQhlE,IAAAA,IAAM,EACvCqyC,IAAKwyB,EACLtyB,mBAAiB,EACjBC,oBAAqBjG,GACrBkG,wBAAsB,EACtBrkB,YAAaA,EACbm/C,oBAAqBA,QAGzBpuE,EAAAA,EAAAA,KAACgzC,GAAAA,EAAO,KACRhzC,EAAAA,EAAAA,KAACo0F,GAAc,CACbC,OAtDK,WACbzoB,GACF,EAqDU5vC,KAAM,WAAF,OAAQA,IAAK,EAAM,EACvBs4D,qBAAsB,WAAF,OAAQt4D,IAAK,EAAK,UAKlD,EA4BAypC,GAASrkE,aAAe,CACtBukE,aAAc,KACdsqB,cAAe,CAAC,EAChBE,wBAAwB,EACxBhlB,mBAAmB,GAIrB,IAAM4qB,IAA2B7oB,EAAAA,EAAAA,KAAmB5qB,EAAAA,GAAAA,IAClDmjB,GACA,0B","sources":["../../../../component-react/packages/web-exclusions/src/exclusion-errors.js","../../../../component-react/packages/web-exclusions/src/ip-exclusions.js","../../../../component-react/packages/web-exclusions/src/styles/site-exclusion-note-style.js","../../../../component-react/packages/web-exclusions/src/site-exclusions-note.js","../../../../component-react/packages/web-exclusions/src/site-exclusions.js","../../../../component-react/packages/web-exclusions/src/web-exclusions.js","../../../../component-react/packages/web-exclusions/util/web-exclusions.util.ts","../../../../component-react/packages/web-exclusions/src/server-validated-web-exclusions.js","../../../../component-react/packages/web-exclusions/src/web-exclusions-section.js","../../../../component-react/packages/website-list-selector/src/types/exclusion-lists.tsx","../../../../component-react/packages/website-list-selector/src/custom-tag-item-renderer.tsx","../../../../component-react/packages/website-list-selector/src/utils.ts","../../../../component-react/packages/website-list-selector/src/types/api.ts","../../../../component-react/packages/website-list-selector/src/repository.ts","../../../../component-react/packages/website-list-selector/src/main.tsx","../../../../component-react/packages/with-props/src/with-props.js","../../../../component-react/packages/with-store-details/src/style.js","../../../../component-react/packages/with-store-details/src/with-store-from-provider-id.js","../../../../component-react/packages/with-store-details/src/shared.js","../../../../component-react/packages/with-store-details/src/with-store-url.js","../../../../component-react/packages/wizard-performance-marker/src/utils.js","../../../../component-react/packages/wizard-performance-marker/src/step-perf-marker.js","../../../../component-react/packages/wizard-performance-marker/src/wizard-perf-marker.js","../../../../component-react/packages/wizard-shared-components/src/utils/shared.js","../../../../component-react/packages/wizard-shared-components/src/components/name.js","../../../../component-react/packages/wizard-shared-components/src/utils/location-target-shared.js","../../../../component-react/packages/wizard-shared-components/src/components/specific-location-targets-editor.js","../../../../component-react/packages/wizard-shared-components/src/components/shimmers/single-line-shimmer.js","../../../../component-react/packages/wizard-shared-components/src/components/shimmers/section-shimmer.js","../../../../component-react/packages/wizard-shared-components/src/components/shimmers/ad-schedule-shimmer.js","../../../../component-react/packages/wizard-shared-components/src/components/shimmers/radius-shimmer.js","../../../../component-react/packages/wizard-shared-components/src/components/shimmers/audience-signal-shimmer.js","../../../../component-react/packages/wizard-shared-components/src/components/shimmers/with-shimmer.js","../../../../component-react/packages/wizard-shared-components/src/constants/error_entity.js","../../../../component-react/packages/wizard-shared-components/src/constants/default-data.js","../../../../component-react/packages/wizard-shared-components/src/constants/campaign-language.js","../../../../component-react/packages/wizard-shared-components/src/components/validated-campaign-name.js","../../../../component-react/packages/wizard-shared-components/src/components/panels/campaign-name-panel.js","../../../../component-react/packages/wizard-shared-components/src/components/panels/panel-keys.js","../../../../component-react/packages/wizard-shared-components/src/components/validated-language-target.js","../../../../component-react/packages/wizard-shared-components/src/components/panels/language-target-panel.js","../../../../component-react/packages/wizard-shared-components/src/utils/ad-schedule-shared.js","../../../../component-react/packages/wizard-shared-components/src/components/panels/ad-schedule-panel.js","../../../../component-react/packages/wizard-shared-components/src/components/panels/single-language-target-panel.js","../../../../component-react/packages/wizard-shared-components/src/utils/use-localize-budget.js","../../../../component-react/packages/wizard-shared-components/src/components/panels/budget-panel.js","../../../../component-react/packages/wizard-shared-components/src/components/panels/date-settings-panel.js","../../../../component-react/packages/wizard-shared-components/src/components/shimmers/date-settings-shimmer.js","../../../../component-react/packages/wizard-shared-components/src/components/panels/short-headlines-panel.js","../../../../component-react/packages/wizard-shared-components/src/components/panels/descriptions-panel.js","../../../../component-react/packages/wizard-shared-components/src/components/panels/images-panel.js","../../../../component-react/packages/wizard-shared-components/src/components/conversion-based-bidding-banner.js","../../../../component-react/packages/wizard-shared-components/src/components/panels/bid-strategy-panel.js","../../../../component-react/packages/wizard-shared-components/src/components/panels/url-options-panel.js","../../../../component-react/packages/wizard-shared-components/src/components/sections/bid-value.js","../../../../component-react/packages/wizard-shared-components/src/components/panels/bid-value-panel.js","../../../../component-react/packages/wizard-shared-components/src/components/panels/app-details-panel.js","../../../../component-react/packages/wizard-shared-components/src/components/sections/audience-signal-section.js","../../../../component-react/packages/wizard-shared-components/src/utils/data-converter.js","../../../../component-react/packages/wizard-shared-components/src/utils/p$dadeRange.js","../../../../component-react/packages/wizard-shared-components/src/utils/conversion-goal-shared.js","../../../../component-react/packages/wizard-shared-components/src/utils/final-url-expansion-shared.js","../../../../component-react/packages/wizard-shared-components/src/utils/bid-budget-shared.js","../../../../component-react/packages/wizard-shared-components/src/utils/listing-group-shared.js","../../../../component-react/packages/wizard-shared-components/src/utils/store-shared.js","../../../../component-react/packages/wizard-shared-components/src/utils/search-themes-shared.js","../../../../component-react/packages/wizard-shared-components/src/utils/disclaimer-shared.js","../../../../component-react/packages/wizard-shared-components/src/constants/localization-keys.js","../../../../component-react/packages/xandr-display-ads-campaign-shared-components/src/ad-components/styles.js","../../../../component-react/packages/xandr-display-ads-campaign-shared-components/src/ad-components/cropped-preview.js","../../../../component-react/packages/xandr-display-ads-campaign-shared-components/src/ad-components/image-targets.js","../../../../component-react/packages/xandr-display-ads-campaign-shared-components/src/ad-components/ad-preview.js","../../../../component-react/packages/xandr-display-ads-campaign-shared-components/src/ad-components/pagination.js","../../../../component-react/packages/xandr-display-ads-campaign-shared-components/src/model/utl.js","../../../../component-react/packages/xandr-display-ads-campaign-shared-components/src/ad-components/add-image/add-image.js","../../../../component-react/packages/xandr-display-ads-campaign-shared-components/src/ad-components/populate-images.js","../../../../component-react/packages/xandr-display-ads-campaign-shared-components/src/model/constants.js","../../../../component-react/packages/xandr-display-ads-campaign-shared-components/src/ad-components/validated-image-experience.js","../../../../component-react/packages/xandr-display-ads-campaign-shared-components/src/ad-components/display-ad-panel.js","../../../../component-react/packages/xandr-display-ads-campaign-shared-components/src/ad-components/display-ads-container.js","../../../../component-react/packages/xandr-display-ads-campaign-shared-components/src/ad-components/validated-legacy-call-to-action.js","../../../../component-react/packages/xandr-display-ads-campaign-shared-components/src/ad-components/use-display-ads-copilot.js","../../../../component-react/packages/xandr-display-ads-campaign-shared-components/src/ad-components/display-ad-panel-with-copilot.js","../../../../component-react/packages/xandr-display-ads-campaign-shared-components/src/ad-components/view-all-recommendations-panel.js","../../../../component-react/packages/xandr-display-ads-campaign-shared-components/src/ad-components/carousel-style.js","../../../../component-react/packages/xandr-display-ads-campaign-shared-components/src/ad-components/display-ads-suggestion-carousel.js","../../../../component-react/packages/xandr-display-ads-campaign-shared-components/src/ad-components/creative-workbench.js","../../../../component-react/packages/xandr-display-ads-campaign-shared-components/src/ad-components/ratio-picker.js","../../../../component-react/packages/xandr-display-ads-campaign-shared-components/src/ad-components/create-another-ad-menu.js","../../../../component-react/packages/xandr-display-ads-campaign-shared-components/src/ad-components/create-ad-with-ai-dialog.js","../../../../component-react/packages/xandr-display-ads-campaign-shared-components/src/ad-components/use-create-ads.js","../../../../component-react/packages/xandr-display-ads-campaign-shared-components/src/ad-components/display-ads-container-with-copilot.js","../../../../component-react/packages/xandr-display-ads-campaign-shared-components/src/ad-components/ad-editor.js","../../../../component-react/packages/xandr-display-ads-campaign-shared-components/src/ad-components/display-ads-with-copilot.js","../../../../component-react/packages/xandr-display-ads-campaign-shared-components/src/model/verified-tracking-setting.js","../../../../component-react/packages/xandr-display-ads-campaign-shared-components/src/wizards/use-display-ads-repository.js","../../../../component-react/packages/xandr-display-ads-campaign-shared-components/src/wizards/edit-ad-footer.js","../../../../component-react/packages/xandr-display-ads-campaign-shared-components/src/wizards/edit-display-ad-wizard.js","../../../../component-react/packages/xandr-video-campaign-shared-components/src/common/shared-components.js","../../../../component-react/packages/xandr-video-campaign-shared-components/src/ad-components/styles.js","../../../../component-react/packages/xandr-video-campaign-shared-components/src/ad-components/ad-preview.js","../../../../component-react/packages/xandr-video-campaign-shared-components/src/ad-components/add-video-button.js","../../../../component-react/packages/xandr-video-campaign-shared-components/src/ad-components/carousel-style.js","../../../../component-react/packages/xandr-video-campaign-shared-components/src/ad-components/video-suggestion-card.js","../../../../component-react/packages/xandr-video-campaign-shared-components/src/ad-components/video-recommendations-panel.js","../../../../component-react/packages/xandr-video-campaign-shared-components/src/ad-components/video-ads-suggestion-carousel.js","../../../../component-react/packages/xandr-video-campaign-shared-components/src/ad-components/use-video-ads-copilot.js","../../../../component-react/packages/xandr-video-campaign-shared-components/src/ad-components/video-metadata.js","../../../../component-react/packages/xandr-video-campaign-shared-components/src/common/bulk.js","../../../../component-react/packages/xandr-video-campaign-shared-components/src/common/bulk-upsert-errors.js","../../../../component-react/packages/xandr-video-campaign-shared-components/src/common/map-bulk-upsert-errors.js","../../../../component-react/packages/xandr-video-campaign-shared-components/src/common/deal-detils-style.js","../../../../component-react/packages/xandr-video-campaign-shared-components/src/common/target-constants.js","../../../../component-react/packages/xandr-video-campaign-shared-components/src/common/deal-constraints/targets-constraints.js","../../../../component-react/packages/xandr-video-campaign-shared-components/src/common/account-currency-daily-exchange-rate.js","../../../../component-react/packages/xandr-video-campaign-shared-components/src/common/deal-details.js","../../../../component-react/packages/xandr-video-campaign-shared-components/src/common/format-numbers.js","../../../../component-react/packages/xandr-video-campaign-shared-components/src/model/ad.js","../../../../component-react/packages/xandr-video-campaign-shared-components/src/model/ad-bulk.js","../../../../component-react/packages/xandr-video-campaign-shared-components/src/common/fetch-exchange-rate-mapping.js","../../../../component-react/packages/xandr-video-campaign-shared-components/src/common/utils.js","../../../../component-react/packages/xandr-video-campaign-shared-components/src/ad-components/validated-video-experience.js","../../../../component-react/packages/xandr-video-campaign-shared-components/src/ad-components/final-url.js","../../../../component-react/packages/xandr-video-campaign-shared-components/src/ad-components/video-panel.js","../../../../component-react/packages/xandr-video-campaign-shared-components/src/ad-components/page-manager.js","../../../../component-react/packages/xandr-video-campaign-shared-components/src/ad-components/video-ads-container.js","../../../../component-react/packages/xandr-video-campaign-shared-components/src/model/deal.js","../../../../component-react/packages/xandr-video-campaign-shared-components/src/ad-components/ad-editor-footer.js","../../../../component-react/packages/xandr-video-campaign-shared-components/src/ad-components/ad-editor.js"],"sourcesContent":["import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport _ from 'underscore';\r\nimport { Text } from '@bingads-webui-react/fabric-control';\r\n\r\nconst ErrorReason = ({ reason }) => (\r\n
\r\n {reason}\r\n
\r\n);\r\n\r\nErrorReason.propTypes = {\r\n reason: PropTypes.string.isRequired,\r\n};\r\n\r\nexport const ExclusionErrors = ({ errors }) => (\r\n errors.map(error => (\r\n
\r\n {_.isEmpty(error.Value) ? : error.Value.map(value => (\r\n \r\n {value}:\r\n \r\n \r\n ))}\r\n
\r\n ))\r\n);\r\n\r\nExclusionErrors.propTypes = {\r\n errors: PropTypes.shape([]),\r\n};\r\n\r\nExclusionErrors.defaultProps = {\r\n errors: [],\r\n};\r\n","import React, { useState, useCallback, useContext, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { TextField, Text, Stack } from '@bingads-webui-react/fabric-control';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { HelpButton } from '@bingads-webui-react/help-popup';\r\nimport { ExclusionErrors } from './exclusion-errors';\r\n\r\nconst textStyles = { root: { fontWeight: 600 } };\r\n\r\nexport const IpExclusions = ({\r\n exclusions, placeholder, handleExclusionInputChange, errors,\r\n}) => {\r\n const i18n = useContext(I18nContext);\r\n const [exclusionList, setExclusionList] = useState(exclusions);\r\n\r\n useMemo(() => {\r\n setExclusionList(exclusions);\r\n }, [exclusions]);\r\n\r\n const handleExclusionTextFieldChange = useCallback(\r\n (input) => {\r\n setExclusionList(input.target.value);\r\n handleExclusionInputChange({ value: input.target.value, type: 'ExcludedIPs' });\r\n },\r\n [setExclusionList, handleExclusionInputChange]\r\n );\r\n\r\n return (\r\n
\r\n \r\n {i18n.getString(_TL_('IP address'))}\r\n \r\n \r\n\r\n \r\n {!placeholder && (\r\n {i18n.getString(_TL_('Enter IP addresses or a range of IP addresses that will be blocked from seeing your ad, one IP address per line.'))}\r\n )}\r\n \r\n\r\n {errors && errors.length > 0 && (\r\n
\r\n \r\n
\r\n )}\r\n
\r\n
\r\n );\r\n};\r\n\r\nIpExclusions.propTypes = {\r\n exclusions: PropTypes.string.isRequired,\r\n placeholder: PropTypes.string,\r\n handleExclusionInputChange: PropTypes.func.isRequired,\r\n errors: PropTypes.shape([]),\r\n};\r\n\r\nIpExclusions.defaultProps = {\r\n errors: [],\r\n placeholder: '',\r\n};\r\n","\r\nexport const getStyles = () => ({\r\n link: {\r\n paddingLeft: 10,\r\n },\r\n});\r\n","import React, { useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { withSiteMap, getRoutePathById } from '@bingads-webui-react/with-site-map';\r\nimport { Link, Text } from '@fluentui/react-components';\r\nimport { MessageBar, MessageBarTitle, MessageBarBody } from '@fluentui/react-message-bar';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { ScopeLevel } from '@bingads-webui-campaign-react/constants';\r\nimport { PermissionsContext } from '@bingads-webui-react/hoc-with-permissions';\r\nimport { getStyles } from './styles/site-exclusion-note-style';\r\n\r\nconst SiteExclusionNoteBase = ({ level, siteMap }) => {\r\n const i18n = useContext(I18nContext);\r\n const path = getRoutePathById(siteMap, 'site-exclusion-lists-entrypoint');\r\n const classes = useDefaultStyles(getStyles);\r\n const { dynamic: { AWFWebExclusionsWarning: showAWFWarning } } = useContext(PermissionsContext);\r\n\r\n return (\r\n
\r\n \r\n \r\n {i18n.getString(_TL_('Note'))}\r\n {level === ScopeLevel.AdGroup ? (\r\n {showAWFWarning ? i18n.getString(_TL_('Add websites to exclude at the ad group level below. Any account-level website exclusion lists will also be applied to this ad group. Please note that Audience campaigns will always serve on Microsoft sites (e.g., Microsoft Bing, Microsoft Casual Games, MSN, and Outlook.com) even if you\\'ve added website exclusions for them.')) : i18n.getString(_TL_('Add websites to exclude at the ad group level below. Any account-level website exclusion lists will also be applied to this ad group.'))}\r\n ) : (\r\n {showAWFWarning ? i18n.getString(_TL_('Add websites to exclude at the campaign level below. Any account-level website exclusion lists will also be applied to this campaign. Please note that Audience campaigns will always serve on Microsoft sites (e.g., Microsoft Bing, Microsoft Casual Games, MSN, and Outlook.com) even if you\\'ve added website exclusions for them.')) : i18n.getString(_TL_('Add websites to exclude at the campaign level below. Any account-level website exclusion lists will also be applied to this campaign.'))}\r\n )}\r\n {path && (\r\n \r\n \r\n \r\n {i18n.getString(_TL_('View account-level website exclusion lists'))}\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n
\r\n );\r\n};\r\n\r\nSiteExclusionNoteBase.propTypes = {\r\n level: PropTypes.string.isRequired,\r\n siteMap: PropTypes.shape({}).isRequired,\r\n};\r\n\r\nexport const SiteExclusionNote = withSiteMap(SiteExclusionNoteBase);\r\n","import React, { useState, useCallback, useContext, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { TextField, Text, Stack } from '@bingads-webui-react/fabric-control';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { HelpButton } from '@bingads-webui-react/help-popup';\r\nimport { ScopeLevel } from '@bingads-webui-campaign-react/constants';\r\nimport { ExclusionErrors } from './exclusion-errors';\r\nimport { SiteExclusionNote } from './site-exclusions-note';\r\n\r\nconst textFieldStyles = { fieldGroup: { borderColor: '#D1D1D1' } };\r\nconst textStyles = { root: { fontWeight: 600 } };\r\n\r\nexport const SiteExclusions = ({\r\n level, placeholder, exclusions, readOnlyExclusions, handleExclusionInputChange, errors,\r\n}) => {\r\n const i18n = useContext(I18nContext);\r\n const [exclusionList, setExclusionList] = useState(exclusions);\r\n\r\n useMemo(() => {\r\n setExclusionList(exclusions);\r\n }, [exclusions]);\r\n\r\n const handleExclusionTextFieldChange = useCallback(\r\n (input) => {\r\n setExclusionList(input.target.value);\r\n handleExclusionInputChange({ value: input.target.value, type: 'ExcludedSites' });\r\n },\r\n [setExclusionList, handleExclusionInputChange]\r\n );\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n {i18n.getString(_TL_('Website'))}\r\n \r\n \r\n {!placeholder && (\r\n {i18n.getString(_TL_('Enter websites to exclude from showing your ads, one website per line.'))}\r\n )}\r\n \r\n\r\n {errors && errors.length > 0 && (\r\n
\r\n \r\n
\r\n )}\r\n
\r\n\r\n \r\n\r\n {level === ScopeLevel.AdGroup && (\r\n \r\n {i18n.getString(_TL_('Campaign-level website exclusions'))}\r\n \r\n \r\n )}\r\n
\r\n
\r\n );\r\n};\r\n\r\nSiteExclusions.propTypes = {\r\n level: PropTypes.string.isRequired,\r\n placeholder: PropTypes.string,\r\n exclusions: PropTypes.string.isRequired,\r\n readOnlyExclusions: PropTypes.string,\r\n siteMap: PropTypes.shape({}).isRequired,\r\n handleExclusionInputChange: PropTypes.func.isRequired,\r\n errors: PropTypes.shape([]),\r\n};\r\n\r\nSiteExclusions.defaultProps = {\r\n placeholder: '',\r\n readOnlyExclusions: '',\r\n errors: [],\r\n};\r\n","import React, { useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport _ from 'underscore';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { Stack } from '@bingads-webui-react/fabric-control';\r\nimport { ScopeLevel } from '@bingads-webui-campaign-react/constants';\r\nimport {\r\n Accordion,\r\n AccordionItem,\r\n AccordionHeader,\r\n AccordionPanel,\r\n} from '@fluentui/react-components';\r\nimport { IpExclusions } from './ip-exclusions';\r\nimport { SiteExclusions } from './site-exclusions';\r\n\r\nexport const WebExclusions = ({\r\n showSiteExclusion,\r\n showIPExclusion,\r\n showAccordion,\r\n siteInputProps,\r\n ipInputProps,\r\n level,\r\n exclusionData,\r\n setExclusionsCallback,\r\n errors,\r\n}) => {\r\n const i18n = useContext(I18nContext);\r\n const siteExclusions =\r\n level === ScopeLevel.Campaign\r\n ? _.result(\r\n exclusionData && exclusionData.campaignExclusions,\r\n 'ExcludedSites'\r\n )\r\n : _.result(\r\n exclusionData && exclusionData.adgroupExclusions,\r\n 'ExcludedSites'\r\n ) || '';\r\n const campaignReadOnlySiteExclusions =\r\n level === ScopeLevel.AdGroup\r\n ? _.result(\r\n exclusionData && exclusionData.campaignExclusions,\r\n 'ExcludedSites'\r\n )\r\n : '';\r\n const ipExclusions =\r\n _.result(\r\n exclusionData && exclusionData.campaignExclusions,\r\n 'ExcludedIPs'\r\n ) || '';\r\n\r\n const hasSiteExclusionsErrors = errors.find(error => 'NegativeSitesResult' in error);\r\n const hasIpExclusionsErrors = errors.find(error => 'NegativeIPsResult' in error);\r\n\r\n const siteExclusionsError = hasSiteExclusionsErrors\r\n ? hasSiteExclusionsErrors.NegativeSitesResult\r\n : [];\r\n const ipExclusionsError = hasIpExclusionsErrors\r\n ? hasIpExclusionsErrors.NegativeIPsResult\r\n : [];\r\n\r\n const handleExclusionInputChange = ({ value, type }) => {\r\n setExclusionsCallback(value, type);\r\n };\r\n\r\n const siteExclusionsInput = (\r\n \r\n );\r\n\r\n const ipExclusionsInput = (\r\n \r\n );\r\n\r\n return (\r\n
\r\n {showAccordion ? (\r\n \r\n {showSiteExclusion && (\r\n \r\n {i18n.getString(_TL_('Add websites'))}\r\n \r\n {siteExclusionsInput}\r\n \r\n \r\n )}\r\n {showIPExclusion && (\r\n \r\n {i18n.getString(_TL_('Manually add IP addresses'))}\r\n \r\n {ipExclusionsInput}\r\n \r\n \r\n )}\r\n \r\n ) : (\r\n \r\n {showSiteExclusion && siteExclusionsInput}\r\n {showIPExclusion && ipExclusionsInput}\r\n \r\n )}\r\n
\r\n );\r\n};\r\n\r\nWebExclusions.propTypes = {\r\n showSiteExclusion: PropTypes.bool,\r\n showIPExclusion: PropTypes.bool,\r\n showAccordion: PropTypes.bool,\r\n siteInputProps: PropTypes.shape({}),\r\n ipInputProps: PropTypes.shape({}),\r\n level: PropTypes.string.isRequired,\r\n exclusionData: PropTypes.shape({}).isRequired,\r\n setExclusionsCallback: PropTypes.func.isRequired,\r\n errors: PropTypes.shape([]),\r\n};\r\n\r\nWebExclusions.defaultProps = {\r\n showSiteExclusion: false,\r\n showIPExclusion: false,\r\n showAccordion: false,\r\n siteInputProps: {},\r\n ipInputProps: {},\r\n errors: [],\r\n};\r\n","import _ from 'underscore';\r\nimport { ScopeLevel } from '@bingads-webui-campaign-react/constants';\r\n\r\nexport const entitySeparator = '-------------------------';\r\n\r\nexport const formatInvalidEntities = ({\r\n InvalidEntities,\r\n ValidEntities,\r\n}: {\r\n InvalidEntities: string[];\r\n ValidEntities: string[];\r\n}): string => _.compact(_.union(InvalidEntities, _.isEmpty(ValidEntities) ? [] : [entitySeparator], ValidEntities)).join('\\r\\n');\r\n\r\nconst getExclusionCount = exclusionData => _.compact(exclusionData.split(/\\r?\\n/)).length;\r\n\r\nexport const getSummary = (level, exclusionData, i18n) => {\r\n if (level === ScopeLevel.Campaign) {\r\n const siteExclusions = _.result(exclusionData && exclusionData.campaignExclusions, 'ExcludedSites', '');\r\n const ipExclusions = _.result(exclusionData && exclusionData.campaignExclusions, 'ExcludedIPs', '');\r\n const siteExclusionsCount = getExclusionCount(siteExclusions);\r\n const ipExclusionsCount = getExclusionCount(ipExclusions);\r\n return i18n.getString(_TL_('{{siteExclusionsCount}} website(s) excluded at the ad level. {{ipExclusionsCount}} IP address(es) excluded at the ad level.'), { siteExclusionsCount, ipExclusionsCount });\r\n }\r\n\r\n const siteExclusions = _.result(exclusionData && exclusionData.adgroupExclusions, 'ExcludedSites', '');\r\n const campaignReadOnlySiteExclusions = _.result(exclusionData && exclusionData.campaignExclusions, 'ExcludedSites', '');\r\n const adgroupLevelExclusionCount = getExclusionCount(siteExclusions);\r\n const campaignLevelExclusionCount = getExclusionCount(campaignReadOnlySiteExclusions);\r\n return i18n.getString(_TL_('{{adgroupLevelExclusionCount}} website(s) excluded at the ad level. {{campaignLevelExclusionCount}} website(s) excluded at the campaign level.'), { adgroupLevelExclusionCount, campaignLevelExclusionCount });\r\n};\r\n","import {\r\n withFormError,\r\n propertyIs,\r\n} from '@bingads-webui-campaign-react/form-error';\r\nimport React from 'react';\r\nimport {\r\n FormErrorBeaconAdapter, ValidationBeaconAdapter,\r\n} from '@bingads-webui-campaign-react/error-handling';\r\nimport { withAttentionBeacon } from '@bingads-webui-campaign-react/attention-beacon';\r\nimport { withCustomValidation } from '@bingads-webui-react/validation';\r\nimport { ScopeLevel } from '@bingads-webui-campaign-react/constants';\r\nimport { WebExclusions } from './web-exclusions';\r\n\r\nexport const webExclusionPropertyVal = propertyIs('webExclusions');\r\n\r\nexport const ServerValidatedWebExclusions = withAttentionBeacon(\r\n withFormError(WebExclusions, { showError: false }),\r\n { Adapters: [FormErrorBeaconAdapter, ValidationBeaconAdapter] }\r\n);\r\n\r\nconst WebExclusionsInternal = ({\r\n updateValidation,\r\n parentData,\r\n level,\r\n ...rest\r\n}) => {\r\n const onChange = (exclusionsData, type) => {\r\n const keyName = level === ScopeLevel.Campaign ? 'campaignExclusions' : 'adgroupExclusions';\r\n const patchExclusions = {\r\n exclusions: {\r\n ...(parentData.exclusions || {}),\r\n [keyName]: {\r\n ...(parentData.exclusions && parentData.exclusions[keyName] ? parentData.exclusions[keyName] : {}),\r\n [type]: exclusionsData,\r\n },\r\n },\r\n };\r\n\r\n updateValidation([], patchExclusions);\r\n };\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nconst WebExclusionsWithValidation = withCustomValidation(WebExclusionsInternal);\r\n\r\nexport const ServerValidatedWebExclusionsWithValidation = withAttentionBeacon(\r\n withFormError(WebExclusionsWithValidation, { showError: false }),\r\n { Adapters: [FormErrorBeaconAdapter, ValidationBeaconAdapter] }\r\n);\r\n","import React, { useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { Stack } from '@bingads-webui-react/fabric-control';\r\nimport {\r\n TextTitle,\r\n ValidatedPanel,\r\n getPanelErrorProps,\r\n} from '@bingads-webui-campaign/wizard-jumbo-card';\r\nimport { ServerValidatedWebExclusions, webExclusionPropertyVal } from './server-validated-web-exclusions';\r\nimport { getSummary } from '../util/web-exclusions.util';\r\nimport image from './media/website-exclusion.svg';\r\n\r\nexport const WebExclusionsSection = ({\r\n showSiteExclusion, showIPExclusion, level, exclusionData, setExclusionsCallback, errors, expand, ...rest\r\n}) => {\r\n const i18n = useContext(I18nContext);\r\n\r\n return (\r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand,\r\n expandKey: 'web-exclusions',\r\n }}\r\n {...rest}\r\n >\r\n \r\n \r\n {i18n.getString(_TL_('Which websites should not show your ads and which IP addresses should be blocked from seeing your ads?'))}\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nWebExclusionsSection.propTypes = {\r\n showSiteExclusion: PropTypes.bool,\r\n showIPExclusion: PropTypes.bool,\r\n level: PropTypes.string.isRequired,\r\n exclusionData: PropTypes.shape({}).isRequired,\r\n setExclusionsCallback: PropTypes.func.isRequired,\r\n errors: PropTypes.shape([]),\r\n expand: PropTypes.func.isRequired,\r\n};\r\n\r\nWebExclusionsSection.defaultProps = {\r\n showSiteExclusion: false,\r\n showIPExclusion: false,\r\n errors: [],\r\n};\r\n","export interface AccountPlacementExclusionList {\r\n ItemCount: number;\r\n AssociationCount: number;\r\n Id: number;\r\n Name: string;\r\n}\r\n\r\nexport type ListType = 'block' | 'allow';\r\n\r\nexport type CampaignType = 'Audience' | 'BrandAwarenessVideoAds' | 'Search' | 'Display' | number | null;\r\n\r\nexport interface ListSelectorProps {\r\n listType: ListType\r\n selected?: AccountPlacementExclusionList[]\r\n onChange: (selected: any[]) => void\r\n}\r\n\r\nexport const TEXT_CONTENT = {\r\n description: {\r\n block: _TL_('Add website exclusion lists to your campaign to help prevent your ads from being shown on certain websites. Note: You can create, edit, and view account-level lists in your Website control lists.'),\r\n allow: _TL_('Adding allowed website lists to this campaign is optional. This option helps you specify sites where you want your ads to appear, giving you more control over ad placement while still maintaining broader distribution across other sites.'),\r\n },\r\n listLabel: {\r\n block: _TL_('Blocked Lists'),\r\n allow: _TL_('Allowed Lists'),\r\n },\r\n ariaLabel: {\r\n block: _TL_('Select blocked website lists'),\r\n allow: _TL_('Select allowed website lists'),\r\n },\r\n};\r\n","\r\nimport React from 'react';\r\nimport { makeStyles, tokens, Text, makeStaticStyles } from '@fluentui/react-components';\r\n\r\nexport const useTagContentStyles = makeStyles({\r\n Text: {\r\n fontWeight: tokens.fontWeightSemibold,\r\n },\r\n List: {\r\n fontWeight: tokens.fontWeightSemibold,\r\n alignItems: 'center',\r\n display: 'flex',\r\n columnGap: tokens.spacingHorizontalXS,\r\n marginBottom: tokens.spacingVerticalL,\r\n },\r\n ListItem: {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n },\r\n Container: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n marginBottom: tokens.spacingVerticalL,\r\n },\r\n ButtonContainer: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n justifyContent: 'space-between',\r\n columnGap: tokens.spacingHorizontalL,\r\n width: 'fit-content',\r\n },\r\n MessageBar: {\r\n width: 'fit-content',\r\n },\r\n PopoverContentBefore: {\r\n fontWeight: tokens.fontWeightSemibold,\r\n paddingLeft: tokens.spacingHorizontalS,\r\n },\r\n EntitySelector: {\r\n maxWidth: '100%',\r\n marginTop: tokens.spacingVerticalS,\r\n },\r\n});\r\n\r\nconst useStaticStyles = makeStaticStyles({\r\n '.entities-collection-container': {\r\n maxWidth: '630px',\r\n },\r\n});\r\n\r\nexport const CustomWebsiteListTagItemRenderer: React.FC<{content: string}> = ({ content }) => {\r\n useStaticStyles();\r\n const classes = useTagContentStyles();\r\n return (\r\n \r\n {content}\r\n \r\n );\r\n};\r\n","import { RequestMethod, ServerContext } from './types/api';\r\n\r\nexport const callMT = async (\r\n url: string,\r\n method: RequestMethod,\r\n body: any,\r\n headers\r\n) => {\r\n const response = await fetch(url, {\r\n method,\r\n body: JSON.stringify(body),\r\n headers,\r\n });\r\n\r\n if (!response.ok) {\r\n throw new Error('Network response was not ok');\r\n }\r\n\r\n return response.json();\r\n};\r\n\r\nexport const getHeadersRequestByServerContext = (serverContext: ServerContext) => ({\r\n 'Content-Type': 'application/json',\r\n lcid: serverContext.CurrentUser.Locale,\r\n 'x-ms-clientapplication': 'bingadsweb',\r\n 'x-ms-applicationname': 'bingadsweb',\r\n 'x-ms-pagetrackingid': serverContext.PageTrackingId,\r\n Authorization: `CCMTSmallToken ${serverContext.Token}`,\r\n CustomerAccountId: serverContext.CurrentAccount.Id,\r\n CustomerId: serverContext.CurrentAccount.AdvertiserCustomerID,\r\n});\r\n","export interface ServerContext {\r\n CurrentAccount: {\r\n Id: number;\r\n AdvertiserCustomerID: number;\r\n };\r\n CurrentUser: {\r\n Locale: string;\r\n };\r\n PageTrackingId: string;\r\n ServicesEndpoints: {\r\n CmAPI: string;\r\n };\r\n Token: string;\r\n}\r\nexport interface SharedEntity {\r\n Id: number;\r\n Name: string;\r\n Description: string;\r\n Type: string;\r\n Scope: string;\r\n}\r\nexport interface BatchErrors {\r\n Index: number;\r\n Message: string;\r\n}\r\nexport interface SharedEntityAssociation {\r\n EntityId: number;\r\n EntityType: 'Campaign' | 'Account';\r\n SharedEntityId: number; // AccountPlacementExclusionListId\r\n SharedEntityType: 'AccountPlacementExclusionList';\r\n SharedEntityCustomerId?: number; // Ignore for account level\r\n}\r\nexport interface SetSharedEntityAssociationsRequest {\r\n Associations: SharedEntityAssociation[];\r\n SharedEntityScope: string;\r\n}\r\nexport interface GetSharedEntitiesRequest {\r\n SharedEntityScope: string;\r\n SharedEntityType: string;\r\n SharedEntityId: number;\r\n}\r\nexport interface GetSharedEntitiesResponse {\r\n SharedEntities: SharedEntity[];\r\n PartialErrors?: BatchErrors[];\r\n}\r\nexport interface SetSharedEntityAssociationsResponse {\r\n PartialErrors?: BatchErrors[];\r\n}\r\nexport interface DeleteSharedEntityAssociationsRequest {\r\n Associations: SharedEntityAssociation[];\r\n SharedEntityScope: string;\r\n}\r\nexport interface DeleteSharedEntityAssociationsResponse {\r\n PartialErrors?: BatchErrors[];\r\n}\r\nexport interface GetSharedEntityAssociationsByEntityIdsRequest {\r\n EntityIds: number[];\r\n EntityType: string;\r\n SharedEntityScope: string;\r\n SharedEntityType: string;\r\n}\r\nexport interface GetSharedEntityAssociationsByEntityIdsResponse {\r\n Associations: SharedEntityAssociation[];\r\n PartialErrors?: BatchErrors[];\r\n}\r\nexport enum RequestMethod {\r\n Post = 'POST',\r\n Delete = 'DELETE'\r\n}\r\n","import { getHeadersRequestByServerContext, callMT } from './utils';\r\nimport {\r\n RequestMethod,\r\n ServerContext,\r\n GetSharedEntitiesResponse,\r\n GetSharedEntitiesRequest,\r\n SetSharedEntityAssociationsResponse,\r\n SetSharedEntityAssociationsRequest,\r\n DeleteSharedEntityAssociationsResponse,\r\n DeleteSharedEntityAssociationsRequest,\r\n GetSharedEntityAssociationsByEntityIdsResponse,\r\n GetSharedEntityAssociationsByEntityIdsRequest,\r\n SharedEntity,\r\n} from './types/api';\r\n\r\nclass WebsiteListSelectorRepository {\r\n async getListsByAccountId(serverContext = {} as ServerContext): Promise {\r\n const headers = getHeadersRequestByServerContext(serverContext);\r\n const body: GetSharedEntitiesRequest = {\r\n SharedEntityScope: 'Account',\r\n SharedEntityType: 'AccountPlacementExclusionList',\r\n SharedEntityId: headers.CustomerAccountId,\r\n };\r\n\r\n return callMT(\r\n `${serverContext.ServicesEndpoints?.CmAPI}v13/SharedEntities/Query`,\r\n RequestMethod.Post,\r\n body,\r\n headers\r\n );\r\n }\r\n\r\n async associateListsToCampaign(\r\n serverContext = {} as ServerContext,\r\n lists: SharedEntity[],\r\n campaignId: number\r\n ): Promise {\r\n const headers = getHeadersRequestByServerContext(serverContext);\r\n\r\n const previousAssociations = await this.getListsByCampaignId(serverContext, campaignId);\r\n\r\n // Convert arrays to sets for easier comparison\r\n const previousSet = new Set(previousAssociations.map(({ Id }) => Id));\r\n const newSet = new Set(lists.map(({ Id }) => Id));\r\n\r\n // Find ids in previous associations but not in new associations\r\n const removedAssociations = Array.from(previousSet).filter(id => !newSet.has(id));\r\n\r\n // Find ids in new associations but not in previous associations\r\n const newAssociations = Array.from(newSet).filter(id => !previousSet.has(id));\r\n\r\n // Delete associations that are not in the new list if any\r\n if (removedAssociations.length > 0) {\r\n await this.deleteListsAssociationedWithCampaign(serverContext, removedAssociations, campaignId);\r\n }\r\n\r\n // if there are no new associations, return early\r\n if (newAssociations.length === 0) {\r\n return {};\r\n }\r\n\r\n const body: SetSharedEntityAssociationsRequest = {\r\n SharedEntityScope: 'Account',\r\n Associations: newAssociations.map(id => ({\r\n SharedEntityId: id,\r\n SharedEntityType: 'AccountPlacementExclusionList',\r\n SharedEntityScope: 'Account',\r\n EntityId: campaignId,\r\n EntityType: 'Campaign',\r\n })),\r\n };\r\n\r\n // Create new associations\r\n return callMT(\r\n `${serverContext.ServicesEndpoints?.CmAPI}v13/SharedEntityAssociations/Set`,\r\n RequestMethod.Post,\r\n body,\r\n headers\r\n );\r\n }\r\n\r\n async deleteListsAssociationedWithCampaign(\r\n serverContext = {} as ServerContext,\r\n lists: number[],\r\n campaignId: number\r\n ): Promise {\r\n const headers = getHeadersRequestByServerContext(serverContext);\r\n const body: DeleteSharedEntityAssociationsRequest = {\r\n SharedEntityScope: 'Account',\r\n Associations: lists.map(id => ({\r\n SharedEntityId: id,\r\n SharedEntityType: 'AccountPlacementExclusionList',\r\n EntityId: campaignId,\r\n EntityType: 'Campaign',\r\n })),\r\n };\r\n\r\n return callMT(\r\n `${serverContext.ServicesEndpoints?.CmAPI}v13/SharedEntityAssociations`,\r\n RequestMethod.Delete,\r\n body,\r\n headers\r\n );\r\n }\r\n\r\n async getListsIdsByCampaignId(\r\n serverContext = {} as ServerContext,\r\n campaignId: number\r\n ): Promise {\r\n try {\r\n const headers = getHeadersRequestByServerContext(serverContext);\r\n const body: GetSharedEntityAssociationsByEntityIdsRequest = {\r\n EntityIds: [campaignId],\r\n EntityType: 'Campaign',\r\n SharedEntityScope: 'Account',\r\n SharedEntityType: 'AccountPlacementExclusionList',\r\n };\r\n\r\n const associated: GetSharedEntityAssociationsByEntityIdsResponse = await callMT(\r\n `${serverContext.ServicesEndpoints?.CmAPI}v13/SharedEntityAssociations/QueryByEntityIds`,\r\n RequestMethod.Post,\r\n body,\r\n headers\r\n );\r\n\r\n return associated.Associations.map(item => item.SharedEntityId);\r\n } catch (error) {\r\n return [];\r\n }\r\n }\r\n\r\n async getListsByCampaignId(\r\n serverContext = {} as ServerContext,\r\n campaignId: number\r\n ): Promise {\r\n try {\r\n const websiteExclusionListIds = await this.getListsIdsByCampaignId(serverContext, campaignId);\r\n if (websiteExclusionListIds.length === 0) {\r\n return [];\r\n }\r\n // Get wesbite exclusion lists for account to get their names\r\n const allWebsiteExclusionLists = await this.getListsByAccountId(serverContext);\r\n const exclusionListsByListId = new Map(allWebsiteExclusionLists.SharedEntities.map(websiteExclusionList => [websiteExclusionList.Id, websiteExclusionList]));\r\n\r\n return websiteExclusionListIds.map(listId => exclusionListsByListId.get(listId) || { Id: listId } as SharedEntity);\r\n } catch (error) {\r\n return [];\r\n }\r\n }\r\n}\r\n\r\nexport const repository = new WebsiteListSelectorRepository();\r\n","import React, { useContext } from 'react';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { LearnMoreLink } from '@bingads-webui-campaign-react/help';\r\nimport { ServerEntitySelectorInline } from '@bingads-webui-fluent-component/entity-selector';\r\nimport { Text, Label } from '@fluentui/react-components';\r\nimport { Info16Regular } from '@fluentui/react-icons';\r\nimport { ListSelectorProps, TEXT_CONTENT } from './types/exclusion-lists';\r\nimport { CustomWebsiteListTagItemRenderer, useTagContentStyles } from './custom-tag-item-renderer';\r\nimport { repository } from './repository';\r\n\r\nexport const WebsiteListSelector = ({ listType, selected, onChange }: ListSelectorProps) => {\r\n const i18n: any = useContext(I18nContext);\r\n const serverContext: any = useContext(ServerContext);\r\n const classes = useTagContentStyles();\r\n\r\n const fetchData = () => repository.getListsByAccountId(serverContext).then(response => ({\r\n count: response.SharedEntities?.length || 0,\r\n items: (response.SharedEntities || []).map(item => ({\r\n ...item,\r\n // selection tree requires those props\r\n value: item.Id,\r\n content: item.Name,\r\n })),\r\n }));\r\n\r\n const renderItemContent = flatItem => (\r\n
\r\n \r\n {flatItem.Name}\r\n \r\n \r\n {flatItem.ItemCount}{' '}{i18n.getString(_TL_('websites'))}\r\n \r\n
\r\n );\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n\r\n
\r\n \r\n {`${i18n.getString(_TL_('Lists'))} (${selected?.length})`}\r\n \r\n \r\n
\r\n\r\n item?.Name.toLowerCase().includes(search.toLowerCase())}\r\n selectionMode=\"multiselect\"\r\n onRenderTagContent={CustomWebsiteListTagItemRenderer}\r\n onRenderItemContent={renderItemContent}\r\n popOverContentBefore={{i18n.getString(TEXT_CONTENT.listLabel[listType])}}\r\n aria-label={i18n.getString(TEXT_CONTENT.ariaLabel[listType])}\r\n />\r\n
\r\n );\r\n};\r\n\r\nWebsiteListSelector.defaultProps = {\r\n listType: 'block',\r\n selected: [],\r\n onChange: () => { },\r\n};\r\n","import _ from 'underscore';\r\nimport React from 'react';\r\nimport hoistNonReactStatics from 'hoist-non-react-statics';\r\nimport { getDisplayName } from '@bingads-webui-react/hoc-utils';\r\n\r\nexport const withProps = (extraProps, WrappedComponent) => {\r\n const HoC = (props) => {\r\n const finalProps = _.isFunction(extraProps) ?\r\n extraProps(props) :\r\n _.extend({}, props, extraProps);\r\n return (\r\n \r\n );\r\n };\r\n\r\n HoC.displayName = `WithProps(${getDisplayName(WrappedComponent)})`;\r\n hoistNonReactStatics(HoC, WrappedComponent);\r\n\r\n return HoC;\r\n};\r\n","export const getStyles = () => ({\r\n withStoreLoadingContainer: {\r\n minHeight: 84,\r\n '& .loading': {\r\n paddingTop: 30,\r\n },\r\n },\r\n withStoreErrorContainer: {\r\n paddingTop: 10,\r\n '& .alert': {\r\n alignItems: 'center',\r\n padding: [4, 16, 4, 12],\r\n\r\n '& .alert-image:before': {\r\n lineHeight: '32px',\r\n },\r\n\r\n '& .alert__content': {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n flexGrow: 1,\r\n alignItems: 'center',\r\n },\r\n\r\n '& .alert__action': {\r\n marginLeft: 'auto',\r\n marginTop: 'unset',\r\n },\r\n },\r\n UrlContainer: {\r\n width: '435px',\r\n '& .store-url-text-container': {\r\n marginBottom: '10px',\r\n },\r\n },\r\n MobileUrlContainer: {\r\n width: '435px',\r\n marginTop: '20px',\r\n },\r\n },\r\n});\r\n\r\n","import { noop, isArray, some } from 'underscore';\r\nimport React, { useState, useEffect, useMemo, useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport hoistNonReactStatics from 'hoist-non-react-statics';\r\nimport { getDisplayName } from '@bingads-webui-react/hoc-utils';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { getStoreQueriesWithLocalMock } from '@bingads-webui-campaign-react/merchant-shared';\r\nimport { Loading } from '@bingads-webui-campaign-react/loading';\r\nimport { Alert } from '@bingads-webui-react/alert';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { getStyles } from './style';\r\n\r\nconst storeFormattedText = (providerId, getStoreResponse) => (getStoreResponse ? `ID: ${getStoreResponse.Id}, Name: ${getStoreResponse.Name}` : `ID: ${providerId}`);\r\n\r\nconst isStoreNotFoundFetchError = storeFetchError =>\r\n storeFetchError && isArray(storeFetchError.raw) && some(storeFetchError.raw, ({ ErrorCode }) => ErrorCode === 'StoreNotFoundErr');\r\n\r\nconst createStoreDetails = (providerId, getStoreResponse) => ({\r\n id: providerId,\r\n name: getStoreResponse && getStoreResponse.Name,\r\n storeUrl: getStoreResponse && getStoreResponse.DestinationUrl,\r\n text: storeFormattedText(providerId, getStoreResponse),\r\n});\r\n\r\nexport function withStoreFromProviderId(WrappedComponent) {\r\n const HOC = (props) => {\r\n const {\r\n i18n,\r\n providerId,\r\n updateValidation,\r\n } = props;\r\n\r\n const [storeFetchState, setStoreFetchState] = useState({ fetchComplete: !providerId, storeDetails: null });\r\n const activity = useContext(ActivityContext);\r\n\r\n const storeQueries = useMemo(() => getStoreQueriesWithLocalMock(), []);\r\n\r\n useEffect(() => {\r\n if (providerId) {\r\n updateValidation(['store load in progress'], null, false /* shouldDirty */);\r\n storeQueries.getStore(providerId, true /* withCache */).then(\r\n (getStoreResponse) => {\r\n updateValidation([], null, false /* shouldDirty */);\r\n setStoreFetchState({ fetchComplete: true, storeDetails: createStoreDetails(providerId, getStoreResponse) });\r\n },\r\n (getStoreError) => {\r\n if (isStoreNotFoundFetchError(getStoreError)) {\r\n // deleted store and draft (placeholder) store scenarios will both return StoreNotFoundErr - we still return store details\r\n // with the information we have.\r\n if (activity) {\r\n activity.trace(`Store was not found for Store ID: ${providerId}`);\r\n }\r\n\r\n updateValidation([], null, false /* shouldDirty */);\r\n setStoreFetchState({ fetchComplete: true, storeDetails: createStoreDetails(providerId) });\r\n } else {\r\n if (activity) {\r\n activity.error(`Store load failed: ${getStoreError instanceof Error ? getStoreError : JSON.stringify(getStoreError)}`);\r\n }\r\n // TODO: This needs to be imporoved. Currently setting empty validation message to mar invalid but\r\n // to avoid showing message in withError HOC since this wrapper has it's own error message for load failure.\r\n updateValidation([''], null, false /* shouldDirty */);\r\n setStoreFetchState({ fetchComplete: true, getStoreError });\r\n }\r\n }\r\n );\r\n }\r\n }, [activity, providerId, storeQueries, updateValidation]);\r\n\r\n const classes = useDefaultStyles(getStyles);\r\n\r\n const loadingSpinner = useMemo(() => (\r\n
\r\n \r\n
\r\n ), [classes.withStoreLoadingContainer, i18n]);\r\n\r\n const loadingError = useMemo(() => (\r\n
\r\n )}\r\n dismissible={false}\r\n />\r\n
\r\n ), [classes.withStoreErrorContainer, i18n]);\r\n\r\n if (providerId && !storeFetchState.fetchComplete) {\r\n return loadingSpinner;\r\n }\r\n\r\n if (providerId && storeFetchState.fetchComplete && storeFetchState.getStoreError) {\r\n return loadingError;\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n };\r\n\r\n HOC.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n providerId: PropTypes.number,\r\n updateValidation: PropTypes.func,\r\n };\r\n\r\n HOC.defaultProps = {\r\n providerId: undefined,\r\n updateValidation: noop,\r\n };\r\n\r\n HOC.displayName = `withStoreFromProviderId(${getDisplayName(WrappedComponent)})`;\r\n hoistNonReactStatics(HOC, WrappedComponent);\r\n\r\n return HOC;\r\n}\r\n","\r\nexport const getTopLevelDomainFromUrl = (url) => {\r\n const hostNameParts = new URL(url).hostname.split('.');\r\n const partCount = hostNameParts.length;\r\n\r\n if (partCount >= 2) {\r\n const ccTldSpecified = partCount >= 3 && (hostNameParts[partCount - 2].length === 3 || hostNameParts[partCount - 2].length === 2) && hostNameParts[partCount - 1].length === 2;\r\n return ccTldSpecified ?\r\n `${hostNameParts[partCount - 3]}.${hostNameParts[partCount - 2]}.${hostNameParts[partCount - 1]}` :\r\n `${hostNameParts[partCount - 2]}.${hostNameParts[partCount - 1]}`;\r\n }\r\n\r\n return null;\r\n};\r\n\r\nexport const isFinalUrlAlignedWithStoreDomain = (finalUrl, storeDomain) => {\r\n const finalUrlDomain = getTopLevelDomainFromUrl(finalUrl);\r\n return finalUrlDomain && storeDomain && finalUrlDomain.toLowerCase() === storeDomain.toLowerCase();\r\n};\r\n\r\n","import React, { useRef, useMemo, useCallback } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { noop, result } from 'underscore';\r\nimport classNames from 'classnames';\r\nimport hoistNonReactStatics from 'hoist-non-react-statics';\r\nimport { getDisplayName } from '@bingads-webui-react/hoc-utils';\r\nimport { Text } from '@fluentui/react';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { isFinalUrlAlignedWithStoreDomain, getTopLevelDomainFromUrl } from './shared';\r\nimport { getStyles } from './style';\r\n\r\nexport function withStoreUrl(WrappedComponent) {\r\n const HOC = (props) => {\r\n const {\r\n i18n,\r\n validationProps,\r\n updateValidation,\r\n storeDetails,\r\n } = props;\r\n\r\n const classes = useDefaultStyles(getStyles);\r\n const storeDetailsInternal = useRef(null);\r\n\r\n useMemo(() => {\r\n const storeUrl = storeDetails && storeDetails.storeUrl;\r\n if (storeUrl) {\r\n const storeDomain = getTopLevelDomainFromUrl(storeUrl);\r\n storeDetailsInternal.current = { url: storeUrl, domain: storeDomain };\r\n }\r\n }, [storeDetails]);\r\n\r\n const validationOnUrlChange = useCallback((value) => {\r\n const storeDomain = result(storeDetailsInternal.current, 'domain', null);\r\n let finalUrlValidatorError;\r\n if (storeDomain) {\r\n finalUrlValidatorError = isFinalUrlAlignedWithStoreDomain(value, storeDomain) ?\r\n null :\r\n i18n.getString(_TL_('Final URL domain does not match merchant center store URL'));\r\n }\r\n return finalUrlValidatorError;\r\n }, [i18n]);\r\n\r\n const storeUrl = result(storeDetailsInternal.current, 'url', null);\r\n const storeUrlText = useMemo(() => (storeUrl &&\r\n
\r\n { i18n.getString(_TL_('Merchant center store URL: {{storeUrl}}'), { storeUrl }) }\r\n
\r\n ), [i18n, storeUrl]);\r\n\r\n return (\r\n \r\n
\r\n {storeUrlText}\r\n \r\n
\r\n
\r\n );\r\n };\r\n\r\n HOC.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n providerId: PropTypes.number,\r\n updateValidation: PropTypes.func,\r\n storeDetails: PropTypes.shape({\r\n storeUrl: PropTypes.string,\r\n }),\r\n validationProps: PropTypes.shape({\r\n data: PropTypes.shape({\r\n FinalUrls: PropTypes.arrayOf(PropTypes.string),\r\n }),\r\n updateOnMount: PropTypes.bool,\r\n }).isRequired,\r\n };\r\n\r\n HOC.defaultProps = {\r\n providerId: undefined,\r\n updateValidation: noop,\r\n storeDetails: undefined,\r\n };\r\n\r\n HOC.displayName = `withStoreUrl(${getDisplayName(WrappedComponent)})`;\r\n hoistNonReactStatics(HOC, WrappedComponent);\r\n\r\n return HOC;\r\n}\r\n","import { createContext } from 'react';\r\n\r\nexport const STEP_STATE = {\r\n AUTO: 'AUTO',\r\n MANUAL: 'MANUAL',\r\n};\r\n\r\nexport const WizardPerfMarkerContext = createContext({});\r\n","import _ from 'underscore';\r\nimport { useEffect, useRef, useCallback, useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { STEP_STATES, useWizardService } from '@bingads-webui-react/wizard-core';\r\nimport { WizardPerfMarkerContext } from './utils';\r\n\r\nexport const StepPerfMarker = ({ parentPerfMarker, markerName }) => {\r\n const stepPerfMarkerRef = useRef(null);\r\n const { register = _.noop, unregister = _.noop } = useContext(WizardPerfMarkerContext);\r\n\r\n const { state } = useWizardService();\r\n const currentStepFullState = state.toStrings()[1] || '';\r\n const currentStepState = currentStepFullState.split('.')[1];\r\n\r\n useEffect(() => {\r\n if (parentPerfMarker) {\r\n stepPerfMarkerRef.current = parentPerfMarker.createChild(markerName, { autoEnd: false });\r\n register();\r\n }\r\n\r\n return () => {\r\n stepPerfMarkerRef.current = null;\r\n unregister();\r\n };\r\n }, [markerName, parentPerfMarker, register, unregister]);\r\n\r\n const handleStepStateChange = useCallback(\r\n () => {\r\n if (!stepPerfMarkerRef.current) {\r\n return;\r\n }\r\n\r\n if (currentStepState === STEP_STATES.FETCHING) {\r\n stepPerfMarkerRef.current.willFetchFile();\r\n } else if (currentStepState === STEP_STATES.LOADING) {\r\n stepPerfMarkerRef.current.willInit();\r\n } else if (currentStepState === STEP_STATES.ACTIVE) {\r\n stepPerfMarkerRef.current.willRender();\r\n setTimeout(() => {\r\n stepPerfMarkerRef.current && stepPerfMarkerRef.current.done();\r\n }, 0);\r\n }\r\n },\r\n [currentStepState]\r\n );\r\n\r\n useEffect(\r\n () => {\r\n handleStepStateChange();\r\n },\r\n [handleStepStateChange]\r\n );\r\n\r\n return null;\r\n};\r\n\r\nStepPerfMarker.propTypes = {\r\n markerName: PropTypes.string.isRequired,\r\n parentPerfMarker: PropTypes.shape({\r\n createChild: PropTypes.func.isRequired,\r\n }).isRequired,\r\n};\r\n","\r\nimport PropTypes from 'prop-types';\r\nimport React, { useContext, useCallback, useRef } from 'react';\r\nimport { getCurrentStepId, useWizardService } from '@bingads-webui-react/wizard-core';\r\nimport { StepPerfMarker } from './step-perf-marker';\r\nimport { STEP_STATE, WizardPerfMarkerContext } from './utils';\r\n\r\nexport const WizardPerfMarker = ({ wizardName, wizardMarker, children }) => {\r\n const { state } = useWizardService();\r\n const wizardPerfMarkerContext = useContext(WizardPerfMarkerContext);\r\n const currentStepId = getCurrentStepId(state);\r\n const currentStep = `${wizardName}_${currentStepId}`;\r\n const perfMarkerRef = useRef(currentStep);\r\n\r\n const checkAndCreateChildMarker = useCallback(() => {\r\n if (!wizardPerfMarkerContext[currentStep] ||\r\n (wizardPerfMarkerContext[currentStep] === STEP_STATE.AUTO && currentStep === perfMarkerRef.current)) {\r\n wizardPerfMarkerContext[currentStep] = STEP_STATE.AUTO;\r\n return ;\r\n }\r\n perfMarkerRef.current = currentStep;\r\n return null;\r\n }, [currentStep, wizardMarker, wizardPerfMarkerContext]);\r\n\r\n const register = useCallback(() => {\r\n if (wizardPerfMarkerContext[currentStep] !== STEP_STATE.AUTO) {\r\n wizardPerfMarkerContext[currentStep] = STEP_STATE.MANUAL;\r\n }\r\n }, [currentStep, wizardPerfMarkerContext]);\r\n\r\n const unregister = useCallback(() => {\r\n delete wizardPerfMarkerContext[currentStep];\r\n }, [currentStep, wizardPerfMarkerContext]);\r\n\r\n return (\r\n \r\n {checkAndCreateChildMarker()}\r\n {children}\r\n \r\n );\r\n};\r\n\r\nWizardPerfMarker.propTypes = {\r\n wizardName: PropTypes.string.isRequired,\r\n wizardMarker: PropTypes.shape({\r\n createChild: PropTypes.func.isRequired,\r\n done: PropTypes.func.isRequired,\r\n }).isRequired,\r\n children: PropTypes.node.isRequired,\r\n};\r\n","import React, { Fragment } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Stack, Text } from '@bingads-webui-react/fabric-control';\r\n\r\nexport const ErrorString = ({\r\n error,\r\n}) => (\r\n \r\n {error}\r\n \r\n);\r\n\r\nErrorString.propTypes = {\r\n error: PropTypes.string,\r\n};\r\nErrorString.defaultProps = {\r\n error: '',\r\n};\r\n\r\nexport const Errors = ({\r\n errors,\r\n}) => (\r\n
\r\n {errors && errors.map(error => ErrorString({ error }))}\r\n
\r\n);\r\n\r\nErrors.propTypes = {\r\n errors: PropTypes.arrayOf(PropTypes.string).isRequired,\r\n};\r\n\r\nexport const SpanWithComponent = ({\r\n SpanText,\r\n Component,\r\n}) => (\r\n \r\n {SpanText}\r\n \r\n \r\n);\r\n\r\nSpanWithComponent.propTypes = {\r\n Component: PropTypes.func.isRequired,\r\n SpanText: PropTypes.oneOfType([PropTypes.func, PropTypes.string]).isRequired,\r\n};\r\n\r\nexport const withVerticalAlignCenterSpan = Component => (\r\n props,\r\n defaultRender\r\n) => (\r\n \r\n \r\n \r\n \r\n \r\n);\r\n\r\nconst nameErrorCode = {\r\n RequiredField: 'RequiredField',\r\n ExceedLength: 'ExceedLength',\r\n};\r\n\r\nexport const getNameErrorMsg = ({ code, i18n, maxLength }) => {\r\n switch (code) {\r\n case nameErrorCode.RequiredField:\r\n return i18n.getString(_TL_('Required field'));\r\n case nameErrorCode.ExceedLength:\r\n return i18n.getString(_TL_('Field should not exceed {{number}} characters'), { number: maxLength });\r\n default:\r\n return null;\r\n }\r\n};\r\n\r\nexport const validateName = ({ name, maxLength }) => {\r\n let error = null;\r\n if (name == null || name === '') {\r\n error = nameErrorCode.RequiredField;\r\n } else if (name && name.length > maxLength) {\r\n error = nameErrorCode.ExceedLength;\r\n }\r\n return error;\r\n};\r\n\r\nexport const checkShouldShowError = attribute => attribute.isInvalid || attribute.isDirty;\r\nexport const checkShouldShowErrors = attribute => (attribute.errors && attribute.errors.length > 0);\r\n","import React, { useContext } from 'react';\r\nimport classnames from 'classnames';\r\nimport PropTypes from 'prop-types';\r\nimport { HelpPopup } from '@bingads-webui-react/help-popup';\r\nimport { TextField } from '@bingads-webui-react/fabric-control';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { withVerticalAlignCenterSpan, ErrorString, getNameErrorMsg, validateName, checkShouldShowError, checkShouldShowErrors, Errors } from '../utils/shared';\r\n\r\nconst maxLength = 128;\r\n\r\nexport const isCampaignNameValid = name => validateName({ name, maxLength }) == null;\r\n\r\nexport const defaultName = undefined;\r\n\r\nexport const CampaignName = React.memo((props) => {\r\n const {\r\n name,\r\n setName,\r\n } = props;\r\n const i18n = useContext(I18nContext);\r\n const campaingNameText = i18n.getString(_TL_('Campaign name'));\r\n const error = name.error ? name.error : getNameErrorMsg({ code: validateName({ name: name.value, maxLength }), i18n, maxLength });\r\n const shouldShowError = checkShouldShowError(name);\r\n return (\r\n
\r\n ())}\r\n onChange={(e, value) => {\r\n setName({\r\n value,\r\n isDirty: true,\r\n isInvalid: isCampaignNameValid(value) !== true,\r\n });\r\n }}\r\n styles={{ fieldGroup: { width: 461, marginTop: '8px' } }}\r\n />\r\n {shouldShowError && error && }\r\n {checkShouldShowErrors(name) && x.message)} />}\r\n
\r\n );\r\n});\r\n\r\nCampaignName.propTypes = {\r\n name: PropTypes.shape({}),\r\n setName: PropTypes.func.isRequired,\r\n};\r\n\r\nCampaignName.defaultProps = {\r\n name: {\r\n value: undefined,\r\n isDirty: false,\r\n isInvalid: false,\r\n },\r\n};\r\n","import { LocalizationKeys } from '../constants/localization-keys';\r\n\r\nexport const locationTargetsOptionKeys = {\r\n everywhere: 'everywhere',\r\n specific: 'specific',\r\n bundleOrDefaultMarket: 'bundle',\r\n};\r\n\r\nexport const getLocationsString = (i18n, settings, isAdGroupLevel = false, bidStrategyType, hideBid = false) => {\r\n if (settings == null) {\r\n return i18n.getString(_TL_('Targeting everywhere.'));\r\n }\r\n\r\n const {\r\n targetOption,\r\n currentLocations = [],\r\n } = settings;\r\n\r\n let isTargetEverywhere = targetOption === locationTargetsOptionKeys.everywhere;\r\n if (isAdGroupLevel) {\r\n isTargetEverywhere = currentLocations.length === 0;\r\n }\r\n\r\n if (isTargetEverywhere) {\r\n return i18n.getString(_TL_('Targeting everywhere.'));\r\n }\r\n\r\n let details = '';\r\n let includedLocations = currentLocations.filter(x => x.SelectionStatus === 'Included');\r\n const excludedLocations = currentLocations.filter(x => x.SelectionStatus === 'Excluded');\r\n if (bidStrategyType === 'Commission') {\r\n includedLocations = [];\r\n }\r\n if (includedLocations.length) {\r\n details += `${i18n.getString(_TL_('Included locations: '))}`;\r\n includedLocations.forEach((target, index) => {\r\n details += target.location;\r\n if (!hideBid) {\r\n details += `: ${i18n.getString(LocalizationKeys[target.bidAdjustmentDropdown])}`;\r\n details += `: ${target.bidAdjustmentInput}%`;\r\n }\r\n if (index < includedLocations.length - 1) {\r\n details += ', ';\r\n }\r\n });\r\n }\r\n if (excludedLocations.length) {\r\n if (includedLocations.length) {\r\n details += ', ';\r\n }\r\n details += `${i18n.getString(_TL_('Excluded locations: '))}`;\r\n excludedLocations.forEach((target, index) => {\r\n details += target.location;\r\n if (index < excludedLocations.length - 1) {\r\n details += ', ';\r\n }\r\n });\r\n }\r\n return details;\r\n};\r\n\r\nexport const getLocationTargetTitleDetails = (i18n, location, isAdGroupLevel, bidStrategyType, hideBid = false) => {\r\n if (!location) return '';\r\n const {\r\n parentLevelSettings,\r\n currentLevelSettings,\r\n useParentLevel,\r\n } = location;\r\n\r\n if (useParentLevel) {\r\n if (isAdGroupLevel) {\r\n return getLocationsString(i18n, parentLevelSettings, isAdGroupLevel, bidStrategyType, hideBid);\r\n }\r\n return i18n.getString(_TL_('Targeting everywhere.'));\r\n }\r\n\r\n return getLocationsString(i18n, currentLevelSettings, isAdGroupLevel, bidStrategyType, hideBid);\r\n};\r\n\r\nexport const mergeLocations = (includedLocations, excludedLocations, targetedLocations) => {\r\n let conflictingCount = 0;\r\n let duplicateCount = 0;\r\n\r\n // Create Sets of existing location IDs for efficient lookup\r\n const includedLocationIds = new Set(includedLocations.map(loc => loc.location.Id));\r\n const excludedLocationIds = new Set(excludedLocations.map(loc => loc.location.Id));\r\n\r\n const newIncludedLocations = [];\r\n const newExcludedLocations = [];\r\n\r\n // Process targeted included locations\r\n targetedLocations.includedLocations.forEach((loc) => {\r\n const locId = loc.location.Id;\r\n if (excludedLocationIds.has(locId)) {\r\n conflictingCount += 1;\r\n } else if (includedLocationIds.has(locId)) {\r\n duplicateCount += 1;\r\n } else {\r\n newIncludedLocations.push(loc);\r\n }\r\n });\r\n\r\n // Process targeted excluded locations\r\n targetedLocations.excludedLocations.forEach((loc) => {\r\n const locId = loc.location.Id;\r\n if (includedLocationIds.has(locId)) {\r\n conflictingCount += 1;\r\n } else if (excludedLocationIds.has(locId)) {\r\n duplicateCount += 1;\r\n } else {\r\n newExcludedLocations.push(loc);\r\n }\r\n });\r\n\r\n return {\r\n includedLocations: [...includedLocations, ...newIncludedLocations],\r\n excludedLocations: [...excludedLocations, ...newExcludedLocations],\r\n conflictingCount,\r\n duplicateCount,\r\n };\r\n};\r\n","import React, { useContext, useCallback, useMemo, useRef, useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport {\r\n LocationTargetsEditor as BingMapsLocationTargetsEditor,\r\n isLegacyLocationAndRadiusEqual,\r\n BingMapsContextProvider,\r\n getIsRadiusTarget as defaultGetIsRadiusTarget,\r\n TARGETING_TYPE,\r\n} from '@bingads-webui-react/bing-maps';\r\nimport { BulkLocationsSearchProvider, BulkLocationsSearchDrawer } from '@bingads-webui-react/bulk-locations-search';\r\nimport { Dismiss24Regular } from '@fluentui/react-icons';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport {\r\n Toaster,\r\n useToastController,\r\n ToastTitle,\r\n Toast,\r\n ToastTrigger,\r\n ToastBody,\r\n} from '@fluentui/react-toast';\r\nimport { Button } from '@fluentui/react-components';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { mergeLocations } from '../utils/location-target-shared';\r\n\r\n\r\n// reference: private/new-expert-signup/packages/expert-location-target/src/with-bing-maps-context-provider.js\r\nconst BING_MAPS_API_KEY = 'AgRuCtepgsuuCYV9J6S6w1j8ay2JJwnu8f5EPgv4kkoJoIuka8yui-NzKrvlESTQ';\r\n\r\nconst toasterId = 'bulkLocationsSearchToasterID';\r\n\r\nexport const SpecificLocationTargetsEditor = (props) => {\r\n const {\r\n data,\r\n setData,\r\n edmCampaign,\r\n allowPositiveLocationTargeting,\r\n allowNegativeLocationTargeting,\r\n showSearchTypeOptions,\r\n strings,\r\n scope,\r\n defaultSelectedSearchType,\r\n isBrandAwarenessCampaignScenario,\r\n showBulkLocations,\r\n } = props;\r\n const i18n = useContext(I18nContext);\r\n const mapRef = useRef();\r\n const mapBulkLocationsRef = useRef();\r\n const [isDrawerOpen, setIsBulkLocationsSearchDrawerOpen] = useState(false);\r\n const { dispatchToast, dismissToast } = useToastController(toasterId);\r\n const serverContext = useContext(ServerContext);\r\n const {\r\n includedLocations,\r\n excludedLocations,\r\n } = data;\r\n\r\n const activity = useContext(ActivityContext);\r\n\r\n // TODO: useMemo\r\n\r\n // reference: private/multi-channel/packages/mca-data/src/use-campaign-api-call/use-campaign-api-call.js\r\n const {\r\n Token,\r\n } = serverContext;\r\n\r\n const makeLocationsCall = useCallback((search) => {\r\n const {\r\n cid,\r\n aid,\r\n } = scope.values;\r\n\r\n return edmCampaign.Customers.$withKey(cid).Accounts.$withKey(aid).Locations.get({\r\n select: ['ParentLocations'],\r\n search,\r\n ...(isBrandAwarenessCampaignScenario ? { IsBrandAwarenessCampaignScenario: true } : {}),\r\n IsBrandAwarenessCampaignScenario: isBrandAwarenessCampaignScenario,\r\n }).toPromise()\r\n .then(response => response)\r\n .catch(error => console.log(error));\r\n }, [scope, edmCampaign, isBrandAwarenessCampaignScenario]);\r\n\r\n // eslint-disable-next-line no-unused-vars, @typescript-eslint/no-unused-vars\r\n const makeBulkLocationsCall = useCallback((searchTerms, countryCode) => {\r\n const {\r\n cid,\r\n aid,\r\n } = scope.values;\r\n\r\n activity.signal('BulkSearchLocations called');\r\n\r\n return edmCampaign.Customers.$withKey(cid).Accounts.$withKey(aid).Locations['Default.BulkSearchLocations']\r\n .$makeCall({\r\n query: {\r\n select: ['Location'],\r\n ...(countryCode ? { filter: { where: `Location/CountryCode eq '${countryCode}'` } } : {}),\r\n ...(isBrandAwarenessCampaignScenario ? { servingChannel: 'Xandr' } : {}),\r\n },\r\n payload: {\r\n searchTerms,\r\n },\r\n }).toPromise()\r\n .then(response => response)\r\n .catch(error => console.log(error));\r\n }, [scope, edmCampaign, isBrandAwarenessCampaignScenario]);\r\n\r\n const renderToaster = useCallback((toastId, intent, toastTitle, toastMessage) =>\r\n dispatchToast(\r\n \r\n \r\n }\r\n onClick={() => dismissToast(toastId)}\r\n />\r\n \r\n }\r\n >\r\n {toastTitle}\r\n \r\n {toastMessage && {toastMessage}}\r\n ,\r\n {\r\n toastId, pauseOnHover: true, timeout: 8000, position: 'bottom-start', intent,\r\n }\r\n ), [dispatchToast, i18n]);\r\n\r\n const handleBulkLocationsSearchDrawerOpen = useCallback(() => {\r\n activity.signal('Add Bulk Locations panel opens');\r\n setIsBulkLocationsSearchDrawerOpen(true);\r\n }, [setIsBulkLocationsSearchDrawerOpen]);\r\n\r\n const searchOptions = useMemo(() => ({\r\n getLocations: makeLocationsCall,\r\n skipBingMapAPISearch: isBrandAwarenessCampaignScenario,\r\n }), [isBrandAwarenessCampaignScenario, makeLocationsCall]);\r\n\r\n const maxItems = 1000;\r\n const getIsRadiusTarget = useCallback((location, targetingType) => {\r\n if (targetingType) {\r\n return defaultGetIsRadiusTarget(location, targetingType) &&\r\n targetingType === TARGETING_TYPE.Included;\r\n }\r\n return defaultGetIsRadiusTarget(location, targetingType);\r\n }, []);\r\n\r\n // eslint-disable-next-line no-unused-vars, @typescript-eslint/no-unused-vars\r\n const setBulkLocationsData = useCallback((targetedLocations) => {\r\n const result = mergeLocations(includedLocations, excludedLocations, targetedLocations);\r\n activity.signal('Add Locations Button clicked')\r\n\r\n if (result.conflictingCount > 0) {\r\n renderToaster('bulkLocationConflict', 'warning', i18n.getString(_TL_('Unable to add locations')), i18n.getString(_TL_('{{count}} location(s) cannot be added due to targeting conflicts.'), { count: result.conflictingCount }));\r\n }\r\n if (result.duplicateCount > 0) {\r\n renderToaster('bulkLocationSuccess', 'success', i18n.getString(_TL_('Duplicate locations removed')), i18n.getString(_TL_('We automatically removed {{count}} duplicate location(s).'), { count: result.duplicateCount }));\r\n }\r\n\r\n setData({\r\n includedLocations: result.includedLocations,\r\n excludedLocations: result.excludedLocations,\r\n });\r\n }, [includedLocations, excludedLocations, setData, renderToaster, i18n]);\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n\r\n \r\n setData({ includedLocations: bingMapLocations })}\r\n onNegativeLocationTargetsChange={bingMapLocations => setData({ excludedLocations: bingMapLocations })}\r\n customizedLocationEqual={isLegacyLocationAndRadiusEqual}\r\n getIsRadiusTarget={getIsRadiusTarget}\r\n />\r\n \r\n
\r\n );\r\n};\r\n\r\nSpecificLocationTargetsEditor.propTypes = {\r\n setData: PropTypes.func.isRequired,\r\n data: PropTypes.shape({}),\r\n scope: PropTypes.shape({\r\n values: PropTypes.shape({\r\n cid: PropTypes.number.isRequired,\r\n aid: PropTypes.number.isRequired,\r\n }).isRequired,\r\n }).isRequired,\r\n edmCampaign: PropTypes.shape({}).isRequired,\r\n allowPositiveLocationTargeting: PropTypes.bool,\r\n allowNegativeLocationTargeting: PropTypes.bool,\r\n showSearchTypeOptions: PropTypes.bool,\r\n showBulkLocations: PropTypes.bool,\r\n strings: PropTypes.shape({}),\r\n defaultSelectedSearchType: PropTypes.string,\r\n isBrandAwarenessCampaignScenario: PropTypes.bool,\r\n};\r\n\r\nSpecificLocationTargetsEditor.defaultProps = {\r\n data: {},\r\n allowPositiveLocationTargeting: true,\r\n allowNegativeLocationTargeting: true,\r\n showSearchTypeOptions: true,\r\n showBulkLocations: false,\r\n strings: {},\r\n defaultSelectedSearchType: undefined,\r\n isBrandAwarenessCampaignScenario: false,\r\n};\r\n","import React from 'react';\r\nimport { Shimmer, ShimmerElementType } from '@fluentui/react';\r\n\r\nconst singleLineShimmer = [\r\n { type: ShimmerElementType.line, width: 200, height: 50 },\r\n];\r\n\r\nexport const SingleLineShimmer = () => (\r\n
\r\n \r\n
\r\n);\r\n","import React from 'react';\r\nimport { Shimmer, ShimmerElementType } from '@fluentui/react';\r\n\r\nexport const radiusShimmerElement = [\r\n { type: ShimmerElementType.line, width: 20, height: 20 },\r\n { type: ShimmerElementType.gap, width: 5 },\r\n { type: ShimmerElementType.line, height: 16, width: 300 },\r\n { type: ShimmerElementType.gap, height: 20, width: '100%' },\r\n];\r\n\r\nexport const SectionShimmer = () => (\r\n
\r\n \r\n \r\n \r\n
\r\n);\r\n","import React from 'react';\r\nimport { Shimmer, ShimmerElementType, mergeStyles } from '@fluentui/react';\r\n\r\nconst wrapperClass = mergeStyles({\r\n padding: 2,\r\n selectors: {\r\n '& > .ms-Shimmer-container': {\r\n margin: '10px 0',\r\n border: 'none',\r\n },\r\n },\r\n});\r\n\r\nconst shimmerWithElementFirstRow = [\r\n { type: ShimmerElementType.line, height: 30 },\r\n { type: ShimmerElementType.gap, width: 10, height: 30 },\r\n { type: ShimmerElementType.line, height: 30 },\r\n { type: ShimmerElementType.gap, width: 10, height: 30 },\r\n { type: ShimmerElementType.line, height: 30 },\r\n { type: ShimmerElementType.gap, width: 10, height: 30 },\r\n { type: ShimmerElementType.line, height: 30 },\r\n { type: ShimmerElementType.gap, width: 10, height: 30 },\r\n { type: ShimmerElementType.line, height: 30 },\r\n { type: ShimmerElementType.gap, width: 10, height: 30 },\r\n];\r\n\r\nconst shimmerWithElementSecondRow = [\r\n { type: ShimmerElementType.circle, height: 24 },\r\n { type: ShimmerElementType.gap, width: '2%', height: 24 },\r\n { type: ShimmerElementType.line, height: 16, width: '20%' },\r\n { type: ShimmerElementType.gap, width: '100%', height: 16 },\r\n];\r\n\r\nexport const AdScheduleShimmer = () => (\r\n
\r\n \r\n \r\n
\r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n);\r\n","import React from 'react';\r\nimport { Shimmer, ShimmerElementType } from '@fluentui/react';\r\n\r\nexport const radiusShimmerElement = [\r\n { type: ShimmerElementType.line, width: 20, height: 20 },\r\n { type: ShimmerElementType.gap, width: 5 },\r\n { type: ShimmerElementType.line, height: 16, width: 300 },\r\n { type: ShimmerElementType.gap, height: 20, width: '100%' },\r\n];\r\n\r\nexport const RadiusShimmer = () => (\r\n \r\n);\r\n","import React from 'react';\r\nimport { Shimmer, ShimmerElementType } from '@fluentui/react';\r\n\r\nconst audienceShimmerElement = [\r\n { type: ShimmerElementType.line, width: 200, height: 100 },\r\n { type: ShimmerElementType.gap, width: '2%', height: 100 },\r\n { type: ShimmerElementType.line, width: 200, height: 100 },\r\n { type: ShimmerElementType.gap, width: '100%', height: 100 },\r\n];\r\n\r\nexport const AudienceSignalShimmer = () => (\r\n
\r\n \r\n
\r\n);\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nexport const withShimmer = (WrappedComponent, Shimmer) => {\r\n const ShimmerWrapper = ({ showShimmer, ...props }) => {\r\n if (showShimmer) {\r\n return ;\r\n }\r\n\r\n return ;\r\n };\r\n\r\n ShimmerWrapper.propTypes = {\r\n showShimmer: PropTypes.bool,\r\n };\r\n\r\n ShimmerWrapper.defaultProps = {\r\n showShimmer: false,\r\n };\r\n\r\n return ShimmerWrapper;\r\n};\r\n\r\n","export const ERROR_ENTITY = {\r\n Campaign: 'campaign',\r\n AdGroup: 'adGroup',\r\n AssetGroup: 'assetGroup',\r\n CampaignLocation: 'campaignLocation',\r\n CampaignRadius: 'campaignRadius',\r\n CampaignNegativeLocation: 'campaignNegativeLocation',\r\n CampaignLocationIntent: 'campaignLocationIntent',\r\n CampaignDayTimeCriterion: 'campaignDayTimeCriterion',\r\n CampaignNegativeWebpage: 'campaignNegativeWebpage',\r\n AudienceGroupAssetGroupAssociation: 'audienceGroupAssetGroupAssociation',\r\n BrandListAssociation: 'brandListAssociation',\r\n};\r\n","export const CnDefaultLocationTargetsViewModel = {\r\n bidMode: false,\r\n currentLevelSettings: {\r\n currentLocations: [{\r\n Criterion: {\r\n BidAdjustment: 0,\r\n LocationCriterion: {\r\n CountryCode: 'CN',\r\n Latitude: 36.5594,\r\n LesLocationType: 'Country',\r\n LocationId: 39,\r\n LocationType: 'Country',\r\n Longitude: 103.753,\r\n Name: 'China',\r\n NameTypeCombo: 'China (country/region)',\r\n Type: 'Location',\r\n },\r\n OriginalBidAdjustment: 0,\r\n OriginalCashbackPercent: undefined,\r\n Type: 'Location',\r\n },\r\n CriterionType: 'Location',\r\n Id: undefined,\r\n SelectionStatus: 'Included',\r\n Status: 'Active',\r\n bidAdjustmentDropdown: 'Increase by',\r\n bidAdjustmentInput: 0,\r\n location: 'China (country/region)',\r\n }],\r\n initLocations: [],\r\n peopleInLocation: true,\r\n peopleSearchingForLocation: true,\r\n targetOption: 'specific',\r\n },\r\n parentLevelSettings: {},\r\n useParentLevel: false,\r\n};\r\n\r\nexport const globalDefaultLocationTargetsViewModel = {\r\n bidMode: false,\r\n currentLevelSettings: {\r\n initLocations: [],\r\n peopleInLocation: true,\r\n peopleSearchingForLocation: true,\r\n targetOption: 'everywhere',\r\n },\r\n parentLevelSettings: {},\r\n useParentLevel: false,\r\n};\r\n\r\nexport const getDefaultLocationTargetsViewModel = isCnMarket => (isCnMarket ? CnDefaultLocationTargetsViewModel : globalDefaultLocationTargetsViewModel);\r\n\r\nexport const getDefaultLanguagesViewModel = isCnMarket => (isCnMarket ? ['SimplifiedChinese'] : ['All']);\r\n","export const campaignLanguageStrings = {\r\n None: _TL_('Use my campaign settings'),\r\n Albanian: _TL_('Albanian'),\r\n Arabic: _TL_('Arabic'),\r\n Bosnian: _TL_('Bosnian'),\r\n Bulgarian: _TL_('Bulgarian'),\r\n Croatian: _TL_('Croatian'),\r\n Czech: _TL_('Czech'),\r\n Danish: _TL_('Danish'),\r\n Dutch: _TL_('Dutch'),\r\n English: _TL_('English'),\r\n Estonian: _TL_('Estonian'),\r\n Finnish: _TL_('Finnish'),\r\n French: _TL_('French'),\r\n German: _TL_('German'),\r\n Greek: _TL_('Greek'),\r\n Hungarian: _TL_('Hungarian'),\r\n Icelandic: _TL_('Icelandic'),\r\n Italian: _TL_('Italian'),\r\n Japanese: _TL_('Japanese'),\r\n Latvian: _TL_('Latvian'),\r\n Lithuanian: _TL_('Lithuanian'),\r\n Macedonian: _TL_('Macedonian'),\r\n Maltese: _TL_('Maltese'),\r\n Norwegian: _TL_('Norwegian'),\r\n Polish: _TL_('Polish'),\r\n Portuguese: _TL_('Portuguese'),\r\n Romanian: _TL_('Romanian'),\r\n Russian: _TL_('Russian'),\r\n Serbian: _TL_('Serbian'),\r\n SimplifiedChinese: _TL_('Simplified Chinese'),\r\n Slovak: _TL_('Slovak'),\r\n Slovenian: _TL_('Slovenian'),\r\n Spanish: _TL_('Spanish'),\r\n Swedish: _TL_('Swedish'),\r\n TraditionalChinese: _TL_('Traditional Chinese'),\r\n Turkish: _TL_('Turkish'),\r\n Hebrew: _TL_('Hebrew'),\r\n Hindi: _TL_('Hindi'),\r\n Malay: _TL_('Malay'),\r\n Thai: _TL_('Thai'),\r\n Indonesian: _TL_('Indonesian'),\r\n Tagalog: _TL_('Tagalog'),\r\n Vietnamese: _TL_('Vietnamese'),\r\n};\r\n","import React, { useContext } from 'react';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { RemainingCharsValidatedTextField } from '@bingads-webui-campaign-react/remaining-chars-hint';\r\nimport { Campaign } from '@bingads-webui/campaign-odata-schemas';\r\nimport {\r\n entityIs,\r\n andComp,\r\n propertyIs,\r\n} from '@bingads-webui-campaign-react/form-error';\r\n\r\nimport { ERROR_ENTITY } from '../constants';\r\n\r\nconst entityIsCampaign = entityIs(ERROR_ENTITY.Campaign);\r\nconst campaignNameProp = andComp(entityIsCampaign, propertyIs('Name'));\r\n\r\nexport const ValidatedCampaignName = () => {\r\n const i18n = useContext(I18nContext);\r\n\r\n return (\r\n \r\n );\r\n};\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {\r\n TextTitle,\r\n getPanelErrorProps,\r\n ValidatedFixedPanel,\r\n} from '@bingads-webui-campaign/wizard-jumbo-card';\r\n\r\nimport { ValidatedCampaignName } from '../validated-campaign-name';\r\nimport { SingleLineShimmer, withShimmer } from '../shimmers';\r\n\r\nconst ValidatedCampaignNameWithShimmer = withShimmer(ValidatedCampaignName, SingleLineShimmer);\r\n\r\nexport const CampaignNamePanel = ({ key, isLoading, ...rest }) => (\r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n {...rest}\r\n >\r\n \r\n \r\n);\r\n\r\nCampaignNamePanel.propTypes = {\r\n key: PropTypes.string.isRequired,\r\n isLoading: PropTypes.bool,\r\n};\r\n\r\nCampaignNamePanel.defaultProps = {\r\n isLoading: false,\r\n};\r\n","export const PANEL_KEYS = {\r\n CAMPAIGN_NAME: 'campaign',\r\n LANGUAGE_TARGET: 'language-target',\r\n LOCATIONS: 'locations',\r\n AD_SCHEDULE: 'ad-schedule',\r\n BUDGET: 'budget',\r\n START_END_DATES: 'start-end-dates',\r\n SHORT_HEADLINES: 'headlines',\r\n DESCRIPTIONS: 'descriptions',\r\n IMAGES: 'images',\r\n AUDIENCE_SIGNAL: 'audience-signal',\r\n VIDEOS: 'videos',\r\n BID_STRATEGY: 'bid-strategy',\r\n BID_VALUE: 'bid-value',\r\n URL_OPTIONS: 'url-options',\r\n LOGOS: 'logos',\r\n FINAL_URL_EXPANSION: 'final-url-expansion',\r\n AUTO_GEN_ASSETS: 'auto-gen-assets',\r\n PAGE_FEEDS: 'page-feeds',\r\n CAMPAIGN_URL_OPTIONS: 'campaign-url-options',\r\n BRAND_EXCLUSIONS: 'brand-exclusions',\r\n COST_PER_SALE: 'cost_per_sale',\r\n SHOPPING: 'shopping-ads',\r\n CONVERSIONS: 'conversions',\r\n PRONG_IMAGES: 'prong-images',\r\n SPOTLIGHT_IMAGES: 'spotlight-images',\r\n NEW_CUSTOMER_ACQUISITION: 'new-customer-acquisition',\r\n APP: 'app',\r\n DISCLAIMERS: 'disclaimers',\r\n BRAND_SHOWROOM: 'brand-showroom',\r\n};\r\n","import { isEmpty } from 'underscore';\r\nimport { withValidation, withError, AdapterFactory } from '@bingads-webui-react/validation';\r\nimport { LanguageTarget, SingleLanguageTarget } from '@bingads-webui-campaign-react/language-target';\r\n\r\nconst LanguageTargetValidationAdapter = AdapterFactory({\r\n defaultValue: [],\r\n valueToInject: 'selectedLanguages',\r\n functionToInject: 'setSelectedLanguages',\r\n});\r\n\r\nexport const LanguageTargetValidatorFactory = i18n => function LanguageTargetValidator(value, defaultValidator) {\r\n const defaultErrors = defaultValidator(value);\r\n return [\r\n ...isEmpty(defaultErrors) ? [] : defaultErrors,\r\n ...value.length < 1 ? [i18n.getString(_TL_('Select at least one language'))] : [],\r\n ];\r\n};\r\n\r\nexport const SingleLanguageTargetValidator = (value, defaultValidator) => {\r\n if (value === null || value === undefined) {\r\n return [];\r\n }\r\n return defaultValidator(value);\r\n};\r\n\r\nconst SingleLanguageTargetValidationAdapter = AdapterFactory({\r\n defaultValue: 'None',\r\n valueToInject: 'selectedLanguage',\r\n functionToInject: 'setSelectedLanguage',\r\n});\r\n\r\nexport const ValidatedLanguageTarget = withError(withValidation(LanguageTarget, LanguageTargetValidationAdapter));\r\n\r\nexport const ValidatedSingleLanguageTarget = withError(withValidation(SingleLanguageTarget, SingleLanguageTargetValidationAdapter));\r\n","import React, { useContext, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { map } from 'underscore';\r\nimport { withUnvalidatedControlErrors, withControlErrorHandling } from '@bingads-webui-campaign-react/error-handling';\r\nimport {\r\n entityIs,\r\n propertyIs,\r\n andComp,\r\n} from '@bingads-webui-campaign-react/form-error';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport {\r\n TextTitle,\r\n ValidatedPanel,\r\n getPanelErrorProps\r\n} from '@bingads-webui-campaign/wizard-jumbo-card';\r\n\r\nimport { PANEL_KEYS } from './panel-keys';\r\nimport { ERROR_ENTITY, campaignLanguageStrings } from '../../constants';\r\nimport { LanguageImg } from '../../media';\r\nimport { SectionShimmer, withShimmer } from '../shimmers';\r\nimport { ValidatedLanguageTarget, LanguageTargetValidatorFactory } from '../validated-language-target';\r\n\r\nconst entityIsCampaign = entityIs(ERROR_ENTITY.Campaign);\r\nconst campaignLanguagesProp = andComp(entityIsCampaign, propertyIs('Languages'));\r\n\r\nconst ServerValidatedLanguageTargetWithShimmer =\r\n withShimmer(\r\n withControlErrorHandling(withUnvalidatedControlErrors(\r\n ValidatedLanguageTarget,\r\n { filter: campaignLanguagesProp }\r\n )),\r\n SectionShimmer\r\n );\r\n\r\nexport const LanguageTargetPanel = (props) => {\r\n const i18n = useContext(I18nContext);\r\n const serverContext = useContext(ServerContext);\r\n\r\n const {\r\n CurrentLocale: locale,\r\n DynamicPermissions,\r\n Permissions,\r\n } = serverContext;\r\n\r\n const permissions = useMemo(() => ({ dynamic: { ...DynamicPermissions }, ...Permissions }), [DynamicPermissions, Permissions]);\r\n\r\n const {\r\n isLoading,\r\n expand,\r\n data = {},\r\n topicKey,\r\n ...rest\r\n } = props;\r\n\r\n return (\r\n i18n.getString(campaignLanguageStrings[lang] || lang)\r\n ).toString()}\r\n icon={LanguageImg}\r\n />}\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand,\r\n expandKey: PANEL_KEYS.LANGUAGE_TARGET,\r\n }}\r\n {...rest}\r\n >\r\n \r\n \r\n );\r\n};\r\n\r\nLanguageTargetPanel.propTypes = {\r\n isLoading: PropTypes.bool,\r\n expand: PropTypes.func.isRequired,\r\n data: PropTypes.shape({}),\r\n topicKey: PropTypes.string,\r\n};\r\n\r\nLanguageTargetPanel.defaultProps = {\r\n isLoading: false,\r\n data: {},\r\n topicKey: null,\r\n};\r\n","import _ from 'underscore';\r\n\r\nexport const minuteToSaveMap = {\r\n ZERO: 0,\r\n FIFTEEN: 15,\r\n THIRTY: 30,\r\n FORTY_FIVE: 45,\r\n};\r\n\r\nexport const getDay = (day) => {\r\n switch (day) {\r\n case 'Alldays':\r\n return _TL_('All days');\r\n case 'Monday':\r\n return _TL_('Monday');\r\n case 'Tuesday':\r\n return _TL_('Tuesday');\r\n case 'Wednesday':\r\n return _TL_('Wednesday');\r\n case 'Thursday':\r\n return _TL_('Thursday');\r\n case 'Friday':\r\n return _TL_('Friday');\r\n case 'Saturday':\r\n return _TL_('Saturday');\r\n case 'Sunday':\r\n return _TL_('Sunday');\r\n case 'MondayToFriday':\r\n return _TL_('Monday - Friday');\r\n default:\r\n return _TL_('All days');\r\n }\r\n};\r\n\r\nexport const getMin = (min) => {\r\n switch (min) {\r\n case 0:\r\n return '00';\r\n case 15:\r\n return '15';\r\n case 30:\r\n return '30';\r\n case 45:\r\n return '45';\r\n default:\r\n return '00';\r\n }\r\n};\r\n\r\nexport const getTime = (hour, is12) => {\r\n switch (hour) {\r\n case 0:\r\n return is12 ? _TL_('12:{{min}} AM') : _TL_('00:{{min}}');\r\n case 1:\r\n return is12 ? _TL_('01:{{min}} AM') : _TL_('01:{{min}}');\r\n case 2:\r\n return is12 ? _TL_('02:{{min}} AM') : _TL_('02:{{min}}');\r\n case 3:\r\n return is12 ? _TL_('03:{{min}} AM') : _TL_('03:{{min}}');\r\n case 4:\r\n return is12 ? _TL_('04:{{min}} AM') : _TL_('04:{{min}}');\r\n case 5:\r\n return is12 ? _TL_('05:{{min}} AM') : _TL_('05:{{min}}');\r\n case 6:\r\n return is12 ? _TL_('06:{{min}} AM') : _TL_('06:{{min}}');\r\n case 7:\r\n return is12 ? _TL_('07:{{min}} AM') : _TL_('07:{{min}}');\r\n case 8:\r\n return is12 ? _TL_('08:{{min}} AM') : _TL_('08:{{min}}');\r\n case 9:\r\n return is12 ? _TL_('09:{{min}} AM') : _TL_('09:{{min}}');\r\n case 10:\r\n return is12 ? _TL_('10:{{min}} AM') : _TL_('10:{{min}}');\r\n case 11:\r\n return is12 ? _TL_('11:{{min}} AM') : _TL_('11:{{min}}');\r\n case 12:\r\n return is12 ? _TL_('12:{{min}} PM') : _TL_('12:{{min}}');\r\n case 13:\r\n return is12 ? _TL_('01:{{min}} PM') : _TL_('13:{{min}}');\r\n case 14:\r\n return is12 ? _TL_('02:{{min}} PM') : _TL_('14:{{min}}');\r\n case 15:\r\n return is12 ? _TL_('03:{{min}} PM') : _TL_('15:{{min}}');\r\n case 16:\r\n return is12 ? _TL_('04:{{min}} PM') : _TL_('16:{{min}}');\r\n case 17:\r\n return is12 ? _TL_('05:{{min}} PM') : _TL_('17:{{min}}');\r\n case 18:\r\n return is12 ? _TL_('06:{{min}} PM') : _TL_('18:{{min}}');\r\n case 19:\r\n return is12 ? _TL_('07:{{min}} PM') : _TL_('19:{{min}}');\r\n case 20:\r\n return is12 ? _TL_('08:{{min}} PM') : _TL_('20:{{min}}');\r\n case 21:\r\n return is12 ? _TL_('09:{{min}} PM') : _TL_('21:{{min}}');\r\n case 22:\r\n return is12 ? _TL_('10:{{min}} PM') : _TL_('22:{{min}}');\r\n case 23:\r\n return is12 ? _TL_('11:{{min}} PM') : _TL_('23:{{min}}');\r\n case 24:\r\n return is12 ? _TL_('12:{{min}} AM') : _TL_('24:{{min}}');\r\n default:\r\n return is12 ? _TL_('00:{{min}} AM') : _TL_('00:{{min}}');\r\n }\r\n};\r\n\r\n\r\nexport const getDayTimeDetails = (i18n, dayTime, is12, hideBidAdjustment = false) => {\r\n const startHour = dayTime().StartHour();\r\n const endHour = dayTime().EndHour();\r\n const startMin = getMin(minuteToSaveMap[dayTime().StartMinute()]);\r\n const endMin = getMin(minuteToSaveMap[dayTime().EndMinute()]);\r\n const dateTimePart = `${i18n.getString(getDay(dayTime().Day()))} ${i18n.getString(_TL_('from {{from}} to {{to}}'), {\r\n from: i18n.getString(getTime(startHour, is12), { min: startMin }),\r\n to: i18n.getString(getTime(endHour, is12), { min: endMin }),\r\n })}`;\r\n\r\n if (hideBidAdjustment) {\r\n return dateTimePart;\r\n }\r\n return `${dateTimePart}: ${(_.isUndefined(dayTime().BidAdjustmentType()) || dayTime().BidAdjustmentType() > 0) ? i18n.getString(_TL_('Increase By')) : i18n.getString(_TL_('Decrease By'))}\r\n ${_.isUndefined(dayTime().BidAdjustmentAmount()) ? 0 : dayTime().BidAdjustmentAmount()}%`;\r\n};\r\n\r\nexport const getAdScheduleDetails = (i18n, adScheduleView, hideBidAdjustment = false) => {\r\n if (adScheduleView) {\r\n const useCampaignSettings = adScheduleView.koModel.useCampaignSettings();\r\n const schedules = useCampaignSettings ? adScheduleView.koModel.campaignDayTimeRanges() : adScheduleView.koModel.dayTimeRanges();\r\n let details = '';\r\n const dateSettings = adScheduleView.getDateSettings();\r\n if (!_.isEmpty(dateSettings) && dateSettings.EndDate !== '1/1/3000') {\r\n details = i18n.getString(_TL_('Scheduled from {{from}} to {{to}}: '), { from: dateSettings.StartDate, to: dateSettings.EndDate });\r\n }\r\n\r\n const hideAdScheduleBidAdjustments = adScheduleView.koModel.hideAdScheduleBidAdjustments();\r\n if (!hideAdScheduleBidAdjustments) {\r\n const is12 = adScheduleView.koModel.timeDisplayType() === '12-hour';\r\n const len = schedules.length;\r\n schedules.forEach((schedule, index) => {\r\n details += getDayTimeDetails(i18n, schedule, is12, hideBidAdjustment);\r\n if (details && index < len - 1) {\r\n details += ', ';\r\n }\r\n });\r\n }\r\n const adScheduleUseSearcherTimeZone = adScheduleView.getAdScheduleUseSearcherTimeZone();\r\n if (adScheduleUseSearcherTimeZone) {\r\n details += ` ${i18n.getString(_TL_('In Ad viewer\\'s time zone'))}`;\r\n } else {\r\n details += ` ${i18n.getString(_TL_('In Your account\\'s time zone'))}`;\r\n }\r\n return details;\r\n }\r\n return '';\r\n};\r\n","import React, { useContext, useState, useCallback } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { withUnvalidatedControlErrors, withControlErrorHandling } from '@bingads-webui-campaign-react/error-handling';\r\nimport { ValidatedLegacyAdSchedule } from '@bingads-webui-campaign/ad-schedule';\r\nimport {\r\n entityIs,\r\n} from '@bingads-webui-campaign-react/form-error';\r\nimport {\r\n TextTitle,\r\n getPanelErrorProps,\r\n ValidatedPanel,\r\n} from '@bingads-webui-campaign/wizard-jumbo-card';\r\n\r\nimport { ERROR_ENTITY } from '../../constants';\r\nimport { getAdScheduleDetails } from '../../utils/ad-schedule-shared';\r\nimport { AdScheduleImg } from '../../media';\r\nimport { AdScheduleShimmer, withShimmer } from '../shimmers';\r\n\r\nconst campaignDayTimeCriterions = entityIs(ERROR_ENTITY.CampaignDayTimeCriterion);\r\n\r\nconst ServerValidatedLegacyAdScheduleWithShimmer =\r\n withShimmer(\r\n withControlErrorHandling(withUnvalidatedControlErrors(\r\n ValidatedLegacyAdSchedule,\r\n { filter: campaignDayTimeCriterions }\r\n )),\r\n AdScheduleShimmer\r\n );\r\n\r\nexport const AdSchedulePanel = (props) => {\r\n const i18n = useContext(I18nContext);\r\n\r\n const [adScheduleView, setAdScheduleView] = useState(null);\r\n const setAdScheduleViewCallback = useCallback((view) => { setAdScheduleView(view); }, []);\r\n\r\n const {\r\n key,\r\n isLoading,\r\n expand,\r\n data = {},\r\n ...rest\r\n } = props;\r\n\r\n const { adSchedules } = data;\r\n\r\n return (\r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand,\r\n expandKey: key,\r\n }}\r\n {...rest}\r\n >\r\n \r\n \r\n );\r\n};\r\n\r\nAdSchedulePanel.propTypes = {\r\n key: PropTypes.string.isRequired,\r\n isLoading: PropTypes.bool,\r\n expand: PropTypes.func.isRequired,\r\n data: PropTypes.shape({}),\r\n};\r\n\r\nAdSchedulePanel.defaultProps = {\r\n isLoading: false,\r\n data: {},\r\n};\r\n","import React, { useContext, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { withUnvalidatedControlErrors, withControlErrorHandling } from '@bingads-webui-campaign-react/error-handling';\r\nimport {\r\n entityIs,\r\n propertyIs,\r\n andComp,\r\n} from '@bingads-webui-campaign-react/form-error';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport {\r\n TextTitle,\r\n ValidatedPanel,\r\n getPanelErrorProps\r\n} from '@bingads-webui-campaign/wizard-jumbo-card';\r\n\r\nimport { ERROR_ENTITY, campaignLanguageStrings } from '../../constants';\r\nimport { LanguageImg } from '../../media';\r\nimport { ValidatedSingleLanguageTarget, SingleLanguageTargetValidator } from '../validated-language-target';\r\n\r\nconst entityIsAdgroup = entityIs(ERROR_ENTITY.AdGroup);\r\nconst adgroupLanguageProp = andComp(entityIsAdgroup, propertyIs('Language'));\r\n\r\nconst ServerValidatedLanguageTarget = withControlErrorHandling(withUnvalidatedControlErrors(ValidatedSingleLanguageTarget, { filter: adgroupLanguageProp }));\r\n\r\nexport const SingleLanguageTargetPanel = (props) => {\r\n const serverContext = useContext(ServerContext);\r\n const i18n = useContext(I18nContext);\r\n\r\n const {\r\n CurrentLocale: locale,\r\n DynamicPermissions,\r\n Permissions,\r\n } = serverContext;\r\n\r\n const permissions = useMemo(() => ({ dynamic: { ...DynamicPermissions }, ...Permissions }), [DynamicPermissions, Permissions]);\r\n\r\n const {\r\n expand,\r\n data = {},\r\n ...rest\r\n } = props;\r\n\r\n return (\r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand,\r\n expandKey: 'language',\r\n }}\r\n {...rest}\r\n >\r\n \r\n \r\n );\r\n};\r\n\r\nSingleLanguageTargetPanel.propTypes = {\r\n expand: PropTypes.func.isRequired,\r\n data: PropTypes.shape({}),\r\n};\r\n\r\nSingleLanguageTargetPanel.defaultProps = {\r\n data: {},\r\n};\r\n","import { useContext, useCallback } from 'react';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\n\r\nexport const useLocalizeBudget = () => {\r\n const i18n = useContext(I18nContext);\r\n const localizeBudget = useCallback((budget, currency) => i18n.formatCurrency(\r\n Number(budget), currency.toUpperCase(),\r\n { withSymbol: false, maximumFractionDigits: 2 }\r\n ), [i18n]);\r\n return {\r\n localizeBudget,\r\n };\r\n};\r\n","import React, { useContext, useMemo, useCallback, useState, useEffect } from 'react';\r\nimport _ from 'underscore';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport { withUnvalidatedControlErrors, withControlErrorHandling } from '@bingads-webui-campaign-react/error-handling';\r\nimport {\r\n entityIs,\r\n propertyIs,\r\n andComp,\r\n} from '@bingads-webui-campaign-react/form-error';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport {\r\n TextTitle,\r\n ValidatedPanel,\r\n getPanelErrorProps\r\n} from '@bingads-webui-campaign/wizard-jumbo-card';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { BudgetComponent } from '@bingads-webui-campaign-react/budget-component';\r\nimport { useResponsiveStyles } from '@bingads-webui-campaign-react/common-hooks';\r\n// eslint-disable-next-line\r\nimport BingAdsWebUIStaticLegacyPageContext from '@bingads-webui-static-legacy/page-context';\r\n// eslint-disable-next-line\r\nimport { BudgetSuggestionDialog, useBudgetSuggestionRepository, MODE } from '@bingads-webui-campaign-react/budget-suggestion-v2';\r\n\r\nimport { ERROR_ENTITY } from '../../constants';\r\nimport { BudgetImg } from '../../media';\r\nimport { useLocalizeBudget } from '../../utils/use-localize-budget';\r\nimport { SectionShimmer, withShimmer } from '../shimmers';\r\n\r\nconst { BudgetRange } = BingAdsWebUIStaticLegacyPageContext;\r\n\r\nconst getStyles = () => ({\r\n budgetTitle: {\r\n fontSize: '18px',\r\n display: 'inline',\r\n },\r\n});\r\n\r\nconst entityIsCampaign = entityIs(ERROR_ENTITY.Campaign);\r\nconst budgetProp = andComp(entityIsCampaign, propertyIs('Budget'));\r\nconst ServerValidatedBudgetComponentWithShimmer =\r\n withShimmer(\r\n withControlErrorHandling(withUnvalidatedControlErrors(\r\n BudgetComponent,\r\n { filter: budgetProp }\r\n )),\r\n SectionShimmer\r\n );\r\n\r\nexport const BudgetPanel = (props) => {\r\n const i18n = useContext(I18nContext);\r\n const serverContext = useContext(ServerContext);\r\n const { CurrentAccount: { CurrencyCode } } = serverContext || {};\r\n const getResponsiveStyles = useResponsiveStyles(getStyles);\r\n const { localizeBudget } = useLocalizeBudget();\r\n\r\n const {\r\n key,\r\n isLoading,\r\n expand,\r\n onDataChange,\r\n data = {},\r\n ...rest\r\n } = props;\r\n\r\n const {\r\n budgetAmount,\r\n currency,\r\n campaignId,\r\n campaignType,\r\n showBudgetSuggestion,\r\n isCampaignSetting,\r\n campaign,\r\n } = data;\r\n\r\n const { DailyRange } = BudgetRange || {};\r\n\r\n const budgetSuggestion = useMemo(() => ({\r\n Currency: currency,\r\n GlobalMaximumBudget: { DailyBudget: DailyRange.CeilingValue ? DailyRange.CeilingValue : 3000000 },\r\n GlobalMinimumBudget: { DailyBudget: DailyRange.FloorValue ? DailyRange.FloorValue : 0.05 },\r\n }), [currency, DailyRange.CeilingValue, DailyRange.FloorValue]);\r\n\r\n\r\n const budgetTitleDetails = useMemo(() => i18n.getString(_TL_('{{budgetAmount}} {{currency}} per day'), { budgetAmount, currency }), [budgetAmount, currency, i18n]);\r\n\r\n const onFieldChange = useCallback((updatedData) => {\r\n onDataChange({\r\n data: prevData => ({\r\n ...prevData,\r\n ...updatedData,\r\n }),\r\n });\r\n }, [onDataChange]);\r\n\r\n const onBudgetChange = useCallback((newBudget, shouldLocalize = false) => {\r\n if (newBudget) {\r\n const budgetAmountValue = shouldLocalize ? localizeBudget(newBudget, currency) : newBudget;\r\n onFieldChange({ budgetAmount: budgetAmountValue });\r\n }\r\n }, [currency, onFieldChange, localizeBudget]);\r\n\r\n const onBudgetChangeFromBudgetSuggestion = useCallback((newBudget, shouldLocalize = false) => {\r\n if (newBudget && newBudget.Amount) {\r\n const budgetAmountValue = shouldLocalize ? localizeBudget(newBudget.Amount, currency) : newBudget.Amount;\r\n onFieldChange({ budgetAmount: budgetAmountValue });\r\n }\r\n }, [currency, onFieldChange, localizeBudget]);\r\n\r\n const onBudgetValidate = useCallback(({ isValid, messages }) => {\r\n onFieldChange({ isBudgetValid: isValid, budgetErrors: messages });\r\n }, [onFieldChange]);\r\n\r\n const [budgetSuggestionData, setBudgetSuggestionData] = useState(null);\r\n const {\r\n loadBudget,\r\n } = useBudgetSuggestionRepository({\r\n campaignId,\r\n mode: MODE.EDITING,\r\n campaignType,\r\n currency,\r\n });\r\n\r\n const activity = useContext(ActivityContext);\r\n\r\n useEffect(() => {\r\n if (showBudgetSuggestion && isCampaignSetting) {\r\n loadBudget({ campaign: {}, assetGroup: {} }).then((datas) => {\r\n setBudgetSuggestionData(datas);\r\n }).finally(() => {\r\n });\r\n }\r\n }, [isCampaignSetting, loadBudget, showBudgetSuggestion]);\r\n\r\n return (\r\n \r\n }\r\n actuationProps={{\r\n expandKey: key,\r\n expand,\r\n }}\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n {...rest}\r\n >\r\n \r\n\r\n {/* will check Delivery Status in campaign when MT added */}\r\n {/* {showBudgetSuggestion && (data.DeliveryStatus === 'BudgetSuggestions' || 'BudgetSuggestions' in data.DeliveryStatusDetails) && isCampaignSetting && */}\r\n {showBudgetSuggestion &&\r\n isCampaignSetting &&\r\n !_.isEmpty(budgetSuggestionData) &&\r\n \r\n }\r\n \r\n );\r\n};\r\n\r\nBudgetPanel.propTypes = {\r\n key: PropTypes.string.isRequired,\r\n isLoading: PropTypes.bool,\r\n expand: PropTypes.func.isRequired,\r\n data: PropTypes.shape({}),\r\n onDataChange: PropTypes.func.isRequired,\r\n};\r\n\r\nBudgetPanel.defaultProps = {\r\n isLoading: false,\r\n data: {},\r\n};\r\n","import React, { useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport _ from 'underscore';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport {\r\n TextTitle,\r\n ValidatedPanel,\r\n getPanelErrorProps\r\n} from '@bingads-webui-campaign/wizard-jumbo-card';\r\nimport { ValidatedLegacyDateSetting, getDateSettingDetails } from '@bingads-webui-campaign/date-setting';\r\n\r\nimport { PANEL_KEYS } from './panel-keys';\r\nimport { StartEndDateImg } from '../../media';\r\nimport { DateSettingsShimmer, withShimmer } from '../shimmers';\r\n\r\nconst ValidatedLegacyDateSettingWithShimmer = withShimmer(ValidatedLegacyDateSetting, DateSettingsShimmer);\r\n\r\nexport const DateSettingsPanel = (props) => {\r\n const i18n = useContext(I18nContext);\r\n\r\n const {\r\n isLoading,\r\n expand,\r\n timeZone,\r\n data = {},\r\n ...rest\r\n } = props;\r\n\r\n const {\r\n StartDate,\r\n EndDate,\r\n Id,\r\n } = data;\r\n\r\n return (\r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand,\r\n expandKey: PANEL_KEYS.START_END_DATES,\r\n }}\r\n {...rest}\r\n >\r\n \r\n \r\n );\r\n};\r\n\r\nDateSettingsPanel.propTypes = {\r\n isLoading: PropTypes.bool,\r\n // eslint-disable-next-line react/forbid-prop-types\r\n collapseState: PropTypes.arrayOf(PropTypes.any).isRequired,\r\n expand: PropTypes.func.isRequired,\r\n data: PropTypes.shape({}),\r\n timeZone: PropTypes.string,\r\n};\r\n\r\nDateSettingsPanel.defaultProps = {\r\n isLoading: false,\r\n data: {},\r\n timeZone: null,\r\n};\r\n","import React from 'react';\r\nimport { Shimmer, ShimmerElementType } from '@fluentui/react';\r\n\r\nimport { SectionShimmer } from './section-shimmer';\r\nimport { RadiusShimmer } from './radius-shimmer';\r\n\r\nexport const DateSettingsShimmer = () => (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n);\r\n","import React, { useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {\r\n HeadlineAssetCollection,\r\n} from '@bingads-webui-campaign-react/pmax-text-input';\r\nimport {\r\n TextTitle,\r\n ValidatedPanel,\r\n getPanelErrorProps,\r\n} from '@bingads-webui-campaign/wizard-jumbo-card';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { PANEL_KEYS } from './panel-keys';\r\n\r\nexport const ShortHeadlinesPanel = ({\r\n headlinesCardSummaryDetails,\r\n allAssetsExpand,\r\n icon,\r\n featureName,\r\n setAddNewShortHeadlinesCallback,\r\n isOptional,\r\n ...rest\r\n}) => {\r\n const i18n = useContext(I18nContext);\r\n\r\n return (\r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand: allAssetsExpand,\r\n expandKey: PANEL_KEYS.SHORT_HEADLINES,\r\n }}\r\n {...rest}\r\n >\r\n \r\n \r\n );\r\n};\r\n\r\nShortHeadlinesPanel.propTypes = {\r\n headlinesCardSummaryDetails: PropTypes.shape({}).isRequired,\r\n allAssetsExpand: PropTypes.func.isRequired,\r\n icon: PropTypes.node.isRequired,\r\n setAddNewShortHeadlinesCallback: PropTypes.func.isRequired,\r\n featureName: PropTypes.string.isRequired,\r\n isOptional: PropTypes.bool,\r\n};\r\n\r\nShortHeadlinesPanel.defaultProps = {\r\n isOptional: false,\r\n};\r\n","import React, { useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {\r\n DescriptionAssetCollection,\r\n} from '@bingads-webui-campaign-react/pmax-text-input';\r\nimport {\r\n TextTitle,\r\n ValidatedPanel,\r\n getPanelErrorProps,\r\n} from '@bingads-webui-campaign/wizard-jumbo-card';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { PANEL_KEYS } from './panel-keys';\r\n\r\nexport const DescriptionsPanel = ({\r\n descriptionsCardSummaryDetails,\r\n allAssetsExpand,\r\n icon,\r\n setAddNewDescriptionCallback,\r\n featureName,\r\n isOptional,\r\n ...rest\r\n}) => {\r\n const i18n = useContext(I18nContext);\r\n\r\n return (\r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand: allAssetsExpand,\r\n expandKey: PANEL_KEYS.DESCRIPTIONS,\r\n }}\r\n {...rest}\r\n >\r\n \r\n \r\n );\r\n};\r\n\r\nDescriptionsPanel.propTypes = {\r\n descriptionsCardSummaryDetails: PropTypes.shape({}).isRequired,\r\n allAssetsExpand: PropTypes.func.isRequired,\r\n icon: PropTypes.node.isRequired,\r\n setAddNewDescriptionCallback: PropTypes.func.isRequired,\r\n featureName: PropTypes.string.isRequired,\r\n isOptional: PropTypes.bool,\r\n};\r\n\r\nDescriptionsPanel.defaultProps = {\r\n isOptional: false,\r\n};\r\n","import React, { useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {\r\n TextTitle,\r\n ValidatedPanel,\r\n getPanelErrorProps,\r\n} from '@bingads-webui-campaign/wizard-jumbo-card';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport {\r\n ImageListPortalContainerWithControlErrorHandling,\r\n ImageListSummaryCardDetails,\r\n PerfMaxImageSuggestionCarousel,\r\n} from '@bingads-webui-campaign-react/pmax-image-experience';\r\nimport { PermissionsContext } from '@bingads-webui-react/hoc-with-permissions';\r\nimport { PANEL_KEYS } from './panel-keys';\r\n\r\nexport const BaseImagePanel = ({\r\n titleKey,\r\n topicKey,\r\n panelKey,\r\n icon,\r\n iconAltText,\r\n imagesData,\r\n allAssetsExpand,\r\n containerRef,\r\n portalContainerState,\r\n addNewImageCallback,\r\n description,\r\n maxUploadNum,\r\n ...rest\r\n}) => {\r\n const i18n = useContext(I18nContext);\r\n\r\n const permissions = useContext(PermissionsContext);\r\n return (\r\n }\r\n />}\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand: allAssetsExpand,\r\n expandKey: panelKey,\r\n }}\r\n {...rest}\r\n >\r\n {description && i18n.getString(description)}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nBaseImagePanel.propTypes = {\r\n titleKey: PropTypes.string.isRequired,\r\n topicKey: PropTypes.string.isRequired,\r\n panelKey: PropTypes.string.isRequired,\r\n icon: PropTypes.string.isRequired,\r\n iconAltText: PropTypes.string.isRequired,\r\n imagesData: PropTypes.arrayOf(PropTypes.shape({})).isRequired,\r\n allAssetsExpand: PropTypes.func.isRequired,\r\n containerRef: PropTypes.shape({}).isRequired,\r\n portalContainerState: PropTypes.shape({}).isRequired,\r\n addNewImageCallback: PropTypes.func.isRequired,\r\n description: PropTypes.string.isRequired,\r\n maxUploadNum: PropTypes.number.isRequired,\r\n};\r\n\r\nexport const ImagesPanel = ({\r\n images,\r\n allAssetsExpand,\r\n icon,\r\n imageExperienceAddNewImageCallback,\r\n maxUploadNum,\r\n imagesContainerRef,\r\n imageExperiencePortalContainerState,\r\n topicKey,\r\n ...rest\r\n}) => (\r\n \r\n);\r\n\r\nImagesPanel.propTypes = {\r\n images: PropTypes.arrayOf(PropTypes.shape({})).isRequired,\r\n allAssetsExpand: PropTypes.func.isRequired,\r\n icon: PropTypes.string.isRequired,\r\n imageExperienceAddNewImageCallback: PropTypes.func.isRequired,\r\n maxUploadNum: PropTypes.number.isRequired,\r\n imagesContainerRef: PropTypes.shape({}).isRequired,\r\n imageExperiencePortalContainerState: PropTypes.shape({}).isRequired,\r\n topicKey: PropTypes.string,\r\n};\r\n\r\nImagesPanel.defaultProps = {\r\n topicKey: null,\r\n};\r\n\r\nexport const LogosPanel = ({\r\n logos,\r\n allAssetsExpand,\r\n icon,\r\n logoExperienceAddNewImageCallback,\r\n maxUploadNum,\r\n logosContainerRef,\r\n logoExperiencePortalContainerState,\r\n description,\r\n titleKey,\r\n ...rest\r\n}) => (\r\n \r\n);\r\n\r\nLogosPanel.propTypes = {\r\n logos: PropTypes.arrayOf(PropTypes.shape({})).isRequired,\r\n allAssetsExpand: PropTypes.func.isRequired,\r\n icon: PropTypes.string.isRequired,\r\n logoExperienceAddNewImageCallback: PropTypes.func.isRequired,\r\n maxUploadNum: PropTypes.number.isRequired,\r\n logosContainerRef: PropTypes.shape({}).isRequired,\r\n logoExperiencePortalContainerState: PropTypes.shape({}).isRequired,\r\n description: PropTypes.string.isRequired,\r\n titleKey: PropTypes.string,\r\n};\r\n\r\nLogosPanel.defaultProp = {\r\n titleKey: null,\r\n};\r\n\r\n","import _ from 'underscore';\r\nimport React, { useCallback, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { DefaultButton, Link } from '@bingads-webui-react/fluent-controls';\r\nimport { MessageBar, MessageBarBody } from '@fluentui/react-message-bar';\r\n\r\nimport { ReactTemplate } from '@bingads-webui-react/react-template';\r\n\r\nconst DEFAULT_MESSAGE = _TL_('Conversion tracking must be configured for your bid strategy to be effective. Without configured conversion tracking, your bid strategy will automatically switch to maximizing clicks instead of optimizing for conversions, which may not be ideal for your campaign performance.');\r\nconst TRANSITION_MESSAGE = _TL_('Once we track a sufficient amount of conversion data, your Performance Max campaigns will automatically switch to your selected conversion-based bid strategy. You can always change the bid strategy in the campaign\\'s settings. {{link}}Learn more about bid strategy for Performance Max campaigns{{/link}}');\r\n\r\nconst getTemplateToDisplay = (i18n, usesMaxClicks, isCampaignCreation, hasActiveGoal) => {\r\n if (_.isUndefined(hasActiveGoal)) {\r\n return null;\r\n }\r\n\r\n if (isCampaignCreation) {\r\n if (!hasActiveGoal) {\r\n return { message: i18n.getString(DEFAULT_MESSAGE), type: 'warning' };\r\n }\r\n return null;\r\n }\r\n\r\n if (usesMaxClicks) {\r\n if (!hasActiveGoal) {\r\n return { message: i18n.getString(DEFAULT_MESSAGE), type: 'warning' };\r\n }\r\n return { message: i18n.getString(TRANSITION_MESSAGE), type: 'info' };\r\n }\r\n\r\n return null;\r\n};\r\n\r\nconst isPmaxCampaign = (campaign) => {\r\n const campaignType = (campaign && campaign.data) ? _.get(campaign, ['data', 'CampaignType']) : _.get(campaign, ['CampaignType']);\r\n return campaignType === 'PerformanceMax';\r\n};\r\n\r\nconst getUsesMaxClicks = (campaign) => {\r\n const campaignSetting = (campaign && campaign.data) ? _.get(campaign, ['data', 'CampaignSettings']) : _.get(campaign, ['CampaignSettings']);\r\n return _.chain(campaignSetting)\r\n .where({ '@odata.type': '#Model.PerformanceMaxSetting' })\r\n .first()\r\n .get('UseMaxClicks')\r\n .value();\r\n};\r\n\r\nconst getHasActiveGoal = conversionGoalsDetails => _.get(conversionGoalsDetails, 'IsActiveConversionGoalPresent');\r\n\r\n// TODO(orlandom): Remove when the new Big Strategy component is ready\r\nexport const ConversionBasedBiddingBanner = (props) => {\r\n const {\r\n i18n,\r\n scope,\r\n campaign,\r\n conversionGoalsDetails,\r\n isCampaignCreation,\r\n } = props;\r\n\r\n const usesMaxClicks = useMemo(() => getUsesMaxClicks(campaign), [campaign]);\r\n const hasActiveGoal = useMemo(() => getHasActiveGoal(conversionGoalsDetails), [conversionGoalsDetails]);\r\n\r\n const messageSettings = useMemo(\r\n () => getTemplateToDisplay(i18n, usesMaxClicks, isCampaignCreation, hasActiveGoal),\r\n [i18n, usesMaxClicks, isCampaignCreation, hasActiveGoal]\r\n );\r\n\r\n const onSetConversionTracking = useCallback(() => {\r\n scope.save('/campaign/vnext/conversiongoals/create');\r\n }, [scope]);\r\n\r\n if (!messageSettings) {\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n \r\n
\r\n {text},\r\n link: text => (\r\n // eslint-disable-next-line jsx-a11y/anchor-is-valid\r\n {text}\r\n ),\r\n }}\r\n />\r\n
\r\n {(!isCampaignCreation && !hasActiveGoal && !isPmaxCampaign) && (\r\n
\r\n \r\n
\r\n )}\r\n
\r\n \r\n );\r\n};\r\n\r\nConversionBasedBiddingBanner.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n scope: PropTypes.shape({\r\n save: PropTypes.func.isRequired,\r\n }).isRequired,\r\n campaign: PropTypes.shape({}).isRequired,\r\n conversionGoalsDetails: PropTypes.shape({}).isRequired,\r\n isCampaignCreation: PropTypes.bool.isRequired,\r\n};\r\n","import React, { useContext, useMemo, useCallback } from 'react';\r\nimport _ from 'underscore';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport {\r\n BidStrategyComponent,\r\n BID_STRATEGY_OPTIONS_MAP,\r\n MAX_CONVERSIONS,\r\n MAX_CONVERSIONS_VALUE\r\n} from '@bingads-webui-campaign-react/bid-strategy-component';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { ScopeContext } from '@bingads-webui-react/scope-service';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport {\r\n TextTitle,\r\n ValidatedPanel,\r\n getPanelErrorProps,\r\n} from '@bingads-webui-campaign/wizard-jumbo-card';\r\nimport {\r\n entityIs,\r\n propertyIs,\r\n andComp,\r\n} from '@bingads-webui-campaign-react/form-error';\r\nimport {\r\n withUnvalidatedControlErrors,\r\n withControlErrorHandling,\r\n} from '@bingads-webui-campaign-react/error-handling';\r\nimport { useResponsiveStyles } from '@bingads-webui-campaign-react/common-hooks';\r\nimport { TargetCpaWarningBanner } from '@bingads-webui-campaign-react/target-cpa-warning-banner';\r\n\r\nimport { ConversionBasedBiddingBanner } from '../conversion-based-bidding-banner';\r\nimport { BidStrategyImg } from '../../media';\r\nimport { ERROR_ENTITY } from '../../constants';\r\n\r\nconst getBidStrategyStyles = () => ({\r\n budgetTitle: {\r\n fontSize: '18px',\r\n display: 'inline',\r\n },\r\n bottomMargin: {\r\n marginBottom: '8px',\r\n },\r\n});\r\n\r\nconst entityIsCampaign = entityIs(ERROR_ENTITY.Campaign);\r\nconst bidStrategyProp = andComp(entityIsCampaign, propertyIs('BiddingScheme'));\r\nconst ServerValidatedBidStrategyComponent = withControlErrorHandling(withUnvalidatedControlErrors(BidStrategyComponent, { filter: bidStrategyProp }));\r\n\r\nexport const BidStrategyPanel = (props) => {\r\n const i18n = useContext(I18nContext);\r\n const { scope } = useContext(ScopeContext) || {};\r\n const serverContext = useContext(ServerContext);\r\n const { CurrentAccount: { CurrencyCode } } = serverContext || {};\r\n const bidRange = (serverContext && serverContext.KeywordBidRange) || null;\r\n\r\n const getStyles = useResponsiveStyles(getBidStrategyStyles);\r\n\r\n const {\r\n key,\r\n isLoading,\r\n expand,\r\n onDataChange,\r\n options,\r\n data = {},\r\n topicKey,\r\n ...rest\r\n } = props;\r\n\r\n const {\r\n campaign,\r\n conversionGoalDetails,\r\n bidStrategy,\r\n currency,\r\n cpa,\r\n roas,\r\n isInitialAdditionalDetailsChecked,\r\n budgetAmount,\r\n } = data;\r\n\r\n const {\r\n bidStrategyComponentOptions = {},\r\n biddingBannerOptions = {},\r\n scenario = '',\r\n } = options;\r\n\r\n const {\r\n bidStrategyOptions,\r\n hideAdditionalDetails,\r\n ...restBidStrategyComponentOptions\r\n } = bidStrategyComponentOptions;\r\n\r\n const {\r\n ...restBiddingBannerOptions\r\n } = biddingBannerOptions;\r\n\r\n const activity = useContext(ActivityContext);\r\n\r\n const bidStrategyTitleDetails = useMemo(() => {\r\n let targetValue = '';\r\n let bidStrategyText = '';\r\n if (bidStrategy) {\r\n if (bidStrategy === MAX_CONVERSIONS.type && cpa) {\r\n targetValue = `${cpa} ${currency}`;\r\n } else if (bidStrategy === MAX_CONVERSIONS_VALUE.type && roas) {\r\n targetValue = `${roas} %`;\r\n }\r\n const predefinedBidStrategy = BID_STRATEGY_OPTIONS_MAP[bidStrategy];\r\n bidStrategyText = predefinedBidStrategy ? predefinedBidStrategy.text : bidStrategy;\r\n }\r\n\r\n return (\r\n <>\r\n {i18n.getString(_TL_('{{bidStrategyText}}'), { bidStrategyText }) + (targetValue ? `, ${i18n.getString(_TL_('target {{targetValue}}'), { targetValue })}` : '')}\r\n \r\n \r\n );\r\n }, [bidStrategy, i18n, budgetAmount, cpa, activity, scenario, roas, currency]);\r\n\r\n const addBottomMargin = useMemo(() => hideAdditionalDetails, [hideAdditionalDetails]);\r\n\r\n const onFieldChange = useCallback((updatedData) => {\r\n onDataChange({\r\n data: prevData => ({\r\n ...prevData,\r\n ...updatedData,\r\n }),\r\n });\r\n }, [onDataChange]);\r\n\r\n const onBidStrategyChange = useCallback((e, newBidStrategy) => {\r\n const bidStrategyType = _.get(newBidStrategy, 'type');\r\n onFieldChange({ bidStrategy: bidStrategyType });\r\n }, [onFieldChange]);\r\n\r\n const onMarketingMetricChange = useCallback(({\r\n data: newMarketingMetric,\r\n isValid,\r\n messages,\r\n }) => {\r\n onFieldChange({\r\n ...newMarketingMetric,\r\n isMarketingMetricValid: isValid,\r\n marketingMetricErrors: messages,\r\n });\r\n }, [onFieldChange]);\r\n\r\n return (\r\n \r\n }\r\n actuationProps={{\r\n expandKey: key,\r\n expand,\r\n }}\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n {...rest}\r\n >\r\n \r\n \r\n \r\n {addBottomMargin &&
}\r\n \r\n );\r\n};\r\n\r\nBidStrategyPanel.propTypes = {\r\n key: PropTypes.string.isRequired,\r\n onDataChange: PropTypes.func.isRequired,\r\n data: PropTypes.shape({\r\n bidStrategy: PropTypes.string,\r\n currency: PropTypes.string,\r\n cpa: PropTypes.number,\r\n roas: PropTypes.number,\r\n campaign: PropTypes.shape({}),\r\n conversionGoalDetails: PropTypes.shape({}),\r\n isInitialAdditionalDetailsChecked: PropTypes.bool,\r\n }),\r\n options: PropTypes.shape({\r\n bidStrategyComponentOptions: PropTypes.shape({}),\r\n biddingBannerOptions: PropTypes.shape({}),\r\n scenario: PropTypes.string,\r\n }),\r\n isLoading: PropTypes.bool,\r\n expand: PropTypes.func.isRequired,\r\n topicKey: PropTypes.string,\r\n};\r\n\r\nBidStrategyPanel.defaultProps = {\r\n data: {},\r\n options: {},\r\n isLoading: false,\r\n topicKey: null,\r\n};\r\n","import React, { useContext, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport {\r\n TextTitle,\r\n ValidatedPanel,\r\n getPanelErrorProps,\r\n} from '@bingads-webui-campaign/wizard-jumbo-card';\r\nimport { ValidatedUrlOptionsParameter, ValidatedUrlOptionsParameterWithError } from '@bingads-webui-campaign-react/validated-url-input';\r\nimport { getUrlOptionsDetails } from '@bingads-webui-campaign-react/url-options';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\n\r\nimport { UrlOptionsImg } from '../../media';\r\nimport { SingleLineShimmer, withShimmer } from '../shimmers';\r\n\r\nconst getUrlOptionsStyles = () => ({\r\n urlOptionsContainer: {\r\n maxWidth: 435,\r\n },\r\n});\r\n\r\nconst ValidatedUrlOptionsParameterWithShimmer = withShimmer(ValidatedUrlOptionsParameter, SingleLineShimmer);\r\nconst ValidatedUrlOptionsParameterWithErrorWithShimmer = withShimmer(ValidatedUrlOptionsParameterWithError, SingleLineShimmer);\r\n\r\nexport const UrlOptionsPanel = (props) => {\r\n const i18n = useContext(I18nContext);\r\n\r\n const classes = useDefaultStyles(getUrlOptionsStyles);\r\n\r\n const {\r\n key,\r\n isLoading,\r\n expand,\r\n options,\r\n data = {},\r\n isTrackingUrlTemplateRequired,\r\n isWithError,\r\n ...rest\r\n } = props;\r\n\r\n const {\r\n showDescription,\r\n urlParameterOptions,\r\n } = options;\r\n\r\n const {\r\n TrackingUrlTemplate: trackingUrlTemplate,\r\n FinalUrlSuffix: finalUrlSuffix,\r\n UrlCustomParameters: urlCustomParameters,\r\n } = data || {};\r\n\r\n const urlOptions = useMemo(() => ({\r\n TrackingUrlTemplate: trackingUrlTemplate,\r\n FinalUrlSuffix: finalUrlSuffix,\r\n UrlCustomParameters: urlCustomParameters,\r\n }), [trackingUrlTemplate, finalUrlSuffix, urlCustomParameters]);\r\n\r\n const urlOptionsDetails = useMemo(() => getUrlOptionsDetails(i18n, urlOptions), [urlOptions, i18n]);\r\n\r\n return (\r\n \r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand,\r\n expandKey: key,\r\n }}\r\n {...rest}\r\n >\r\n
\r\n {\r\n showDescription &&\r\n \r\n {i18n.getString(_TL_('Set up the tracking and redirect information for your ads.'))}\r\n \r\n }\r\n {\r\n isWithError ?\r\n () :\r\n ()\r\n }\r\n
\r\n \r\n );\r\n};\r\n\r\nUrlOptionsPanel.propTypes = {\r\n key: PropTypes.string.isRequired,\r\n options: PropTypes.shape({\r\n showDescription: PropTypes.bool,\r\n urlParameterOptions: PropTypes.shape({}),\r\n }),\r\n data: PropTypes.shape({\r\n TrackingUrlTemplate: PropTypes.string,\r\n FinalUrlSuffix: PropTypes.string,\r\n UrlCustomParameters: PropTypes.arrayOf(PropTypes.shape({})),\r\n }),\r\n isLoading: PropTypes.bool,\r\n expand: PropTypes.func.isRequired,\r\n isTrackingUrlTemplateRequired: PropTypes.bool,\r\n isWithError: PropTypes.bool,\r\n};\r\n\r\nUrlOptionsPanel.defaultProps = {\r\n data: {},\r\n options: {},\r\n isLoading: false,\r\n isTrackingUrlTemplateRequired: false,\r\n isWithError: false,\r\n};\r\n","import React, { useContext, useCallback } from 'react';\r\nimport _ from 'underscore';\r\nimport PropTypes from 'prop-types';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { CustomValidatedDefaultBid } from '@bingads-webui-campaign-react/default-bid';\r\nimport { Label } from '@fluentui/react';\r\nimport { HelpPopup } from '@bingads-webui-react/help-popup';\r\n\r\nexport const PriceModelToRange = {\r\n ManualCpa: 'KeywordBidRange',\r\n ManualCpc: 'KeywordBidRange',\r\n};\r\n\r\nexport const ValidatedBidValue = ({\r\n validationProps,\r\n onBidChange,\r\n}) => {\r\n const i18n = useContext(I18nContext);\r\n const serverContext = useContext(ServerContext);\r\n\r\n const { data: campaign, bidValueType } = validationProps || {};\r\n\r\n const { BiddingScheme } = campaign;\r\n\r\n const getBidRange = useCallback((type) => {\r\n const bidCeil = _.result(serverContext[PriceModelToRange[type]], 'CeilingValue');\r\n const bidFloor = _.result(serverContext[PriceModelToRange[type]], 'FloorValue');\r\n\r\n return { bidCeil, bidFloor };\r\n }, [serverContext]);\r\n\r\n const SearchBid = useCallback(() => {\r\n const { bidCeil, bidFloor } = getBidRange(BiddingScheme.Type);\r\n\r\n return (\r\n \r\n );\r\n }, [getBidRange, i18n, BiddingScheme, serverContext.CurrentAccount.CurrencyCode, bidValueType, onBidChange]);\r\n\r\n return (\r\n
\r\n \r\n \r\n
\r\n );\r\n};\r\n\r\nValidatedBidValue.propTypes = {\r\n validationProps: PropTypes.shape({\r\n data: PropTypes.shape({\r\n campaign: PropTypes.shape({}).isRequired,\r\n bidValueType: PropTypes.string.isRequired,\r\n }).isRequired,\r\n }).isRequired,\r\n onBidChange: PropTypes.func.isRequired,\r\n};\r\n\r\n","import React, { useContext, useMemo, useCallback } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport { withUnvalidatedControlErrors } from '@bingads-webui-campaign-react/error-handling';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport {\r\n TextTitle,\r\n ValidatedPanel,\r\n getPanelErrorProps,\r\n} from '@bingads-webui-campaign/wizard-jumbo-card';\r\nimport {\r\n entityIs,\r\n propertyIs,\r\n andComp,\r\n} from '@bingads-webui-campaign-react/form-error';\r\nimport { useResponsiveStyles } from '@bingads-webui-campaign-react/common-hooks';\r\nimport { SectionShimmer, withShimmer } from '../shimmers';\r\n\r\nimport { ERROR_ENTITY } from '../../constants';\r\nimport { ValidatedBidValue } from '../sections/bid-value';\r\n\r\nconst getBidStrategyStyles = () => ({\r\n budgetTitle: {\r\n fontSize: '18px',\r\n display: 'inline',\r\n },\r\n bottomMargin: {\r\n marginBottom: '8px',\r\n },\r\n});\r\n\r\nconst entityIsCampaign = entityIs(ERROR_ENTITY.Campaign);\r\nconst bidValueProp = andComp(entityIsCampaign, propertyIs('BiddingScheme'));\r\nconst ServerValidatedBidValueComponentWithShimmer =\r\n withShimmer(\r\n withUnvalidatedControlErrors(\r\n ValidatedBidValue,\r\n { filter: bidValueProp }\r\n ),\r\n SectionShimmer\r\n );\r\n\r\nexport const BidValuePanel = (props) => {\r\n const i18n = useContext(I18nContext);\r\n const getStyles = useResponsiveStyles(getBidStrategyStyles);\r\n\r\n const {\r\n key,\r\n isLoading,\r\n expand,\r\n onDataChange,\r\n data = {},\r\n bidValueType,\r\n ...rest\r\n } = props;\r\n\r\n const {\r\n campaign,\r\n currency,\r\n } = data;\r\n\r\n const bidAmount = useMemo(() => {\r\n if (!isLoading && campaign?.BiddingScheme) {\r\n const { BiddingScheme } = campaign;\r\n return BiddingScheme[bidValueType];\r\n }\r\n return null;\r\n }, [isLoading, campaign, bidValueType]);\r\n\r\n const bidValueDetails = useMemo(() => i18n.getString(_TL_('{{bidAmount}} {{currency}}'), { bidAmount, currency }), [bidAmount, currency, i18n]);\r\n\r\n const onBidValueChange = useCallback((updatedData) => {\r\n onDataChange({\r\n data: prevData => ({\r\n ...prevData,\r\n [bidValueType]: updatedData,\r\n }),\r\n });\r\n }, [onDataChange, bidValueType]);\r\n\r\n return (\r\n \r\n }\r\n actuationProps={{\r\n expandKey: key,\r\n expand,\r\n }}\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n {...rest}\r\n >\r\n \r\n \r\n );\r\n};\r\n\r\nBidValuePanel.propTypes = {\r\n key: PropTypes.string.isRequired,\r\n onDataChange: PropTypes.func.isRequired,\r\n data: PropTypes.shape({\r\n currency: PropTypes.string,\r\n campaign: PropTypes.shape({}),\r\n }),\r\n isLoading: PropTypes.bool,\r\n expand: PropTypes.func.isRequired,\r\n bidValueType: PropTypes.string.isRequired,\r\n};\r\n\r\nBidValuePanel.defaultProps = {\r\n data: {},\r\n isLoading: false,\r\n};\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {\r\n TextTitle,\r\n getPanelErrorProps,\r\n ValidatedFixedPanel,\r\n} from '@bingads-webui-campaign/wizard-jumbo-card';\r\n\r\nimport { AppPanel } from '@bingads-webui-campaign-react/app-store-selector';\r\n\r\nimport { SingleLineShimmer, withShimmer } from '../shimmers';\r\n\r\nexport const AppDetailsPanel = (props) => {\r\n const {\r\n key, isLoading, data = {}, ...rest\r\n } = props;\r\n const { campaign } = data || {};\r\n const selectedApp = campaign && campaign.AppSetting;\r\n\r\n const AppPanelWithShimmer = withShimmer(AppPanel, SingleLineShimmer);\r\n\r\n return (\r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n {...rest}\r\n >\r\n \r\n \r\n );\r\n};\r\n\r\nAppDetailsPanel.propTypes = {\r\n key: PropTypes.string.isRequired,\r\n isLoading: PropTypes.bool,\r\n data: PropTypes.shape({\r\n campaign: PropTypes.shape({\r\n AppSetting: PropTypes.shape({}),\r\n }),\r\n }),\r\n platform: PropTypes.string.isRequired,\r\n};\r\n\r\nAppDetailsPanel.defaultProps = {\r\n isLoading: false,\r\n data: {},\r\n};\r\n","import React, { useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { Stack } from '@bingads-webui-react/fluent-controls';\r\nimport { useResponsiveStyles } from '@bingads-webui-campaign-react/common-hooks';\r\n\r\nimport { SignalsSparkleImg } from '../../media';\r\n\r\nconst getStyles = () => ({\r\n root: {\r\n marginTop: 24,\r\n },\r\n title: {\r\n fontSize: 20,\r\n fontWeight: 600,\r\n lineHeight: '28px',\r\n margin: 0,\r\n },\r\n});\r\n\r\nexport const AudienceSignalSection = ({ children }) => {\r\n const i18n = useContext(I18nContext);\r\n const getResponsiveStyles = useResponsiveStyles(getStyles);\r\n\r\n return (\r\n \r\n

\r\n {i18n.getString(_TL_('Signals (Optional)'))}\r\n

\r\n \r\n \"\"\r\n \r\n {i18n.getString(_TL_('Signals give us valuable information about who you want to reach.'))}\r\n {i18n.getString(_TL_('We\\'ll use them as a starting point to find customers and determine who sees your ads.'))}\r\n \r\n \r\n
\r\n {children}\r\n
\r\n
\r\n );\r\n};\r\n\r\nAudienceSignalSection.propTypes = {\r\n children: PropTypes.node,\r\n};\r\n\r\nAudienceSignalSection.defaultProps = {\r\n children: null,\r\n};\r\n","export function modelToViewModelDayTimeTargets(targets, resetId = false) {\r\n const schedulingRows = [];\r\n\r\n targets.forEach((target) => {\r\n const criterion = target.Criterion;\r\n const multiplier = target.CriterionBid.Multiplier;\r\n\r\n schedulingRows.push({\r\n Id: resetId ? '' : target.Id,\r\n Day: criterion.Day,\r\n StartHour: criterion.FromHour,\r\n StartMinute: criterion.FromMinute,\r\n EndHour: criterion.ToHour,\r\n EndMinute: criterion.ToMinute,\r\n BidAdjustmentType: multiplier < 0 ? -1 : 1,\r\n BidAdjustmentAmount: window.Math.abs(multiplier),\r\n });\r\n });\r\n\r\n return schedulingRows;\r\n}\r\n","import { WaterfallFilterStorage, WaterfallFilterType, waterfallDateFilterProcessor } from '@bingads-webui-campaign/filter-storage';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { PreferenceContext } from '@bingads-webui-react/preference-context';\r\nimport { useContext } from 'react';\r\nimport kendo from '@bingads-webui/kendo/kendo.core';\r\n\r\n// date-filter plugin and related logic is in \"projection-grid-date-filter/src/plugin.js\"\r\n\r\nconst formatDateInEntitySet = date => kendo.toString(date, 'yyyy-MM-dd');\r\nconst parseDate = dateString => kendo.parseDate(dateString);\r\n\r\nfunction useDateRangeDefault() {\r\n const preferenceService = useContext(PreferenceContext);\r\n const serverContext = useContext(ServerContext);\r\n const waterfallFilterStorage = new WaterfallFilterStorage({\r\n preferenceService,\r\n });\r\n const waterFallDateFilters = waterfallFilterStorage.getFilters([WaterfallFilterType.DateFilter]);\r\n const dateFilter = waterfallDateFilterProcessor(waterFallDateFilters, serverContext);\r\n return dateFilter;\r\n}\r\n\r\nexport function useP$DaterangeDefault() {\r\n const dateFilter = useDateRangeDefault();\r\n return Promise.resolve(dateFilter);\r\n}\r\n\r\n// What about comparison date range?\r\n// Listing Gruop page does not have comparison date range\r\nexport function useDateRange() {\r\n const dateRange = useDateRangeDefault();\r\n return {\r\n StartDate: formatDateInEntitySet(dateRange.start) ||\r\n formatDateInEntitySet(parseDate(dateRange.RangeStartDate)),\r\n EndDate: formatDateInEntitySet(dateRange.end) ||\r\n formatDateInEntitySet(parseDate(dateRange.RangeEndDate)),\r\n };\r\n}\r\n","import _ from 'underscore';\r\nimport { Scopes } from '@bingads-webui-campaign-react/goal-selector';\r\n\r\nexport const getConversionGoalTitleDetails = (i18n, conversionGoals = {}) => {\r\n const {\r\n goalScopeSelection,\r\n goalSelection,\r\n } = conversionGoals;\r\n\r\n if (goalScopeSelection === Scopes.CAMPAIGN && _.size(goalSelection) > 0) {\r\n const goalNames = _.pluck(goalSelection, 'Name');\r\n\r\n return goalNames.join(', ');\r\n }\r\n\r\n return i18n.getString(_TL_('Use account settings'));\r\n};\r\n","import _ from 'underscore';\r\n\r\nexport const getFinalUrlExpansionTitleDetails = (i18n, view, isFinalUrlExpansionEnabled) => {\r\n if (!view) return '';\r\n if (!isFinalUrlExpansionEnabled) {\r\n return i18n.getString(_TL_('Use the Final URL only'));\r\n }\r\n const selected = view.selectedTargetsView.viewmodel.values();\r\n const exactUrls = [];\r\n const rules = [];\r\n\r\n _.each(selected, (target) => {\r\n const conditions = target.Criterion.WebPage.Parameter.Conditions;\r\n _.each(conditions, (condition) => {\r\n if (condition.Operator === 'Equals') {\r\n exactUrls.push(condition.ArgumentOperand);\r\n } else {\r\n rules.push(`URL contains ${condition.ArgumentOperand}`);\r\n }\r\n });\r\n });\r\n\r\n const exactUrlsDetails = exactUrls.length > 0 ? `${i18n.getString(_TL_('Excluded URLs: '))}${exactUrls.join(', ')}` : null;\r\n const rulesDetails = rules.length > 0 ? `${i18n.getString(_TL_('Exclusion rules: '))}${rules.join(', ')}`:null;\r\n\r\n if (exactUrlsDetails && rulesDetails) {\r\n return `${exactUrlsDetails}; ${rulesDetails}`;\r\n }\r\n return exactUrlsDetails || rulesDetails || i18n.getString(_TL_('You’ve enabled Final URL expansion'));\r\n};\r\n","import _ from 'underscore';\r\n\r\nexport const getBidStrategyMap = _.memoize(() => ({\r\n MaxClicks: _TL_('Maximize clicks'),\r\n MaxConversions: _TL_('Maximize conversions'),\r\n MaxConversionValue: _TL_('Maximize conversion value'),\r\n MaxImpressions: _TL_('Maximize impressions'),\r\n MaxReach: _TL_('Maximize reach'),\r\n ManualCpa: _TL_('CPI (cost per install)'),\r\n ManualCpm: _TL_('CPM (cost per thousand impressions) for maximizing reach'),\r\n ManualCpv: _TL_('CPCV (cost per completed view)'),\r\n ManualCpc: _TL_('CPC (cost per click)'),\r\n EnhancedCpc: _TL_('Enhanced CPC (enhanced cost per click)'),\r\n CostPerSale: _TL_('Cost per Sale'),\r\n TargetRoas: _TL_('Target ROAS'),\r\n TargetCpa: _TL_('Target CPA'),\r\n TargetImpressionShare: _TL_('Target impression share'),\r\n}));\r\n\r\nexport const getBidTitleDetails = (i18n, bid) => {\r\n if (!bid || !getBidStrategyMap()[bid.Type]) {\r\n return '';\r\n }\r\n\r\n return i18n.getString(getBidStrategyMap()[bid.Type]);\r\n};\r\n\r\nexport const getBidBudgetTitleDetails = (serverContext, i18n, bid, budget) => {\r\n const currencyCode = serverContext.CurrentAccount.CurrencyCode;\r\n const amount = _.isNumber(budget.Amount) ?\r\n i18n.formatCurrency(budget.Amount, currencyCode) :\r\n '-';\r\n const bidType = getBidTitleDetails(i18n, bid);\r\n let bidVal = '';\r\n if (bid.TargetCpa) {\r\n bidVal = i18n.formatCurrency(bid.TargetCpa, currencyCode);\r\n }\r\n if (bid.TargetRoas) {\r\n bidVal = i18n.formatPercent(bid.TargetRoas);\r\n }\r\n return i18n.getString(_TL_('{{amount}} per day; {{bidType}}, default CPA {{bidVal}}'), {\r\n amount, bidType, bidVal,\r\n });\r\n};\r\n\r\nexport const getBudgetTitleDetails = (serverContext, i18n, budget) => {\r\n const currencyCode = serverContext.CurrentAccount.CurrencyCode;\r\n const amount = _.isNumber(budget && budget.Amount) ?\r\n i18n.formatCurrency(budget.Amount, currencyCode) :\r\n '-';\r\n return i18n.getString(_TL_('{{amount}} per day'), {\r\n amount,\r\n });\r\n};\r\n","import { pluck } from 'underscore';\r\n\r\nexport const getListingGroupDetails = (i18n, isEditing, {\r\n productFilter,\r\n listingGroup,\r\n}) => {\r\n if (isEditing && productFilter) {\r\n return `${i18n.getString(_TL_('Products: Filterd by '))}${productFilter}`;\r\n }\r\n if (!isEditing) {\r\n if (!listingGroup) {\r\n return i18n.getString('All products');\r\n }\r\n return `${listingGroup.operand}: ${pluck(listingGroup.items, 'primary').join(',')}`;\r\n }\r\n return '';\r\n};\r\n","export const getStoreTitleDetails = (i18n, storesData, storeContainerData = {}, isAudience = false) => {\r\n const storeId = storeContainerData.ProviderId;\r\n if (!storeId) {\r\n return i18n.getString(_TL_('No store added'));\r\n }\r\n const { countries, stores } = storesData;\r\n const store =\r\n (stores[storeId] && stores[storeId].text) ||\r\n `ID: ${storeId}`; // Display only Store ID while stores are loading. No localization to be consistent with how we display stores.\r\n const salesCountry =\r\n (countries[storeContainerData.SalesCountry] && countries[storeContainerData.SalesCountry].text)\r\n || storeContainerData.SalesCountry;\r\n const localInventoryAdsEnabled = storeContainerData.LocalInventoryAdsEnabled ?\r\n i18n.getString(_TL_('Enabled')) :\r\n i18n.getString(_TL_('Disabled'));\r\n\r\n if (isAudience) {\r\n return i18n.getString(_TL_('Merchant Center store: {{store}}. Country/region of sale: {{salesCountry}}'), {\r\n store, salesCountry,\r\n });\r\n }\r\n return i18n.getString(_TL_('Merchant Center store: {{store}}. Country/region of sale: {{salesCountry}}. Local inventory ads: {{localInventoryAdsEnabled}}'), {\r\n store, salesCountry, localInventoryAdsEnabled,\r\n });\r\n};\r\n","export const getSearchThemeDetails = (i18n, searchThemes) => {\r\n const selected = searchThemes && searchThemes.filter(item => item.Status !== 'Deleted');\r\n if (selected && selected.length > 0) {\r\n return selected.map(item => item.SearchTheme).join(', ');\r\n }\r\n return i18n.getString(_TL_('No search themes added'));\r\n};\r\n","export const getDisclaimerTitleDetails = (i18n, disclaimer) => {\r\n const {\r\n selectedDisclaimer,\r\n } = disclaimer || {};\r\n\r\n if (selectedDisclaimer && selectedDisclaimer.Name) {\r\n return selectedDisclaimer.Name;\r\n }\r\n return i18n.getString(_TL_('No disclaimer selected'));\r\n};\r\n","export const LocalizationKeys = {\r\n ManualCpc: _TL_('Fixed bid per night (per click)'),\r\n PercentCpc: _TL_('Percentage of room price (per click)'),\r\n Commission: _TL_('Percentage of room price (per stay)'),\r\n Individual: _TL_('Individual budget'),\r\n individual: _TL_('Individual budget'),\r\n 'Increase by': _TL_('Increase by'),\r\n 'Decrease by': _TL_('Decrease by'),\r\n UrlCustomParameters: _TL_('Custom parameters'),\r\n TrackingUrlTemplate: _TL_('Tracking template'),\r\n FinalUrlSuffix: _TL_('Final URL suffix'),\r\n ExcludedSites: _TL_('Website'),\r\n ExcludedIPs: _TL_('IP Address'),\r\n Targeted: _TL_('Targeted'),\r\n Computer: _TL_('Computer'),\r\n Desktop: _TL_('Desktop'),\r\n Tablet: _TL_('Tablet'),\r\n Smartphone: _TL_('Smartphone'),\r\n Monday: _TL_('Monday'),\r\n Tuesday: _TL_('Tuesday'),\r\n Wednesday: _TL_('Wednesday'),\r\n Thursday: _TL_('Thursday'),\r\n Friday: _TL_('Friday'),\r\n Saturday: _TL_('Saturday'),\r\n Sunday: _TL_('Sunday'),\r\n 'Selected date': _TL_('Selected date'),\r\n 'Default date': _TL_('Default date'),\r\n};\r\n\r\nexport const ConversionGoalKeyToStringMapping = {\r\n Campaign_Goals_Account_Level_Label: _TL_('Use the account \"Include in conversions\" setting'),\r\n Campaign_Goals_Account_Level_Subtext: _TL_('This option applies the same conversion goals that you have selected at the account level to this campaign.'),\r\n Campaign_Goals_Campaign_Level_Label: _TL_('Choose conversion goals for this campaign'),\r\n Campaign_Goals_Campaign_Level_Subtext: _TL_('This option allows you to select specific conversion goals for this campaign only.'),\r\n GoalSelector_List_Header: _TL_('Available goals: {{itemCount}}'),\r\n GoalSelector_Result_List_Header: _TL_('Selected goal: {{itemCount}}'),\r\n GoalSelector_Radio_Aria_Label: _TL_('Select which conversions are included in the Conversion columns for this campaign and used for optimizing your bid strategy. Updating this setting will override the “Include in conversions” setting made at the account level.'),\r\n GoalSelector_EmptyList_Content: _TL_('No results to display.'),\r\n EntitySelector_Search_Placeholder: _TL_('Search'),\r\n UnifiedEventTracking_Goal_Creation_Type_Event_Category: _TL_('Category'),\r\n GoalSelector_Result_Action_Bar: _TL_('Select all on this page'),\r\n GoalSelector_TrackingStatus_Value_InactiveDueToTagUnavailable: _TL_('This goal is not associated with an active UET tag. Verify the tag setup and associate the goal with a valid UET tag.'),\r\n GoalSelector_TrackingStatus_Value_NoRecentConversion: _TL_(\"This goal doesn't have enough conversions to optimize campaign performance because it hasn't recorded conversions in the past 7 days. Ensure that for an online goal, the UET tag is placed on every webpage.\"),\r\n GoalSelector_TrackingStatus_Value_RecordingConversions: _TL_(\"We've seen your UET tag and have recorded conversions within the last 7 days. If your conversion window is greater than 7 days and you are filtering on the last 7 days, you may see this status even if no conversions are shown in the Conversions column, as conversions are reported at the time of the click.\"),\r\n GoalSelector_TrackingStatus_Value_TagInactive: _TL_('No website activity data has been received from the UET tag associated with this goal in the past 24 hours. Verify the UET tag setup or associate the goal with an active tag.'),\r\n GoalSelector_TrackingStatus_Value_Unverified: _TL_(\"We haven't received any data from the UET tag for this goal. For new goals, allow 24 hours for conversions to start recording. Otherwise, verify the UET tag setup or associate this goal with an active tag.\"),\r\n Segment_Goal_Category_Download: _TL_('Download'),\r\n Segment_Goal_Category_Purchase: _TL_('Purchase'),\r\n Segment_Goal_Category_AddToCart: _TL_('Add to cart'),\r\n Segment_Goal_Category_BeginCheckout: _TL_('Begin checkout'),\r\n Segment_Goal_Category_BookAppointment: _TL_('Book appointment'),\r\n Segment_Goal_Category_Contact: _TL_('Contact'),\r\n Segment_Goal_Category_GetDirections: _TL_('Get directions'),\r\n Segment_Goal_Category_InStoreVisit: _TL_('In-store visit'),\r\n Segment_Goal_Category_Other: _TL_('Other'),\r\n Segment_Goal_Category_OutboundClick: _TL_('Outbound click'),\r\n Segment_Goal_Category_PageView: _TL_('Page view'),\r\n Segment_Goal_Category_RequestQuote: _TL_('Request quote'),\r\n Segment_Goal_Category_SignUp: _TL_('Sign-up'),\r\n Segment_Goal_Category_SubmitLeadForm: _TL_('Submit lead form'),\r\n Segment_Goal_Category_Subscribe: _TL_('Subscribe'),\r\n Segment_Goal_Category_Unassigned: _TL_('Unassigned'),\r\n Campaign_Goals_Option_Goals: _TL_('Goals'),\r\n Campaign_Goals_Option_GoalSets: _TL_('Goal Sets'),\r\n EntitySelector_Pagination_Page: _TL_('Page:'),\r\n EntitySelector_Pagination_TotalPageCountText: _TL_('of'),\r\n EntitySelector_Pagination_PreviousPageText: _TL_('Previous page'),\r\n EntitySelector_Pagination_NextPageText: _TL_('Next page'),\r\n 'Remove all': 'Remove all',\r\n 'No results found for {{searchText}}': _TL_('No results found for {{searchText}}'),\r\n 'Found {{totalCount}} Results for {{searchText}}': _TL_('Found {{totalCount}} Results for {{searchText}}'),\r\n};\r\n","export const getAdsStepStyles = (/* components, theme */) => ({\r\n displayAdPanelRoot: {\r\n marginTop: 20,\r\n width: 500,\r\n minHeight: 181,\r\n padding: 20,\r\n paddingBottom: 20,\r\n paddingTop: 10,\r\n background: '#FFFFFF',\r\n boxShadow: '0px 2px 4px rgba(0, 0, 0, 0.1)',\r\n borderRadius: 6,\r\n '& .image-list-item-status-indicator': {\r\n background: 'linear-gradient(180deg, rgba(0, 0, 0, 0) 0%, #000000 100%)',\r\n borderRadius: 6,\r\n width: '170px !important',\r\n height: '96px !important',\r\n paddingTop: '10px !important',\r\n '&:hover': {\r\n '& .edit-button': {\r\n display: 'none',\r\n },\r\n },\r\n '& .placeholder-content': {\r\n color: 'white !important',\r\n },\r\n },\r\n '& .error': {\r\n width: 400,\r\n marginTop: 20,\r\n float: 'left',\r\n },\r\n '& .image-experience-content': {\r\n width: 170,\r\n '& .col-sm-3': {\r\n background: 'linear-gradient(180deg, rgba(0, 0, 0, 0) 0%, #000000 100%)',\r\n borderRadius: 6,\r\n width: '170px !important',\r\n height: '96px !important',\r\n paddingTop: '10px !important',\r\n display: 'flex',\r\n flexWrap: 'wrap',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n '&:hover': {\r\n '& .edit-button': {\r\n display: 'none',\r\n },\r\n },\r\n '& .placeholder-content': {\r\n color: 'white !important',\r\n },\r\n '& .ms-Button': {\r\n width: 56,\r\n height: 24,\r\n marginTop: 10,\r\n },\r\n },\r\n '& .add-image-button': {\r\n border: '1px solid #8a8886',\r\n background: '#FFFFFF !important',\r\n fontWeight: 600,\r\n borderRadius: 2,\r\n '&:before': {\r\n content: '\"\\\\E710\"',\r\n color: '#0078D4',\r\n marginRight: 8,\r\n fontFamily: 'MsAds MDL2 Assets',\r\n },\r\n },\r\n },\r\n '& .image-section-label': {\r\n display: 'flex',\r\n alignItems: 'center',\r\n },\r\n '& .image-list-label': {\r\n fontWeight: 600,\r\n },\r\n '& .image-list-content': {\r\n width: '170px !important', // fixed for 16:9 aspect ratio\r\n border: 'none !important',\r\n padding: '0px !important',\r\n },\r\n '& .image-list-item-video': {\r\n position: 'relative',\r\n backgroundColor: 'none !important',\r\n width: '170px !important', // fixed for 16:9 aspect ratio\r\n '&:hover': {\r\n '& .edit-button': {\r\n display: 'flex',\r\n },\r\n },\r\n '& .placeholder-content': {\r\n color: 'black !important',\r\n },\r\n\r\n },\r\n '& .image-item-ratio-label': {\r\n paddingTop: 10,\r\n },\r\n '& .thumbnail-preview': {\r\n borderRadius: 6,\r\n filter: 'drop-shadow(0px 0.6px 1.8px rgba(0, 0, 0, 0.1)) drop-shadow(0px 3.2px 7.2px rgba(0, 0, 0, 0.13))',\r\n width: '170px !important',\r\n height: '96px !important',\r\n },\r\n },\r\n addNewImageButton: {\r\n height: 96,\r\n width: 170,\r\n borderRadius: '6px',\r\n border: '1px dashed #c8c6c4',\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n },\r\n selectedPanel: {\r\n border: '1px solid #0078D4',\r\n },\r\n displayAdPanelHeader: {\r\n display: 'flex',\r\n width: '100%',\r\n justifyContent: 'flex-end',\r\n height: 5,\r\n },\r\n displayAdPanelButton: {\r\n justifyContent: 'flex-end',\r\n display: 'none',\r\n cursor: 'pointer',\r\n borderRadius: 99,\r\n background: '#FFFFFF',\r\n width: 32,\r\n height: 32,\r\n },\r\n displayAdPanelButtonContainer: {\r\n position: 'absolute',\r\n left: '50%',\r\n top: '50%',\r\n transform: 'translate(-50%, -50%)',\r\n columnGap: '2px',\r\n display: 'flex',\r\n },\r\n previewContainer: {\r\n height: 280,\r\n width: '100%',\r\n },\r\n emptyPreview: {\r\n width: '100%',\r\n height: '100%',\r\n backgroundColor: '#F3F2F1',\r\n borderRadius: 6,\r\n },\r\n adPreviewRoot: {\r\n maxWidth: '540px',\r\n width: '100%',\r\n padding: 20,\r\n paddingTop: 0,\r\n position: 'sticky',\r\n top: '-10px',\r\n display: 'flex',\r\n flexWrap: 'wrap',\r\n justifyContent: 'center',\r\n marginTop: '-18px',\r\n },\r\n adPreviewSizeHeader: {\r\n height: 40,\r\n },\r\n adPreviewPageTitle: {\r\n fontSize: 14,\r\n fontWeight: 600,\r\n },\r\n adPreviewSizeTitle: {\r\n fontSize: 14,\r\n fontWeight: 700,\r\n paddingRight: 5,\r\n },\r\n adPreviewPanel: {\r\n maxWidth: '540px',\r\n width: '100%',\r\n padding: 20,\r\n position: 'sticky',\r\n top: '0px',\r\n display: 'flex',\r\n flexWrap: 'wrap',\r\n justifyContent: 'center',\r\n marginTop: 16,\r\n background: '#FFFFFF',\r\n boxShadow: '0px 2px 4px rgba(0, 0, 0, 0.1)',\r\n borderRadius: 6,\r\n },\r\n displayAd: {\r\n borderRadius: '6px',\r\n filter: 'drop-shadow(0px 0.6px 1.8px rgba(0, 0, 0, 0.1)) drop-shadow(0px 3.2px 7.2px rgba(0, 0, 0, 0.13))',\r\n },\r\n previewTag: {\r\n marginTop: 20,\r\n },\r\n previewTagText: {\r\n fontSize: 12,\r\n color: '#605E5C',\r\n },\r\n pagination: {\r\n paddingTop: 20,\r\n width: '100%',\r\n },\r\n pageControls: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'space-between',\r\n columnGap: '10px',\r\n },\r\n pageControl: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n },\r\n pageControlPreviousIcon: {\r\n paddingRight: 8,\r\n },\r\n pageControlNextIcon: {\r\n paddingLeft: 8,\r\n },\r\n paginationIndicatorDot: {\r\n height: 8,\r\n width: 8,\r\n borderRadius: '50%',\r\n display: 'inline-block',\r\n cursor: 'pointer',\r\n marginRight: 10,\r\n },\r\n paginationButton: {\r\n height: 8,\r\n width: 8,\r\n opacity: 0,\r\n },\r\n paginationIndicator: {\r\n display: 'flex',\r\n columnGap: '2px',\r\n },\r\n displayAdPanelContent: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n },\r\n placementInfoTile: {\r\n paddingTop: 20,\r\n marginLeft: 10,\r\n },\r\n placementInfos: {\r\n display: 'flex',\r\n flexWrap: 'wrap',\r\n columnGap: 10,\r\n rowGap: '5px',\r\n },\r\n enabledPlacement: {\r\n backgroundColor: '#DFF6DD',\r\n padding: '3px 5px',\r\n borderRadius: 4,\r\n },\r\n enabledText: {\r\n color: '#0C5E0C',\r\n fontWeight: 600,\r\n display: 'flex',\r\n alignItems: 'center',\r\n columnGap: 5,\r\n },\r\n disabledPlacement: {\r\n backgroundColor: '#F3F2F1',\r\n padding: '3px 5px',\r\n borderRadius: 4,\r\n },\r\n disabledText: {\r\n color: '#605E5C',\r\n fontWeight: 600,\r\n display: 'flex',\r\n alignItems: 'center',\r\n columnGap: 5,\r\n },\r\n fontStyle: {\r\n fontSize: 14,\r\n fontWeight: 600,\r\n },\r\n placementLabel: {\r\n paddingTop: 0,\r\n paddingBottom: 0,\r\n },\r\n placmentResolution: {\r\n paddingTop: 5,\r\n paddingBottom: 5,\r\n },\r\n displayAdPanelFinalUrlContainer: {\r\n width: 45,\r\n },\r\n displayImageLabel: {\r\n marginBottom: 4,\r\n },\r\n});\r\n\r\nexport const getCreativeWorkbenchStyles = () => ({\r\n creativeWorkbenchRoot: {\r\n position: 'relative',\r\n display: 'flex',\r\n padding: '24px',\r\n height: 'auto',\r\n flexDirection: 'column',\r\n justifyContent: 'space-between',\r\n borderRadius: '12px',\r\n marginTop: '16px',\r\n border: '1px dashed #B3B0AD',\r\n },\r\n header: {\r\n fontSize: 16,\r\n fontWeight: '600',\r\n lineHeight: '20px',\r\n display: 'flex',\r\n },\r\n copilotIcon: {\r\n paddingTop: '3px !important',\r\n paddingLeft: '0px !important',\r\n paddingRight: '9px !important',\r\n marginBottom: '2px',\r\n height: '21px',\r\n },\r\n description: {\r\n fontSize: 14,\r\n fontWeight: '400',\r\n color: 'rgba(96, 94, 92, 1)',\r\n lineHeight: '20px',\r\n },\r\n});\r\n\r\nexport const getImageSuggestionCarouselStyles = () => ({\r\n imageSuggestionCarouselRoot: {\r\n '& .image-suggestion-carousel-root': {\r\n '& .panel': {\r\n backgroundColor: 'transparent',\r\n },\r\n },\r\n marginTop: 10,\r\n },\r\n croppedImage: {\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n width: '107px',\r\n height: '76px',\r\n background: '#F3F2F1',\r\n },\r\n});\r\n\r\nexport const getDisplayAdStepBaseStyles = () => ({\r\n displayAdsStepRoot: {\r\n '& .display-ad-panel-root': {\r\n width: '100% !important',\r\n },\r\n },\r\n});\r\n","import React from 'react';\r\nimport { CroppedImageView } from '@bingads-webui-campaign-react/cropped-image-view';\r\n\r\nexport const CropPreview = props => (\r\n
\r\n
\r\n
\r\n);\r\n","import { DropdownMenuItemType } from '@bingads-webui-react/fabric-control';\r\n\r\nconst partnerTrafficString = _TL_('Eligible to serve on partner traffic');\r\nconst onoTrafficString = _TL_('Eligible to serve on Microsoft sites');\r\n\r\nconst standard = [{\r\n width: 970,\r\n height: 250,\r\n text: _TL_('970 x 250 — Billboard'),\r\n sizeText: _TL_('970 x 250'),\r\n targetText: _TL_('Billboard'),\r\n}, {\r\n width: 970,\r\n height: 90,\r\n text: _TL_('970 x 90 — Super leaderboard'),\r\n sizeText: _TL_('970 x 90'),\r\n targetText: _TL_('Super leaderboard'),\r\n}, {\r\n width: 728,\r\n height: 90,\r\n text: _TL_('728 x 90 — Leaderboard'),\r\n sizeText: _TL_('728 x 90'),\r\n targetText: _TL_('Leaderboard'),\r\n}, {\r\n width: 468,\r\n height: 60,\r\n text: _TL_('468 x 60 — Full banner'),\r\n sizeText: _TL_('468 x 60'),\r\n targetText: _TL_('Full banner'),\r\n}, {\r\n width: 336,\r\n height: 280,\r\n text: _TL_('336 x 280 — Large rectangle'),\r\n sizeText: _TL_('336 x 280'),\r\n targetText: _TL_('Large rectangle'),\r\n}, {\r\n width: 300,\r\n height: 600,\r\n text: _TL_('300 x 600 — Half-page'),\r\n sizeText: _TL_('300 x 600'),\r\n targetText: _TL_('Half-page'),\r\n}, {\r\n width: 300,\r\n height: 250,\r\n text: _TL_('300 x 250 — Medium rectangle'),\r\n sizeText: _TL_('300 x 250'),\r\n targetText: _TL_('Medium rectangle'),\r\n}, {\r\n width: 250,\r\n height: 250,\r\n text: _TL_('250 x 250 — Square'),\r\n sizeText: _TL_('250 x 250'),\r\n targetText: _TL_('Square'),\r\n}, {\r\n width: 234,\r\n height: 60,\r\n text: _TL_('234 x 60 — Half-banner'),\r\n sizeText: _TL_('234 x 60'),\r\n targetText: _TL_('Half-banner'),\r\n}, {\r\n width: 180,\r\n height: 150,\r\n text: _TL_('180 x 150 — Rectangle'),\r\n sizeText: _TL_('180 x 150'),\r\n targetText: _TL_('Rectangle'),\r\n}, {\r\n width: 160,\r\n height: 600,\r\n text: _TL_('160 x 600 — Wide skyscraper'),\r\n sizeText: _TL_('160 x 600'),\r\n targetText: _TL_('Wide skyscraper'),\r\n}, {\r\n width: 120,\r\n height: 600,\r\n text: _TL_('120 x 600 — Skyscraper'),\r\n sizeText: _TL_('120 x 600'),\r\n targetText: _TL_('Skyscraper'),\r\n}];\r\n\r\nconst mobile = [{\r\n width: 480,\r\n height: 320,\r\n text: _TL_('480 x 320 — Landscape (interstitial)'),\r\n sizeText: _TL_('480 x 320'),\r\n targetText: _TL_('Landscape (interstitial)'),\r\n}, {\r\n width: 320,\r\n height: 480,\r\n text: _TL_('320 x 480 — Portrait (interstitial)'),\r\n sizeText: _TL_('320 x 480'),\r\n targetText: _TL_('Portrait (interstitial)'),\r\n}, {\r\n width: 320,\r\n height: 100,\r\n text: _TL_('320 x 100 — Large banner'),\r\n sizeText: _TL_('320 x 100'),\r\n targetText: _TL_('Large banner'),\r\n}, {\r\n width: 320,\r\n height: 50,\r\n text: _TL_('320 x 50 — Leaderboard'),\r\n sizeText: _TL_('320 x 50'),\r\n targetText: _TL_('Leaderboard'),\r\n}, {\r\n width: 300,\r\n height: 50,\r\n text: _TL_('300 x 50 — Banner'),\r\n sizeText: _TL_('300 x 50'),\r\n targetText: _TL_('Banner'),\r\n}, {\r\n width: 216,\r\n height: 36,\r\n text: _TL_('216 x 36 — Large banner'),\r\n sizeText: _TL_('216 x 36'),\r\n targetText: _TL_('Large banner'),\r\n}, {\r\n width: 168,\r\n height: 28,\r\n text: _TL_('168 x 28 — Medium banner'),\r\n sizeText: _TL_('168 x 28'),\r\n targetText: _TL_('Medium banner'),\r\n}, {\r\n width: 120,\r\n height: 20,\r\n text: _TL_('120 x 20 — Small banner'),\r\n sizeText: _TL_('120 x 20'),\r\n targetText: _TL_('Small banner'),\r\n}];\r\n\r\nconst getSupportedSize = (supportedSize, source) => {\r\n if (!supportedSize || !source) {\r\n return [];\r\n }\r\n\r\n return source.filter(sourceSize => supportedSize.some(baseSize => baseSize.width === sourceSize.width && baseSize.height === sourceSize.height));\r\n};\r\n\r\nconst getStandardOnO = () => {\r\n const supportedSize = [{\r\n width: 300,\r\n height: 250,\r\n }, {\r\n width: 728,\r\n height: 90,\r\n }, {\r\n width: 300,\r\n height: 600,\r\n }, {\r\n width: 160,\r\n height: 600,\r\n }, {\r\n width: 970,\r\n height: 250,\r\n }];\r\n\r\n return getSupportedSize(supportedSize, standard);\r\n};\r\n\r\nconst getStandardOthers = () => {\r\n const supportedSize = [{\r\n width: 336,\r\n height: 280,\r\n }, {\r\n width: 250,\r\n height: 250,\r\n }, {\r\n width: 120,\r\n height: 600,\r\n }, {\r\n width: 970,\r\n height: 90,\r\n }, {\r\n width: 468,\r\n height: 60,\r\n }, {\r\n width: 234,\r\n height: 60,\r\n }, {\r\n width: 180,\r\n height: 150,\r\n }];\r\n\r\n return getSupportedSize(supportedSize, standard);\r\n};\r\n\r\nconst getMobileOnO = () => {\r\n const supportedSize = [{\r\n width: 320,\r\n height: 50,\r\n }];\r\n\r\n return getSupportedSize(supportedSize, mobile);\r\n};\r\n\r\nconst getMobileOthers = () => {\r\n const supportedSize = [{\r\n width: 320,\r\n height: 100,\r\n }, {\r\n width: 320,\r\n height: 480,\r\n }, {\r\n width: 480,\r\n height: 320,\r\n }, {\r\n width: 120,\r\n height: 20,\r\n }, {\r\n width: 300,\r\n height: 50,\r\n }, {\r\n width: 216,\r\n height: 36,\r\n }, {\r\n width: 168,\r\n height: 28,\r\n }];\r\n\r\n return getSupportedSize(supportedSize, mobile);\r\n};\r\n\r\nconst getOptionsTranslated = (\r\n i18n,\r\n sourceWidth,\r\n sourceHeight,\r\n sourceOptions\r\n) => {\r\n const resultOptions = [];\r\n sourceOptions.forEach(({\r\n width,\r\n height,\r\n text,\r\n sizeText,\r\n targetText,\r\n }) => {\r\n if ((!sourceHeight || sourceHeight >= height) && (!sourceWidth || sourceWidth >= width)) {\r\n resultOptions.push({\r\n key: `Image${width}x${height}`,\r\n width,\r\n height,\r\n text: i18n.getString(text),\r\n sizeText: i18n.getString(sizeText),\r\n targetText: i18n.getString(targetText),\r\n });\r\n }\r\n });\r\n\r\n return resultOptions;\r\n};\r\n\r\nexport const getAllStandardOptions = () => getStandardOnO().concat(getStandardOthers());\r\n\r\nexport const getAllMobileOptions = () => getMobileOnO().concat(getMobileOthers());\r\n\r\nexport const getStandardTargetOptions = ({\r\n i18n,\r\n sourceWidth,\r\n sourceHeight,\r\n}) => {\r\n const standardOnO = getStandardOnO();\r\n const standardOnoOptions = getOptionsTranslated(i18n, sourceWidth, sourceHeight, standardOnO);\r\n const standardOthers = getStandardOthers();\r\n const standardOtherOptions = getOptionsTranslated(i18n, sourceWidth, sourceHeight, standardOthers);\r\n\r\n const options = [\r\n ...(standardOnoOptions.length > 0 ? [{\r\n key: 'standardOnoPlacements',\r\n text: i18n.getString(onoTrafficString),\r\n itemType: DropdownMenuItemType.Header,\r\n }]: []),\r\n ...standardOnoOptions,\r\n ...(standardOnoOptions.length > 0 ? [{\r\n key: 'divider',\r\n itemType: DropdownMenuItemType.Divider,\r\n }]: []),\r\n ...(standardOtherOptions.length > 0 ? [{\r\n key: 'standardOtherPlacements',\r\n text: i18n.getString(partnerTrafficString),\r\n itemType: DropdownMenuItemType.Header,\r\n }]:[]),\r\n ...standardOtherOptions,\r\n ];\r\n\r\n return options;\r\n};\r\n\r\nexport const getMobileTargetOptions = ({\r\n i18n,\r\n sourceWidth,\r\n sourceHeight,\r\n}) => {\r\n const mobileOnO = getMobileOnO();\r\n const mobileOnoOptions = getOptionsTranslated(i18n, sourceWidth, sourceHeight, mobileOnO);\r\n const mobileOthers = getMobileOthers();\r\n const mobileOtherOptions = getOptionsTranslated(i18n, sourceWidth, sourceHeight, mobileOthers);\r\n\r\n const options = [\r\n ...(mobileOnoOptions.length > 0 ? [{\r\n key: 'mobileOnoPlacements',\r\n text: i18n.getString(onoTrafficString),\r\n itemType: DropdownMenuItemType.Header,\r\n }]: []),\r\n ...mobileOnoOptions,\r\n ...(mobileOnoOptions.length > 0 ? [{\r\n key: 'divider',\r\n itemType: DropdownMenuItemType.Divider,\r\n }]: []),\r\n ...(mobileOtherOptions.length > 0 ? [{\r\n key: 'mobileOtherPlacements',\r\n text: i18n.getString(partnerTrafficString),\r\n itemType: DropdownMenuItemType.Header,\r\n }]:[]),\r\n ...mobileOtherOptions,\r\n ];\r\n\r\n return options;\r\n};\r\n\r\nexport const getTargetOptions = ({\r\n i18n,\r\n sourceWidth,\r\n sourceHeight,\r\n}) => {\r\n const standardOptions = [];\r\n standard.forEach(({\r\n width,\r\n height,\r\n text,\r\n sizeText,\r\n targetText,\r\n }) => {\r\n if ((!sourceHeight || sourceHeight >= height) && (!sourceWidth || sourceWidth >= width)) {\r\n standardOptions.push({\r\n key: `Image${width}x${height}`,\r\n width,\r\n height,\r\n text: i18n.getString(text),\r\n sizeText: i18n.getString(sizeText),\r\n targetText: i18n.getString(targetText),\r\n });\r\n }\r\n });\r\n\r\n const mobileOptions = [];\r\n mobile.forEach(({\r\n width,\r\n height,\r\n text,\r\n sizeText,\r\n targetText,\r\n }) => {\r\n if ((!sourceHeight || sourceHeight >= height) && (!sourceWidth || sourceWidth >= width)) {\r\n mobileOptions.push({\r\n key: `Image${width}x${height}`,\r\n width,\r\n height,\r\n text: i18n.getString(text),\r\n sizeText: i18n.getString(sizeText),\r\n targetText: i18n.getString(targetText),\r\n });\r\n }\r\n });\r\n\r\n const options = [\r\n ...(standardOptions.length > 0 ? [{\r\n key: 'standard',\r\n text: i18n.getString(_TL_('Standard')),\r\n itemType: DropdownMenuItemType.Header,\r\n }]: []),\r\n ...standardOptions,\r\n ...(standardOptions.length > 0 ? [{\r\n key: 'divider',\r\n itemType: DropdownMenuItemType.Divider,\r\n }]: []),\r\n ...(mobileOptions.length > 0 ? [{\r\n key: 'Mobile',\r\n text: i18n.getString(_TL_('Mobile')),\r\n itemType: DropdownMenuItemType.Header,\r\n }]:[]),\r\n ...mobileOptions,\r\n ];\r\n\r\n return options;\r\n};\r\n","/* eslint-disable jsx-a11y/anchor-is-valid */\r\nimport React, { useEffect, useState, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport _ from 'underscore';\r\nimport { Text, FontIcon } from '@bingads-webui-react/fabric-control';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { Link } from '@bingads-webui-campaign-react/xandr-video-campaign-shared-components';\r\nimport { getAdsStepStyles } from './styles';\r\nimport { CropPreview } from './cropped-preview';\r\nimport { getTargetOptions } from './image-targets';\r\n\r\nconst ITEMS_PER_PAGE = 10;\r\n\r\nexport const AdPreview = (props) => {\r\n const {\r\n i18n,\r\n ads,\r\n onUpdateCurrentImageIndex,\r\n disablePagination,\r\n customStyleFunction,\r\n useCustomStyleFunction,\r\n } = props;\r\n\r\n const displayAds = (ads && ads.data) || [];\r\n const defaultClasses = useDefaultStyles(getAdsStepStyles);\r\n const customClasses = useDefaultStyles(customStyleFunction);\r\n const classes = useCustomStyleFunction ? customClasses : defaultClasses;\r\n const { currentPageIndex } = ads;\r\n const [currentImageIdx, setCurrentImageIdx] = useState(0);\r\n const targetOptions = useMemo(() => getTargetOptions({ i18n }), [i18n]);\r\n\r\n const getPageAdjustedIndex = (idx, pageNumber = null) => {\r\n const page = pageNumber || currentPageIndex;\r\n\r\n const val = (((page - 1) * ITEMS_PER_PAGE) + idx);\r\n\r\n return val;\r\n };\r\n\r\n const goToPrevImage = () => {\r\n setCurrentImageIdx(currentImageIdx - 1);\r\n };\r\n\r\n const goToNextImage = () => {\r\n setCurrentImageIdx(currentImageIdx + 1);\r\n };\r\n\r\n const goToImageIndex = (idx) => {\r\n setCurrentImageIdx(idx);\r\n };\r\n\r\n const displayAdsArray = _.isArray(displayAds) ? displayAds : [];\r\n const displayAdsInPage = displayAdsArray.slice(getPageAdjustedIndex(0), getPageAdjustedIndex(9) + 1);\r\n const currentAd = displayAds[getPageAdjustedIndex(currentImageIdx)] || displayAds[0];\r\n const currentImage = (currentAd && currentAd.data && currentAd.data.image) || undefined;\r\n const resizeImageHeight = useMemo(() => {\r\n if (currentImage && currentImage.cropHeight && currentImage.cropWidth) {\r\n const aspectRatio = currentImage.cropWidth / currentImage.cropHeight;\r\n const maxWidth = 458;\r\n return Math.min(maxWidth / aspectRatio, 280);\r\n }\r\n return 0;\r\n }, [currentImage]);\r\n\r\n const currentImageTarget = useMemo(() => {\r\n if (!currentImage) {\r\n return null;\r\n }\r\n const target = targetOptions.find(option => option.key === `Image${currentImage.targetWidth}x${currentImage.targetHeight}`);\r\n\r\n return target || null;\r\n }, [currentImage, targetOptions]);\r\n\r\n useEffect(() => {\r\n setCurrentImageIdx(0);\r\n }, [currentPageIndex]);\r\n\r\n useEffect(() => {\r\n if (currentImageIdx > displayAdsInPage.length - 1) {\r\n setCurrentImageIdx(0);\r\n }\r\n onUpdateCurrentImageIndex(currentImageIdx);\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [currentImageIdx, displayAdsInPage.length]);\r\n\r\n return (\r\n
\r\n
\r\n {`${i18n.getString(_TL_('Preview'))}: ${i18n.getString(_TL_('Ad'))} ${currentImageIdx + 1}`} \r\n
\r\n
\r\n
\r\n {currentImageTarget &&\r\n
\r\n {currentImageTarget.sizeText}\r\n \r\n {currentImageTarget.targetText}\r\n \r\n
\r\n }\r\n
\r\n
\r\n { currentImage ? (\r\n ) : (\r\n
\r\n )\r\n }\r\n
\r\n {\r\n !disablePagination && displayAdsInPage.length > 1 && (\r\n
\r\n
\r\n \r\n {i18n.getString(_TL_('Previous ad'))} \r\n \r\n
\r\n {displayAdsInPage.map((image, idx) => (\r\n
\r\n goToImageIndex(idx)}\r\n onClick={() => goToImageIndex(idx)}\r\n className={classes.paginationIndicatorDot}\r\n style={{ backgroundColor: getPageAdjustedIndex(idx) === getPageAdjustedIndex(currentImageIdx) ? '#0078d4' : '#c8c6c4' }}\r\n />\r\n
\r\n ))}\r\n
\r\n \r\n {i18n.getString(_TL_('Next ad'))} \r\n \r\n
\r\n
\r\n )\r\n }\r\n
\r\n \r\n {i18n.getString(_TL_('This is an example of what your display ad might look like. Depending on placement, the actual ad shown may appear differently.'))}\r\n \r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\nAdPreview.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n ads: PropTypes.shape({\r\n data: PropTypes.instanceOf(Array),\r\n currentPageIndex: PropTypes.number,\r\n }).isRequired,\r\n disablePagination: PropTypes.bool,\r\n onUpdateCurrentImageIndex: PropTypes.func,\r\n customStyleFunction: PropTypes.func,\r\n useCustomStyleFunction: PropTypes.bool,\r\n};\r\n\r\nAdPreview.defaultProps = {\r\n disablePagination: false,\r\n customStyleFunction: _.noop,\r\n useCustomStyleFunction: false,\r\n onUpdateCurrentImageIndex: _.noop,\r\n};\r\n","/* eslint-disable jsx-a11y/anchor-is-valid */\r\nimport React, { useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { Link, TextField } from '@bingads-webui-campaign-react/xandr-video-campaign-shared-components';\r\nimport { FontIcon, Text } from '@bingads-webui-react/fabric-control';\r\n\r\nexport const Pagination = ({\r\n totalPages,\r\n disablePagination,\r\n classes,\r\n goToPrevPage,\r\n goToNextPage,\r\n goToPage,\r\n currentPageIndex,\r\n}) => {\r\n const i18n = useContext(I18nContext);\r\n\r\n return (\r\n <>\r\n {totalPages > 1 && !disablePagination && (\r\n
\r\n
\r\n \r\n Prev \r\n \r\n goToPage(val)}\r\n />\r\n {i18n.getString(_TL_('of'))} {totalPages} \r\n \r\n {i18n.getString(_TL_('Next'))} \r\n \r\n
\r\n
\r\n )}\r\n \r\n );\r\n};\r\n\r\nPagination.propTypes = {\r\n totalPages: PropTypes.number.isRequired,\r\n disablePagination: PropTypes.bool,\r\n classes: PropTypes.shape({\r\n pagination: PropTypes.shape({}).isRequired,\r\n pageControls: PropTypes.shape({}).isRequired,\r\n }).isRequired,\r\n goToPrevPage: PropTypes.func.isRequired,\r\n goToNextPage: PropTypes.func.isRequired,\r\n goToPage: PropTypes.func.isRequired,\r\n currentPageIndex: PropTypes.number.isRequired,\r\n};\r\n\r\nPagination.defaultProps = {\r\n disablePagination: false,\r\n};\r\n","import _ from 'underscore';\r\nimport { AspectRatiosForDisplayAds } from '@bingads-webui-campaign-react/image-experience-model';\r\n\r\nexport const imageModelToViewModel = (imageModel) => {\r\n const type = /^Image(\\d+)x(\\d+)/.exec(imageModel.type);\r\n const width = parseInt(type[1], 10);\r\n const height = parseInt(type[2], 10);\r\n const image = {\r\n id: imageModel.id,\r\n disableEdit: imageModel.disableEdit,\r\n subType: 'DisplayCreativeImage',\r\n targetWidth: width,\r\n targetHeight: height,\r\n cropX: imageModel.cropSettings.SourceX,\r\n cropY: imageModel.cropSettings.SourceY,\r\n cropWidth: imageModel.cropSettings.SourceWidth,\r\n cropHeight: imageModel.cropSettings.SourceHeight,\r\n src: imageModel.src,\r\n text: imageModel.text,\r\n originalWidth: imageModel.width,\r\n originalHeight: imageModel.height,\r\n };\r\n\r\n return image;\r\n};\r\n\r\nexport const imagePlacementsToImage = ({ crops, defaults, selected }) => {\r\n const filtered = crops.filter(({ type, width, height }) => {\r\n const aspectRatio = AspectRatiosForDisplayAds[type];\r\n const { minSize: [minWidth, minHeight] } = aspectRatio;\r\n return width >= minWidth && height >= minHeight;\r\n });\r\n\r\n let selectedImage = null;\r\n if (selected) {\r\n const selectedIndex = filtered.findIndex(({ type }) => type === `Image${selected.TargetWidth}x${selected.TargetHeight}`);\r\n filtered[selectedIndex].cropSettings = {\r\n ...filtered[selectedIndex].cropSettings,\r\n SourceWidth: selected.CropWidth,\r\n SourceHeight: selected.CropHeight,\r\n SourceX: selected.CropX,\r\n SourceY: selected.CropY,\r\n };\r\n selectedImage = filtered[selectedIndex];\r\n } else {\r\n selectedImage = _.max(filtered, ({ cropSettings: { SourceHeight, SourceWidth }, width, height }) => (SourceHeight * SourceWidth) / width / height);\r\n }\r\n\r\n return {\r\n data: {\r\n ...defaults,\r\n image: imageModelToViewModel(selectedImage),\r\n imagePlacements: filtered,\r\n },\r\n };\r\n};\r\n\r\nexport const isAdsEmpty = ({\r\n displayAds,\r\n}) => {\r\n if (displayAds.length === 1) {\r\n return displayAds[0].data && displayAds[0].data.image === null && displayAds[0].data.FinalUrls.length === 1 && displayAds[0].data.FinalUrls[0] === undefined;\r\n }\r\n\r\n return !(displayAds.length > 1);\r\n};\r\n\r\nexport const addCreativesToDisplayAds = ({\r\n displayAds, creatives,\r\n}) => {\r\n if (isAdsEmpty({ displayAds })) {\r\n // no ad exists, all ads are empty.\r\n return [...creatives];\r\n }\r\n\r\n return [...displayAds, ...creatives];\r\n};\r\n\r\n// recursivley translate all the keys and child keys first character to upper case for now\r\nexport const transformFirstCharacterToUpperCase = (creativeData = {}) => Object.keys(creativeData).reduce((acc, key) => {\r\n if (typeof creativeData[key] === 'object') {\r\n acc[key.charAt(0).toUpperCase() + key.slice(1)] = transformFirstCharacterToUpperCase(creativeData[key]);\r\n } else {\r\n acc[key.charAt(0).toUpperCase() + key.slice(1)] = creativeData[key];\r\n }\r\n return acc;\r\n}, {});\r\n\r\n","import React, { useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { noop } from 'underscore';\r\nimport { constants } from '@bingads-webui-campaign-react/image-experience-model';\r\nimport { AddImageCrudAdComponent } from '@bingads-webui-campaign-react/add-media-panel-crud-ad';\r\nimport { useAssetLibraryImagePicker } from '@bingads-webui-campaign-react/add-image-hooks';\r\n\r\nexport const AddImage = ({\r\n advertiserCustomerId,\r\n accountId,\r\n i18n,\r\n perfMarker,\r\n preferenceService,\r\n permissions,\r\n oDataConfig,\r\n suggestionState,\r\n suggestionPoller,\r\n fullUrl,\r\n urlPrefix,\r\n onUpdateUrlPrefix,\r\n onUpdateUrlValue,\r\n dateFormat,\r\n timeZone,\r\n activityLogger,\r\n maxUploadNum,\r\n displayImagePicker,\r\n setDisplayImagePicker,\r\n selectedMediaPanelSource,\r\n setSelectedMediaPanelSource,\r\n onNewImageSelected,\r\n isAADUser,\r\n creativeEditorProps,\r\n serverContext,\r\n}) => {\r\n const [addImageChildPerfmarker] = useState(() => perfMarker.createChild('imagePicker'));\r\n const emptyFinalUrl = !fullUrl || fullUrl === `${urlPrefix}://`;\r\n\r\n const {\r\n imagePickerError,\r\n setImagePickerError,\r\n clearImagePickerError,\r\n uploadImage,\r\n processUploadedImage,\r\n minSize,\r\n addImageByUrl,\r\n getStockImages,\r\n getInvestImages,\r\n onSelectStockImage,\r\n onImageSelected,\r\n onImagesSelected,\r\n socialMediaDataSource,\r\n customMediaSourceConfig,\r\n } = useAssetLibraryImagePicker({\r\n cid: advertiserCustomerId.toString(),\r\n aid: accountId.toString(),\r\n oDataConfig,\r\n onNewImageSelected,\r\n i18n,\r\n permissions,\r\n isDisplayAds: true,\r\n });\r\n\r\n const { suggestion = {} } = suggestionState;\r\n\r\n return (\r\n {\r\n setDisplayImagePicker(newOpen);\r\n if (!newOpen) {\r\n clearImagePickerError();\r\n }\r\n }}\r\n uploadImage={uploadImage}\r\n processUploadedImage={processUploadedImage}\r\n minSize={minSize}\r\n maxUploadNum={maxUploadNum}\r\n imageExperienceProps={{\r\n suggestion,\r\n suggestionPoller,\r\n finalUrl: emptyFinalUrl ? '' : fullUrl,\r\n finalUrlProtocol: `${urlPrefix}://`,\r\n onUpdateFinalUrl: onUpdateUrlValue,\r\n onUpdateFinalUrlPrefix: onUpdateUrlPrefix,\r\n isMultimediaAd: false,\r\n imageOption: constants.defaultImageOption,\r\n isDisplayAds: true,\r\n }}\r\n addImageByUrl={addImageByUrl}\r\n managedViewSelectionState={selectedMediaPanelSource}\r\n updateManagedViewSelectionState={setSelectedMediaPanelSource}\r\n stockImageConfig={{\r\n getStockImages,\r\n onSelectStockImage,\r\n }}\r\n investImageConfig={{\r\n getInvestImages,\r\n }}\r\n socialImageConfig={{\r\n socialMediaDataSource,\r\n activityLogger,\r\n }}\r\n assetLibraryConfig={{\r\n cid: advertiserCustomerId.toString(),\r\n aid: accountId.toString(),\r\n oDataConfig,\r\n dateFormat,\r\n timeZone,\r\n preferencesService: preferenceService,\r\n activityLogger,\r\n onImageSelected,\r\n onImagesSelected,\r\n onImageAddError: e => setImagePickerError(e),\r\n enableStockMultipleSelection: true,\r\n enableInvestMultipleSelection: true,\r\n enableWebsiteMultipleSelection: true,\r\n }}\r\n i18n={i18n}\r\n cid={advertiserCustomerId.toString()}\r\n aid={accountId.toString()}\r\n errorMessage={imagePickerError}\r\n imageType={null}\r\n customMediaSourceConfig={customMediaSourceConfig}\r\n perfMarker={addImageChildPerfmarker}\r\n permissions={permissions}\r\n isAADUser={isAADUser}\r\n creativeEditorProps={creativeEditorProps}\r\n serverContext={serverContext}\r\n />\r\n );\r\n};\r\n\r\nAddImage.propTypes = {\r\n advertiserCustomerId: PropTypes.number.isRequired,\r\n accountId: PropTypes.number.isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n perfMarker: PropTypes.shape({\r\n willFetchFile: PropTypes.func.isRequired,\r\n willInit: PropTypes.func.isRequired,\r\n willFetchData: PropTypes.func.isRequired,\r\n willRender: PropTypes.func.isRequired,\r\n done: PropTypes.func.isRequired,\r\n createChild: PropTypes.func.isRequired,\r\n }).isRequired,\r\n preferenceService: PropTypes.shape({\r\n setAtUserLevel: PropTypes.func,\r\n findByNameAtUserLevel: PropTypes.func,\r\n }).isRequired,\r\n permissions: PropTypes.shape({\r\n dynamic: PropTypes.shape({\r\n }),\r\n }),\r\n oDataConfig: PropTypes.shape({\r\n odataRootUrl: PropTypes.string,\r\n odataPath: PropTypes.string,\r\n odataToken: PropTypes.string,\r\n }).isRequired,\r\n suggestionState: PropTypes.shape({\r\n suggestion: PropTypes.shape({}),\r\n carousel: PropTypes.shape({}),\r\n }).isRequired,\r\n suggestionPoller: PropTypes.shape({}).isRequired,\r\n adCreatorScenario: PropTypes.shape({\r\n scenarioName: PropTypes.string,\r\n scenarioValue: PropTypes.string,\r\n }),\r\n fullUrl: PropTypes.string,\r\n urlPrefix: PropTypes.string,\r\n onUpdateUrlPrefix: PropTypes.func,\r\n onUpdateUrlValue: PropTypes.func,\r\n dateFormat: PropTypes.string,\r\n timeZone: PropTypes.number,\r\n activityLogger: PropTypes.shape({}),\r\n maxUploadNum: PropTypes.number,\r\n displayImagePicker: PropTypes.bool,\r\n setDisplayImagePicker: PropTypes.func.isRequired,\r\n selectedMediaPanelSource: PropTypes.string.isRequired,\r\n setSelectedMediaPanelSource: PropTypes.func.isRequired,\r\n onNewImageSelected: PropTypes.func.isRequired,\r\n isAADUser: PropTypes.bool,\r\n creativeEditorProps: PropTypes.shape({}),\r\n assetLibraryConfigs: PropTypes.shape({\r\n imagePickerError: PropTypes.string,\r\n setImagePickerError: PropTypes.func,\r\n clearImagePickerError: PropTypes.func,\r\n uploadImage: PropTypes.func,\r\n processUploadedImage: PropTypes.func,\r\n minSize: PropTypes.number,\r\n addImageByUrl: PropTypes.func,\r\n getStockImages: PropTypes.func,\r\n getInvestImages: PropTypes.func,\r\n onSelectStockImage: PropTypes.func,\r\n onImageSelected: PropTypes.func,\r\n onImagesSelected: PropTypes.func,\r\n socialMediaDataSource: PropTypes.shape({}),\r\n customMediaSourceConfig: PropTypes.shape({}),\r\n }).isRequired,\r\n};\r\n\r\nAddImage.defaultProps = {\r\n permissions: {},\r\n adCreatorScenario: undefined,\r\n fullUrl: '',\r\n urlPrefix: '',\r\n onUpdateUrlPrefix: noop,\r\n onUpdateUrlValue: noop,\r\n dateFormat: 'M/d/yyyy',\r\n timeZone: 71,\r\n activityLogger: {},\r\n displayImagePicker: false,\r\n maxUploadNum: 1,\r\n isAADUser: false,\r\n creativeEditorProps: undefined,\r\n};\r\n","import React, { useContext, useState, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { get } from 'underscore';\r\nimport classNames from 'classnames';\r\nimport { DefaultButton } from '@bingads-webui-react/fabric-control';\r\nimport { ActivityContext, ScenarioContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { withInstrumentation } from '@bingads-webui-react/hoc-with-instrumentation';\r\nimport { withPreference } from '@bingads-webui-react/preference-context';\r\nimport {\r\n getUrlPrefixAndDestination,\r\n getUpdatedFullUrlOnPrefixUpdate,\r\n getUpdatedFullUrlOnTextUpdate,\r\n validateAdUrl\r\n} from '@bingads-webui-campaign-react/url-input-fluent';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { useWebsiteSuggestion } from '@bingads-webui-campaign-react/add-image-hooks';\r\n\r\nimport { AddImage } from './add-image';\r\n\r\nconst getStyles = () => ({\r\n buttonContainer: {\r\n display: 'flex',\r\n padding: '32px',\r\n height: '134px',\r\n flexDirection: 'column',\r\n justifyContent: 'space-between',\r\n alignItems: 'center',\r\n borderRadius: '12px',\r\n marginTop: '16px',\r\n border: '1px dashed #B3B0AD',\r\n },\r\n});\r\n\r\nconst PopulateImages = ({\r\n aid,\r\n i18n,\r\n perfMarker,\r\n preferenceService,\r\n permissions,\r\n oDataConfig,\r\n serverContext,\r\n onNewImageSelected,\r\n selectedMediaPanelSource,\r\n setSelectedMediaPanelSource,\r\n displayImagePicker,\r\n setDisplayImagePicker,\r\n instrumentation,\r\n campaignId,\r\n onUpdateUrl,\r\n fullUrl,\r\n maxUploadNum,\r\n showAddButton,\r\n creativeEditorProps,\r\n}) => {\r\n const classes = useDefaultStyles(getStyles);\r\n const activity = useContext(ActivityContext);\r\n const scenario = useContext(ScenarioContext);\r\n const [privateUrl, setPrivateUrl] = useState('');\r\n\r\n const url = useMemo(() => {\r\n if (validateAdUrl(fullUrl)=== null) {\r\n return fullUrl;\r\n }\r\n\r\n return privateUrl || 'https://';\r\n }, [fullUrl, privateUrl]);\r\n\r\n const urlPrefixValue = useMemo(() => {\r\n const [prefix] = getUrlPrefixAndDestination(url);\r\n return prefix;\r\n }, [url]);\r\n\r\n const {\r\n suggestionState,\r\n suggestionPoller,\r\n } = useWebsiteSuggestion({\r\n oDataConfig,\r\n adContext: {\r\n advertiserCustomerId: get(serverContext, ['CurrentAccount', 'AdvertiserCustomerID']),\r\n accountId: aid,\r\n campaignId,\r\n },\r\n instrumentation,\r\n logActivity: activity.signal,\r\n permissions,\r\n fullUrl: url,\r\n hasErrorInUrl: validateAdUrl(url) !== null,\r\n adCreatorScenario: {\r\n scenarioName: `${scenario.name}AdCreation`,\r\n scenarioValue: `${scenario.name}AdCreation`,\r\n },\r\n });\r\n\r\n const updateUrl = (evt) => {\r\n const { value } = evt.target;\r\n const newUrl = getUpdatedFullUrlOnTextUpdate(urlPrefixValue, value);\r\n if (onUpdateUrl) {\r\n onUpdateUrl(newUrl);\r\n } else {\r\n setPrivateUrl(newUrl);\r\n }\r\n };\r\n\r\n const updateUrlPrefix = (evt, { text }) => {\r\n const newPrefix = text.substring(0, text.length - 3);\r\n const [, original] = getUrlPrefixAndDestination(url);\r\n const newUrl = getUpdatedFullUrlOnPrefixUpdate(original, newPrefix);\r\n if (onUpdateUrl) {\r\n onUpdateUrl(newUrl);\r\n } else {\r\n setPrivateUrl(newUrl);\r\n }\r\n };\r\n\r\n return (\r\n <>\r\n { showAddButton &&\r\n
\r\n {\r\n setDisplayImagePicker(true);\r\n }}\r\n className=\"add-image-button\"\r\n styles={{ root: { minWidth: '200px', marginTop: 16 } }}\r\n />\r\n
\r\n }\r\n \r\n );\r\n};\r\n\r\nPopulateImages.propTypes = {\r\n aid: PropTypes.number.isRequired,\r\n campaignId: PropTypes.number.isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n perfMarker: PropTypes.shape({\r\n }).isRequired,\r\n preferenceService: PropTypes.shape({\r\n setAtUserLevel: PropTypes.func,\r\n findByNameAtUserLevel: PropTypes.func,\r\n }).isRequired,\r\n permissions: PropTypes.shape({\r\n dynamic: PropTypes.shape({\r\n }),\r\n }).isRequired,\r\n oDataConfig: PropTypes.shape({\r\n odataRootUrl: PropTypes.string,\r\n odataPath: PropTypes.string,\r\n odataToken: PropTypes.string,\r\n }).isRequired,\r\n serverContext: PropTypes.shape({\r\n CurrentAccount: PropTypes.shape({\r\n AdvertiserCustomerID: PropTypes.number,\r\n TimeZone: PropTypes.number,\r\n }),\r\n CurrentUser: PropTypes.shape({\r\n CultureDateTimeFormat: PropTypes.shape({\r\n ShortDatePattern: PropTypes.string,\r\n }),\r\n }),\r\n }).isRequired,\r\n onNewImageSelected: PropTypes.func.isRequired,\r\n selectedMediaPanelSource: PropTypes.string.isRequired,\r\n setSelectedMediaPanelSource: PropTypes.func.isRequired,\r\n displayImagePicker: PropTypes.bool.isRequired,\r\n setDisplayImagePicker: PropTypes.func.isRequired,\r\n instrumentation: PropTypes.shape({\r\n addScenario: PropTypes.func,\r\n }).isRequired,\r\n onUpdateUrl: PropTypes.func,\r\n fullUrl: PropTypes.string,\r\n maxUploadNum: PropTypes.number,\r\n showAddButton: PropTypes.bool,\r\n creativeEditorProps: PropTypes.shape({}),\r\n};\r\n\r\nPopulateImages.defaultProps = {\r\n onUpdateUrl: undefined,\r\n fullUrl: '',\r\n maxUploadNum: 10,\r\n showAddButton: true,\r\n creativeEditorProps: undefined,\r\n};\r\n\r\nconst wrapped = withPreference(withInstrumentation(PopulateImages));\r\n\r\nexport { wrapped as PopulateImages };\r\n","import _ from 'underscore';\r\n\r\n// errors\r\nexport const errors = {\r\n NO_RECOMMENDATION: _TL_('There are no recommendations for this Final URL'),\r\n FinalURL: _TL_('Unable to generate recommendations for this Final URL'),\r\n DEFAULT: _TL_('Unable to generate recommendations'),\r\n};\r\n\r\n// convert placementTexts and placements to a map\r\nexport const placements = {\r\n SuperLeaderboard: {\r\n name: _TL_('970x90 Super leaderboard'),\r\n size: '970x90',\r\n },\r\n Leaderboard: {\r\n name: _TL_('728x90 Leaderboard'),\r\n size: '728x90',\r\n },\r\n FullBanner: {\r\n name: _TL_('468x60 Full banner'),\r\n size: '468x60',\r\n },\r\n SmallLeaderboard: {\r\n name: _TL_('320x50 Small leaderboard'),\r\n size: '320x50',\r\n },\r\n Banner: {\r\n name: _TL_('300x50 Banner'),\r\n size: '300x50',\r\n },\r\n LargeBanner: {\r\n name: _TL_('216x36 Large banner'),\r\n size: '216x36',\r\n },\r\n MediumBanner: {\r\n name: _TL_('168x28 Medium banner'),\r\n size: '168x28',\r\n },\r\n SmallBanner: {\r\n name: _TL_('120x20 Small banner'),\r\n size: '120x20',\r\n },\r\n HalfBanner: {\r\n name: _TL_('234x60 Half banner'),\r\n size: '234x60',\r\n },\r\n Billboard: {\r\n name: _TL_('970x250 Billboard'),\r\n size: '970x250',\r\n },\r\n LandscapeLargeBanner: {\r\n name: _TL_('320x100 Landscape large banner'),\r\n size: '320x100',\r\n },\r\n Landscape: {\r\n name: _TL_('480x320 Landscape'),\r\n size: '480x320',\r\n },\r\n LargeRectangle: {\r\n name: _TL_('336x280 Large rectangle'),\r\n size: '336x280',\r\n },\r\n MediumRectangle: {\r\n name: _TL_('300x250 Medium rectangle'),\r\n size: '300x250',\r\n },\r\n Rectangle: {\r\n name: _TL_('180x150 Rectangle'),\r\n size: '180x150',\r\n },\r\n Square: {\r\n name: _TL_('250x250 Square'),\r\n size: '250x250',\r\n },\r\n Portrait: {\r\n name: _TL_('320x480 Portrait'),\r\n size: '320x480',\r\n },\r\n HalfPage: {\r\n name: _TL_('300x600 Half page'),\r\n size: '300x600',\r\n },\r\n WideSkyscraper: {\r\n name: _TL_('160x600 Wide skyscraper'),\r\n size: '160x600',\r\n },\r\n Skyscraper: {\r\n name: _TL_('120x600 Skyscraper'),\r\n size: '120x600',\r\n },\r\n};\r\n\r\nconst ratios = {\r\n [placements.SuperLeaderboard.size]: 'SuperLeaderboard',\r\n [placements.Leaderboard.size]: 'Leaderboard',\r\n [placements.FullBanner.size]: 'FullBanner',\r\n [placements.SmallLeaderboard.size]: 'SmallLeaderboard',\r\n [placements.Banner.size]: 'Banner',\r\n [placements.LargeBanner.size]: 'LargeBanner',\r\n [placements.MediumBanner.size]: 'MediumBanner',\r\n [placements.SmallBanner.size]: 'SmallBanner',\r\n [placements.HalfBanner.size]: 'HalfBanner',\r\n [placements.Billboard.size]: 'Billboard',\r\n [placements.LandscapeLargeBanner.size]: 'LandscapeLargeBanner',\r\n [placements.Landscape.size]: 'Landscape',\r\n [placements.LargeRectangle.size]: 'LargeRectangle',\r\n [placements.MediumRectangle.size]: 'MediumRectangle',\r\n [placements.Rectangle.size]: 'Rectangle',\r\n [placements.Square.size]: 'Square',\r\n [placements.Portrait.size]: 'Portrait',\r\n [placements.HalfPage.size]: 'HalfPage',\r\n [placements.WideSkyscraper.size]: 'WideSkyscraper',\r\n [placements.Skyscraper.size]: 'Skyscraper',\r\n};\r\n\r\nexport const ratioGrouping = {\r\n XWide: [\r\n ratios[placements.SuperLeaderboard.size],\r\n ratios[placements.Leaderboard.size],\r\n ratios[placements.FullBanner.size],\r\n ratios[placements.SmallLeaderboard.size],\r\n ratios[placements.Banner.size],\r\n ratios[placements.LargeBanner.size],\r\n ratios[placements.MediumBanner.size],\r\n ratios[placements.SmallBanner.size],\r\n ],\r\n Landscape: [\r\n ratios[placements.HalfBanner.size],\r\n ratios[placements.Billboard.size],\r\n ratios[placements.LandscapeLargeBanner.size],\r\n ratios[placements.Landscape.size],\r\n ],\r\n Square: [\r\n ratios[placements.LargeRectangle.size],\r\n ratios[placements.MediumRectangle.size],\r\n ratios[placements.Rectangle.size],\r\n ratios[placements.Square.size],\r\n ],\r\n Vertical: [\r\n ratios[placements.Portrait.size],\r\n ratios[placements.HalfPage.size],\r\n ratios[placements.WideSkyscraper.size],\r\n ratios[placements.Skyscraper.size],\r\n ],\r\n};\r\n\r\n// MT has this unicode character : –\r\nexport const getPlacement = ad => ratios[ad.template.templateName.split('-')[0].trim()];\r\n\r\nexport const getPlacementFromTemplate = template => ratios[template.templateName.split('-')[0].trim()];\r\n\r\n// add placement to each ad\r\nexport const addPlacementToAd = (ads) => {\r\n const adsWithPlacement = ads.map((ad) => {\r\n const MTPlacement = getPlacement(ad);\r\n\r\n return {\r\n ...ad,\r\n placement: MTPlacement,\r\n };\r\n });\r\n\r\n return adsWithPlacement;\r\n};\r\n\r\n// return a map grouped by image url\r\nexport const groupAdsByImages = (ads) => {\r\n const groupedAds = _.groupBy(ads, ad => ad.template.image.url);\r\n return groupedAds;\r\n};\r\n\r\nexport const groupAdsByRatio = (groupedAds) => {\r\n const adsWithRatioGroups = {};\r\n\r\n const imageUrls = _.keys(groupedAds);\r\n\r\n // for each image url, group by placement ratio group\r\n _.each(imageUrls, (imageUrl) => {\r\n const ads = groupedAds[imageUrl];\r\n const groupedByPlacement = _.groupBy(ads, (ad) => {\r\n const { placement } = ad;\r\n const ratioGroup = _.findKey(ratioGrouping, ratiosKey => _.contains(ratiosKey, placement));\r\n return ratioGroup;\r\n });\r\n\r\n adsWithRatioGroups[imageUrl] = groupedByPlacement;\r\n });\r\n\r\n return adsWithRatioGroups;\r\n};\r\n\r\nconst getRandomImageForEachRatioGroup = (adsWithRatioGroups) => {\r\n const randomImages = [];\r\n\r\n _.each(adsWithRatioGroups, (ads) => {\r\n const randomImage = _.mapObject(ads, (group) => {\r\n const randomAd = _.sample(group);\r\n\r\n const imageSuggestionCarouselObj = {\r\n thumbnailUrl: randomAd.url,\r\n fullUrl: randomAd.template.image.url,\r\n suggestionId: randomAd.recommendationId,\r\n };\r\n\r\n return imageSuggestionCarouselObj;\r\n });\r\n\r\n randomImages.push(..._.values(randomImage));\r\n });\r\n\r\n return randomImages;\r\n};\r\n\r\n\r\nexport const processAndGroupAds = (ads) => {\r\n const adsWithPlacement = addPlacementToAd(ads);\r\n const groupedAds = groupAdsByImages(adsWithPlacement);\r\n const adsWithRatioGroups = groupAdsByRatio(groupedAds);\r\n\r\n return {\r\n imagesToSuggest: getRandomImageForEachRatioGroup(adsWithRatioGroups),\r\n groupedAds: adsWithRatioGroups,\r\n };\r\n};\r\n\r\n\r\nexport const getItemsForListFromGroupedAds = (groupedAds) => {\r\n const items = [];\r\n\r\n _.each(groupedAds, (ratioGroups) => {\r\n _.each(ratioGroups, (ads) => {\r\n const sampleAd = _.sample(ads);\r\n\r\n const newItem = {\r\n id: sampleAd.recommendationId,\r\n previewSrc: sampleAd.url,\r\n previewType: sampleAd.placement,\r\n placements: ads.map(ad => ({\r\n id: ad.recommendationId,\r\n type: ad.placement,\r\n })),\r\n };\r\n\r\n items.push(newItem);\r\n });\r\n });\r\n\r\n return items;\r\n};\r\n\r\nexport const getAdsInMatchingGroup = (groupedAds, id) => {\r\n const matchingGroup = _.find(groupedAds, ratioGroups => _.find(ratioGroups, ads => _.some(ads, ad => ad.recommendationId === id)));\r\n const matchingAds = _.find(matchingGroup, ads => _.some(ads, ad => ad.recommendationId === id));\r\n\r\n return matchingAds;\r\n};\r\n\r\nexport const getODataConfig = (serverContext) => {\r\n const isLocal = () => {\r\n const hostname = document.location.hostname.toLowerCase();\r\n return hostname.indexOf('ads.microsoft.com') === -1 &&\r\n hostname.indexOf('ads-int.microsoft.com') === -1;\r\n };\r\n\r\n const odataPath = isLocal() ? 'Advertiser/V2' : 'Campaign/V2';\r\n\r\n const oDataConfig = {\r\n odataToken: serverContext.Token,\r\n oDataToken: serverContext.Token,\r\n odataPath: `${serverContext.ServicesEndpoints.CampaignAPI}${odataPath}`,\r\n oDataPath: `${serverContext.ServicesEndpoints.CampaignAPI}${odataPath}`,\r\n };\r\n\r\n return oDataConfig;\r\n};\r\n","import React, { useEffect, useMemo, useCallback, useState, useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport _ from 'underscore';\r\nimport classNames from 'classnames';\r\nimport { Text, ChoiceGroup } from '@fluentui/react';\r\nimport { Dropdown, Label, Stack } from '@bingads-webui-react/fabric-control';\r\nimport { withCustomValidation, withError } from '@bingads-webui-react/validation';\r\nimport { entityIs, propertyIs, andComp } from '@bingads-webui-campaign-react/form-error';\r\nimport { PreferenceContext } from '@bingads-webui-react/preference-context';\r\nimport { withControlErrorHandling, withUnvalidatedControlErrors } from '@bingads-webui-campaign-react/error-handling';\r\nimport { DefaultButton, ERROR_ENTITY, IconButton } from '@bingads-webui-campaign-react/xandr-video-campaign-shared-components';\r\nimport { MediaEditorPanel } from '@bingads-webui-campaign-react/media-editor-panel';\r\nimport { PivotItemKey } from '@bingads-webui-campaign-react/media-editor';\r\nimport { isTestEnvironment } from '@bingads-webui-campaign/global-app-init';\r\nimport { MediaRepository } from '@bingads-webui-campaign/media-repository';\r\nimport { ScenarioContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { AspectRatiosForDisplayAds, constants } from '@bingads-webui-campaign-react/image-experience-model';\r\nimport { withServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { useImagePicker } from '@bingads-webui-campaign-react/add-image-hooks';\r\nimport { PreviewSingleRightRailWrapper } from '@bingads-webui-campaign-react/preview-right-rail-wrapper';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { CroppedImageView } from '@bingads-webui-campaign-react/cropped-image-view';\r\nimport { HelpPopupInline } from '@bingads-webui-react/help-popup';\r\nimport { useCopilotRepositoryContext } from '@bingads-webui/inline-copilot';\r\nimport { DisplayAdsEditorDrawer as DisplayAdsEditor } from '@bingads-webui-campaign-react/display-ads-editor';\r\nimport { InstrumentationContext } from '@bingads-webui-react/hoc-with-instrumentation';\r\nimport { useBrandKitService } from '@bingads-webui-campaign-react/brandkit-data-service';\r\nimport { withComponentErrorLogging } from '@bingads-webui-campaign-react/global-error-options';\r\n\r\nimport { getTargetOptions, getStandardTargetOptions, getMobileTargetOptions, getAllStandardOptions, getAllMobileOptions } from './image-targets';\r\nimport { imageModelToViewModel, imagePlacementsToImage } from '../model/utl';\r\nimport { PopulateImages } from './populate-images';\r\nimport { CropPreview } from './cropped-preview';\r\nimport { placements, getPlacementFromTemplate } from '../model/constants';\r\n\r\nconst DisplayAdsEditorDrawer = withComponentErrorLogging(DisplayAdsEditor, 'DisplayAdsEditorDrawer');\r\n\r\nconst ImageContainerWidth = 170;\r\nconst ImageContainerHeight = 107;\r\n\r\nconst getStyles = () => ({\r\n rootContainer: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n columnGap: '20px',\r\n },\r\n imageContainer: {\r\n position: 'relative',\r\n height: `${ImageContainerHeight}px`,\r\n width: `${ImageContainerWidth}px`,\r\n overflow: 'hidden',\r\n borderRadius: '6px',\r\n backgroundColor: '#F3F2F1',\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n },\r\n buttonContainerStyle: {\r\n display: 'flex',\r\n position: 'absolute',\r\n bottom: '5px',\r\n width: '100%',\r\n justifyContent: 'space-evenly',\r\n },\r\n choiceGroupStyles: {\r\n '& .ms-ChoiceField': {\r\n margin: '0',\r\n },\r\n '& label': {\r\n padding: '0 0 2px 0',\r\n fontWeight: 'normal',\r\n },\r\n },\r\n});\r\n\r\nconst dropdownStyles = {\r\n dropdown: { width: 250 },\r\n};\r\n\r\nconst editButtonStyle = {\r\n root: {\r\n borderRadius: '99px',\r\n height: 32,\r\n width: 32,\r\n backgroundColor: '#ffffffd4',\r\n },\r\n};\r\n\r\nexport const validateImage = (/* Image, i18n */) => {\r\n const messages = [];\r\n\r\n return messages;\r\n};\r\n\r\nconst entityIsAd = entityIs(ERROR_ENTITY.Ad);\r\nconst imageTypeFromImage = image => `Image${image.targetWidth}x${image.targetHeight}`;\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\r\nfunction getImageStyles(image) {\r\n const contentWidth = ImageContainerWidth;\r\n const contentHeight = ImageContainerHeight;\r\n let desiredCropWidth = contentWidth;\r\n let desiredCropHeight = contentHeight;\r\n\r\n const cropImageWidth = image.cropWidth;\r\n const cropImageHeight = image.cropHeight;\r\n\r\n const cropRatio = contentHeight / cropImageHeight > contentWidth / cropImageWidth ?\r\n contentHeight / cropImageHeight : contentWidth / cropImageWidth;\r\n\r\n desiredCropHeight = cropImageHeight * cropRatio;\r\n desiredCropWidth = cropImageWidth * cropRatio;\r\n\r\n const xScale = desiredCropWidth / image.cropWidth;\r\n const yScale = desiredCropHeight / image.cropHeight;\r\n\r\n const midPointOffsetX = desiredCropWidth > contentWidth ?\r\n Math.ceil(-(desiredCropWidth - contentWidth) / 2) : 0;\r\n const midPointOffsetY = desiredCropHeight > contentHeight ?\r\n Math.ceil(-(desiredCropHeight - contentHeight) / 2) : 0;\r\n\r\n return {\r\n image: {\r\n width: image.originalWidth * xScale,\r\n height: image.originalHeight * yScale,\r\n },\r\n container: {\r\n marginLeft: `${(-image.cropX * xScale) + midPointOffsetX}px`,\r\n marginTop: `${(-image.cropY * yScale) + midPointOffsetY}px`,\r\n },\r\n };\r\n}\r\n\r\nconst standardDeviceType = 'standard';\r\nconst mobileDeviceType = 'mobile';\r\nconst standardSizes = getAllStandardOptions();\r\nconst mobileSizes = getAllMobileOptions();\r\n\r\nconst getImageTypeFromSize = ((displayAd) => {\r\n if (!displayAd || !displayAd.image || !displayAd.image.targetHeight || !displayAd.image.targetWidth) {\r\n return standardDeviceType;\r\n }\r\n const { targetWidth, targetHeight } = displayAd.image;\r\n const findDeviceType = size => size.width === targetWidth && size.height === targetHeight;\r\n\r\n if (standardSizes.findIndex(findDeviceType) >=0) {\r\n return standardDeviceType;\r\n }\r\n\r\n if (mobileSizes.findIndex(findDeviceType) >=0) {\r\n return mobileDeviceType;\r\n }\r\n\r\n return standardDeviceType;\r\n});\r\n\r\nconst CustomComponent = (props) => {\r\n const {\r\n i18n,\r\n displayAd,\r\n updateValidation,\r\n oDataConfig,\r\n campaignId,\r\n cid,\r\n aid,\r\n permissions,\r\n serverContext,\r\n perfMarker,\r\n isLoadingImage,\r\n creativeEditorProps,\r\n onRenderCustomAddImageButton,\r\n } = props;\r\n\r\n const {\r\n displayImagePicker,\r\n setDisplayImagePicker,\r\n selectedMediaPanelSource,\r\n setSelectedMediaPanelSource,\r\n } = useImagePicker();\r\n\r\n const isDisplayImageRegroupEnabled = permissions && permissions.dynamic && permissions.dynamic.IsDisplayImageRegroupEnabled;\r\n const scenario = useContext(ScenarioContext);\r\n const instrumentation = useContext(InstrumentationContext);\r\n const [isImageEditDisplayed, setIsImageEditDisplayed] = useState(false);\r\n const [isDisplayTemplateEditorOpen, setIsDisplayTemplateEditorOpen] = useState(false);\r\n const classes = useDefaultStyles(getStyles);\r\n const preferenceService = useContext(PreferenceContext);\r\n\r\n const [deviceFormatType, setDeviceFormatType] = useState(standardDeviceType);\r\n const mediaRepository = useMemo(() => new MediaRepository({\r\n cid,\r\n aid,\r\n cmpId: campaignId,\r\n oDataConfig,\r\n }), [aid, campaignId, cid, oDataConfig]);\r\n\r\n const currentPlacementIndex = useMemo(() => {\r\n if (displayAd && displayAd.image && displayAd.image.targetWidth && displayAd.image.targetHeight) {\r\n const type = imageTypeFromImage(displayAd.image);\r\n const imagePlacementIndex = _.findIndex(displayAd.imagePlacements, placement => placement.type === type);\r\n return imagePlacementIndex;\r\n }\r\n return -1;\r\n }, [displayAd]);\r\n\r\n const copilotRepository = useCopilotRepositoryContext();\r\n const { brandKitDataService, brandkitApiState } = useBrandKitService();\r\n\r\n useEffect(() => {\r\n const shouldDirty = !(_.isUndefined(displayAd) || _.isNull(displayAd));\r\n if (isDisplayImageRegroupEnabled === true) {\r\n const deviceType = getImageTypeFromSize(displayAd);\r\n setDeviceFormatType(deviceType);\r\n }\r\n\r\n // update on mount.\r\n updateValidation(displayAd && (displayAd.image || isLoadingImage) ? validateImage(displayAd.image, i18n) : [i18n.getString(_TL_('Please add an image.'))], {\r\n image: displayAd ? displayAd.image : null,\r\n imagePlacements: displayAd ? displayAd.imagePlacements : null,\r\n creativeData: displayAd ? displayAd.creativeData : null,\r\n }, shouldDirty);\r\n }, [displayAd, i18n, isLoadingImage, updateValidation, isDisplayImageRegroupEnabled]);\r\n\r\n const onEdit = useCallback(() => {\r\n if (displayAd && displayAd.creativeData) {\r\n if (\r\n displayAd.creativeData.creativeMeta &&\r\n displayAd.creativeData.creativeMeta.template &&\r\n Number(displayAd.creativeData.creativeMeta.template.version) >= 1.2\r\n ) {\r\n setIsDisplayTemplateEditorOpen(true);\r\n } else {\r\n setDisplayImagePicker(true);\r\n }\r\n } else {\r\n setIsImageEditDisplayed(true);\r\n }\r\n }, [displayAd, setDisplayImagePicker]);\r\n\r\n const onRemoveImage = useCallback(() => {\r\n updateValidation([i18n.getString(_TL_('Please add an image.'))], {\r\n image: null,\r\n creativeData: null,\r\n });\r\n }, [i18n, updateValidation]);\r\n\r\n const dropdownOptions = useMemo(() => {\r\n if (isDisplayImageRegroupEnabled === true) {\r\n if (deviceFormatType === 'mobile') {\r\n return getMobileTargetOptions({\r\n i18n,\r\n sourceWidth: displayAd && displayAd.image ? displayAd.image.originalWidth : null,\r\n sourceHeight: displayAd && displayAd.image ? displayAd.image.originalHeight : null,\r\n });\r\n }\r\n\r\n return getStandardTargetOptions({\r\n i18n,\r\n sourceWidth: displayAd && displayAd.image ? displayAd.image.originalWidth : null,\r\n sourceHeight: displayAd && displayAd.image ? displayAd.image.originalHeight : null,\r\n });\r\n }\r\n\r\n return getTargetOptions({\r\n i18n,\r\n sourceWidth: displayAd && displayAd.image ? displayAd.image.originalWidth : null,\r\n sourceHeight: displayAd && displayAd.image ? displayAd.image.originalHeight : null,\r\n });\r\n }, [i18n, displayAd, deviceFormatType, isDisplayImageRegroupEnabled]);\r\n\r\n const deviceFormatOptions = useMemo(() => [\r\n {\r\n key: standardDeviceType,\r\n text: i18n.getString(_TL_('Standard')),\r\n }, {\r\n key: mobileDeviceType,\r\n text: i18n.getString(_TL_('Mobile')),\r\n },\r\n ], [i18n]);\r\n\r\n const onChangeTarget = useCallback((event, item, selectItem) => {\r\n const image = displayAd && displayAd.image ? displayAd.image : {};\r\n const currentItem = item || selectItem;\r\n if (image) {\r\n const imagePlacementIndex = _.findIndex(displayAd.imagePlacements, placement => placement.type === currentItem.key);\r\n if (imagePlacementIndex >=0) {\r\n const imageViewModel = imageModelToViewModel(displayAd.imagePlacements[imagePlacementIndex]);\r\n\r\n updateValidation([], {\r\n image: {\r\n ...imageViewModel,\r\n },\r\n imagePlacements: displayAd.imagePlacements,\r\n });\r\n }\r\n } else {\r\n updateValidation([i18n.getString(_TL_('Please add an image.'))], {\r\n image: {\r\n targetWidth: currentItem.width,\r\n targetHeight: currentItem.height,\r\n },\r\n });\r\n }\r\n }, [displayAd, i18n, updateValidation]);\r\n\r\n const selectedItem = useMemo(() => {\r\n if (displayAd && displayAd.image && displayAd.image.targetWidth && displayAd.image.targetHeight) {\r\n if (isDisplayImageRegroupEnabled === true) {\r\n const imageKey = imageTypeFromImage(displayAd.image);\r\n const target = dropdownOptions.find(option => option.key === imageKey);\r\n if (target) {\r\n return imageKey;\r\n }\r\n\r\n const firstItem = dropdownOptions.find(option => !option.itemType);\r\n if (firstItem) {\r\n firstItem.key;\r\n onChangeTarget(null, null, firstItem);\r\n }\r\n }\r\n\r\n return imageTypeFromImage(displayAd.image);\r\n }\r\n return undefined;\r\n }, [displayAd, dropdownOptions, onChangeTarget, isDisplayImageRegroupEnabled]);\r\n\r\n const minCropSize = useMemo(() => {\r\n if (displayAd && displayAd.imagePlacements && displayAd.imagePlacements[currentPlacementIndex]) {\r\n return constants.getMinimumSizeForImage(\r\n displayAd.imagePlacements[currentPlacementIndex].type,\r\n false,\r\n constants.defaultImageOption,\r\n false,\r\n false,\r\n true\r\n );\r\n }\r\n return null;\r\n }, [currentPlacementIndex, displayAd]);\r\n\r\n const baseImage = useMemo(() => {\r\n if (displayAd && displayAd.imagePlacements && displayAd.imagePlacements[currentPlacementIndex]) {\r\n const base = displayAd.imagePlacements[currentPlacementIndex];\r\n return {\r\n Type: base.type,\r\n Src: base.src,\r\n Width: base.width,\r\n Height: base.height,\r\n };\r\n }\r\n return null;\r\n }, [currentPlacementIndex, displayAd]);\r\n\r\n const onSaveEditImage = useCallback(({ cropSettings }) => {\r\n const base = displayAd.imagePlacements[currentPlacementIndex];\r\n\r\n base.cropSettings = cropSettings;\r\n\r\n updateValidation([], {\r\n image: {\r\n ...displayAd.image,\r\n cropWidth: cropSettings.SourceWidth,\r\n cropHeight: cropSettings.SourceHeight,\r\n cropX: cropSettings.SourceX,\r\n cropY: cropSettings.SourceY,\r\n },\r\n imagePlacements: displayAd.imagePlacements,\r\n creativeData: displayAd.creativeData,\r\n });\r\n\r\n setIsImageEditDisplayed(false);\r\n }, [currentPlacementIndex, displayAd, updateValidation]);\r\n\r\n const onNewImageSelected = useCallback((imagePlacements) => {\r\n if (imagePlacements && imagePlacements[0] && imagePlacements[0].creativeData) {\r\n updateValidation([], {\r\n ...imagePlacements[0],\r\n });\r\n } else {\r\n const newAdData = imagePlacementsToImage({ crops: imagePlacements[0] });\r\n updateValidation([], {\r\n ...newAdData.data,\r\n });\r\n }\r\n setDisplayImagePicker(false);\r\n }, [setDisplayImagePicker, updateValidation]);\r\n\r\n const placementTitle = useMemo(() => {\r\n if (!creativeEditorProps) {\r\n return '';\r\n }\r\n const { creativeData } = creativeEditorProps || {};\r\n\r\n const { creativeMeta } = creativeData || {};\r\n\r\n const { placement, template = {} } = creativeMeta || {};\r\n\r\n if (!placement) {\r\n const placementFromTemplate = getPlacementFromTemplate(template);\r\n\r\n return placements[placementFromTemplate].name;\r\n }\r\n return placements[placement].name;\r\n }, [creativeEditorProps]);\r\n\r\n const resizeImageHeightForThumbnail = useMemo(() => {\r\n if (displayAd && displayAd.image && displayAd.image.cropHeight && displayAd.image.cropWidth) {\r\n const aspectRatio = displayAd.image.cropWidth / displayAd.image.cropHeight;\r\n const maxWidth = 170;\r\n return Math.min(maxWidth / aspectRatio, 107);\r\n }\r\n return 0;\r\n }, [displayAd]);\r\n\r\n const imageControl = useMemo(() => {\r\n if (!displayAd) {\r\n return null;\r\n }\r\n\r\n return (\r\n
\r\n
\r\n
\r\n {!isLoadingImage && displayAd.image &&\r\n (\r\n \r\n )\r\n }\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n {\r\n creativeEditorProps ?\r\n \r\n {i18n.getString(placementTitle)}\r\n \r\n :\r\n
\r\n {isDisplayImageRegroupEnabled ===true &&\r\n (\r\n
\r\n
\r\n \r\n
\r\n setDeviceFormatType(item.key)}\r\n selectedKey={deviceFormatType}\r\n className={classes.choiceGroupStyles}\r\n />\r\n
\r\n \r\n
\r\n
\r\n )\r\n }\r\n \r\n
\r\n }\r\n
\r\n );\r\n }, [classes.choiceGroupStyles, classes.buttonContainerStyle, classes.imageContainer, classes.rootContainer, isDisplayImageRegroupEnabled, deviceFormatType, deviceFormatOptions, creativeEditorProps, displayAd, dropdownOptions, i18n, isLoadingImage, onChangeTarget, onEdit, onRemoveImage, placementTitle, resizeImageHeightForThumbnail, selectedItem]);\r\n\r\n const AddImageButton = useMemo(() => {\r\n if (onRenderCustomAddImageButton) {\r\n return onRenderCustomAddImageButton({\r\n setDisplayImagePicker,\r\n });\r\n }\r\n\r\n return (\r\n setDisplayImagePicker(true)}\r\n />\r\n );\r\n }, [i18n, onRenderCustomAddImageButton, setDisplayImagePicker]);\r\n\r\n return (\r\n
\r\n
\r\n {displayAd && (displayAd.image || isLoadingImage) ?\r\n imageControl : AddImageButton\r\n }\r\n
\r\n 0 ? displayAd.FinalUrls[0] : null}\r\n creativeEditorProps={creativeEditorProps}\r\n />\r\n setIsImageEditDisplayed(false)}\r\n onApply={onSaveEditImage}\r\n mediaRepository={mediaRepository}\r\n aspectRatioConfig={AspectRatiosForDisplayAds}\r\n cropSettings={displayAd && displayAd.imagePlacements && displayAd.imagePlacements[currentPlacementIndex] ? displayAd.imagePlacements[currentPlacementIndex].cropSettings : null}\r\n minCropSize={minCropSize}\r\n baseImage={baseImage}\r\n hasRightRail\r\n onRenderRightRailContent={({\r\n previewImageUrl,\r\n cropSettings = {},\r\n }) => {\r\n const {\r\n SourceWidth, SourceX, SourceY,\r\n } = cropSettings || {};\r\n const aspectRatio = displayAd.image.cropWidth / displayAd.image.cropHeight;\r\n const maxWidth = 500;\r\n const resizeImageHeight = Math.min(maxWidth / aspectRatio, 600);\r\n\r\n return (\r\n \r\n );\r\n }}\r\n adCreatorScenario={{\r\n scenarioName: `${scenario.name}AdCreation`,\r\n scenarioValue: `${scenario.name}AdCreation`,\r\n }}\r\n isThumbsUpDownEnabled={serverContext.IsAADUser}\r\n isTestEnv={isTestEnvironment(document.domain)}\r\n disabledPivotItemKeys={[PivotItemKey.Effect]}\r\n customizedDefaultSelectedPivotItemKey={PivotItemKey.Crop}\r\n />\r\n {\r\n isDisplayTemplateEditorOpen &&\r\n 0 ? displayAd.FinalUrls[0] : null}\r\n showNavigation\r\n showSummaryBarControl\r\n preferenceService={preferenceService}\r\n displayTemplatesDataService={copilotRepository}\r\n isOpen={isDisplayTemplateEditorOpen}\r\n setIsOpen={setIsDisplayTemplateEditorOpen}\r\n imageData={{\r\n ...displayAd.image,\r\n metadata: displayAd.creativeData.creativeMeta,\r\n }}\r\n onApplyCreative={creativeEditorProps.onApplyCreative}\r\n scenario={scenario}\r\n aid={aid}\r\n cid={cid}\r\n sourceType={displayAd.image.originalSourceType}\r\n />\r\n }\r\n
\r\n );\r\n};\r\n\r\nCustomComponent.propTypes = {\r\n // onDataChange: PropTypes.func.isRequired,\r\n // idx: PropTypes.number.isRequired,\r\n displayAd: PropTypes.shape({\r\n FinalUrls: PropTypes.arrayOf(PropTypes.string),\r\n image: PropTypes.shape({\r\n src: PropTypes.string,\r\n originalWidth: PropTypes.number,\r\n originalHeight: PropTypes.number,\r\n cropWidth: PropTypes.number,\r\n cropHeight: PropTypes.number,\r\n cropX: PropTypes.number,\r\n cropY: PropTypes.number,\r\n targetHeight: PropTypes.number,\r\n targetWidth: PropTypes.number,\r\n }),\r\n imagePlacements: PropTypes.arrayOf(PropTypes.shape({\r\n src: PropTypes.string,\r\n width: PropTypes.number,\r\n height: PropTypes.number,\r\n type: PropTypes.string,\r\n cropSettings: PropTypes.shape({\r\n SourceX: PropTypes.number,\r\n SourceY: PropTypes.number,\r\n SourceWidth: PropTypes.number,\r\n SourceHeight: PropTypes.number,\r\n }),\r\n })),\r\n creativeData: PropTypes.shape({\r\n creativeMeta: PropTypes.shape({\r\n placement: PropTypes.string,\r\n template: PropTypes.shape({ version: PropTypes.string }),\r\n }),\r\n }),\r\n messages: PropTypes.arrayOf(PropTypes.string),\r\n }).isRequired,\r\n updateValidation: PropTypes.func.isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n oDataConfig: PropTypes.shape({}).isRequired,\r\n campaignId: PropTypes.number.isRequired,\r\n cid: PropTypes.number.isRequired,\r\n aid: PropTypes.number.isRequired,\r\n perfMarker: PropTypes.shape({}).isRequired,\r\n permissions: PropTypes.shape({\r\n dynamic: PropTypes.shape({\r\n IsDisplayImageRegroupEnabled: PropTypes.bool,\r\n BrandKitUI: PropTypes.bool,\r\n }).isRequired,\r\n }).isRequired,\r\n serverContext: PropTypes.shape({\r\n IsAADUser: PropTypes.bool,\r\n }).isRequired,\r\n isLoadingImage: PropTypes.bool.isRequired,\r\n creativeEditorProps: PropTypes.shape({\r\n onApplyCreative: PropTypes.func,\r\n }),\r\n onRenderCustomAddImageButton: PropTypes.func,\r\n useBrandKit: PropTypes.bool,\r\n};\r\n\r\nCustomComponent.defaultProps = {\r\n creativeEditorProps: undefined,\r\n onRenderCustomAddImageButton: undefined,\r\n};\r\n\r\nconst ImageExperienceWithValidation = withServerContext(withControlErrorHandling(withUnvalidatedControlErrors(withError(withCustomValidation(CustomComponent)))));\r\n\r\nexport const ValidatedImageExperience = (props) => {\r\n const {\r\n displayAd, idx, i18n, ...rest\r\n } = props;\r\n\r\n const ImageProp = andComp(entityIsAd, propertyIs(`Image.ImageMedia_${idx}`));\r\n\r\n const dataObj = {\r\n image: (displayAd && displayAd.image) || null,\r\n imagePlacements: (displayAd && displayAd.imagePlacements) || null,\r\n };\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nValidatedImageExperience.propTypes = {\r\n displayAd: PropTypes.shape({\r\n image: PropTypes.shape({ }),\r\n imagePlacements: PropTypes.arrayOf(PropTypes.shape({})),\r\n messages: PropTypes.arrayOf(PropTypes.string),\r\n }).isRequired,\r\n idx: PropTypes.number.isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n};\r\n","import React, { useMemo, useCallback } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport _ from 'underscore';\r\nimport { Label, Stack } from '@bingads-webui-react/fabric-control';\r\nimport { ResponsiveAd } from '@bingads-webui/campaign-odata-schemas';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { mergeI18n } from '@bingads-webui-campaign-react/i18n-merger';\r\nimport { ValidationGroup, withCustomValidation, withError } from '@bingads-webui-react/validation';\r\nimport { withControlErrorHandling, withUnvalidatedControlErrors } from '@bingads-webui-campaign-react/error-handling';\r\nimport { ValidatedFinalUrl as UrlInput } from '@bingads-webui-campaign-react/validated-url-input';\r\nimport { IconButton } from '@bingads-webui-campaign-react/xandr-video-campaign-shared-components';\r\nimport { ThirdPartyMeasurementContainerWithValidation } from '@bingads-webui-campaign-react/third-party-measurement';\r\nimport { HelpPopupInline } from '@bingads-webui-react/help-popup';\r\nimport { AdvancedSettings } from '@bingads-webui-campaign-react/display-plus-native-ads';\r\n\r\nimport { ValidatedImageExperience } from './validated-image-experience';\r\nimport { getAdsStepStyles } from './styles';\r\n\r\nconst ValidatedFinalUrl = withControlErrorHandling(withUnvalidatedControlErrors(withError(withCustomValidation(UrlInput))));\r\n\r\nexport const DisplayAdPanel = ({\r\n i18n,\r\n perfMarker,\r\n cid,\r\n aid,\r\n campaignId,\r\n onUpdate,\r\n onRemovePanel,\r\n removeCloseButton,\r\n permissions,\r\n displayAd,\r\n keyIndex,\r\n isSelectedPanel,\r\n oDataConfig,\r\n customStyleFunction,\r\n useCustomStyleFunction,\r\n isLoadingImage,\r\n}) => {\r\n const defaultClasses = useDefaultStyles(getAdsStepStyles);\r\n\r\n const customClasses = useDefaultStyles(customStyleFunction);\r\n\r\n const classes = useCustomStyleFunction ? customClasses : defaultClasses;\r\n\r\n const legacyI18n = useMemo(() => window.globalLegacyI18n.get('$/i18n!legacy/global'), []);\r\n const i18nMerged = useMemo(() => mergeI18n(legacyI18n, i18n), [legacyI18n, i18n]);\r\n const finalUrlsObj = { FinalUrls: displayAd && displayAd.FinalUrls };\r\n\r\n const verifiedTrackingSettingObj = {\r\n VerifiedTrackingSettings: displayAd && displayAd.VerifiedTrackingSettings,\r\n };\r\n\r\n const isIasTrackingEnable = _.result(permissions.dynamic, 'EnableDisplayAdsIasTracking', false);\r\n const isAdvancedURLOptionsForMSANDisplayEnabled =\r\n _.result(permissions.dynamic, 'AdvancedURLOptionsForDisplay', false) &&\r\n _.result(permissions.dynamic, 'EnableMSANDisplayCampaigns', false);\r\n\r\n const isImpressionTrackingForDisplayAndVideoEnabled =\r\n _.result(permissions, 'isImpressionTrackingForDisplayAndVideoEnabled', false);\r\n\r\n const IsMOATEnabled = _.result(permissions, 'IsMOATEnabled', false);\r\n\r\n const onValidationUpdate = useCallback((result) => {\r\n onUpdate(result);\r\n }, [onUpdate]);\r\n\r\n const advancedSettings = useMemo(() => (\r\n \r\n ), [verifiedTrackingSettingObj.VerifiedTrackingSettings, displayAd]);\r\n\r\n return (\r\n
\r\n \r\n \r\n { !removeCloseButton &&\r\n
\r\n \r\n
\r\n }\r\n \r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n { !(isAdvancedURLOptionsForMSANDisplayEnabled || isImpressionTrackingForDisplayAndVideoEnabled)\r\n && isIasTrackingEnable && (\r\n \r\n )}\r\n { (isAdvancedURLOptionsForMSANDisplayEnabled || isImpressionTrackingForDisplayAndVideoEnabled) && (\r\n
\r\n {advancedSettings}\r\n
\r\n )}\r\n
\r\n \r\n
\r\n );\r\n};\r\n\r\nDisplayAdPanel.propTypes = {\r\n perfMarker: PropTypes.shape({}).isRequired,\r\n permissions: PropTypes.shape({\r\n dynamic: PropTypes.shape({\r\n EnableDisplayAdsIasTracking: PropTypes.bool,\r\n }),\r\n }).isRequired,\r\n cid: PropTypes.number.isRequired,\r\n aid: PropTypes.number.isRequired,\r\n campaignId: PropTypes.number.isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n onUpdate: PropTypes.func.isRequired,\r\n onRemovePanel: PropTypes.func.isRequired,\r\n removeCloseButton: PropTypes.bool.isRequired,\r\n displayAd: PropTypes.shape([]).isRequired,\r\n keyIndex: PropTypes.number.isRequired,\r\n isSelectedPanel: PropTypes.bool.isRequired,\r\n oDataConfig: PropTypes.shape({}),\r\n customStyleFunction: PropTypes.func,\r\n useCustomStyleFunction: PropTypes.bool,\r\n isLoadingImage: PropTypes.bool.isRequired,\r\n};\r\n\r\nDisplayAdPanel.defaultProps = {\r\n oDataConfig: null,\r\n customStyleFunction: _.noop,\r\n useCustomStyleFunction: false,\r\n};\r\n","/* eslint-disable jsx-a11y/anchor-is-valid */\r\nimport React, { useState, useEffect, useContext, useCallback } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport _ from 'underscore';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { FontIcon } from '@bingads-webui-react/fabric-control';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { setClarityTag } from '@bingads-webui-universal/clarity';\r\nimport { Link, usePageManager } from '@bingads-webui-campaign-react/xandr-video-campaign-shared-components';\r\nimport { Pagination } from './pagination';\r\nimport { DisplayAdPanel } from './display-ad-panel';\r\nimport { getAdsStepStyles } from './styles';\r\n\r\nexport const DisplayAdsContainer = (props) => {\r\n const {\r\n aid,\r\n cid,\r\n i18n,\r\n perfMarker,\r\n onAdsValidation,\r\n currentImageIndex,\r\n ads = [],\r\n oDataConfig,\r\n disablePagination,\r\n permissions,\r\n customStyleFunction,\r\n useCustomStyleFunction,\r\n resetFields,\r\n isAdGridEditorMode,\r\n campaignId,\r\n isLoadingImage,\r\n initialAdsCount,\r\n } = props;\r\n\r\n const activity = useContext(ActivityContext);\r\n\r\n const defaultClasses = useDefaultStyles(getAdsStepStyles);\r\n\r\n const customClasses = useDefaultStyles(customStyleFunction);\r\n\r\n const classes = useCustomStyleFunction ? customClasses : defaultClasses;\r\n\r\n const [DisplayAds, setDisplayAds] = useState(ads || []);\r\n\r\n const {\r\n goToNextPage,\r\n goToPrevPage,\r\n goToPage,\r\n getPageAdjustedIndex,\r\n currentPage,\r\n currentPageIndex,\r\n pages,\r\n onAddItem,\r\n removeItem,\r\n totalPages,\r\n maxItems,\r\n } = usePageManager(ads, initialAdsCount);\r\n\r\n const onAddAd = useCallback(() => {\r\n onAddItem();\r\n if (activity) {\r\n activity.signal(`Adding new ad panel - current total: ${currentPage.numberOfAdsInPage}`);\r\n }\r\n }, [activity, currentPage.numberOfAdsInPage, onAddItem]);\r\n\r\n const onImagePanelUpdate = (result, idx, uid) => {\r\n let itemAtIdx = DisplayAds[idx] || { image: null, FinalUrls: [], uid: null };\r\n\r\n if (!itemAtIdx.uid) {\r\n itemAtIdx = { ...result, uid, Id: itemAtIdx.Id };\r\n } else {\r\n itemAtIdx = { ...result, uid: itemAtIdx.uid, Id: itemAtIdx.Id };\r\n }\r\n\r\n const itemsBefore = DisplayAds.slice(0, idx);\r\n const itemsAfter = DisplayAds.slice(idx + 1, DisplayAds.length);\r\n setDisplayAds([...itemsBefore, { ...itemAtIdx }, ...itemsAfter]);\r\n };\r\n\r\n const onRemovePanel = (idx) => {\r\n if (activity) {\r\n activity.signal(`Removing ad panel at idx ${idx}`);\r\n }\r\n DisplayAds.splice(idx, 1);\r\n\r\n setDisplayAds([...DisplayAds]);\r\n\r\n removeItem();\r\n };\r\n\r\n const isAllValid = () => {\r\n let valid = true;\r\n // eslint-disable-next-line consistent-return\r\n _.each(DisplayAds, (ad) => {\r\n if (!ad.isValid) {\r\n valid = false;\r\n }\r\n });\r\n\r\n return valid;\r\n };\r\n\r\n const isAllDirty = () => {\r\n let dirty = false;\r\n // eslint-disable-next-line consistent-return\r\n _.each(DisplayAds, (ad) => {\r\n if (ad.isDirty) {\r\n dirty = true;\r\n }\r\n });\r\n\r\n return dirty;\r\n };\r\n\r\n useEffect(() => {\r\n const result = {\r\n data: [...DisplayAds], isValid: isAllValid(), isDirty: isAllDirty(), currentPageIndex,\r\n };\r\n onAdsValidation(result);\r\n if (activity) {\r\n activity.signal(`onDisplayAdsContainerValidated - ${JSON.stringify(result)}`);\r\n }\r\n // disabling exhaustive deps since the onAdsValidation value changes on each rerender.\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [currentPageIndex, DisplayAds]);\r\n\r\n useEffect(() => {\r\n if (resetFields) {\r\n setDisplayAds([]);\r\n }\r\n }, [resetFields]);\r\n\r\n useEffect(() => {\r\n setClarityTag('XandrDisplayAds', 'true');\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (!_.isEqual(ads, DisplayAds) && !isAdGridEditorMode) {\r\n // check if ads has any ad that has id. (update scenario)\r\n let shouldUpdate = false;\r\n\r\n _.each(ads, (ad) => {\r\n const displayAd = _.filter(DisplayAds, vAd => vAd.uid === ad.uid);\r\n\r\n if (displayAd && displayAd[0] && _.isUndefined(displayAd[0].Id) && ad.Id) {\r\n shouldUpdate = true;\r\n }\r\n });\r\n\r\n if (shouldUpdate) {\r\n setDisplayAds(ads);\r\n }\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [ads]);\r\n\r\n return (\r\n
\r\n {\r\n _.map(pages, (page) => {\r\n const panels = _.map(_.range(page.numberOfAdsInPage), (idx) => {\r\n const displayAd = (DisplayAds[getPageAdjustedIndex(idx, page.pageNumber)] && DisplayAds[getPageAdjustedIndex(idx, page.pageNumber)].data);\r\n\r\n const uid = (DisplayAds[getPageAdjustedIndex(idx, page.pageNumber)] && DisplayAds[getPageAdjustedIndex(idx, page.pageNumber)].uid) || _.uniqueId('displayAd_');\r\n\r\n const isCurrentPage = page.id === currentPage.id;\r\n\r\n return (\r\n
\r\n onImagePanelUpdate(result, getPageAdjustedIndex(idx, page.pageNumber), uid)}\r\n onRemovePanel={() => onRemovePanel(getPageAdjustedIndex(idx, page.pageNumber), page)}\r\n removeCloseButton={page.numberOfAdsInPage === 1}\r\n keyIndex={uid}\r\n isSelectedPanel={currentImageIndex === idx}\r\n oDataConfig={oDataConfig}\r\n isLoadingImage={isLoadingImage}\r\n />\r\n
\r\n );\r\n });\r\n\r\n return panels;\r\n })\r\n }\r\n {\r\n (currentPage.numberOfAdsInPage < maxItems && !disablePagination && !_.isEmpty(DisplayAds)) &&\r\n
\r\n \r\n  {i18n.getString(_TL_('Create another ad'))}\r\n \r\n
\r\n }\r\n \r\n
\r\n );\r\n};\r\n\r\nDisplayAdsContainer.propTypes = {\r\n aid: PropTypes.number.isRequired,\r\n cid: PropTypes.number.isRequired,\r\n campaignId: PropTypes.number.isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n perfMarker: PropTypes.shape({}).isRequired,\r\n permissions: PropTypes.shape({}).isRequired,\r\n onAdsValidation: PropTypes.func.isRequired,\r\n ads: PropTypes.shape({\r\n data: PropTypes.shape({}),\r\n }).isRequired,\r\n oDataConfig: PropTypes.shape({}),\r\n disablePagination: PropTypes.bool,\r\n customStyleFunction: PropTypes.func,\r\n useCustomStyleFunction: PropTypes.bool,\r\n resetFields: PropTypes.bool,\r\n currentImageIndex: PropTypes.number,\r\n isAdGridEditorMode: PropTypes.bool,\r\n isLoadingImage: PropTypes.bool,\r\n initialAdsCount: PropTypes.number,\r\n};\r\n\r\nDisplayAdsContainer.defaultProps = {\r\n oDataConfig: null,\r\n disablePagination: false,\r\n customStyleFunction: _.noop,\r\n useCustomStyleFunction: false,\r\n resetFields: false,\r\n currentImageIndex: 0,\r\n isAdGridEditorMode: false,\r\n isLoadingImage: false,\r\n initialAdsCount: 0,\r\n};\r\n","import React, { useContext } from 'react';\r\nimport { ValidationGroup } from '@bingads-webui-react/validation';\r\nimport { ValidatedLegacyCallToAction } from '@bingads-webui-campaign-react/legacy-call-to-action';\r\nimport { AssetGroup } from '@bingads-webui/campaign-odata-schemas';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { PermissionsContext } from '@bingads-webui-react/hoc-with-permissions';\r\n\r\nconst getStyles = () => ({\r\n container: {\r\n position: 'relative',\r\n },\r\n});\r\n\r\nexport const CTAInCreativeEditor = ({ newCTA, onValidate }) => {\r\n const i18n = useContext(I18nContext);\r\n\r\n const classes = useDefaultStyles(getStyles);\r\n\r\n const permissions = useContext(PermissionsContext);\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n};\r\n","import { useContext, useCallback, useState } from 'react';\r\nimport { RecommendationContext } from '@bingads-webui-campaign-react/perf-max-recommendation';\r\nimport { useCopilotRepositoryContext } from '@bingads-webui/inline-copilot';\r\nimport { ScopeContext } from '@bingads-webui-react/scope-service';\r\nimport { PermissionsContext } from '@bingads-webui-react/hoc-with-permissions';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { useCopilotLoggers } from '@bingads-webui-campaign-react/copilot-loggers';\r\nimport { isCopilotRegionRestricted } from '@bingads-webui-react/copilot-utils';\r\nimport { useBrandKitDataService } from '@bingads-webui-campaign-react/brandkit-data-service';\r\nimport { setClarityTag } from '@bingads-webui-universal/clarity';\r\n\r\nimport { processAndGroupAds, errors } from '../model/constants';\r\n\r\nconst formatReturnedSuggestions = suggestions => ({\r\n RecommendedAssets: {\r\n ImageAssets: suggestions.map(({ recommendationId }) =>\r\n ({ RecommendationId: recommendationId })),\r\n },\r\n});\r\n\r\nconst formatBrandkitForAPI = (obj) => {\r\n if (Array.isArray(obj)) {\r\n return obj.map(formatBrandkitForAPI);\r\n } else if (obj !== null && typeof obj === 'object') {\r\n const formattedObj = {};\r\n Object.keys(obj).forEach((key) => {\r\n if (key === 'Id') {\r\n formattedObj.Id = parseInt(obj[key], 10);\r\n } else if (key === 'SubType') {\r\n formattedObj.SubType = 'None';\r\n } else if (key !== 'Type') {\r\n formattedObj[key] = formatBrandkitForAPI(obj[key]);\r\n }\r\n });\r\n return formattedObj;\r\n }\r\n return obj;\r\n};\r\n\r\nexport const useDisplayAdsCopilot = () => {\r\n const [, setRecommendationContext] = useContext(RecommendationContext);\r\n const { logBannerGenerated } = useCopilotLoggers();\r\n const [isLoadingBrandKit, setIsLoadingBrandkit] = useState(false);\r\n const [brandkit, setBrandKit] = useState(null);\r\n const [isBrandKitEmpty, setIsBrandKitEmpty] = useState(true);\r\n const { scope } = useContext(ScopeContext) || {};\r\n\r\n const { aid } = scope.values;\r\n const permissions = useContext(PermissionsContext);\r\n const serverContext = useContext(ServerContext);\r\n const isBrandKitEnabled = permissions && permissions.dynamic && permissions.dynamic.BrandKitUI;\r\n\r\n const repository = useCopilotRepositoryContext();\r\n\r\n const {\r\n fetchDisplayAdsAssetRecommendations,\r\n fetchDisplayAdsTemplateDefinition,\r\n editDisplayAdsAssetRecommendations,\r\n finalUrl,\r\n } = repository;\r\n\r\n const { getBrandKitDataByAccId } = useBrandKitDataService();\r\n\r\n const fetchBrandKit = useCallback(async () => {\r\n if (isBrandKitEnabled) {\r\n const restrictionCall = isCopilotRegionRestricted({\r\n feature: 'Recommendations',\r\n permissions,\r\n serverContext,\r\n });\r\n setIsLoadingBrandkit(true);\r\n const response = await getBrandKitDataByAccId({ accId: aid });\r\n const isRestricted = await restrictionCall;\r\n if (!isRestricted) {\r\n const isBrandKitHavingData = response?.BrandKits?.[0] && Object.keys(response.BrandKits[0]).length > 0 && (response.BrandKits[0].Fonts?.length !== 0 ||\r\n response.BrandKits[0].Images?.length !== 0 ||\r\n response.BrandKits[0].LandscapeLogos?.length !== 0 ||\r\n response.BrandKits[0].Palettes?.length !== 0 ||\r\n response.BrandKits[0].SquareLogos?.length !== 0);\r\n if (isBrandKitHavingData) {\r\n setIsBrandKitEmpty(false);\r\n setClarityTag({ DisplayAdsWithBrandKit: 'true' });\r\n setBrandKit(formatBrandkitForAPI(response.BrandKits[0]));\r\n } else {\r\n setIsBrandKitEmpty(true);\r\n }\r\n setIsLoadingBrandkit(false);\r\n } else {\r\n setIsBrandKitEmpty(true);\r\n setIsLoadingBrandkit(false);\r\n }\r\n }\r\n }, [isBrandKitEnabled, getBrandKitDataByAccId, aid, serverContext, permissions, setBrandKit, setIsBrandKitEmpty]);\r\n\r\n const fetch = useCallback(async (count = 10, useBrandKit) => {\r\n if (!finalUrl) {\r\n return;\r\n }\r\n\r\n setRecommendationContext({\r\n isLoading: true,\r\n });\r\n\r\n if (!isLoadingBrandKit) {\r\n fetchDisplayAdsAssetRecommendations(count, (useBrandKit && brandkit) ? brandkit : null, isBrandKitEnabled ? '1.2' : '1.1').then((response) => {\r\n const { ImageAssets, Ads } = response;\r\n\r\n const {\r\n groupedAds,\r\n imagesToSuggest,\r\n } = processAndGroupAds(Ads);\r\n\r\n setRecommendationContext({\r\n ImageAssets,\r\n Ads,\r\n isLoading: false,\r\n finalUrl,\r\n groupedAds,\r\n imagesToSuggest,\r\n errorMessage: null,\r\n });\r\n\r\n logBannerGenerated(finalUrl, formatReturnedSuggestions(Ads));\r\n }).catch((e) => {\r\n if (e.message === 'NO_RECOMMENDATION') {\r\n setRecommendationContext({\r\n isLoading: false,\r\n finalUrl,\r\n imagesToSuggest: [],\r\n Ads: [],\r\n groupedAds: [],\r\n errorMessage: errors.NO_RECOMMENDATION,\r\n });\r\n }\r\n\r\n setRecommendationContext({\r\n isLoading: false,\r\n finalUrl,\r\n imagesToSuggest: [],\r\n Ads: [],\r\n groupedAds: [],\r\n errorMessage: (e && e.errors && e.errors[0] && errors[e.errors[0].target]) || errors.DEFAULT,\r\n });\r\n });\r\n }\r\n }, [fetchDisplayAdsAssetRecommendations, finalUrl, logBannerGenerated, brandkit, isLoadingBrandKit, setRecommendationContext, isBrandKitEnabled]);\r\n\r\n const fetchAigcTemplateDefinition = useCallback(templateId => fetchDisplayAdsTemplateDefinition(templateId)\r\n .then(response => response)\r\n .catch(err => ({ err })), [fetchDisplayAdsTemplateDefinition]);\r\n\r\n\r\n const generate = useCallback(ads => editDisplayAdsAssetRecommendations(ads).then((updatedCreative) => {\r\n const { Ads } = updatedCreative;\r\n\r\n return Ads && Ads[0];\r\n }), [editDisplayAdsAssetRecommendations]);\r\n\r\n return {\r\n fetch,\r\n fetchAigcTemplateDefinition,\r\n generate,\r\n finalUrlForCopilot: finalUrl,\r\n isBrandKitEmpty,\r\n fetchBrandKit,\r\n };\r\n};\r\n","import React, { useMemo, useCallback } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport _ from 'underscore';\r\nimport { Label, Stack } from '@bingads-webui-react/fabric-control';\r\nimport { ResponsiveAd } from '@bingads-webui/campaign-odata-schemas';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { mergeI18n } from '@bingads-webui-campaign-react/i18n-merger';\r\nimport { ValidationGroup, withCustomValidation, withError } from '@bingads-webui-react/validation';\r\nimport { withControlErrorHandling, withUnvalidatedControlErrors } from '@bingads-webui-campaign-react/error-handling';\r\nimport { ValidatedFinalUrl as UrlInput } from '@bingads-webui-campaign-react/validated-url-input-fluent-v2';\r\nimport { IconButton } from '@bingads-webui-campaign-react/xandr-video-campaign-shared-components';\r\nimport { ThirdPartyMeasurementContainerWithValidation } from '@bingads-webui-campaign-react/third-party-measurement';\r\nimport { HelpPopupInline } from '@bingads-webui-react/help-popup';\r\nimport { Button, makeStyles } from '@fluentui/react-components';\r\nimport { AddRegular } from '@fluentui/react-icons';\r\nimport { AdvancedSettings } from '@bingads-webui-campaign-react/display-plus-native-ads';\r\n\r\nimport { ValidatedImageExperience } from './validated-image-experience';\r\nimport { getAdsStepStyles } from './styles';\r\nimport { CTAInCreativeEditor } from './validated-legacy-call-to-action';\r\nimport { useDisplayAdsCopilot } from './use-display-ads-copilot';\r\n\r\nconst useFluentV2Styles = makeStyles({\r\n button: {\r\n display: 'flex',\r\n 'flex-flow': 'column',\r\n },\r\n addIcon: {\r\n color: '#0078D4',\r\n fontSize: '32px',\r\n },\r\n});\r\n\r\nconst ValidatedFinalUrl = withControlErrorHandling(withUnvalidatedControlErrors(withError(withCustomValidation(UrlInput))));\r\n\r\nexport const DisplayAdPanelWithCopilot = ({\r\n i18n,\r\n perfMarker,\r\n cid,\r\n aid,\r\n campaignId,\r\n onUpdate,\r\n onRemovePanel,\r\n removeCloseButton,\r\n permissions,\r\n displayAd,\r\n useBrandKit,\r\n keyIndex,\r\n isSelectedPanel,\r\n oDataConfig,\r\n customStyleFunction,\r\n useCustomStyleFunction,\r\n isLoadingImage,\r\n}) => {\r\n const defaultClasses = useDefaultStyles(getAdsStepStyles);\r\n\r\n const customClasses = useDefaultStyles(customStyleFunction);\r\n\r\n const classes = useCustomStyleFunction ? customClasses : defaultClasses;\r\n\r\n const { generate, fetchAigcTemplateDefinition } = useDisplayAdsCopilot();\r\n\r\n const fluentV2Styles = useFluentV2Styles();\r\n\r\n const legacyI18n = useMemo(() => window.globalLegacyI18n.get('$/i18n!legacy/global'), []);\r\n const i18nMerged = useMemo(() => mergeI18n(legacyI18n, i18n), [legacyI18n, i18n]);\r\n const finalUrlsObj = { FinalUrls: displayAd && displayAd.FinalUrls };\r\n\r\n const verifiedTrackingSettingObj = {\r\n VerifiedTrackingSettings: displayAd && displayAd.VerifiedTrackingSettings,\r\n };\r\n\r\n const isIasTrackingEnable = _.result(permissions.dynamic, 'EnableDisplayAdsIasTracking', false);\r\n const isAdvancedURLOptionsForMSANDisplayEnabled =\r\n _.result(permissions.dynamic, 'AdvancedURLOptionsForDisplay', false) &&\r\n _.result(permissions.dynamic, 'EnableMSANDisplayCampaigns', false);\r\n\r\n const isImpressionTrackingForDisplayAndVideoEnabled =\r\n _.result(permissions, 'isImpressionTrackingForDisplayAndVideoEnabled', false);\r\n\r\n\r\n const IsMOATEnabled = _.result(permissions, 'IsMOATEnabled', false);\r\n\r\n const onValidationUpdate = useCallback((result) => {\r\n onUpdate(result);\r\n }, [onUpdate]);\r\n\r\n const advancedSettings = useMemo(() => (\r\n \r\n ), [verifiedTrackingSettingObj.VerifiedTrackingSettings, displayAd, isAdvancedURLOptionsForMSANDisplayEnabled]);\r\n\r\n const onCTAUpdate = useCallback((data, setCTA) => {\r\n if (!_.isEmpty(data)) {\r\n setCTA(data);\r\n }\r\n }, []);\r\n\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n const creativeEditorProps = useMemo(() => ({\r\n onRenderCTA: (newCTA, setCTA) => { onCTAUpdate(result.data, setCTA); }} />,\r\n onApplyCreative: ({\r\n imageObj,\r\n creativeMeta,\r\n }) => {\r\n onUpdate({\r\n data: {\r\n ...displayAd,\r\n image: imageObj,\r\n creativeData: {\r\n creativeMeta,\r\n },\r\n },\r\n isValid: true,\r\n isDirty: true,\r\n });\r\n },\r\n finalUrl: displayAd && displayAd.FinalUrls && displayAd.FinalUrls[0],\r\n creativeData: displayAd && displayAd.creativeData,\r\n onGenerateCreative: creativeDataInner => generate({\r\n template: {\r\n ...creativeDataInner,\r\n },\r\n }),\r\n fetchAigcTemplateDefinition,\r\n }), [displayAd, generate, fetchAigcTemplateDefinition, onCTAUpdate, onUpdate]);\r\n\r\n const onRenderCustomAddImageButton = useCallback(({ setDisplayImagePicker }) => (\r\n
\r\n \r\n
\r\n\r\n ), [classes.addNewImageButton, fluentV2Styles.addIcon, fluentV2Styles.button]);\r\n\r\n return (\r\n
\r\n \r\n \r\n { !removeCloseButton &&\r\n
\r\n \r\n
\r\n }\r\n \r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n { !(isAdvancedURLOptionsForMSANDisplayEnabled || isImpressionTrackingForDisplayAndVideoEnabled) && isIasTrackingEnable && (\r\n \r\n )}\r\n { (isAdvancedURLOptionsForMSANDisplayEnabled || isImpressionTrackingForDisplayAndVideoEnabled) && (\r\n
\r\n {advancedSettings}\r\n
\r\n )}\r\n
\r\n \r\n
\r\n );\r\n};\r\n\r\nDisplayAdPanelWithCopilot.propTypes = {\r\n perfMarker: PropTypes.shape({}).isRequired,\r\n permissions: PropTypes.shape({\r\n dynamic: PropTypes.shape({\r\n EnableDisplayAdsIasTracking: PropTypes.bool,\r\n }),\r\n }).isRequired,\r\n cid: PropTypes.number.isRequired,\r\n aid: PropTypes.number.isRequired,\r\n campaignId: PropTypes.number.isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n onUpdate: PropTypes.func.isRequired,\r\n onRemovePanel: PropTypes.func.isRequired,\r\n removeCloseButton: PropTypes.bool.isRequired,\r\n displayAd: PropTypes.shape([]).isRequired,\r\n useBrandKit: PropTypes.bool,\r\n keyIndex: PropTypes.number.isRequired,\r\n isSelectedPanel: PropTypes.bool.isRequired,\r\n oDataConfig: PropTypes.shape({}),\r\n customStyleFunction: PropTypes.func,\r\n useCustomStyleFunction: PropTypes.bool,\r\n isLoadingImage: PropTypes.bool.isRequired,\r\n};\r\n\r\nDisplayAdPanelWithCopilot.defaultProps = {\r\n oDataConfig: null,\r\n customStyleFunction: _.noop,\r\n useCustomStyleFunction: false,\r\n};\r\n","import _ from 'underscore';\r\nimport React, { useCallback, useContext, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Panel, PanelType } from '@fluentui/react';\r\nimport { FluentProvider, webLightTheme } from '@fluentui/react-components';\r\n\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { useCopilotRepositoryContext } from '@bingads-webui/inline-copilot';\r\nimport { ViewAllRecommendations } from '@bingads-webui/inline-copilot-ui';\r\nimport { RecommendationContext } from '@bingads-webui-campaign-react/perf-max-recommendation';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\n\r\nimport { getAdsInMatchingGroup, getItemsForListFromGroupedAds } from '../model/constants';\r\n\r\n\r\nexport const AllRecommendationsPanel = ({ isOpen, onDismiss, onSelectImageSuggestion }) => {\r\n const i18n = useContext(I18nContext);\r\n const activity = useContext(ActivityContext);\r\n\r\n const [{ isLoading, groupedAds } = {}] = useContext(RecommendationContext);\r\n const { finalUrl } = useCopilotRepositoryContext();\r\n\r\n const images = useMemo(() => getItemsForListFromGroupedAds(groupedAds), [groupedAds]);\r\n\r\n const handleDismiss = useCallback(() => {\r\n if (activity) {\r\n activity.signal('[All Recommendations Panel] - Closing panel');\r\n }\r\n\r\n onDismiss();\r\n }, [activity, onDismiss]);\r\n\r\n const handleSelectImageSuggestion = useCallback((id) => {\r\n if (activity) {\r\n activity.signal(`[All Recommendations Panel] - Selecting image ${id}`);\r\n }\r\n\r\n const matchingAds = getAdsInMatchingGroup(groupedAds, id);\r\n\r\n onSelectImageSuggestion(matchingAds);\r\n onDismiss();\r\n }, [activity, groupedAds, onSelectImageSuggestion, onDismiss]);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nAllRecommendationsPanel.propTypes = {\r\n isOpen: PropTypes.bool.isRequired,\r\n onDismiss: PropTypes.func.isRequired,\r\n onSelectImageSuggestion: PropTypes.func.isRequired,\r\n};\r\n","const IMAGE_DIM = {\r\n width: 106,\r\n height: 76,\r\n marginRight: 8,\r\n};\r\n\r\nconst PaddleBottomValue = 18;\r\n\r\nexport const initialImageContainerLeftMargin = 10;\r\n\r\nexport const getFullyShownImagesCount = (width) => {\r\n if (!width) {\r\n return 0;\r\n }\r\n\r\n const itemWidth = IMAGE_DIM.width + IMAGE_DIM.marginRight;\r\n\r\n return Math.floor(width / itemWidth);\r\n};\r\n\r\nexport const getCarouselStyles = (components, { palette = {} } = {}, iconFontFamily = 'MsAds MDL2 Assets') => ({\r\n carouselParent: {\r\n position: 'relative',\r\n display: 'inline-flex',\r\n width: '100%',\r\n alignItems: 'end',\r\n },\r\n disabledCarouselParent: {\r\n pointerEvents: 'none',\r\n opacity: 0.4,\r\n },\r\n image: {\r\n ...IMAGE_DIM,\r\n boxShadow: '0px 0.3px 0.9px rgba(0, 0, 0, 0.1), 0px 1.6px 3.6px rgba(0, 0, 0, 0.13)',\r\n objectFit: 'cover',\r\n borderRadius: 6,\r\n },\r\n imageContainer: ({ imageContainerLeftMargin, isCollapsible }) => ({\r\n height: 80,\r\n overflowX: 'hidden',\r\n overflowY: 'hidden',\r\n display: 'flex',\r\n marginLeft: isCollapsible ? imageContainerLeftMargin : 0,\r\n flexGrow: 1,\r\n }),\r\n imageParentContainer: ({ imageParentLeftOffset, numberOfImages }) => ({\r\n width: (IMAGE_DIM.width + IMAGE_DIM.marginRight) * numberOfImages,\r\n position: 'relative',\r\n left: ((-1 * IMAGE_DIM.width) - IMAGE_DIM.marginRight) * imageParentLeftOffset,\r\n display: 'flex',\r\n columnGap: '10px',\r\n }),\r\n imageClickableContainer: {\r\n display: 'inline',\r\n width: 107,\r\n '& :hover': {\r\n cursor: 'pointer',\r\n },\r\n '& img': {\r\n verticalAlign: 'top',\r\n },\r\n },\r\n loadingMessageContainer: {\r\n marginTop: 16,\r\n marginLeft: 16,\r\n },\r\n loadingText: {\r\n display: 'inline-block',\r\n fontSize: '12px',\r\n lineHeight: '16px',\r\n verticalAlign: 'top',\r\n },\r\n panel: {},\r\n panelHeading: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n },\r\n panelTitle: {\r\n flexGrow: 0,\r\n },\r\n panelIcon: {\r\n marginRight: 3,\r\n paddingBottom: 12,\r\n '&:before': {\r\n fontFamily: iconFontFamily,\r\n content: '\"\\\\E3AF\"',\r\n },\r\n },\r\n panelHelpButton: {\r\n display: 'flex',\r\n },\r\n imageHintRight: {\r\n display: 'inline-block',\r\n position: 'absolute',\r\n background: 'linear-gradient(270deg, #FFFFFF 0%, rgba(255, 255, 255, 0.927755) 18.23%, rgba(255, 255, 255, 0.776042) 48.44%, rgba(250, 249, 255, 0.5) 78.24%, rgba(255, 255, 255, 0) 100%)',\r\n width: 20,\r\n height: IMAGE_DIM.height,\r\n right: 32,\r\n },\r\n imageHintLeft: {\r\n display: 'inline-block',\r\n position: 'absolute',\r\n background: 'linear-gradient(270deg, #FFFFFF 0%, rgba(255, 255, 255, 0.927755) 18.23%, rgba(255, 255, 255, 0.776042) 48.44%, rgba(250, 249, 255, 0.5) 78.24%, rgba(255, 255, 255, 0) 100%)',\r\n width: 30,\r\n height: IMAGE_DIM.height,\r\n left: 34,\r\n transform: 'rotate(-180deg)',\r\n },\r\n paddleBtn: {\r\n bottom: PaddleBottomValue,\r\n },\r\n moreIcon: {\r\n fontSize: '18px',\r\n height: '60px',\r\n width: '33px',\r\n color: palette.themeDarkAlt,\r\n },\r\n seeAll: {\r\n display: 'inline-block',\r\n position: 'absolute',\r\n right: 0,\r\n bottom: 12,\r\n whiteSpace: 'nowrap',\r\n maxWidth: 50,\r\n overflow: 'hidden',\r\n textOverflow: 'ellipsis',\r\n },\r\n seeAllInHeader: {\r\n marginLeft: 'auto',\r\n '& a': {\r\n position: 'static',\r\n color: palette.themePrimary,\r\n fontSize: 12,\r\n '&:hover, $:acitve, $:focus': {\r\n color: palette.themeDarkAlt,\r\n },\r\n '&:hover': {\r\n backgroundColor: 'transparent',\r\n },\r\n },\r\n },\r\n useBrandKitHeader: {\r\n float: 'right',\r\n },\r\n spinner: {\r\n ...components.getBlockerStyle(16, palette),\r\n display: 'inline-block',\r\n lineHeight: '16px',\r\n },\r\n parentContainer: {\r\n '& $panel': { // need more selector specificity to override styles applied to top of grid panels\r\n marginLeft: 0,\r\n marginTop: 12,\r\n },\r\n '& $panelHeading': {\r\n border: 'none',\r\n '& $panelTitle.collapsible-title': {\r\n fontSize: '12px',\r\n fontWeight: 600,\r\n lineHeight: '24px',\r\n '& > a': {\r\n '& .helpbutton': {\r\n fontSize: '14px',\r\n lineHeight: '24px',\r\n display: 'inline',\r\n verticalAlign: 'bottom',\r\n },\r\n },\r\n marginTop: 0,\r\n },\r\n },\r\n '& + .alert-info': {\r\n marginTop: 8,\r\n '& a': {\r\n color: palette.themeDarkAlt,\r\n },\r\n },\r\n },\r\n});\r\n","import React, { useContext, useCallback, useState, useMemo, useEffect } from 'react';\r\nimport _ from 'underscore';\r\nimport classNames from 'classnames';\r\nimport PropTypes from 'prop-types';\r\nimport { RecommendationContext } from '@bingads-webui-campaign-react/perf-max-recommendation';\r\nimport { ImageSuggestionCarousel } from '@bingads-webui-campaign-react/image-suggestion-carousel';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { PermissionsContext } from '@bingads-webui-react/hoc-with-permissions';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { Spinner } from '@fluentui/react-components';\r\nimport { Shimmer, ShimmerElementsGroup, ShimmerElementType, MessageBar, MessageBarType } from '@fluentui/react';\r\nimport { CroppedImageView } from '@bingads-webui-campaign-react/cropped-image-view';\r\nimport { useCopilotLoggers } from '@bingads-webui-campaign-react/copilot-loggers';\r\nimport { isCopilotRegionRestricted } from '@bingads-webui-react/copilot-utils';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { AllRecommendationsPanel } from './view-all-recommendations-panel';\r\nimport { getCarouselStyles, getFullyShownImagesCount, initialImageContainerLeftMargin } from './carousel-style';\r\nimport { getImageSuggestionCarouselStyles } from './styles';\r\n\r\nconst SuggestionViewImageCount = 5;\r\nconst MaxSuggestionsInCarousel = 15;\r\n\r\nconst LoadingShimmer = () => {\r\n const i18n = useContext(I18nContext);\r\n\r\n const shimmerElements = useMemo(() => {\r\n const shimmerElement = [];\r\n\r\n _.each(_.range(SuggestionViewImageCount), () => {\r\n shimmerElement.push({ type: ShimmerElementType.line, height: 76, width: 106 });\r\n shimmerElement.push({ type: ShimmerElementType.gap, width: 10, height: 76 });\r\n });\r\n\r\n return shimmerElement;\r\n }, []);\r\n\r\n return (\r\n
\r\n \r\n } />\r\n
\r\n );\r\n};\r\n\r\nconst getImageDimension = src => new Promise((resolve) => {\r\n const img = new Image();\r\n img.src = src;\r\n img.onload = () => {\r\n const width = img.naturalWidth;\r\n const height = img.naturalHeight;\r\n\r\n resolve({\r\n imgWidth: width, imgHeight: height,\r\n });\r\n };\r\n});\r\n\r\nconst ImageView = ({ src }) => {\r\n const [width, setWidth] = useState(0);\r\n const [height, setHeight] = useState(0);\r\n\r\n const aspectRatio = width / height;\r\n const maxWidth = 107;\r\n\r\n const resizeHeight = Math.min(maxWidth / aspectRatio, 76);\r\n\r\n useEffect(() => {\r\n getImageDimension(src).then(({ imgWidth, imgHeight }) => {\r\n setWidth(imgWidth);\r\n setHeight(imgHeight);\r\n });\r\n }, [src]);\r\n\r\n if (!width || !height) {\r\n return
;\r\n }\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nImageView.propTypes = {\r\n src: PropTypes.string.isRequired,\r\n};\r\n\r\nexport const DisplayAdsImageSuggestionCarousel = ({\r\n maxUploadNum = 5,\r\n onSelectImageSuggestion,\r\n useBrandKit = false,\r\n isBrandKitEmpty,\r\n setUseBrandKit,\r\n}) => {\r\n const [isSeeAllPanelOpen, setIsSeeAllPanelOpen] = useState(false);\r\n const [imagesToSuggest, setImagesToSuggest] = useState([]);\r\n const [isCopilotEnabled, setIsCopilotEnabled] = useState(false);\r\n const activity = useContext(ActivityContext);\r\n\r\n const [recommendationContext, , reportRecommendations] = useContext(RecommendationContext);\r\n const { logSuggestionsViewed } = useCopilotLoggers();\r\n const permissions = useContext(PermissionsContext);\r\n const serverContext = useContext(ServerContext);\r\n const isBrandKitEnabled = permissions && permissions.dynamic && permissions.dynamic.BrandKitUI;\r\n\r\n const {\r\n imagesToSuggest: imageSuggestions,\r\n isLoading,\r\n groupedAds,\r\n errorMessage,\r\n } = recommendationContext || {};\r\n\r\n const i18n = useContext(I18nContext);\r\n\r\n const classes = useDefaultStyles(getImageSuggestionCarouselStyles);\r\n\r\n const { carouselState } = useMemo(() => ({\r\n carouselState: {\r\n carousel: {\r\n isError: _.isEmpty(imageSuggestions),\r\n },\r\n suggestion: {\r\n images: imageSuggestions,\r\n },\r\n },\r\n panelState: {\r\n panelImages: imageSuggestions,\r\n hasMore: false,\r\n },\r\n }), [imageSuggestions]);\r\n\r\n\r\n const { suggestion, carousel } = carouselState || {};\r\n const { images: suggestionImages } = suggestion || {};\r\n\r\n const onOffsetChange = useCallback((offset) => {\r\n const viewedImages = imagesToSuggest.slice(offset, offset + SuggestionViewImageCount);\r\n const suggestionIds = _.pluck(viewedImages, 'suggestionId');\r\n reportRecommendations({ view: suggestionIds });\r\n logSuggestionsViewed(suggestionIds);\r\n }, [imagesToSuggest, reportRecommendations, logSuggestionsViewed]);\r\n\r\n const onSelectImage = useCallback((fullUrl, index) => {\r\n // get all the groups for this base image.\r\n const allGroupedAds = groupedAds[fullUrl];\r\n\r\n // get thumbnail url from index\r\n const { thumbnailUrl } = imagesToSuggest[index];\r\n\r\n // find which group this thumbnail url belongs to\r\n const ads = _.find(allGroupedAds, group => _.find(group, ad => ad.url === thumbnailUrl));\r\n\r\n onSelectImageSuggestion(ads);\r\n }, [groupedAds, imagesToSuggest, onSelectImageSuggestion]);\r\n\r\n const onSelectSeeAllImages = useCallback(() => {\r\n const suggestionIds = suggestionImages.map(({ suggestionId }) => suggestionId);\r\n\r\n setIsSeeAllPanelOpen(true);\r\n logSuggestionsViewed(suggestionIds);\r\n }, [logSuggestionsViewed, suggestionImages]);\r\n\r\n const onRenderImage = useCallback((src, classesProp) => (\r\n
\r\n \r\n
\r\n ), [classes.croppedImage]);\r\n\r\n const onBrandKitToggle = useCallback((value) => {\r\n if (activity) {\r\n activity.signal(`[DisplayAdsCopilot] - useBrandKitToggle changed to ${value}`);\r\n }\r\n setUseBrandKit(value);\r\n }, [activity, setUseBrandKit]);\r\n\r\n useEffect(() => {\r\n const truncatedImages = _.isArray(suggestionImages) && suggestionImages.slice(0, MaxSuggestionsInCarousel);\r\n setImagesToSuggest(truncatedImages || []);\r\n }, [suggestionImages]);\r\n\r\n useEffect(() => {\r\n if (isBrandKitEnabled) {\r\n isCopilotRegionRestricted({\r\n feature: 'Recommendations',\r\n permissions,\r\n serverContext,\r\n }).then(isRestricted => setIsCopilotEnabled(!isRestricted));\r\n } else {\r\n setIsCopilotEnabled(false);\r\n }\r\n }, [isBrandKitEnabled, permissions, serverContext]);\r\n\r\n return (\r\n
\r\n { isLoading ?\r\n : (\r\n 0 ? imagesToSuggest : []}\r\n i18n={i18n}\r\n isEmpty={carousel && carousel.isError}\r\n onSelectImage={onSelectImage}\r\n onSelectSeeAll={onSelectSeeAllImages}\r\n showEllipsisWhenNoMoreImages\r\n showViewAllInHeader\r\n enableBrandKit={isBrandKitEnabled && !isBrandKitEmpty && isCopilotEnabled}\r\n useBrandKit={useBrandKit}\r\n setUseBrandKit={onBrandKitToggle}\r\n stylingOverrides={{\r\n getCarouselStyles,\r\n getFullyShownImagesCount,\r\n initialImageContainerLeftMargin,\r\n seeAllLinkText: _TL_('View all'),\r\n }}\r\n onOffsetChange={onOffsetChange}\r\n onRenderImage={onRenderImage}\r\n />\r\n )}\r\n {isSeeAllPanelOpen && (\r\n setIsSeeAllPanelOpen(false)}\r\n onSelectImageSuggestion={onSelectImageSuggestion}\r\n />\r\n )}\r\n {\r\n errorMessage && (\r\n \r\n {i18n.getString(errorMessage)}\r\n \r\n )\r\n }\r\n
\r\n );\r\n};\r\n\r\nDisplayAdsImageSuggestionCarousel.propTypes = {\r\n maxUploadNum: PropTypes.number.isRequired,\r\n onSelectImageSuggestion: PropTypes.func.isRequired,\r\n useBrandKit: PropTypes.bool,\r\n isBrandKitEmpty: PropTypes.bool,\r\n setUseBrandKit: PropTypes.func,\r\n};\r\n","import _ from 'underscore';\r\nimport React, { useContext, useState, useCallback, useEffect, useMemo } from 'react';\r\nimport {\r\n useId,\r\n Button,\r\n Toaster,\r\n useToastController,\r\n Toast,\r\n ToastTitle,\r\n ToastBody,\r\n Spinner,\r\n} from '@fluentui/react-components';\r\nimport { DismissRegular } from '@fluentui/react-icons';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { ValidatedFinalUrl as UrlInput } from '@bingads-webui-campaign-react/validated-url-input-fluent-v2';\r\nimport { RecommendationContext } from '@bingads-webui-campaign-react/perf-max-recommendation';\r\nimport { CopilotIcon } from '@bingads-webui-react/copilot-ui-base';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { useCopilotRepositoryContext } from '@bingads-webui/inline-copilot';\r\nimport { ValidationGroup, withCustomValidation, withError } from '@bingads-webui-react/validation';\r\nimport { getCreativeWorkbenchStyles } from './styles';\r\nimport { DisplayAdsImageSuggestionCarousel } from './display-ads-suggestion-carousel';\r\nimport { useDisplayAdsCopilot } from './use-display-ads-copilot';\r\n\r\n\r\nconst ValidatedFinalUrl = withError(withCustomValidation(UrlInput));\r\n\r\nexport const CreativeWorkbench = ({\r\n onFinalURLFocusOut,\r\n onCreateAds,\r\n isNewLogo,\r\n useBrandKit,\r\n setUseBrandKit,\r\n}) => {\r\n const [dataModel, setDataModel] = useState({\r\n data: {},\r\n });\r\n\r\n const toasterId = useId('toaster');\r\n const { dispatchToast, dismissToast, updateToast } = useToastController(toasterId);\r\n\r\n const classes = useDefaultStyles(getCreativeWorkbenchStyles);\r\n\r\n const [, setRecommendationContext] = useContext(RecommendationContext);\r\n const { finalUrl: finalUrlFromContext } = useCopilotRepositoryContext();\r\n\r\n const activity = useContext(ActivityContext);\r\n\r\n const i18n = useContext(I18nContext);\r\n\r\n const FETCH_COUNT = 10;\r\n\r\n const { finalUrlForCopilot, fetch, isBrandKitEmpty, fetchBrandKit } = useDisplayAdsCopilot();\r\n\r\n const onValidate = (result) => {\r\n setDataModel(result);\r\n };\r\n\r\n const notifyFinalURLchange = () => {\r\n const isValid = _.result(dataModel, 'isValid', false);\r\n const finalUrls = _.result(dataModel, ['data', 'FinalUrls'], undefined);\r\n const finalUrl = _.first(finalUrls);\r\n\r\n if (isValid) {\r\n if (activity) {\r\n activity.signal(`[DisplayAdsCopilot] - Final URL changed to ${finalUrl}`);\r\n }\r\n\r\n onFinalURLFocusOut(finalUrl);\r\n }\r\n };\r\n\r\n const finalUrlValidationProps = {\r\n data: {\r\n FinalUrls: dataModel.data.FinalUrls,\r\n },\r\n initialValue: {\r\n FinalUrls: dataModel.data.FinalUrls,\r\n },\r\n };\r\n\r\n const addingRecommendationToast = useMemo(() => (\r\n \r\n }>\r\n {i18n.getString(_TL_('Adding recommendation'))}\r\n \r\n \r\n ), [i18n]);\r\n\r\n const errorOnCreateAdsToast = useMemo(() => (\r\n \r\n } onClick={() => dismissToast(toasterId)} />\r\n }\r\n >\r\n {i18n.getString(_TL_('Error adding recommendation'))}\r\n \r\n \r\n {i18n.getString(_TL_('An error occurred while adding the recommendation. Please try again later.'))}\r\n \r\n \r\n ), [dismissToast, i18n, toasterId]);\r\n\r\n const onSelectImageSuggestion = useCallback((ads) => {\r\n if (activity) {\r\n activity.signal(`[DisplayAdsCopilot] - User selected image suggestion - ${JSON.stringify(ads)}`);\r\n }\r\n\r\n if (ads && ads.length === 1) {\r\n dispatchToast(addingRecommendationToast, { toastId: toasterId, timeout: -1 });\r\n onCreateAds(ads)\r\n .then(() => dismissToast(toasterId))\r\n .catch((error) => {\r\n activity.error(`[DisplayAdsCopilot] - Error adding recommendation -- error: ${JSON.stringify(error)} -- ads: ${JSON.stringify(ads)}`);\r\n\r\n updateToast({\r\n content: errorOnCreateAdsToast,\r\n intent: 'error',\r\n toastId: toasterId,\r\n timeout: 5000,\r\n });\r\n });\r\n return;\r\n }\r\n\r\n setRecommendationContext({\r\n openRatioPicker: true,\r\n creatives: ads,\r\n });\r\n }, [activity, addingRecommendationToast, dismissToast, dispatchToast, errorOnCreateAdsToast, onCreateAds, setRecommendationContext, toasterId, updateToast]);\r\n\r\n useEffect(() => {\r\n if (finalUrlFromContext) {\r\n setDataModel({\r\n data: {\r\n FinalUrls: [finalUrlFromContext],\r\n },\r\n });\r\n }\r\n }, [finalUrlFromContext]);\r\n\r\n useEffect(() => {\r\n if (finalUrlForCopilot) {\r\n fetch(FETCH_COUNT, useBrandKit);\r\n }\r\n }, [fetch, finalUrlForCopilot, useBrandKit]);\r\n\r\n useEffect(() => {\r\n fetchBrandKit();\r\n }, []);\r\n\r\n return (\r\n
\r\n
\r\n \r\n {\r\n i18n.getString(_TL_('AI-generated creatives'))\r\n }\r\n
\r\n
\r\n {\r\n i18n.getString(_TL_('Our AI pulls text and images from your Final URL to automatically generate creatives for your ads.'))\r\n }\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n );\r\n};\r\n\r\nCreativeWorkbench.propTypes = {\r\n onFinalURLFocusOut: PropTypes.func.isRequired,\r\n onCreateAds: PropTypes.func.isRequired,\r\n isNewLogo: PropTypes.bool,\r\n useBrandKit: PropTypes.bool,\r\n setUseBrandKit: PropTypes.func,\r\n};\r\n\r\nCreativeWorkbench.defaultProps = {\r\n isNewLogo: false,\r\n};\r\n","import PropTypes from 'prop-types';\r\nimport React, { useContext, useCallback, useState, useEffect, useMemo } from 'react';\r\nimport _ from 'underscore';\r\nimport {\r\n Dialog, DialogSurface, DialogBody, DialogTitle, DialogTrigger, Button, DialogContent, DialogActions,\r\n Image, makeStyles, mergeClasses, shorthands, Badge, Checkbox, tokens, Spinner,\r\n} from '@fluentui/react-components';\r\nimport { Dismiss24Regular } from '@fluentui/react-icons';\r\nimport { RecommendationContext } from '@bingads-webui-campaign-react/perf-max-recommendation';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { useCopilotLoggers } from '@bingads-webui-campaign-react/copilot-loggers';\r\n\r\nimport { placements } from '../model/constants';\r\n\r\nconst useStyles = makeStyles({\r\n selectableImageContainer: {\r\n display: 'inline-block',\r\n position: 'relative',\r\n ...shorthands.padding('2px'),\r\n ...shorthands.border('2px', 'solid', tokens.colorTransparentBackground),\r\n },\r\n selectedImageContainer: {\r\n ...shorthands.border('2px', 'solid', tokens.colorPaletteBlueBorderActive),\r\n ...shorthands.borderRadius('4px'),\r\n },\r\n selectableImageList: {\r\n display: 'grid',\r\n gridTemplateColumns: '1fr 1fr',\r\n ...shorthands.gap('16px'),\r\n ...shorthands.margin('16px', '0px', '0px'),\r\n },\r\n ratioDescription: {\r\n position: 'absolute',\r\n bottom: '8px',\r\n left: '8px',\r\n },\r\n imageCheckbox: {\r\n position: 'absolute',\r\n top: '4px',\r\n right: '4px',\r\n },\r\n});\r\n\r\nconst SelectableImage = (props) => {\r\n const {\r\n id, src, description, size, onSelect, checked,\r\n } = props;\r\n\r\n const handleClick = useCallback(() => {\r\n onSelect(id);\r\n }, [id, onSelect]);\r\n\r\n const imageDimension = useMemo(() => {\r\n const dimensionList = size.split('x');\r\n const width = Number(dimensionList[0]);\r\n const height = Number(dimensionList[1]);\r\n\r\n // handle aspect ratio for portrait images\r\n if (height > width) {\r\n const maxHeightRatio = 500 / height;\r\n const maxWidthRatio = 250 / width;\r\n\r\n const ratio = Math.min(maxHeightRatio, maxWidthRatio);\r\n\r\n return {\r\n width: width * ratio,\r\n height: height * ratio,\r\n };\r\n }\r\n\r\n return null;\r\n }, [size]);\r\n\r\n const styles = useStyles();\r\n\r\n return (\r\n
\r\n \r\n \r\n
\r\n \r\n
\r\n \r\n {description}\r\n \r\n
\r\n
\r\n );\r\n};\r\n\r\nSelectableImage.propTypes = {\r\n id: PropTypes.string.isRequired,\r\n src: PropTypes.string.isRequired,\r\n description: PropTypes.string.isRequired,\r\n size: PropTypes.string.isRequired,\r\n onSelect: PropTypes.func.isRequired,\r\n checked: PropTypes.bool.isRequired,\r\n};\r\n\r\nconst RatioPickerInternal = (props) => {\r\n const {\r\n open,\r\n creatives,\r\n onApply,\r\n onOpenChange,\r\n onApplyButtonText,\r\n } = props;\r\n const i18n = useContext(I18nContext);\r\n const [creativeSelections, setCreativeSelections] = useState(Array(creatives.length).fill(true));\r\n\r\n const [isApplying, setIsApplying] = useState(false);\r\n\r\n const activity = useContext(ActivityContext);\r\n\r\n // reset the selected creatives when the creatives change\r\n useEffect(() => {\r\n setCreativeSelections(creatives.map(() => true));\r\n }, [creatives]);\r\n\r\n const onRatioApply = useCallback(() => {\r\n const selectedCreatives = creatives.filter((creative, index) => creativeSelections[index]);\r\n\r\n setIsApplying(true);\r\n\r\n onApply(selectedCreatives).finally(() => {\r\n setIsApplying(false);\r\n if (activity) {\r\n activity.signal(`[DisplayAdsCopilot] - Successfully saved creatives - ${JSON.stringify(selectedCreatives)}`);\r\n }\r\n });\r\n }, [activity, creativeSelections, creatives, onApply]);\r\n\r\n const onImageSelect = useCallback((id) => {\r\n const index = creatives.findIndex(creative => creative.recommendationId === id);\r\n const newSelectedCreative = [...creativeSelections];\r\n newSelectedCreative[index] = !newSelectedCreative[index];\r\n\r\n setCreativeSelections(newSelectedCreative);\r\n }, [creatives, creativeSelections]);\r\n\r\n const styles = useStyles();\r\n\r\n return (\r\n {\r\n onOpenChange(data.open);\r\n }}\r\n >\r\n \r\n
\r\n \r\n \r\n }\r\n />\r\n \r\n }\r\n >\r\n {i18n.getString(_TL_('Which display placements do you want your creatives to serve in?'))}\r\n \r\n \r\n {i18n.getString(_TL_('Select the checkbox next to all the placements where you want your creatives to serve. Then, we\\'ll create your ads.'))}\r\n
\r\n {\r\n creatives.map((creative, index) => (\r\n \r\n ))\r\n }\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n selected) || isApplying}\r\n className=\"create-ads\"\r\n >\r\n {\r\n isApplying\r\n ? \r\n : onApplyButtonText || i18n.getString(_TL_('Create ads'))\r\n }\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n );\r\n};\r\n\r\nRatioPickerInternal.propTypes = {\r\n open: PropTypes.bool,\r\n creatives: PropTypes.arrayOf(PropTypes.shape({})),\r\n onApply: PropTypes.func.isRequired,\r\n onOpenChange: PropTypes.func.isRequired,\r\n onApplyButtonText: PropTypes.string,\r\n};\r\n\r\nRatioPickerInternal.defaultProps = {\r\n open: false,\r\n creatives: [],\r\n onApplyButtonText: undefined,\r\n};\r\n\r\nconst RatioPickerWithRecommendationContext = (props) => {\r\n const {\r\n onCreateAds,\r\n ...rest\r\n } = props;\r\n\r\n const [recommendationContext, setRecommendationContext] = useContext(RecommendationContext);\r\n const { logSuggestionsViewed } = useCopilotLoggers();\r\n\r\n const { openRatioPicker, creatives } = recommendationContext;\r\n\r\n const handleRatioPickerState = useCallback((state) => {\r\n setRecommendationContext({\r\n openRatioPicker: state,\r\n });\r\n }, [setRecommendationContext]);\r\n\r\n const onApply = useCallback(selectedCreatives => onCreateAds(selectedCreatives).then(() => handleRatioPickerState(false)), [onCreateAds, handleRatioPickerState]);\r\n\r\n useEffect(() => {\r\n if (_.isEmpty(creatives)) { return; }\r\n\r\n logSuggestionsViewed(creatives.map(creative => creative.recommendationId));\r\n }, [creatives, logSuggestionsViewed]);\r\n\r\n if (_.isEmpty(creatives)) {\r\n return null;\r\n }\r\n\r\n return (\r\n 0 ? creatives[0].recommendationId : 'empty'}\r\n creatives={creatives}\r\n open={openRatioPicker}\r\n onOpenChange={handleRatioPickerState}\r\n onApply={onApply}\r\n {...rest}\r\n />\r\n );\r\n};\r\n\r\nRatioPickerWithRecommendationContext.propTypes = {\r\n onCreateAds: PropTypes.func.isRequired,\r\n};\r\n\r\nexport const RatioPicker = RatioPickerWithRecommendationContext;\r\n","import React, { useCallback, useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Button, Menu, MenuItem, MenuList, MenuPopover, MenuTrigger } from '@fluentui/react-components';\r\nimport { Add20Regular, Image20Regular, GlanceHorizontalSparkles20Regular } from '@fluentui/react-icons';\r\n\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\n\r\nexport const CreateAnotherAdMenu = ({\r\n onCreateWithAI,\r\n onCreateFromExistingImage,\r\n}) => {\r\n const i18n = useContext(I18nContext);\r\n const activity = useContext(ActivityContext);\r\n\r\n const handleCreateWithAI = useCallback(() => {\r\n onCreateWithAI();\r\n\r\n if (activity) {\r\n activity.signal('[Creating another ad] - With AI');\r\n }\r\n }, [onCreateWithAI, activity]);\r\n\r\n const handleCreateFromExistingImage = useCallback(() => {\r\n onCreateFromExistingImage();\r\n\r\n if (activity) {\r\n activity.signal('[Creating another ad] - From existing image');\r\n }\r\n }, [onCreateFromExistingImage, activity]);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n } onClick={handleCreateWithAI}>\r\n {i18n.getString(_TL_('Create with AI'))}\r\n \r\n } onClick={handleCreateFromExistingImage}>\r\n {i18n.getString(_TL_('Use existing image'))}\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nCreateAnotherAdMenu.propTypes = {\r\n onCreateWithAI: PropTypes.func.isRequired,\r\n onCreateFromExistingImage: PropTypes.func.isRequired,\r\n};\r\n","import _ from 'underscore';\r\nimport React, { useCallback, useContext, useEffect, useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport { useCopilotRepositoryContext } from '@bingads-webui/inline-copilot';\r\nimport { CreateDisplayAdDialog } from '@bingads-webui/inline-copilot-ui';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { RecommendationContext } from '@bingads-webui-campaign-react/perf-max-recommendation';\r\n\r\nimport { getAdsInMatchingGroup, getItemsForListFromGroupedAds } from '../model/constants';\r\n\r\nexport const CreateAdWithAiDialog = ({\r\n isOpen,\r\n onDismiss,\r\n onFinalURLFocusOut,\r\n onCreateAds,\r\n}) => {\r\n const activity = useContext(ActivityContext);\r\n\r\n const [{ isLoading, groupedAds } = {}] = useContext(RecommendationContext);\r\n const { finalUrl: initialFinalUrl = '' } = useCopilotRepositoryContext();\r\n\r\n const [finalUrl, setFinalUrl] = useState(initialFinalUrl);\r\n const [images, setImages] = useState([]);\r\n const [selectedImages, setSelectedImages] = useState([]);\r\n\r\n const handleFinalUrlUpdate = useCallback((url) => {\r\n if (url === finalUrl) { return; }\r\n\r\n if (activity) {\r\n activity.signal('[Create Ad with AI dialog] - Updating Final URL');\r\n }\r\n\r\n setFinalUrl(url);\r\n setImages([]);\r\n setSelectedImages([]);\r\n\r\n onFinalURLFocusOut(url);\r\n }, [finalUrl, onFinalURLFocusOut, activity]);\r\n\r\n useEffect(() => {\r\n setImages(getItemsForListFromGroupedAds(groupedAds));\r\n }, [groupedAds]);\r\n\r\n const handleSelectImages = useCallback((ids) => {\r\n if (activity) {\r\n // ids and selectedImage should differ by one element, the last the user clicked\r\n const lastId = _.difference(_.union(ids, selectedImages), _.intersection(ids, selectedImages))[0];\r\n\r\n if (ids.includes(lastId)) {\r\n activity.signal(`[Create Ad with AI dialog] - Selecting image ${lastId}`);\r\n } else {\r\n activity.signal(`[Create Ad with AI dialog] - Deselecting image ${lastId}`);\r\n }\r\n }\r\n\r\n setSelectedImages(ids);\r\n }, [selectedImages, activity]);\r\n\r\n const handleCreateAds = useCallback((ids) => {\r\n if (activity) {\r\n activity.signal('[Create Ad with AI dialog] - Creating ads');\r\n }\r\n\r\n const matchingAds = _.chain(ids)\r\n .map(id => getAdsInMatchingGroup(groupedAds, id))\r\n .flatten()\r\n .value();\r\n\r\n return onCreateAds(matchingAds).then(onDismiss);\r\n }, [groupedAds, onCreateAds, onDismiss, activity]);\r\n\r\n const handleDismiss = useCallback(() => {\r\n if (activity) {\r\n activity.signal('[Create Ad with AI dialog] - Closing dialog');\r\n }\r\n\r\n onDismiss();\r\n }, [onDismiss, activity]);\r\n\r\n return (\r\n
\r\n \r\n
\r\n );\r\n};\r\n\r\nCreateAdWithAiDialog.propTypes = {\r\n isOpen: PropTypes.bool.isRequired,\r\n onDismiss: PropTypes.func.isRequired,\r\n onFinalURLFocusOut: PropTypes.func.isRequired,\r\n onCreateAds: PropTypes.func.isRequired,\r\n};\r\n","import _ from 'underscore';\r\nimport { useCallback, useContext } from 'react';\r\n\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { RecommendationContext } from '@bingads-webui-campaign-react/perf-max-recommendation';\r\nimport { useAssetLibraryImagePicker } from '@bingads-webui-campaign-react/add-image-hooks';\r\n\r\nconst getProcessedCreative = (finalUrl, image, creative) => ({\r\n data: {\r\n FinalUrls: [finalUrl],\r\n image,\r\n creativeData: {\r\n creativeId: image.id,\r\n creativeMeta: {\r\n ...creative,\r\n },\r\n },\r\n },\r\n});\r\n\r\nexport const useCreateAds = ({\r\n oDataConfig,\r\n permissions,\r\n aid,\r\n onCreateAds,\r\n}) => {\r\n const i18n = useContext(I18nContext);\r\n const serverContext = useContext(ServerContext);\r\n const [{ finalUrl }] = useContext(RecommendationContext);\r\n\r\n const advertiserCustomerId = _.get(serverContext, ['CurrentAccount', 'AdvertiserCustomerID']);\r\n\r\n const {\r\n addCreatives: addToAssetLibrary,\r\n } = useAssetLibraryImagePicker({\r\n cid: advertiserCustomerId.toString(),\r\n aid: aid.toString(),\r\n oDataConfig,\r\n onNewImageSelected: _.noop,\r\n i18n,\r\n permissions,\r\n isDisplayAds: true,\r\n });\r\n\r\n return useCallback(creativesToAdd => addToAssetLibrary({ creativeData: creativesToAdd })\r\n .then((savedImages) => {\r\n const creatives = savedImages.map((savedImage, index) => getProcessedCreative(finalUrl, savedImage, creativesToAdd[index]));\r\n onCreateAds(creatives);\r\n return creatives;\r\n }), [addToAssetLibrary, finalUrl, onCreateAds]);\r\n};\r\n","/* eslint-disable jsx-a11y/anchor-is-valid */\r\nimport React, { useState, useEffect, useContext, useCallback, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport _ from 'underscore';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { setClarityTag } from '@bingads-webui-universal/clarity';\r\nimport { usePageManager } from '@bingads-webui-campaign-react/xandr-video-campaign-shared-components';\r\nimport { CopilotRepositoryProvider } from '@bingads-webui/inline-copilot';\r\nimport { CampaignFetchProvider } from '@bingads-webui-campaign-react/campaign-http';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { useCopilotLoggers, useInitCopilotLoggers } from '@bingads-webui-campaign-react/copilot-loggers';\r\nimport { DisplayAdPanelWithCopilot } from './display-ad-panel-with-copilot';\r\nimport { Pagination } from './pagination';\r\nimport { CreativeWorkbench } from './creative-workbench';\r\nimport { getAdsStepStyles } from './styles';\r\nimport { addCreativesToDisplayAds } from '../model/utl';\r\nimport { RatioPicker } from './ratio-picker';\r\nimport { CreateAnotherAdMenu } from './create-another-ad-menu';\r\nimport { CreateAdWithAiDialog } from './create-ad-with-ai-dialog';\r\nimport { useCreateAds } from './use-create-ads';\r\n\r\nexport const DisplayAdsContainerWithCopilot = (props) => {\r\n const {\r\n aid,\r\n cid,\r\n i18n,\r\n perfMarker,\r\n onAdsValidation,\r\n currentImageIndex,\r\n ads = [],\r\n oDataConfig,\r\n disablePagination,\r\n permissions,\r\n customStyleFunction,\r\n useCustomStyleFunction,\r\n resetFields,\r\n isAdGridEditorMode,\r\n campaignId,\r\n isLoadingImage,\r\n initialAdsCount,\r\n hideFooter,\r\n } = props;\r\n\r\n const isEditScenario = useMemo(() => isAdGridEditorMode && ads && ads[0] && !!ads[0].Id, [ads, isAdGridEditorMode]);\r\n\r\n useInitCopilotLoggers({ campaignId, isEditScenario });\r\n\r\n const activity = useContext(ActivityContext);\r\n\r\n const defaultClasses = useDefaultStyles(getAdsStepStyles);\r\n\r\n const customClasses = useDefaultStyles(customStyleFunction);\r\n\r\n const serverContext = useContext(ServerContext);\r\n\r\n const { logEnterFlow } = useCopilotLoggers();\r\n\r\n const classes = useCustomStyleFunction ? customClasses : defaultClasses;\r\n\r\n const [DisplayAds, setDisplayAds] = useState(ads);\r\n const [copilotFinalUrl, setCopilotFinalUrl] = useState();\r\n const [isCreateAdDialogOpen, setIsCreateAdDialogOpen] = useState(false);\r\n const [useBrandKit, setUseBrandKit] = useState(true);\r\n\r\n const {\r\n goToNextPage,\r\n goToPrevPage,\r\n goToPage,\r\n getPageAdjustedIndex,\r\n currentPage,\r\n currentPageIndex,\r\n onAddItem,\r\n pages,\r\n onAddItemsToPage,\r\n removeItem,\r\n totalPages,\r\n maxItems,\r\n } = usePageManager(ads, initialAdsCount);\r\n\r\n const onAddAd = useCallback(() => {\r\n onAddItem();\r\n if (activity) {\r\n activity.signal(`Adding new ad panel - current total: ${currentPage.numberOfAdsInPage}`);\r\n }\r\n }, [activity, currentPage.numberOfAdsInPage, onAddItem]);\r\n\r\n const onImagePanelUpdate = useCallback((result, idx, uid) => {\r\n let itemAtIdx = DisplayAds[idx] || { image: null, FinalUrls: [], uid: null };\r\n\r\n if (!itemAtIdx.uid) {\r\n itemAtIdx = { ...result, uid, Id: itemAtIdx.Id };\r\n } else {\r\n itemAtIdx = { ...result, uid: itemAtIdx.uid, Id: itemAtIdx.Id };\r\n }\r\n\r\n const itemsBefore = DisplayAds.slice(0, idx);\r\n const itemsAfter = DisplayAds.slice(idx + 1, DisplayAds.length);\r\n setDisplayAds([...itemsBefore, { ...itemAtIdx }, ...itemsAfter]);\r\n }, [DisplayAds]);\r\n\r\n const onRemovePanel = useCallback((idx) => {\r\n if (activity) {\r\n activity.signal(`Removing ad panel at idx ${idx}`);\r\n }\r\n DisplayAds.splice(idx, 1);\r\n\r\n setDisplayAds([...DisplayAds]);\r\n\r\n removeItem();\r\n }, [DisplayAds, activity, removeItem]);\r\n\r\n const isAllValid = () => {\r\n let valid = true;\r\n // eslint-disable-next-line consistent-return\r\n _.each(DisplayAds, (ad) => {\r\n if (!ad.isValid) {\r\n valid = false;\r\n }\r\n });\r\n\r\n return valid;\r\n };\r\n\r\n const isAllDirty = () => {\r\n let dirty = false;\r\n // eslint-disable-next-line consistent-return\r\n _.each(DisplayAds, (ad) => {\r\n if (ad.isDirty) {\r\n dirty = true;\r\n }\r\n });\r\n\r\n return dirty;\r\n };\r\n\r\n // method to create ads in the wizard.\r\n // ads should be an array of ads with entire ad object.\r\n // ads should have the assets already saved to asset library and image experience object.\r\n // ads: [{ data: { image: {..}, FinalUrls: [..], creativeData: {..} }}]\r\n const onCreateAds = useCallback((creatives) => {\r\n const newAds = addCreativesToDisplayAds({ displayAds: DisplayAds, creatives });\r\n\r\n // get total numeber of ads possible\r\n const totalAdsExculudingLastPage = pages.length > 1 ? (pages.length - 1) * 10 : 0;\r\n\r\n // current number of items\r\n const currentItemCount = totalAdsExculudingLastPage + pages[pages.length - 1].numberOfAdsInPage;\r\n\r\n if (newAds.length > currentItemCount) {\r\n onAddItemsToPage(newAds.length - currentItemCount);\r\n }\r\n\r\n if (activity) {\r\n activity.signal(`[DisplayAdsCopilot] - Adding new copilot recommended ads - ${creatives.length}`);\r\n }\r\n setDisplayAds(newAds);\r\n }, [DisplayAds, onAddItemsToPage, pages, activity]);\r\n\r\n const createAds = useCreateAds({\r\n oDataConfig,\r\n permissions,\r\n aid,\r\n onCreateAds,\r\n });\r\n\r\n useEffect(() => logEnterFlow(), [logEnterFlow]);\r\n\r\n useEffect(() => {\r\n const result = {\r\n data: [...DisplayAds], isValid: isAllValid(), isDirty: isAllDirty(), currentPageIndex,\r\n };\r\n onAdsValidation(result);\r\n if (activity) {\r\n activity.signal(`onDisplayAdsContainerValidated - ${JSON.stringify(result)}`);\r\n }\r\n // disabling exhaustive deps since the onAdsValidation value changes on each rerender.\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [currentPageIndex, DisplayAds]);\r\n\r\n useEffect(() => {\r\n if (resetFields) {\r\n setDisplayAds([]);\r\n }\r\n }, [resetFields]);\r\n\r\n useEffect(() => {\r\n setClarityTag('XandrDisplayAds', 'true');\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (!_.isEqual(ads, DisplayAds) && !isAdGridEditorMode) {\r\n // check if ads has any ad that has id. (update scenario)\r\n let shouldUpdate = false;\r\n\r\n _.each(ads, (ad) => {\r\n const displayAd = _.filter(DisplayAds, vAd => vAd.uid === ad.uid);\r\n\r\n if (displayAd && displayAd[0] && _.isUndefined(displayAd[0].Id) && ad.Id) {\r\n shouldUpdate = true;\r\n }\r\n\r\n // For reload scenario if we can't find any ad in local state, refresh state\r\n if (permissions.dynamic.MultiAdFormat && _.isEmpty(displayAd) && ad.Id) {\r\n shouldUpdate = true;\r\n }\r\n });\r\n\r\n if (shouldUpdate) {\r\n setDisplayAds(ads);\r\n }\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [ads]);\r\n\r\n const onFinalURLFocusOut = (finalUrl) => {\r\n setCopilotFinalUrl(finalUrl);\r\n };\r\n const isNewLogo = _.get(permissions, ['dynamic', 'AdsCopilotUxImprovements']);\r\n\r\n const pageComponent = useMemo(() => (\r\n _.map(_.range(currentPage.numberOfAdsInPage), (idx) => {\r\n const displayAd = (DisplayAds[getPageAdjustedIndex(idx, currentPage.pageNumber)] && DisplayAds[getPageAdjustedIndex(idx, currentPage.pageNumber)].data);\r\n\r\n const uid = (DisplayAds[getPageAdjustedIndex(idx, currentPage.pageNumber)] && DisplayAds[getPageAdjustedIndex(idx, currentPage.pageNumber)].uid) || _.uniqueId('displayAd_');\r\n\r\n return (\r\n
\r\n onImagePanelUpdate(result, getPageAdjustedIndex(idx, currentPage.pageNumber), uid)}\r\n onRemovePanel={() => onRemovePanel(getPageAdjustedIndex(idx, currentPage.pageNumber), currentPage)}\r\n removeCloseButton={currentPage.numberOfAdsInPage === 1}\r\n keyIndex={uid}\r\n isSelectedPanel={currentImageIndex === idx}\r\n oDataConfig={oDataConfig}\r\n isLoadingImage={isLoadingImage}\r\n />\r\n
\r\n );\r\n })\r\n ), [DisplayAds, aid, campaignId, cid, currentImageIndex, currentPage, getPageAdjustedIndex, i18n, isLoadingImage, oDataConfig, onImagePanelUpdate, onRemovePanel, perfMarker, permissions]);\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n

\r\n {i18n.getString(_TL_('Your ads'))}\r\n

\r\n

\r\n {\r\n i18n.getString(_TL_('We create ads for you based on your assets. You can choose to add your own images below.'))\r\n }\r\n

\r\n
\r\n {pageComponent}\r\n {\r\n !hideFooter && (currentPage.numberOfAdsInPage < maxItems && !disablePagination && !_.isEmpty(DisplayAds)) &&\r\n
\r\n setIsCreateAdDialogOpen(true)}\r\n />\r\n
\r\n }\r\n {isCreateAdDialogOpen && (\r\n setIsCreateAdDialogOpen(false)}\r\n onFinalURLFocusOut={onFinalURLFocusOut}\r\n />\r\n )}\r\n \r\n \r\n
\r\n
\r\n );\r\n};\r\n\r\nDisplayAdsContainerWithCopilot.propTypes = {\r\n aid: PropTypes.number.isRequired,\r\n cid: PropTypes.number.isRequired,\r\n campaignId: PropTypes.number.isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n perfMarker: PropTypes.shape({}).isRequired,\r\n permissions: PropTypes.shape({}).isRequired,\r\n onAdsValidation: PropTypes.func.isRequired,\r\n ads: PropTypes.shape({\r\n data: PropTypes.shape({}),\r\n }).isRequired,\r\n oDataConfig: PropTypes.shape({}),\r\n disablePagination: PropTypes.bool,\r\n customStyleFunction: PropTypes.func,\r\n useCustomStyleFunction: PropTypes.bool,\r\n resetFields: PropTypes.bool,\r\n currentImageIndex: PropTypes.number,\r\n isAdGridEditorMode: PropTypes.bool,\r\n isLoadingImage: PropTypes.bool,\r\n hideFooter: PropTypes.bool,\r\n initialAdsCount: PropTypes.number,\r\n};\r\n\r\nDisplayAdsContainerWithCopilot.defaultProps = {\r\n oDataConfig: null,\r\n disablePagination: false,\r\n customStyleFunction: _.noop,\r\n useCustomStyleFunction: false,\r\n resetFields: false,\r\n currentImageIndex: 0,\r\n isAdGridEditorMode: false,\r\n isLoadingImage: false,\r\n hideFooter: false,\r\n initialAdsCount: 0,\r\n};\r\n","import React from 'react';\r\nimport _ from 'underscore';\r\nimport PropTypes from 'prop-types';\r\nimport { ErrorMessages } from '@bingads-webui-react/validation';\r\n// import { withComponentErrorLogging } from '@bingads-webui-campaign-react/global-error-options';\r\nimport { DisplayAdsContainer } from './display-ads-container';\r\nimport { AdPreview } from './ad-preview';\r\n\r\nconst getAdsStepStyles = (/* components, theme */) => ({\r\n displayAdPanelRoot: {\r\n marginTop: 20,\r\n width: 500,\r\n minHeight: 181,\r\n padding: 20,\r\n paddingBottom: 20,\r\n background: '#FFFFFF',\r\n boxShadow: '0px 2px 4px rgba(0, 0, 0, 0.1)',\r\n borderRadius: 6,\r\n '& .image-list-item-status-indicator': {\r\n background: 'linear-gradient(180deg, rgba(0, 0, 0, 0) 0%, #000000 100%)',\r\n borderRadius: 6,\r\n width: '170px !important',\r\n height: '96px !important',\r\n paddingTop: '10px !important',\r\n '&:hover': {\r\n '& .edit-button': {\r\n display: 'none',\r\n },\r\n },\r\n '& .placeholder-content': {\r\n color: 'white !important',\r\n },\r\n },\r\n '& .error': {\r\n width: 400,\r\n marginTop: 20,\r\n float: 'left',\r\n },\r\n '& .image-experience-content': {\r\n width: 170,\r\n '& .col-sm-3': {\r\n background: 'linear-gradient(180deg, rgba(0, 0, 0, 0) 0%, #000000 100%)',\r\n borderRadius: 6,\r\n width: '170px !important',\r\n height: '96px !important',\r\n paddingTop: '10px !important',\r\n display: 'flex',\r\n flexWrap: 'wrap',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n '&:hover': {\r\n '& .edit-button': {\r\n display: 'none',\r\n },\r\n },\r\n '& .placeholder-content': {\r\n color: 'white !important',\r\n },\r\n '& .ms-Button': {\r\n width: 56,\r\n height: 24,\r\n marginTop: 10,\r\n },\r\n '& .image-list-content': {\r\n width: '170px !important', // fixed for 16:9 aspect ratio\r\n border: 'none !important',\r\n padding: '0px !important',\r\n },\r\n },\r\n },\r\n '& .image-section-label': {\r\n display: 'flex',\r\n alignItems: 'center',\r\n },\r\n '& .image-list-label': {\r\n fontWeight: 600,\r\n },\r\n '& .image-list-content': {\r\n width: '170px !important', // fixed for 16:9 aspect ratio\r\n border: 'none !important',\r\n padding: '0px !important',\r\n },\r\n '& .image-list-item-video': {\r\n position: 'relative',\r\n width: '170px !important', // fixed for 16:9 aspect ratio\r\n '&:hover': {\r\n '& .edit-button': {\r\n display: 'flex',\r\n },\r\n },\r\n '& .placeholder-content': {\r\n color: 'black !important',\r\n },\r\n\r\n },\r\n '& .image-item-ratio-label': {\r\n paddingTop: 10,\r\n },\r\n '& .thumbnail-preview': {\r\n borderRadius: 6,\r\n filter: 'drop-shadow(0px 0.6px 1.8px rgba(0, 0, 0, 0.1)) drop-shadow(0px 3.2px 7.2px rgba(0, 0, 0, 0.13))',\r\n width: '170px !important',\r\n height: '96px !important',\r\n },\r\n },\r\n selectedPanel: {\r\n border: '1px solid #0078D4',\r\n },\r\n displayAdPanelHeader: {\r\n display: 'flex',\r\n width: '100%',\r\n justifyContent: 'space-between',\r\n },\r\n displayAdPanelButton: {\r\n justifyContent: 'flex-end',\r\n display: 'none',\r\n cursor: 'pointer',\r\n borderRadius: 99,\r\n background: '#FFFFFF',\r\n width: 32,\r\n height: 32,\r\n },\r\n displayAdPanelButtonContainer: {\r\n position: 'absolute',\r\n left: '50%',\r\n top: '50%',\r\n transform: 'translate(-50%, -50%)',\r\n columnGap: '2px',\r\n display: 'flex',\r\n },\r\n adPreviewSizeTitle: {\r\n fontSize: 18,\r\n fontWeight: 600,\r\n },\r\n previewContainer: {\r\n height: 280,\r\n width: 498,\r\n },\r\n adPreviewSizeHeader: {\r\n height: 40,\r\n },\r\n adPreviewPanel: {\r\n width: 540,\r\n padding: 20,\r\n paddingBottom: 20,\r\n display: 'flex',\r\n flexWrap: 'wrap',\r\n justifyContent: 'center',\r\n },\r\n displayAd: {\r\n borderRadius: '6px',\r\n filter: 'drop-shadow(0px 0.6px 1.8px rgba(0, 0, 0, 0.1)) drop-shadow(0px 3.2px 7.2px rgba(0, 0, 0, 0.13))',\r\n },\r\n previewTag: {\r\n marginTop: 10,\r\n },\r\n emptyPreview: {\r\n width: '100%',\r\n height: '100%',\r\n backgroundColor: '#F3F2F1',\r\n borderRadius: 6,\r\n },\r\n pagination: {\r\n paddingTop: 10,\r\n width: '100%',\r\n },\r\n pageControls: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n columnGap: '10px',\r\n },\r\n paginationIndicatorDot: {\r\n height: 8,\r\n width: 8,\r\n borderRadius: '50%',\r\n display: 'inline-block',\r\n cursor: 'pointer',\r\n },\r\n paginationButton: {\r\n height: 8,\r\n width: 8,\r\n opacity: 0,\r\n },\r\n paginationIndicator: {\r\n display: 'flex',\r\n columnGap: '2px',\r\n },\r\n displayAdPanelContent: {\r\n display: 'flex',\r\n flexWrap: 'wrap',\r\n },\r\n placementInfoTile: {\r\n paddingTop: 20,\r\n marginLeft: 10,\r\n },\r\n});\r\n\r\nconst containerStyle = {\r\n display: 'flex',\r\n '& .image-list-content': {\r\n border: 'none !important',\r\n padding: '0px !important',\r\n },\r\n};\r\n\r\nexport const AdEditor = ({\r\n aid,\r\n cid,\r\n i18n,\r\n perfMarker,\r\n permissions,\r\n adsModel,\r\n onAdsValidation,\r\n oDataConfig,\r\n resetFields,\r\n serverErrors,\r\n isLoadingImage,\r\n}) => (\r\n
\r\n
\r\n \r\n error.message) : []} />\r\n
\r\n _.noop}\r\n ads={adsModel}\r\n disablePagination\r\n customStyleFunction={getAdsStepStyles}\r\n useCustomStyleFunction\r\n />\r\n
);\r\n\r\nAdEditor.propTypes = {\r\n containerStyle: PropTypes.shape({}).isRequired,\r\n permissions: PropTypes.shape({}).isRequired,\r\n aid: PropTypes.string.isRequired,\r\n cid: PropTypes.string.isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n perfMarker: PropTypes.shape({}).isRequired,\r\n adsModel: PropTypes.shape({\r\n data: PropTypes.shape({}),\r\n }).isRequired,\r\n onAdsValidation: PropTypes.func.isRequired,\r\n oDataConfig: PropTypes.shape({}).isRequired,\r\n resetFields: PropTypes.bool.isRequired,\r\n serverErrors: PropTypes.shape({}),\r\n isLoadingImage: PropTypes.bool.isRequired,\r\n};\r\n\r\nAdEditor.defaultProps = {\r\n serverErrors: null,\r\n};\r\n\r\n/*\r\nconst AdEditorWithErrorLogging = withComponentErrorLogging(\r\n AdEditor,\r\n 'XandrVideoAdsAdEditing'\r\n);\r\n\r\nexport { AdEditorWithErrorLogging as AdEditor };\r\n*/\r\n","import React, { useState, useCallback, useContext, useMemo, useEffect } from 'react';\r\nimport classNames from 'classnames';\r\nimport PropTypes from 'prop-types';\r\nimport _ from 'underscore';\r\nimport { Stack } from '@fluentui/react';\r\nimport { ScopeContext } from '@bingads-webui-react/scope-service';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { PerformanceMarkerContext } from '@bingads-webui-campaign-react/performance-marker-provider';\r\nimport { useFormService } from '@bingads-webui-react/form-core';\r\nimport { useWizardService, matchStepState, STEP_STATES } from '@bingads-webui-react/wizard';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { FormErrorGroup, UnmappedFormErrors } from '@bingads-webui-campaign-react/form-error';\r\nimport { AttentionBeaconGroup } from '@bingads-webui-campaign-react/attention-beacon';\r\nimport { ActuationGroup } from '@bingads-webui-campaign-react/actuator';\r\nimport { getODataConfig } from '../model/constants';\r\nimport { getDisplayAdStepBaseStyles } from './styles';\r\nimport { DisplayAdsContainerWithCopilot, AdPreview } from './index';\r\n\r\nconst StepHeader = ({\r\n title,\r\n description,\r\n}) => {\r\n const i18n = useContext(I18nContext);\r\n\r\n return (\r\n \r\n

\r\n {i18n.getString(title)}\r\n

\r\n {description &&\r\n

\r\n {i18n.getString(description)}\r\n

\r\n }\r\n
\r\n );\r\n};\r\n\r\nStepHeader.propTypes = {\r\n title: PropTypes.string.isRequired,\r\n description: PropTypes.string.isRequired,\r\n};\r\n\r\nexport const DisplayAdsWithCopilot = ({\r\n data = {},\r\n onDataChange,\r\n error,\r\n isAdGridEditorMode,\r\n hideFooter,\r\n}) => {\r\n const {\r\n errors = [],\r\n } = error || {};\r\n\r\n const { scope } = useContext(ScopeContext) || {};\r\n const { cid, aid } = scope.values;\r\n\r\n const activity = useContext(ActivityContext);\r\n\r\n const { state } = useWizardService();\r\n\r\n const classes = useDefaultStyles(getDisplayAdStepBaseStyles);\r\n\r\n const { campaign = {}, editingAdId } = state.context.wizardData;\r\n\r\n const { Id: campaignId } = campaign;\r\n\r\n const currentStates = state.toStrings()[1];\r\n\r\n const i18n = useContext(I18nContext);\r\n\r\n const serverContext = useContext(ServerContext);\r\n const { Permissions, DynamicPermissions } = serverContext || {};\r\n const permissions = useMemo(() => ({ dynamic: { ...DynamicPermissions }, ...Permissions }), [DynamicPermissions, Permissions]);\r\n\r\n const perfMarker = useContext(PerformanceMarkerContext);\r\n\r\n const [currentImageIndex, setCurrentImageIndex] = useState(0);\r\n\r\n const oDataConfig = useMemo(() => getODataConfig(serverContext), [serverContext]);\r\n\r\n const { state: { context: { saveFailed } } } = useFormService();\r\n\r\n\r\n const removeEmptyAds = newAdsData => newAdsData.filter(ad => !_.isEmpty(ad.data));\r\n\r\n const onAdsValidation = useCallback((results) => {\r\n const { data: newAdsData, ...restResults } = results;\r\n\r\n const newAds = removeEmptyAds(newAdsData);\r\n\r\n const dataPatch = {\r\n data: [\r\n ...newAds,\r\n ],\r\n ...restResults,\r\n };\r\n onDataChange({ data: dataPatch, isValid: dataPatch.isValid });\r\n }, [onDataChange]);\r\n\r\n useEffect(() => {\r\n if (activity && matchStepState(state, STEP_STATES.LOADING)) {\r\n activity.signal(`onDisplayAdsStepLoading - ${currentStates}`);\r\n }\r\n\r\n if (activity && matchStepState(state, STEP_STATES.SAVING)) {\r\n activity.signal(`onDisplayAdsStepSaving - ${currentStates}`);\r\n }\r\n }, [activity, currentStates, state]);\r\n\r\n return (\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n {\r\n data && data.data ? (\r\n \r\n ) : null\r\n }\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n );\r\n};\r\n\r\nDisplayAdsWithCopilot.propTypes = {\r\n data: PropTypes.shape({\r\n data: PropTypes.shape({}),\r\n }),\r\n onDataChange: PropTypes.func.isRequired,\r\n error: PropTypes.shape({\r\n errors: PropTypes.arrayOf(PropTypes.shape({})),\r\n }),\r\n isAdGridEditorMode: PropTypes.bool,\r\n hideFooter: PropTypes.bool,\r\n};\r\n\r\nDisplayAdsWithCopilot.defaultProps = {\r\n data: {},\r\n error: {},\r\n isAdGridEditorMode: false,\r\n hideFooter: false,\r\n};\r\n\r\n","import _ from 'underscore';\r\n\r\nexport function getVerifiedTrackingSettings(model) {\r\n const verifiedTrackingSettings = _.get(model, 'VerifiedTrackingSettings');\r\n\r\n if (!verifiedTrackingSettings || verifiedTrackingSettings.length === 0) {\r\n return {};\r\n }\r\n const results = [];\r\n\r\n verifiedTrackingSettings.forEach((setting) => {\r\n const vendor = _.get(setting, 'VerifiedTrackingVendor');\r\n\r\n if (!_.isString(vendor)) {\r\n return;\r\n }\r\n\r\n if (!_.isEqual(vendor, 'IAS') && !_.isEqual(vendor, 'MOAT')) {\r\n return;\r\n }\r\n\r\n const result = {};\r\n\r\n result.vendorName = vendor;\r\n if (_.isEqual(vendor, 'MOAT')) {\r\n results.push(result);\r\n return;\r\n }\r\n\r\n const data = _.get(setting, 'VerifiedTrackingData[0].Data');\r\n\r\n if (!_.isObject(data) || _.isEmpty(data)) {\r\n return;\r\n }\r\n\r\n const keys = _.get(data, 'Keys');\r\n\r\n if (!_.isArray(keys) || _.isEmpty(keys)) {\r\n return;\r\n }\r\n\r\n const values = _.get(data, 'Values');\r\n\r\n if (!_.isArray(values) || _.isEmpty(values)) {\r\n return;\r\n }\r\n\r\n const keyMap = { IAS_advertiserEntityId: 'advertiserEntityId', IAS_publisherEntityId: 'publisherEntityId' };\r\n\r\n\r\n _.each(keys, (key, index) => {\r\n if (keyMap[key]) {\r\n result[keyMap[key]] = values[index];\r\n }\r\n });\r\n results.push(result);\r\n });\r\n\r\n return { VerifiedTrackingSettings: results };\r\n}\r\n","import { useContext } from 'react';\r\nimport _ from 'underscore';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { saveAds } from '@bingads-webui-campaign-react/xandr-video-campaign-shared-components';\r\nimport { ScopeContext } from '@bingads-webui-react/scope-service';\r\nimport { ActivityContext, ScenarioContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { useWizardService } from '@bingads-webui-react/wizard';\r\nimport { ImageRepository } from '@bingads-webui-campaign-react/image-experience';\r\nimport { constants, newImageFromMTObject } from '@bingads-webui-campaign-react/image-experience-model';\r\nimport { useCopilotLoggers } from '@bingads-webui-campaign-react/copilot-loggers';\r\nimport { getAutoCroppedImages } from '@bingads-webui-campaign/image-experience-utils';\r\nimport { parseSync } from '@bingads-webui/safe-json';\r\nimport { getODataConfig } from '../model/constants';\r\nimport { imagePlacementsToImage } from '../model/utl';\r\nimport { getVerifiedTrackingSettings } from '../model/verified-tracking-setting';\r\n\r\nexport const useDisplayAdsRepository = () => {\r\n const i18n = useContext(I18nContext);\r\n\r\n const serverContext = useContext(ServerContext);\r\n const scenarioContext = useContext(ScenarioContext);\r\n\r\n const activity = useContext(ActivityContext);\r\n const { scope } = useContext(ScopeContext);\r\n const { state } = useWizardService();\r\n const { logSuggestionsApplied } = useCopilotLoggers();\r\n\r\n const advertiserCustomerId = _.get(serverContext, ['CurrentAccount', 'AdvertiserCustomerID']);\r\n\r\n const imageRepository = new ImageRepository(advertiserCustomerId, scope.values.aid, getODataConfig(serverContext));\r\n\r\n const load = () => {\r\n const initialAds = state.context.wizardData.savedAdModel;\r\n\r\n if (!initialAds) {\r\n return Promise.resolve({\r\n data: [\r\n {\r\n uid: Math.random(),\r\n data: {\r\n FinalUrls: [],\r\n image: null,\r\n },\r\n },\r\n ],\r\n });\r\n }\r\n const imageAsset = initialAds.Images[0].Asset;\r\n\r\n const verifiedTrackingSetting = getVerifiedTrackingSettings(initialAds);\r\n\r\n const imagePromise = imageRepository.getImageByIdAsync(imageAsset.IdString)\r\n .then((imgObjMT) => {\r\n const imageObject = newImageFromMTObject(imgObjMT, constants.imageSources.Existing);\r\n const croppedImagePlacements = getAutoCroppedImages({\r\n originalImageToCrop: imageObject,\r\n isMultimediaAd: false,\r\n isMultimediaAdinMSANEnabled: false,\r\n imageOption: constants.defaultImageOption,\r\n aspectRatioOption: constants.defaultAspectRatioOption,\r\n isDisplayAds: true,\r\n });\r\n const imageData = imagePlacementsToImage({\r\n crops: croppedImagePlacements,\r\n selected: {\r\n TargetWidth: imageAsset.TargetWidth,\r\n TargetHeight: imageAsset.TargetHeight,\r\n CropWidth: imageAsset.CropWidth,\r\n CropHeight: imageAsset.CropHeight,\r\n CropX: imageAsset.CropX,\r\n CropY: imageAsset.CropY,\r\n },\r\n });\r\n\r\n const metaData = imageObject.metadata;\r\n let uriDecodedMetaData = metaData;\r\n\r\n // while saving we only replace the ',' symbol with %2C. So we need to replace it back to ','\r\n if (metaData) {\r\n uriDecodedMetaData = metaData.replace(/%2C/g, ',');\r\n }\r\n\r\n const decodedMetadata = parseSync(uriDecodedMetaData);\r\n\r\n const creativeData = decodedMetadata ? {\r\n creativeId: imageAsset.IdString,\r\n creativeMeta: decodedMetadata,\r\n } : null;\r\n\r\n const { TrackingUrlTemplate, FinalUrlSuffix, UrlCustomParameters, ImpressionTrackingUrls } = initialAds;\r\n\r\n const savedAd = {\r\n data: [{\r\n uid: Math.random(),\r\n Id: initialAds.Id ? initialAds.Id : null,\r\n data: {\r\n FinalUrls: initialAds.Id ? initialAds && initialAds.FinalUrls : [],\r\n creativeData,\r\n ...imageData.data,\r\n ...verifiedTrackingSetting,\r\n TrackingUrlTemplate,\r\n FinalUrlSuffix,\r\n UrlCustomParameters,\r\n ImpressionTrackingUrls,\r\n },\r\n }],\r\n };\r\n\r\n return savedAd;\r\n });\r\n\r\n return imagePromise;\r\n };\r\n\r\n const save = ({ data }) => {\r\n const {\r\n isCreateAnother,\r\n onSave,\r\n onSaveAndCreateAnother,\r\n isMultiAdFormatAd,\r\n } = state.context.wizardData;\r\n\r\n return new Promise((resolve, reject) => {\r\n saveAds({\r\n ads: isMultiAdFormatAd ? { ...data, adSubType: 'Display' } : data,\r\n campaign: { Id: scope.values.campaignId },\r\n adGroup: { Id: scope.values.adGroupId },\r\n activity,\r\n }, { scenario: scenarioContext.name, i18n, activityLogger: activity }).then((result) => {\r\n if (isCreateAnother) {\r\n onSaveAndCreateAnother(result);\r\n } else {\r\n onSave(result);\r\n }\r\n\r\n const suggestionIds = _.chain(data.data)\r\n .map(ad => _.get(ad, 'data.creativeData.creativeMeta.recommendationId'))\r\n .compact()\r\n .value();\r\n\r\n logSuggestionsApplied(\r\n scope.values.campaignId,\r\n scope.values.adGroupId,\r\n undefined /* textSuggestions */,\r\n suggestionIds\r\n );\r\n\r\n resolve();\r\n }).catch(() => {\r\n reject();\r\n });\r\n });\r\n };\r\n\r\n return {\r\n load,\r\n save,\r\n };\r\n};\r\n","import React, { useContext, useCallback, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { Stack, PrimaryButton, DefaultButton } from '@fluentui/react';\r\nimport {\r\n useWizardService,\r\n matchStepState,\r\n STEP_STATES,\r\n WIZARD_EVENTS,\r\n} from '@bingads-webui-react/wizard';\r\nimport { CancelButton } from '@bingads-webui-react/wizard-ui-library';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\n\r\nconst Save = () => {\r\n const i18n = useContext(I18nContext);\r\n\r\n const activity = useContext(ActivityContext);\r\n\r\n const { state, send } = useWizardService();\r\n const isBlocking = matchStepState(state, STEP_STATES.FETCHING) || matchStepState(state, STEP_STATES.LOADING) || matchStepState(state, STEP_STATES.SAVING);\r\n\r\n const onNextClicked = useCallback(() => {\r\n if (activity) {\r\n activity.signal('onSaveAndPublishClicked');\r\n }\r\n send(WIZARD_EVENTS.UPDATE_WIZARD_DATA, { isCreateAnother: false });\r\n send(WIZARD_EVENTS.SAVE_AND_EXIT);\r\n }, [activity, send]);\r\n\r\n const buttonText = useMemo(() => i18n.getString(_TL_('Save ad')), [i18n]);\r\n\r\n return (\r\n \r\n {buttonText}\r\n \r\n );\r\n};\r\n\r\nexport const SaveAndCreateAnother = () => {\r\n const i18n = useContext(I18nContext);\r\n\r\n const { state, send } = useWizardService();\r\n const isBlocking = matchStepState(state, STEP_STATES.FETCHING) || matchStepState(state, STEP_STATES.LOADING) || matchStepState(state, STEP_STATES.SAVING);\r\n\r\n const onNextClicked = useCallback(() => {\r\n send(WIZARD_EVENTS.UPDATE_WIZARD_DATA, { isCreateAnother: true });\r\n send(WIZARD_EVENTS.SAVE_AND_NEXT);\r\n }, [send]);\r\n\r\n return (\r\n \r\n {i18n.getString(_TL_('Save & create another ad'))}\r\n \r\n );\r\n};\r\n\r\n\r\nexport const EditAdFooter = ({\r\n cancelButtonText,\r\n}) => (\r\n \r\n \r\n \r\n \r\n \r\n);\r\nEditAdFooter.propTypes = {\r\n cancelButtonText: PropTypes.string,\r\n};\r\nEditAdFooter.defaultProps = {\r\n cancelButtonText: undefined,\r\n};\r\n","import React, { useMemo, useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { PerformanceMarkerProvider } from '@bingads-webui-campaign-react/performance-marker-provider';\r\nimport { Scenario, Activity } from '@bingads-webui-react/hoc-with-signal';\r\nimport { WizardPerfMarker } from '@bingads-webui-campaign/wizard-performance-marker';\r\nimport { InstrumentationContext } from '@bingads-webui-react/hoc-with-instrumentation';\r\nimport {\r\n Wizard,\r\n LayoutContainer,\r\n Layout,\r\n StepContainer,\r\n} from '@bingads-webui-react/wizard';\r\nimport {\r\n BusyBlocker,\r\n CancelWizardDialog,\r\n DefaultTemplate,\r\n} from '@bingads-webui-react/wizard-ui-library';\r\nimport { withLoggingContext } from '@bingads-webui-campaign-react/copilot-loggers';\r\nimport { withRecommendationContext } from '@bingads-webui-campaign-react/perf-max-recommendation';\r\nimport { FluentProvider, webLightTheme } from '@fluentui/react-components';\r\nimport { DisplayAdsWithCopilot } from '../ad-components';\r\nimport { useDisplayAdsRepository } from './use-display-ads-repository';\r\nimport { EditAdFooter } from './edit-ad-footer';\r\n\r\nconst DISPLAY_AD = 'Display Ad';\r\n\r\nconst StepConfig = [{\r\n id: DISPLAY_AD,\r\n view: props => (\r\n \r\n \r\n \r\n ),\r\n repository: useDisplayAdsRepository,\r\n}];\r\n\r\nconst EditDisplayAdWizardInternal = ({\r\n gridData,\r\n perfMarker,\r\n onCancel,\r\n onSave,\r\n onSaveAndCreateAnother,\r\n isMultiAdFormatAd,\r\n}) => {\r\n const instrumentation = useContext(InstrumentationContext);\r\n\r\n const wizardPerfMarker = useMemo(() => (\r\n perfMarker.createChild('DisplayAdEditAdWizard')\r\n ), [perfMarker]);\r\n\r\n const config = useMemo(() => ({\r\n id: 'display-plus-wizard',\r\n initialStep: DISPLAY_AD,\r\n steps: StepConfig,\r\n actions: {\r\n onDone: () => { },\r\n onExited: () => onCancel(),\r\n },\r\n initialWizardData: {\r\n savedAdModel: gridData,\r\n onSave,\r\n onSaveAndCreateAnother,\r\n isMultiAdFormatAd,\r\n },\r\n attachStepActivities: false,\r\n }), [gridData, onCancel, onSave, onSaveAndCreateAnother, isMultiAdFormatAd]);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nEditDisplayAdWizardInternal.propTypes = {\r\n gridData: PropTypes.object.isRequired,\r\n perfMarker: PropTypes.object.isRequired,\r\n onCancel: PropTypes.func.isRequired,\r\n onSave: PropTypes.func.isRequired,\r\n onSaveAndCreateAnother: PropTypes.func.isRequired,\r\n isMultiAdFormatAd: PropTypes.bool,\r\n};\r\n\r\nEditDisplayAdWizardInternal.defaultProps = {\r\n isMultiAdFormatAd: false,\r\n};\r\n\r\nexport const EditDisplayAdWizard = withLoggingContext(withRecommendationContext(EditDisplayAdWizardInternal));\r\n","import { withSignal, CommonEventParser } from '@bingads-webui-react/hoc-with-signal';\r\nimport {\r\n PrimaryButton as FabricPrimaryButton,\r\n DefaultButton as FabricDefaultButton,\r\n Link as FabricLink,\r\n TextField as FabricTextField,\r\n IconButton as FabricIconButton,\r\n} from '@bingads-webui-react/fabric-control';\r\n\r\nexport const PrimaryButton = withSignal(FabricPrimaryButton, {\r\n onClick: CommonEventParser,\r\n});\r\n\r\nexport const DefaultButton = withSignal(FabricDefaultButton, {\r\n onClick: CommonEventParser,\r\n});\r\n\r\nexport const Link = withSignal(FabricLink, {\r\n onClick: CommonEventParser,\r\n});\r\n\r\nexport const TextField = withSignal(FabricTextField, {\r\n onChange: CommonEventParser,\r\n});\r\n\r\nexport const IconButton = withSignal(FabricIconButton, {\r\n onClick: CommonEventParser,\r\n});\r\n","export const getAdsStepStyles = (/* components, theme */) => ({\r\n videoPanelRoot: {\r\n marginTop: 20,\r\n width: 500,\r\n minHeight: 181,\r\n padding: 20,\r\n paddingBottom: 20,\r\n paddingTop: 10,\r\n background: '#FFFFFF',\r\n boxShadow: '0px 2px 4px rgba(0, 0, 0, 0.1)',\r\n borderRadius: 6,\r\n '& .image-list-item-status-indicator': {\r\n background: 'linear-gradient(180deg, rgba(0, 0, 0, 0) 0%, #000000 100%)',\r\n borderRadius: 6,\r\n width: '170px !important',\r\n height: '96px !important',\r\n paddingTop: '10px !important',\r\n '&:hover': {\r\n '& .edit-button': {\r\n display: 'none',\r\n },\r\n },\r\n '& .placeholder-content': {\r\n color: 'white !important',\r\n },\r\n },\r\n '& .error': {\r\n marginTop: 20,\r\n },\r\n '& .image-experience-content': {\r\n width: 170,\r\n '& .col-sm-3': {\r\n background: 'linear-gradient(180deg, rgba(0, 0, 0, 0) 0%, #000000 100%)',\r\n borderRadius: 6,\r\n width: '170px !important',\r\n height: '96px !important',\r\n paddingTop: '10px !important',\r\n display: 'flex',\r\n flexWrap: 'wrap',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n '&:hover': {\r\n '& .edit-button': {\r\n display: 'none',\r\n },\r\n },\r\n '& .placeholder-content': {\r\n color: 'white !important',\r\n },\r\n '& .ms-Button': {\r\n width: 56,\r\n height: 24,\r\n marginTop: 10,\r\n },\r\n },\r\n '& .add-image-button': {\r\n border: '1px solid #8a8886',\r\n background: '#FFFFFF !important',\r\n fontWeight: 600,\r\n borderRadius: 2,\r\n '&:before': {\r\n content: '\"\\\\E710\"',\r\n color: '#0078D4',\r\n marginRight: 8,\r\n fontFamily: 'MsAds MDL2 Assets',\r\n },\r\n },\r\n },\r\n '& .image-section-label': {\r\n display: 'flex',\r\n alignItems: 'center',\r\n },\r\n '& .image-list-label': {\r\n fontWeight: 600,\r\n },\r\n '& .image-list-content': {\r\n width: '170px !important', // fixed for 16:9 aspect ratio\r\n border: 'none !important',\r\n padding: '0px !important',\r\n },\r\n '& .image-list-item-video': {\r\n position: 'relative',\r\n backgroundColor: 'none !important',\r\n width: '170px !important', // fixed for 16:9 aspect ratio\r\n '&:hover': {\r\n '& .edit-button': {\r\n display: 'flex',\r\n },\r\n },\r\n '& .placeholder-content': {\r\n color: 'black !important',\r\n },\r\n\r\n },\r\n '& .image-item-ratio-label': {\r\n paddingTop: 10,\r\n },\r\n '& .thumbnail-preview': {\r\n borderRadius: 6,\r\n filter: 'drop-shadow(0px 0.6px 1.8px rgba(0, 0, 0, 0.1)) drop-shadow(0px 3.2px 7.2px rgba(0, 0, 0, 0.13))',\r\n width: '170px !important',\r\n height: '96px !important',\r\n },\r\n },\r\n videoRepairPanelRoot: {\r\n marginTop: 20,\r\n width: 800,\r\n minHeight: 181,\r\n padding: 20,\r\n paddingBottom: 20,\r\n paddingTop: 10,\r\n background: '#FFFFFF',\r\n boxShadow: '0px 2px 4px rgba(0, 0, 0, 0.1)',\r\n borderRadius: 6,\r\n '& .image-list-item-status-indicator': {\r\n background: 'linear-gradient(180deg, rgba(0, 0, 0, 0) 0%, #000000 100%)',\r\n borderRadius: 6,\r\n width: '170px !important',\r\n height: '96px !important',\r\n paddingTop: '10px !important',\r\n '&:hover': {\r\n '& .edit-button': {\r\n display: 'none',\r\n },\r\n },\r\n '& .placeholder-content': {\r\n color: 'white !important',\r\n },\r\n },\r\n '& .error': {\r\n marginTop: 20,\r\n },\r\n '& .image-experience-content': {\r\n width: 170,\r\n '& .col-sm-3': {\r\n background: 'linear-gradient(180deg, rgba(0, 0, 0, 0) 0%, #000000 100%)',\r\n borderRadius: 6,\r\n width: '170px !important',\r\n height: '96px !important',\r\n paddingTop: '10px !important',\r\n display: 'flex',\r\n flexWrap: 'wrap',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n '&:hover': {\r\n '& .edit-button': {\r\n display: 'none',\r\n },\r\n },\r\n '& .placeholder-content': {\r\n color: 'white !important',\r\n },\r\n '& .ms-Button': {\r\n width: 56,\r\n height: 24,\r\n marginTop: 10,\r\n },\r\n },\r\n '& .add-image-button': {\r\n border: '1px solid #8a8886',\r\n background: '#FFFFFF !important',\r\n fontWeight: 600,\r\n borderRadius: 2,\r\n '&:before': {\r\n content: '\"\\\\E710\"',\r\n color: '#0078D4',\r\n marginRight: 8,\r\n fontFamily: 'MsAds MDL2 Assets',\r\n },\r\n },\r\n },\r\n '& .image-section-label': {\r\n display: 'flex',\r\n alignItems: 'center',\r\n },\r\n '& .image-list-label': {\r\n fontWeight: 600,\r\n },\r\n '& .image-list-content': {\r\n width: '170px !important', // fixed for 16:9 aspect ratio\r\n border: 'none !important',\r\n padding: '0px !important',\r\n },\r\n '& .image-list-item-video': {\r\n position: 'relative',\r\n backgroundColor: 'none !important',\r\n width: '170px !important', // fixed for 16:9 aspect ratio\r\n '&:hover': {\r\n '& .edit-button': {\r\n display: 'flex',\r\n },\r\n },\r\n '& .placeholder-content': {\r\n color: 'black !important',\r\n },\r\n\r\n },\r\n '& .image-item-ratio-label': {\r\n paddingTop: 10,\r\n },\r\n '& .thumbnail-preview': {\r\n borderRadius: 6,\r\n filter: 'drop-shadow(0px 0.6px 1.8px rgba(0, 0, 0, 0.1)) drop-shadow(0px 3.2px 7.2px rgba(0, 0, 0, 0.13))',\r\n width: '170px !important',\r\n height: '96px !important',\r\n },\r\n },\r\n selectedPanel: {\r\n border: '1px solid #0078D4',\r\n },\r\n videoPanelHeader: {\r\n display: 'flex',\r\n width: '100%',\r\n justifyContent: 'flex-end',\r\n height: 5,\r\n },\r\n adPreviewTitle: {\r\n fontSize: 18,\r\n fontWeight: 600,\r\n },\r\n previewContainer: {\r\n width: '100%',\r\n },\r\n adPreviewHeader: {\r\n height: 40,\r\n },\r\n adPreviewRoot: {\r\n maxWidth: '540px',\r\n width: '100%',\r\n padding: 20,\r\n paddingBottom: 20,\r\n position: 'sticky',\r\n top: '0px',\r\n display: 'flex',\r\n flexWrap: 'wrap',\r\n },\r\n video: {\r\n borderRadius: '6px',\r\n filter: 'drop-shadow(0px 0.6px 1.8px rgba(0, 0, 0, 0.1)) drop-shadow(0px 3.2px 7.2px rgba(0, 0, 0, 0.13))',\r\n },\r\n previewTag: {\r\n marginTop: 10,\r\n },\r\n pagination: {\r\n paddingTop: 10,\r\n width: '100%',\r\n },\r\n pageControls: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n columnGap: '10px',\r\n },\r\n paginationIndicatorDot: {\r\n height: 8,\r\n width: 8,\r\n borderRadius: '50%',\r\n display: 'inline-block',\r\n cursor: 'pointer',\r\n },\r\n paginationButton: {\r\n height: 8,\r\n width: 8,\r\n opacity: 0,\r\n },\r\n paginationIndicator: {\r\n display: 'flex',\r\n columnGap: '2px',\r\n },\r\n videoPanelContent: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n },\r\n placementInfoTile: {\r\n paddingTop: 20,\r\n marginLeft: 10,\r\n },\r\n placementInfos: {\r\n display: 'flex',\r\n flexWrap: 'wrap',\r\n columnGap: 10,\r\n rowGap: '5px',\r\n alignItems: 'center',\r\n },\r\n enabledPlacement: {\r\n backgroundColor: '#DFF6DD',\r\n padding: '3px 5px',\r\n borderRadius: 4,\r\n },\r\n enabledText: {\r\n color: '#0C5E0C',\r\n fontWeight: 600,\r\n display: 'flex',\r\n alignItems: 'center',\r\n columnGap: 5,\r\n },\r\n disabledPlacement: {\r\n backgroundColor: '#F3F2F1',\r\n padding: '3px 5px',\r\n borderRadius: 4,\r\n },\r\n disabledText: {\r\n color: '#605E5C',\r\n fontWeight: 600,\r\n display: 'flex',\r\n alignItems: 'center',\r\n columnGap: 5,\r\n },\r\n fontStyle: {\r\n fontSize: 14,\r\n fontWeight: 600,\r\n },\r\n placementLabel: {\r\n paddingTop: 0,\r\n paddingBottom: 0,\r\n },\r\n placmentResolution: {\r\n paddingTop: 5,\r\n paddingBottom: 5,\r\n },\r\n videoPanelFinalUrlContainer: {\r\n width: 45,\r\n },\r\n starStyle: {\r\n fontSize: 20,\r\n },\r\n});\r\n\r\nexport const getImageSuggestionCarouselStyles = () => ({\r\n imageSuggestionCarouselRoot: {\r\n '& .image-suggestion-carousel-root': {\r\n '& .panel': {\r\n backgroundColor: 'transparent',\r\n\r\n '& .helpbutton': {\r\n margin: '4px 0px',\r\n },\r\n },\r\n },\r\n marginTop: 10,\r\n },\r\n croppedImage: {\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n width: '107px',\r\n height: '76px',\r\n background: '#F3F2F1',\r\n },\r\n});\r\n","/* eslint-disable jsx-a11y/no-static-element-interactions */\r\n/* eslint-disable jsx-a11y/anchor-is-valid */\r\n/* eslint-disable jsx-a11y/media-has-caption */\r\nimport React, { useRef, useEffect, useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport _ from 'underscore';\r\nimport { Text, FontIcon } from '@bingads-webui-react/fabric-control';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { ClipchampPlayer } from '@bingads-webui-campaign-react/clipchamp-player';\r\nimport { Link } from '../common/shared-components';\r\nimport { getAdsStepStyles } from './styles';\r\n\r\nconst ITEMS_PER_PAGE = 10;\r\n\r\nexport const AdPreview = (props) => {\r\n const {\r\n i18n,\r\n ads,\r\n onUpdateCurrentVideoIndex,\r\n disablePagination,\r\n customStyleFunction,\r\n useCustomStyleFunction,\r\n permissions,\r\n loadClipchampPlayer,\r\n } = props;\r\n\r\n const videos = (ads && ads.data && _.isArray(ads.data)) ? ads.data : [];\r\n\r\n const videoRef = useRef();\r\n\r\n const defaultClasses = useDefaultStyles(getAdsStepStyles);\r\n\r\n const customClasses = useDefaultStyles(customStyleFunction);\r\n\r\n const classes = useCustomStyleFunction ? customClasses : defaultClasses;\r\n\r\n const { currentPageIndex } = ads;\r\n\r\n const [currentVideoIdx, setCurrentVideoIdx] = useState(0);\r\n\r\n const [videoHeight, setVideoHeight] = useState('280'); // default 280 height for horizontal videos\r\n const videoTemplateUIEnabled = permissions && permissions.dynamic && permissions.dynamic.VideoTemplateUI;\r\n\r\n const getPageAdjustedIndex = (idx, pageNumber = null) => {\r\n const page = pageNumber || currentPageIndex;\r\n\r\n const val = (((page - 1) * ITEMS_PER_PAGE) + idx);\r\n\r\n return val;\r\n };\r\n\r\n const goToPrevVideo = () => {\r\n setCurrentVideoIdx(currentVideoIdx - 1);\r\n };\r\n\r\n const goToNextVideo = () => {\r\n setCurrentVideoIdx(currentVideoIdx + 1);\r\n };\r\n\r\n const goToVideoIndex = (idx) => {\r\n setCurrentVideoIdx(idx);\r\n };\r\n\r\n const videosInPage = videos.slice(getPageAdjustedIndex(0), getPageAdjustedIndex(9) + 1);\r\n\r\n const currentVideo = videos[getPageAdjustedIndex(currentVideoIdx)] || videos[0];\r\n\r\n useEffect(() => {\r\n setCurrentVideoIdx(0);\r\n }, [currentPageIndex]);\r\n\r\n useEffect(() => {\r\n if (currentVideoIdx > videosInPage.length - 1) {\r\n setCurrentVideoIdx(0);\r\n }\r\n onUpdateCurrentVideoIndex(currentVideoIdx);\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [currentVideoIdx, videosInPage.length]);\r\n\r\n const source = (currentVideo && currentVideo.data && currentVideo.data.video && currentVideo.data.video.src) || '';\r\n\r\n useEffect(() => {\r\n if (videoRef.current) {\r\n videoRef.current.load();\r\n }\r\n }, [source]);\r\n\r\n\r\n useEffect(() => {\r\n if (currentVideo?.data?.video) {\r\n const { height, width } = currentVideo.data.video;\r\n const isVertical = height > width;\r\n\r\n if (isVertical) {\r\n setVideoHeight('420');\r\n } else {\r\n setVideoHeight('280');\r\n }\r\n }\r\n }, [currentVideo]);\r\n\r\n return (\r\n
\r\n
\r\n {i18n.getString(_TL_('Ad preview'))} \r\n
\r\n
\r\n {videoTemplateUIEnabled ? (\r\n \r\n ) : (\r\n \r\n )}\r\n
\r\n {\r\n !disablePagination && videosInPage.length > 1 && (\r\n
\r\n
\r\n \r\n {i18n.getString(_TL_('Previous ad'))} \r\n \r\n
\r\n {\r\n videosInPage.map((video, idx) => (\r\n
\r\n goToVideoIndex(idx)} onClick={() => goToVideoIndex(idx)} className={classes.paginationIndicatorDot} style={{ backgroundColor: getPageAdjustedIndex(idx) === getPageAdjustedIndex(currentVideoIdx) ? '#0078d4' : '#c8c6c4' }} />\r\n
\r\n ))\r\n }\r\n
\r\n \r\n {i18n.getString(_TL_('Next ad'))} \r\n \r\n
\r\n
\r\n )\r\n }\r\n
\r\n \r\n {i18n.getString(_TL_('This is an example of what your video ad might look like. Depending on placement, the actual ad shown may appear differently.'))}\r\n \r\n
\r\n
\r\n );\r\n};\r\n\r\nAdPreview.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n ads: PropTypes.shape({\r\n data: PropTypes.instanceOf(Array),\r\n currentPageIndex: PropTypes.number,\r\n }).isRequired,\r\n disablePagination: PropTypes.bool,\r\n onUpdateCurrentVideoIndex: PropTypes.func.isRequired,\r\n customStyleFunction: PropTypes.func,\r\n useCustomStyleFunction: PropTypes.bool,\r\n loadClipchampPlayer: PropTypes.func,\r\n};\r\n\r\nAdPreview.defaultProps = {\r\n disablePagination: false,\r\n customStyleFunction: _.noop,\r\n useCustomStyleFunction: false,\r\n loadClipchampPlayer: _.noop,\r\n};\r\n","\r\nimport React, { useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Button, makeStyles, mergeClasses, shorthands } from '@fluentui/react-components';\r\nimport { AddRegular } from '@fluentui/react-icons';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\n\r\nconst useStyles = makeStyles({\r\n buttonContainer: {\r\n width: '170px',\r\n ...shorthands.border('1px', 'dashed', '#c8c6c4'),\r\n height: '96px',\r\n display: 'flex',\r\n ...shorthands.borderRadius('6px'),\r\n },\r\n buttonContainerMultiple: {\r\n width: '112px',\r\n height: '99px',\r\n },\r\n button: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n flexGrow: 1,\r\n },\r\n addIcon: {\r\n color: '#0078D4',\r\n fontSize: '32px',\r\n },\r\n addIconMultiple: {\r\n fontSize: '22px',\r\n },\r\n});\r\n\r\nexport const AddVideoButton = ({ onClick, multiVideoMode }) => {\r\n const classes = useStyles();\r\n const i18n = useContext(I18nContext);\r\n\r\n return (\r\n
\r\n \r\n
\r\n );\r\n};\r\n\r\nAddVideoButton.propTypes = {\r\n onClick: PropTypes.func.isRequired,\r\n multiVideoMode: PropTypes.bool,\r\n};\r\n\r\nAddVideoButton.defaultProps = {\r\n multiVideoMode: false,\r\n};\r\n","export const overrideClasses = {\r\n image: {\r\n borderRadius: 6,\r\n },\r\n imageContainer: {\r\n height: 80,\r\n display: 'flex',\r\n },\r\n imageParentContainer: {\r\n display: 'flex',\r\n columnGap: '10px',\r\n },\r\n imageClickableContainer: {\r\n width: 107,\r\n '& img': {\r\n verticalAlign: 'top',\r\n },\r\n },\r\n seeAll: {\r\n bottom: 12,\r\n maxWidth: 'initial',\r\n },\r\n parentContainer: {\r\n '& $panelHeading': {\r\n display: 'flex',\r\n border: 'none',\r\n '& $panelTitle.collapsible-title': {\r\n flexGrow: 0,\r\n fontSize: '12px',\r\n fontWeight: 600,\r\n lineHeight: '24px',\r\n '& > a': {\r\n '& .helpbutton': {\r\n fontSize: '14px',\r\n lineHeight: '24px',\r\n display: 'inline',\r\n verticalAlign: 'bottom',\r\n },\r\n },\r\n marginTop: 0,\r\n },\r\n },\r\n },\r\n};\r\n","/* eslint-disable jsx-a11y/media-has-caption */\r\nimport React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { CroppedImageView } from '@bingads-webui-campaign-react/cropped-image-view';\r\nimport { PlacementQualityToText } from '@bingads-webui-campaign-react/xandr-video-campaign-shared-components';\r\nimport { submitEvent } from '@bingads-webui-universal/accessibility-helper';\r\nimport {\r\n makeStyles,\r\n mergeClasses,\r\n shorthands,\r\n tokens,\r\n Badge,\r\n} from '@fluentui/react-components';\r\nimport { TimerRegular } from '@fluentui/react-icons';\r\nimport { curlyTemplate } from '@bingads-webui-universal/primitive-utilities';\r\nimport { Label } from '@bingads-webui-react/primitive';\r\n\r\nconst useStyles = makeStyles({\r\n container: {\r\n position: 'relative',\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n boxShadow: '0px 0.6px 1.8px 0px rgba(0, 0, 0, 0.10), 0px 3.2px 7.2px 0px rgba(0, 0, 0, 0.13)',\r\n ...shorthands.borderRadius(tokens.borderRadiusLarge),\r\n ...shorthands.overflow('hidden'),\r\n },\r\n overlay: {\r\n position: 'absolute',\r\n top: 0,\r\n left: 0,\r\n right: 0,\r\n bottom: 0,\r\n fontSize: tokens.fontSizeBase200,\r\n },\r\n qualityContainer: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n columnGap: '5px',\r\n marginTop: '5px',\r\n },\r\n info: {\r\n position: 'absolute',\r\n top: '210px',\r\n left: tokens.spacingHorizontalS,\r\n backgroundColor: 'black',\r\n color: 'white',\r\n width: '52px',\r\n fontSize: tokens.fontSizeBase200,\r\n height: tokens.spacingVerticalXXL,\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n ...shorthands.borderRadius(tokens.borderRadiusMedium),\r\n ...shorthands.overflow('hidden'),\r\n },\r\n icon: {\r\n fontSize: tokens.fontSizeBase400,\r\n },\r\n videoContainer: {\r\n position: 'absolute',\r\n top: 0,\r\n left: 0,\r\n right: 0,\r\n bottom: 0,\r\n },\r\n video: {\r\n width: '100%',\r\n height: '100%',\r\n },\r\n});\r\n\r\n// create a description for the video from text in the scenes\r\nconst getVideoDescription = ({ videoAsset, i18n }) => {\r\n const { duration } = videoAsset.template;\r\n const texts = videoAsset.template.scenes.map(scene => scene.text.join(' '));\r\n return curlyTemplate(i18n.getString(_TL_('video recommendation with duration {{duration}} seconds. Description: {{description}}')))({\r\n duration,\r\n description: texts.join(' '),\r\n });\r\n};\r\n\r\nexport const VideoSuggestionCard = ({\r\n videoAsset, resizeHeight, onSelectVideoSuggestion, i18n, showQuality,\r\n}) => {\r\n const classes = useStyles();\r\n const [showVideo, setShowVideo] = React.useState(false);\r\n const src = videoAsset.thumbnailUrl;\r\n const { width } = videoAsset.template;\r\n const { height } = videoAsset.template;\r\n const aspectRatio = width / height;\r\n\r\n // convert seconds to mm:ss\r\n const { duration } = videoAsset.template;\r\n const totalSeconds = duration / 1000;\r\n const minutes = Math.floor((totalSeconds) / 60);\r\n const seconds = Math.floor((totalSeconds) % 60);\r\n const durationString = `${minutes < 10 ? '0' : ''}${minutes}:${seconds < 10 ? '0' : ''}${seconds}`;\r\n const description = getVideoDescription({ videoAsset, i18n });\r\n\r\n return (\r\n
\r\n setShowVideo(true)}\r\n onMouseOut={() => setShowVideo(false)}\r\n onFocus={() => setShowVideo(true)}\r\n onBlur={() => setShowVideo(false)}\r\n aria-label={description}\r\n >\r\n \r\n {showVideo && (\r\n
\r\n \r\n \r\n \r\n
\r\n )}\r\n
\r\n
\r\n \r\n {durationString}\r\n
\r\n
\r\n
\r\n {\r\n showQuality && (\r\n
\r\n \r\n {i18n.getString(PlacementQualityToText[videoAsset.quality])}\r\n
\r\n )\r\n }\r\n
\r\n );\r\n};\r\n\r\nVideoSuggestionCard.propTypes = {\r\n videoAsset: PropTypes.shape({\r\n url: PropTypes.string,\r\n thumbnailUrl: PropTypes.string,\r\n template: PropTypes.shape({\r\n width: PropTypes.number,\r\n height: PropTypes.number,\r\n duration: PropTypes.number,\r\n scenes: PropTypes.arrayOf(PropTypes.shape({\r\n text: PropTypes.arrayOf(PropTypes.string),\r\n })),\r\n }),\r\n }).isRequired,\r\n resizeHeight: PropTypes.number.isRequired,\r\n onSelectVideoSuggestion: PropTypes.func.isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n showQuality: PropTypes.bool,\r\n};\r\n","/* eslint-disable jsx-a11y/media-has-caption */\r\nimport React, { useRef, useCallback, useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classnames from 'classnames';\r\nimport { useCopilotRepositoryContext } from '@bingads-webui/inline-copilot';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { Panel, PanelType, DefaultButton } from '@bingads-webui-react/fabric-control';\r\nimport { RecommendationContext } from '@bingads-webui-campaign-react/perf-max-recommendation';\r\nimport { FluentProvider, webLightTheme } from '@fluentui/react-components';\r\nimport { ReactTemplate } from '@bingads-webui-react/react-template';\r\n\r\nimport { VideoSuggestionCard } from './video-suggestion-card';\r\n\r\nconst getPanelStyles = (components, { palette = {} } = {}) => ({\r\n panel: {\r\n top: 60,\r\n },\r\n subtitle: {\r\n paddingTop: 22,\r\n color: palette.neutralDark,\r\n },\r\n panelHeader: {\r\n paddingLeft: 24,\r\n paddingRight: 24,\r\n alignSelf: 'justify-start',\r\n flexGrow: 1,\r\n },\r\n panelTitle: {\r\n fontSize: 20,\r\n fontWeight: 600,\r\n display: 'inline-block',\r\n lineHeight: '27px',\r\n },\r\n contentHeading: {\r\n paddingTop: 17,\r\n fontSize: '12px',\r\n paddingBottom: 20,\r\n },\r\n gridContainer: {\r\n display: 'grid',\r\n columnGap: '16px',\r\n rowGap: '16px',\r\n gridTemplateColumns: '430px 430px',\r\n },\r\n});\r\n\r\nexport const VideoRecommendationsPanel = ({\r\n i18n, isOpen, close, onSelectVideoSuggestion, permissions,\r\n}) => {\r\n const classes = useDefaultStyles(getPanelStyles);\r\n const contentRef = useRef(null);\r\n const { finalUrl } = useCopilotRepositoryContext();\r\n const [recommendationContext] = useContext(RecommendationContext);\r\n const {\r\n videoAssets,\r\n } = recommendationContext || {};\r\n const isVideoAsAnAssetEnabled = permissions.dynamic.VideoAsAnAsset && !permissions.isAmplifyEnabled;\r\n\r\n const onDismiss = useCallback((evt) => {\r\n const target = evt && evt.currentTarget;\r\n if (evt.key === 'Escape' || (contentRef.current && contentRef.current.closest(`.${classes.panel}`).contains(target))) {\r\n close();\r\n }\r\n }, [classes.panel, close]);\r\n\r\n const onRenderFooterContent = () => (\r\n close()}\r\n text={i18n.getString(_TL_('Cancel'))}\r\n />\r\n );\r\n\r\n const onSelection = (index) => {\r\n onSelectVideoSuggestion(index);\r\n close();\r\n };\r\n\r\n return (\r\n \r\n \r\n
\r\n {text},\r\n finalUrl,\r\n }}\r\n template={i18n.getString(_TL_('{{strong}}Final URL:{{/strong}} {{finalUrl}}'))}\r\n />\r\n
\r\n
\r\n {videoAssets &&\r\n videoAssets.map((videoAsset, index) => ( onSelection(index)}\r\n resizeHeight={242}\r\n i18n={i18n}\r\n showQuality={isVideoAsAnAssetEnabled}\r\n />))\r\n }\r\n
\r\n
\r\n \r\n );\r\n};\r\n\r\nVideoRecommendationsPanel.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n isOpen: PropTypes.bool.isRequired,\r\n close: PropTypes.func.isRequired,\r\n onSelectVideoSuggestion: PropTypes.func.isRequired,\r\n permissions: PropTypes.shape({}).isRequired,\r\n};\r\n","import React, { useContext, useCallback, useState, useMemo, useEffect } from 'react';\r\nimport _ from 'underscore';\r\nimport classNames from 'classnames';\r\nimport PropTypes from 'prop-types';\r\nimport { RecommendationContext } from '@bingads-webui-campaign-react/perf-max-recommendation';\r\nimport { ImageSuggestionCarousel } from '@bingads-webui-campaign-react/image-suggestion-carousel';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { Spinner } from '@fluentui/react-components';\r\nimport { Shimmer, ShimmerElementsGroup, ShimmerElementType, MessageBar, MessageBarType } from '@fluentui/react';\r\nimport { CroppedImageView } from '@bingads-webui-campaign-react/cropped-image-view';\r\nimport { useCopilotLoggers } from '@bingads-webui-campaign-react/copilot-loggers';\r\nimport { overrideClasses } from './carousel-style';\r\nimport { getImageSuggestionCarouselStyles } from './styles';\r\nimport { VideoRecommendationsPanel } from './video-recommendations-panel';\r\n\r\nconst IMAGE_DIM = {\r\n width: 106,\r\n height: 76,\r\n marginRight: 8,\r\n};\r\n\r\nconst initialImageContainerLeftMargin = 10;\r\nconst SuggestionViewImageCount = 5;\r\nconst MaxSuggestionsInCarousel = 15;\r\n\r\nconst LoadingShimmer = ({ i18n }) => {\r\n const shimmerElements = useMemo(() => {\r\n const shimmerElement = [];\r\n\r\n _.each(_.range(SuggestionViewImageCount), () => {\r\n shimmerElement.push({ type: ShimmerElementType.line, height: 76, width: 106 });\r\n shimmerElement.push({ type: ShimmerElementType.gap, width: 10, height: 76 });\r\n });\r\n\r\n return shimmerElement;\r\n }, []);\r\n\r\n return (\r\n
\r\n \r\n } />\r\n
\r\n );\r\n};\r\n\r\nLoadingShimmer.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n};\r\n\r\nconst getImageDimension = src => new Promise((resolve) => {\r\n const img = new Image();\r\n img.src = src;\r\n img.onload = () => {\r\n const width = img.naturalWidth;\r\n const height = img.naturalHeight;\r\n\r\n resolve({\r\n imgWidth: width, imgHeight: height,\r\n });\r\n };\r\n});\r\n\r\nconst ImageView = ({ src }) => {\r\n const [width, setWidth] = useState(0);\r\n const [height, setHeight] = useState(0);\r\n\r\n const aspectRatio = width / height;\r\n const maxWidth = 107;\r\n\r\n const resizeHeight = Math.min(maxWidth / aspectRatio, 76);\r\n\r\n useEffect(() => {\r\n getImageDimension(src).then(({ imgWidth, imgHeight }) => {\r\n setWidth(imgWidth);\r\n setHeight(imgHeight);\r\n });\r\n }, [src]);\r\n\r\n if (!width || !height) {\r\n return
;\r\n }\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nImageView.propTypes = {\r\n src: PropTypes.string.isRequired,\r\n};\r\n\r\nexport const VideoAdsSuggestionCarousel = ({\r\n onSelectVideoSuggestion,\r\n i18n,\r\n permissions,\r\n useBrandKit = false,\r\n isBrandKitEmpty,\r\n setUseBrandKit,\r\n}) => {\r\n // For Video BK will only work with new templates\r\n const isBrandKitEnabled = permissions && permissions.dynamic && (permissions.dynamic.BrandKitUI && permissions.dynamic.VideoTemplateUI);\r\n const [isSeeAllPanelOpen, setIsSeeAllPanelOpen] = useState(false);\r\n const [videosToSuggest, setVideosToSuggest] = useState([]);\r\n\r\n const [recommendationContext, , reportRecommendations] = useContext(RecommendationContext);\r\n const { logSuggestionsViewed } = useCopilotLoggers();\r\n\r\n const {\r\n videoAssets: videoSuggestions,\r\n isLoading,\r\n errorMessage,\r\n } = recommendationContext || {};\r\n\r\n const classes = useDefaultStyles(getImageSuggestionCarouselStyles);\r\n\r\n const { carouselState } = useMemo(() => ({\r\n carouselState: {\r\n carousel: {\r\n isError: _.isEmpty(videoSuggestions),\r\n },\r\n suggestion: {\r\n images: videoSuggestions,\r\n },\r\n },\r\n panelState: {\r\n panelImages: videoSuggestions,\r\n hasMore: false,\r\n },\r\n }), [videoSuggestions]);\r\n\r\n const { suggestion, carousel } = carouselState || {};\r\n const { images: suggestionImages } = suggestion || {};\r\n\r\n const onOffsetChange = useCallback((offset) => {\r\n const viewedImages = videosToSuggest.slice(offset, offset + SuggestionViewImageCount);\r\n const suggestionIds = _.pluck(viewedImages, 'suggestionId');\r\n reportRecommendations({ view: suggestionIds });\r\n logSuggestionsViewed(undefined /* imageSuggestionIds */, suggestionIds);\r\n }, [videosToSuggest, reportRecommendations, logSuggestionsViewed]);\r\n\r\n const onSelectIndex = useCallback((index) => {\r\n onSelectVideoSuggestion(videosToSuggest[index]);\r\n }, [videosToSuggest, onSelectVideoSuggestion]);\r\n\r\n const onSelectImage = useCallback((__, index) => {\r\n onSelectIndex(index);\r\n }, [onSelectIndex]);\r\n\r\n const onSelectSeeAllImages = useCallback(() => {\r\n const suggestionIds = suggestionImages.map(({ suggestionId }) => suggestionId);\r\n\r\n setIsSeeAllPanelOpen(true);\r\n logSuggestionsViewed(undefined /* imageSuggestionIds */, suggestionIds);\r\n }, [logSuggestionsViewed, suggestionImages]);\r\n\r\n const onRenderImage = useCallback((src, classesProp) => (\r\n
\r\n \r\n
\r\n ), [classes.croppedImage]);\r\n\r\n useEffect(() => {\r\n const truncatedImages = _.isArray(suggestionImages) && suggestionImages.slice(0, MaxSuggestionsInCarousel);\r\n setVideosToSuggest(truncatedImages || []);\r\n }, [suggestionImages]);\r\n\r\n return (\r\n
\r\n {isLoading ?\r\n : (\r\n )}\r\n {isSeeAllPanelOpen && (\r\n setIsSeeAllPanelOpen(false)}\r\n onSelectVideoSuggestion={onSelectIndex}\r\n permissions={permissions}\r\n />)}\r\n {errorMessage && (\r\n \r\n {i18n.getString(errorMessage)}\r\n )}\r\n
\r\n );\r\n};\r\n\r\nVideoAdsSuggestionCarousel.propTypes = {\r\n onSelectVideoSuggestion: PropTypes.func.isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n permissions: PropTypes.shape({}).isRequired,\r\n useBrandKit: PropTypes.bool,\r\n isBrandKitEmpty: PropTypes.bool,\r\n setUseBrandKit: PropTypes.func,\r\n};\r\n","import { useContext, useCallback, useState } from 'react';\r\nimport _ from 'underscore';\r\nimport { RecommendationContext } from '@bingads-webui-campaign-react/perf-max-recommendation';\r\nimport { useCopilotRepositoryContext } from '@bingads-webui/inline-copilot';\r\nimport { useCopilotLoggers } from '@bingads-webui-campaign-react/copilot-loggers';\r\nimport { getLocalStorage } from '@bingads-webui/storage';\r\nimport { ScopeContext } from '@bingads-webui-react/scope-service';\r\nimport { PermissionsContext } from '@bingads-webui-react/hoc-with-permissions';\r\nimport { useBrandKitDataService } from '@bingads-webui-campaign-react/brandkit-data-service';\r\nimport { formatBrandkitForAPI } from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\n\r\nconst FetchCount = 10;\r\n\r\nexport const useVideoAdsCopilot = () => {\r\n const [, setRecommendationContext] = useContext(RecommendationContext);\r\n\r\n const repository = useCopilotRepositoryContext();\r\n\r\n const { logBannerGenerated } = useCopilotLoggers();\r\n\r\n const { fetchVideoAdsAssetRecommendations, finalUrl } = repository;\r\n const [isLoadingBrandKit, setIsLoadingBrandkit] = useState(false);\r\n const [brandkit, setBrandKit] = useState(null);\r\n const [isBrandKitEmpty, setIsBrandKitEmpty] = useState(true);\r\n const { scope } = useContext(ScopeContext) || {};\r\n\r\n const { aid } = scope.values;\r\n const permissions = useContext(PermissionsContext);\r\n // For Video BK will only work with new templates\r\n const isBrandKitEnabled = permissions && permissions.dynamic && (permissions.dynamic.BrandKitUI && permissions.dynamic.VideoTemplateUI);\r\n\r\n const { getBrandKitDataByAccId } = useBrandKitDataService();\r\n\r\n const fetchBrandKit = useCallback(async () => {\r\n if (isBrandKitEnabled) {\r\n setIsLoadingBrandkit(true);\r\n const response = await getBrandKitDataByAccId({ accId: aid });\r\n setIsLoadingBrandkit(false);\r\n const isBrandKitHavingData = response && response.BrandKits && response.BrandKits[0] && (!_.isEmpty(response.BrandKits[0].Fonts) ||\r\n !_.isEmpty(response.BrandKits[0].Images) ||\r\n !_.isEmpty(response.BrandKits[0].LandscapeLogos) ||\r\n !_.isEmpty(response.BrandKits[0].Palettes) ||\r\n !_.isEmpty(response.BrandKits[0].SquareLogos));\r\n if (isBrandKitHavingData) {\r\n setIsBrandKitEmpty(false);\r\n const updatedResponse = {\r\n ...response.BrandKits[0],\r\n };\r\n setBrandKit(formatBrandkitForAPI(updatedResponse));\r\n } else {\r\n setIsBrandKitEmpty(true);\r\n }\r\n }\r\n }, [isBrandKitEnabled, getBrandKitDataByAccId, aid, setBrandKit, setIsBrandKitEmpty]);\r\n\r\n const fetch = useCallback((taskManager, useBrandKit) => {\r\n if (!finalUrl || isLoadingBrandKit) {\r\n return;\r\n }\r\n\r\n setRecommendationContext({\r\n isLoading: true,\r\n errorMessage: undefined,\r\n });\r\n\r\n taskManager.addTask({\r\n taskId: isBrandKitEnabled ? `${finalUrl}-brandkit-${useBrandKit}` : finalUrl,\r\n taskFn: () => {\r\n setRecommendationContext({ isLoading: true });\r\n const localStorage = getLocalStorage();\r\n const campaignObjective = localStorage.get('CampaignObjective');\r\n const recommendationType = campaignObjective === 'Awareness' ? 'OLV' : 'CTV';\r\n return fetchVideoAdsAssetRecommendations(FetchCount, false, recommendationType, null, (useBrandKit && brandkit) ? brandkit : null);\r\n },\r\n }).then((response) => {\r\n const { ads } = response.data;\r\n\r\n const videoAssets = ads.map((ad) => {\r\n const {\r\n url, thumbnailUrl, recommendationId, template, videoMetadata,\r\n } = ad;\r\n\r\n return {\r\n url,\r\n thumbnailUrl,\r\n quality: videoMetadata.quality,\r\n width: videoMetadata.width,\r\n height: videoMetadata.height,\r\n sourceVideoBitRate: videoMetadata.sourceVideoBitRate,\r\n suggestionId: recommendationId,\r\n RecommendationId: recommendationId,\r\n template,\r\n };\r\n });\r\n\r\n logBannerGenerated(finalUrl, {\r\n RecommendedAssets: {\r\n VideoAssets: videoAssets,\r\n },\r\n });\r\n\r\n setRecommendationContext({\r\n isLoading: false,\r\n finalUrl,\r\n videoAssets,\r\n });\r\n }).catch(() => {\r\n setRecommendationContext({\r\n isLoading: false,\r\n finalUrl,\r\n videoAssets: [],\r\n errorMessage: _TL_('Unable to generate recommendations for this Final URL'),\r\n });\r\n });\r\n }, [fetchVideoAdsAssetRecommendations, finalUrl, logBannerGenerated, setRecommendationContext, isLoadingBrandKit, brandkit]);\r\n\r\n return {\r\n fetch,\r\n finalUrlForCopilot: finalUrl,\r\n isBrandKitEmpty,\r\n fetchBrandKit,\r\n };\r\n};\r\n","import React from 'react';\r\nimport _ from 'underscore';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport { Label, Icon } from '@bingads-webui-react/fabric-control';\r\nimport { HelpPopupInline } from '@bingads-webui-react/help-popup';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { getAdsStepStyles } from './styles';\r\n\r\nconst convertBpsToKbps = (bps) => {\r\n // Divide bps by 1,000\r\n const Kbps = bps / (10 ** 3);\r\n\r\n return Math.floor(Kbps);\r\n};\r\n\r\nconst Placements = {\r\n AUDIENCE_NETWORK: _TL_('Microsoft Advertising Network'),\r\n GENERAL_CTV: _TL_('General CTV'),\r\n NETFLIX: _TL_('Premium CTV'),\r\n};\r\n\r\nexport const PlacementQualities = {\r\n PERFECT: 7,\r\n EXCELLENT_AND_PERFECT: 6,\r\n PERFECT_AND_GOOD: 5,\r\n ONLY_PERFECT: 4,\r\n EXCELLENT: 3,\r\n ONLY_EXCELLENT: 2,\r\n GOOD: 1,\r\n NONE: 0,\r\n};\r\n\r\n// recently changed wording for each quality label\r\n// perfect -> excellent\r\n// excellent -> good\r\n// good -> fair\r\nexport const PlacementQualityToText = {\r\n [PlacementQualities.PERFECT]: _TL_('Excellent'),\r\n [PlacementQualities.EXCELLENT]: _TL_('Good'),\r\n [PlacementQualities.GOOD]: _TL_('Fair'),\r\n [PlacementQualities.NONE]: _TL_('Poor'),\r\n [PlacementQualities.PERFECT_AND_GOOD]: _TL_('Excellent'),\r\n [PlacementQualities.EXCELLENT_AND_PERFECT]: _TL_('Excellent'),\r\n [PlacementQualities.ONLY_PERFECT]: _TL_('Excellent'),\r\n [PlacementQualities.ONLY_EXCELLENT]: _TL_('Good'),\r\n};\r\n\r\nconst QualityToPlacements = {\r\n [PlacementQualities.PERFECT]: { enabled: [Placements.AUDIENCE_NETWORK, Placements.GENERAL_CTV, Placements.NETFLIX], disabled: [] },\r\n [PlacementQualities.EXCELLENT]: { enabled: [Placements.AUDIENCE_NETWORK, Placements.GENERAL_CTV], disabled: [Placements.NETFLIX] },\r\n [PlacementQualities.GOOD]: { enabled: [Placements.AUDIENCE_NETWORK], disabled: [Placements.GENERAL_CTV, Placements.NETFLIX] },\r\n [PlacementQualities.NONE]: { enabled: [], disabled: [Placements.AUDIENCE_NETWORK, Placements.GENERAL_CTV, Placements.NETFLIX] },\r\n [PlacementQualities.PERFECT_AND_GOOD]: { enabled: [Placements.AUDIENCE_NETWORK, Placements.GENERAL_CTV], disabled: [Placements.NETFLIX] },\r\n [PlacementQualities.EXCELLENT_AND_PERFECT]: { enabled: [Placements.GENERAL_CTV, Placements.NETFLIX], disabled: [Placements.AUDIENCE_NETWORK] },\r\n [PlacementQualities.ONLY_PERFECT]: { enabled: [Placements.NETFLIX], disabled: [Placements.AUDIENCE_NETWORK, Placements.GENERAL_CTV] },\r\n [PlacementQualities.ONLY_EXCELLENT]: { enabled: [Placements.GENERAL_CTV], disabled: [Placements.AUDIENCE_NETWORK, Placements.NETFLIX] },\r\n};\r\n\r\nconst StarsToQuality = {\r\n [PlacementQualities.PERFECT]: 3,\r\n [PlacementQualities.EXCELLENT_AND_PERFECT]: 3,\r\n [PlacementQualities.PERFECT_AND_GOOD]: 3,\r\n [PlacementQualities.ONLY_PERFECT]: 3,\r\n [PlacementQualities.EXCELLENT]: 2,\r\n [PlacementQualities.ONLY_EXCELLENT]: 2,\r\n [PlacementQualities.GOOD]: 1,\r\n [PlacementQualities.NONE]: 0,\r\n};\r\n\r\nexport const PlacementTitle = ({ i18n, classes, titleText }) => (\r\n
\r\n \r\n \r\n
\r\n);\r\n\r\nPlacementTitle.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n classes: PropTypes.shape({\r\n placementLabel: PropTypes.string.isRequired,\r\n }).isRequired,\r\n titleText: PropTypes.string.isRequired,\r\n};\r\n\r\n\r\nexport const PlacementInfo = (props) => {\r\n const {\r\n i18n,\r\n videoAd,\r\n } = props;\r\n\r\n const defaultClasses = useDefaultStyles(getAdsStepStyles);\r\n\r\n const classes = defaultClasses;\r\n\r\n if (videoAd && videoAd.video) {\r\n const {\r\n width, height, quality = 0, sourceVideoBitRate,\r\n } = videoAd.video;\r\n\r\n return (\r\n
\r\n \r\n
{width}px x {height}px, {`${convertBpsToKbps(sourceVideoBitRate)} ${_TL_('Kbps')}`} ({PlacementQualityToText[quality]} {i18n.getString(_TL_('quality'))})
\r\n
\r\n {QualityToPlacements[quality].enabled.map(placement => (\r\n
{i18n.getString(placement)}
\r\n ))}\r\n {QualityToPlacements[quality].disabled.map(placement => (\r\n
{i18n.getString(placement)}
\r\n ))}\r\n
\r\n
\r\n );\r\n }\r\n\r\n return null;\r\n};\r\n\r\nPlacementInfo.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n videoAd: PropTypes.shape({\r\n video: PropTypes.shape({\r\n width: PropTypes.number,\r\n height: PropTypes.number,\r\n quality: PropTypes.number,\r\n sourceVideoBitRate: PropTypes.number,\r\n }),\r\n }).isRequired,\r\n};\r\n\r\n\r\nexport const PlacementInfoWithStars = (props) => {\r\n const {\r\n i18n,\r\n videoAd,\r\n } = props;\r\n\r\n const defaultClasses = useDefaultStyles(getAdsStepStyles);\r\n\r\n const classes = defaultClasses;\r\n\r\n if (videoAd && videoAd.video) {\r\n const {\r\n width, height, quality = 0, sourceVideoBitRate,\r\n } = videoAd.video;\r\n\r\n const numberOfStars = StarsToQuality[quality] || 0;\r\n\r\n const numberOfDisabledStars = 3 - numberOfStars;\r\n\r\n return (\r\n
\r\n \r\n
\r\n {\r\n _.range(numberOfStars).map(idx => (\r\n \r\n ))\r\n }\r\n {\r\n numberOfDisabledStars > 0 && _.range(numberOfDisabledStars).map(idx => (\r\n \r\n ))\r\n }\r\n ({PlacementQualityToText[quality]} {i18n.getString(_TL_('quality'))})\r\n
\r\n
{width}px x {height}px, {`${convertBpsToKbps(sourceVideoBitRate)} ${_TL_('Kbps')}`}
\r\n
\r\n );\r\n }\r\n\r\n return null;\r\n};\r\n\r\n\r\nPlacementInfoWithStars.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n videoAd: PropTypes.shape({\r\n video: PropTypes.shape({\r\n width: PropTypes.number,\r\n height: PropTypes.number,\r\n quality: PropTypes.number,\r\n sourceVideoBitRate: PropTypes.number,\r\n }),\r\n }).isRequired,\r\n};\r\n","import { has } from 'underscore';\r\n\r\nexport const isBulkWrappedResponse = bulkResult => has(bulkResult, 'entity'); // && has(bulkResult, 'errors');\r\n","import { identity, contains, isEmpty, isEqual } from 'underscore';\r\nimport { mapBulkUpsertErrors } from './map-bulk-upsert-errors';\r\n\r\nexport const ERROR_ENTITY = {\r\n Campaign: 'campaign',\r\n AdGroup: 'adGroup',\r\n AssetGroup: 'assetGroup',\r\n Ad: 'ad',\r\n CampaignLocation: 'campaignLocation',\r\n CampaignRadius: 'campaignRadius',\r\n CampaignNegativeLocation: 'campaignNegativeLocation',\r\n CampaignLocationIntent: 'campaignLocationIntent',\r\n CampaignDayTimeCriterion: 'campaignDayTimeCriterion',\r\n CampaignNegativeWebpage: 'campaignNegativeWebpage',\r\n};\r\n\r\nexport const serverErrorsCompare = (prev, curr) => !(!isEmpty(curr) && !isEqual(prev, curr));\r\n\r\nconst getBulkUploadEntityType = entitySchema =>\r\n (entitySchema.properties['bulk-upload-type'] || {}).value ||\r\n entitySchema.name;\r\n\r\nexport const getBulkUploadErrorType = entitySchema =>\r\n `${getBulkUploadEntityType(entitySchema)} Error`;\r\n\r\nexport const modelToViewModelForBulkErrors = (errors, bulkUpsertEntityErrorMap, scenario, i18n, activityLogger) =>\r\n mapBulkUpsertErrors(errors, bulkUpsertEntityErrorMap, /* errorProcessor */ identity, scenario, i18n, activityLogger);\r\n\r\nconst ReferencedEntityInvalidIdErrors = ['CampaignServiceInvalidCampaignId', 'CampaignServiceFutureFeatureCode', 'CampaignServiceInvalidAdGroupId'];\r\nexport const removeReferencedEntityInvalidIdErrors = bulkErrors =>\r\n bulkErrors.filter(({ Error }) => !contains(ReferencedEntityInvalidIdErrors, Error));\r\n\r\nexport const getPanelErrorProps = ({ needsAttention }) => (needsAttention ? {\r\n error: _TL_(\"* Something's wrong\"),\r\n} : {});\r\n","import { identity, result } from 'underscore';\r\nimport { getBulkApiErrors } from '@bingads-webui-campaign/api-errors';\r\n\r\nexport const mapBulkUpsertErrors = (errors, bulkUpsertEntityErrorMap, errorProcessor = identity, scenario, i18n, activityLogger) =>\r\n getBulkApiErrors(errors, scenario, i18n, activityLogger).map((error) => {\r\n const errorType = error.type;\r\n const mappedErrorType = result(bulkUpsertEntityErrorMap, errorType, errorType);\r\n // eslint-disable-next-line no-param-reassign\r\n error.type = mappedErrorType;\r\n return errorProcessor(error);\r\n });\r\n","/* istanbul ignore file */\r\n\r\nexport const getDealDetailsStyle = () => ({\r\n dealDetails: {\r\n width: 313,\r\n '& h5': {\r\n fontSize: 14,\r\n },\r\n '& .option-wrapper': {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n fontSize: 12,\r\n marginBottom: 8,\r\n '& .option-name': {\r\n flex: 2,\r\n color: '#605E5C',\r\n },\r\n '& .option-value': {\r\n color: '#323130',\r\n },\r\n },\r\n },\r\n});\r\n","/* istanbul ignore file */\r\n\r\nexport const DeviceKeys = {\r\n Computers: 'Computers',\r\n Tablets: 'Tablets',\r\n Smartphones: 'Smartphones',\r\n ConnectedTVs: 'ConnectedTVs',\r\n};\r\n","/* istanbul ignore file */\r\n\r\nimport _, { difference, each, get } from 'underscore';\r\nimport { edmCampaign } from '@bingads-webui/edm-campaign';\r\nimport odata from '@bingads-webui-component-legacy/http/channel/odata';\r\nimport * as locationTargetConverter from '@bingads-webui-campaign-legacy/location-targets/util/locationTargetConverter';\r\nimport { DeviceKeys } from '../target-constants';\r\n\r\nexport function getCountriesLocations(locationIds, lcid, cid, aid) {\r\n if (_.size(locationIds) === 0) {\r\n return Promise.resolve([]);\r\n }\r\n const reqs = _.map(locationIds, id => ({\r\n type: 'GET',\r\n url: `${edmCampaign.Customers.$withKey(cid).Accounts.$withKey(aid).Locations.$withKey(id).path}?%24expand=ParentLocations`,\r\n headers: lcid ? {\r\n lcid,\r\n } : undefined,\r\n }));\r\n\r\n return odata.batch({ reqs, needContentType: true });\r\n}\r\n\r\nconst targetTypes = {\r\n Device: 'Device',\r\n Age: 'Age',\r\n Gender: 'Gender',\r\n Location: 'Location',\r\n Audience: 'Audience',\r\n};\r\n\r\nexport function getTargetConstraints(deal, targetType) {\r\n const ret = {\r\n mandatory: [],\r\n isRestricted: deal.Type === 'Restricted',\r\n };\r\n\r\n if (!deal || !deal.DealTargetConstraints) { return ret; }\r\n\r\n const devicesConstraints = deal.DealTargetConstraints.find(target => target.TargetType === targetType);\r\n\r\n if (!devicesConstraints) {\r\n return ret;\r\n }\r\n\r\n ret.mandatory = devicesConstraints.Mandatory || [];\r\n ret.isRestricted = devicesConstraints.DealTargetRestrictionLevel === 'Restricted';\r\n\r\n return ret;\r\n}\r\n\r\nasync function getLocationCritetions({\r\n serverContext, countries,\r\n}) {\r\n const cid = serverContext.CurrentCustomer.Id;\r\n const aid = serverContext.CurrentAccount.Id;\r\n const lcid = serverContext ? serverContext.CurrentUser.LocaleID : '1033';\r\n\r\n const response = await getCountriesLocations(countries, lcid, cid, aid);\r\n const locationCriterions = [];\r\n\r\n each(response, (location) => {\r\n const criterion = locationTargetConverter.buildLocationCriterionFromSearchResult(\r\n location.data,\r\n { mode: 'location', status: 'Included' }\r\n );\r\n criterion.location = get(criterion, 'Criterion.LocationCriterion.NameTypeCombo');\r\n locationCriterions.push(criterion);\r\n });\r\n\r\n return locationCriterions;\r\n}\r\n\r\nexport async function modelConstraints(deal, adGroup, serverContext) {\r\n if (!deal || !adGroup) { return adGroup; }\r\n\r\n const isCreating = !adGroup.Id;\r\n\r\n const deviceConstraints = getTargetConstraints(deal, targetTypes.Device);\r\n const locationConstraints = getTargetConstraints(deal, targetTypes.Location);\r\n const ageConstraints = getTargetConstraints(deal, targetTypes.Age);\r\n const genderConstraints = getTargetConstraints(deal, targetTypes.Gender);\r\n const audienceConstraints = getTargetConstraints(deal, targetTypes.Audience);\r\n\r\n const dealLocationTargets = adGroup.locationTargets;\r\n if (isCreating && locationConstraints && locationConstraints.isRestricted === false && dealLocationTargets && dealLocationTargets.currentLevelSettings) {\r\n dealLocationTargets.currentLevelSettings.targetOption = 'everywhere';\r\n dealLocationTargets.currentLevelSettings.currentLocations = [];\r\n } else if (get(adGroup, ['locationTargets', 'currentLevelSettings', 'initLocations'], []).length === 0) {\r\n // locations\r\n const locations = await getLocationCritetions({\r\n serverContext,\r\n countries: locationConstraints.mandatory,\r\n });\r\n\r\n if (locations.length !== 0) {\r\n dealLocationTargets.currentLevelSettings.currentLocations = locations;\r\n dealLocationTargets.currentLevelSettings.initLocations = [];\r\n dealLocationTargets.currentLevelSettings.targetOption = 'specific';\r\n dealLocationTargets.useParentLevel = false;\r\n }\r\n }\r\n const adGroupModel = {};\r\n if (ageConstraints.isRestricted) {\r\n adGroupModel.ageRanges = [];\r\n adGroupModel.initialAgeRanges = [];\r\n adGroupModel.negativeAgeRanges = [];\r\n }\r\n\r\n if (genderConstraints.isRestricted) {\r\n adGroupModel.initialGenderTypes = [];\r\n adGroupModel.negativeGenderTYpes = [];\r\n adGroupModel.genderTypes = [];\r\n }\r\n\r\n if (audienceConstraints.isRestricted) {\r\n adGroupModel.audiences = [];\r\n }\r\n\r\n return {\r\n ...adGroup,\r\n ...adGroupModel,\r\n deal,\r\n locationTargets: dealLocationTargets,\r\n dealLocationList: locationConstraints.mandatory,\r\n deviceTypes: isCreating ? deviceConstraints.mandatory : adGroup.deviceTypes,\r\n deviceRestrictions: deviceConstraints.isRestricted ? Object.keys(DeviceKeys) : difference(Object.keys(DeviceKeys), deviceConstraints.mandatory),\r\n deviceRestricted: deviceConstraints.isRestricted,\r\n locationRestricted: locationConstraints.isRestricted,\r\n // locationRestricted: false,\r\n ageRestricted: ageConstraints.isRestricted,\r\n genderRestricted: genderConstraints.isRestricted,\r\n audienceRestricted: audienceConstraints.isRestricted,\r\n genreRestricted: true,\r\n };\r\n}\r\n","/* istanbul ignore file */\r\nimport { find, get } from 'underscore';\r\nimport { ceil } from 'lodash';\r\n\r\n// ref: /private/Campaign/MT/Source/Interface/Entity/CurrencyType.cs\r\n\r\nexport const CurrencyCode2CurrencyId = {\r\n AUD: 1,\r\n BRL: 2,\r\n ARS: 15,\r\n CAD: 3,\r\n CLP: 16,\r\n COP: 18,\r\n DKK: 5,\r\n EUR: 6,\r\n HKD: 30,\r\n INR: 36,\r\n JPY: 8,\r\n MXN: 57,\r\n NOK: 9,\r\n NZD: 10,\r\n PEN: 64,\r\n SGD: 74,\r\n ZAR: 13,\r\n SEK: 11,\r\n CHF: 4,\r\n USD: 12,\r\n GBP: 7,\r\n VEF: 87,\r\n TWD: 82,\r\n MYR: 58,\r\n PHP: 65,\r\n VND: 88,\r\n THB: 78,\r\n IDR: 34,\r\n DZD: 23,\r\n BHD: 42,\r\n EGP: 25,\r\n IQD: 37,\r\n JOD: 41,\r\n KWD: 46,\r\n LBP: 48,\r\n MAD: 52,\r\n QAR: 69,\r\n OMR: 62,\r\n SAR: 72,\r\n TND: 79,\r\n CNY: 17,\r\n TRY: 93,\r\n PLN: 67,\r\n AED: 21,\r\n ILS: 35,\r\n NGN: 99,\r\n KRW: 45,\r\n};\r\n\r\nexport const MTCurrencyConvertor = {\r\n AustralianDollar: 'AUD',\r\n BrazilianReal: 'BRL',\r\n CanadianDollar: 'CAD',\r\n SwissFranc: 'CHF',\r\n DanishKrone: 'DKK',\r\n EURO: 'EUR',\r\n UKPound: 'GBP',\r\n JapaneseYen: 'JPY',\r\n NorwegianKrone: 'NOK',\r\n NewZealandDollar: 'NZD',\r\n SwedishKrona: 'SEK',\r\n USDollar: 'USD',\r\n SouthAfricanRand: 'ZAR',\r\n ArgentinePeso: 'ARS',\r\n ChileanPeso: 'CLP',\r\n YuanRenminbi: 'CNY',\r\n ColombianPeso: 'COP',\r\n UAEDirham: 'AED',\r\n AlgerianDinar: 'DZD',\r\n EgyptianPound: 'EGP',\r\n HongKongDollar: 'HKD',\r\n IndonesianRupiah: 'IDR',\r\n IsraeliSheqel: 'ILS',\r\n IndianRupee: 'INR',\r\n LebanesePound: 'LBP',\r\n MoroccanDirham: 'MAD',\r\n MexicanPeso: 'MXN',\r\n MalaysianRinggit: 'MYR',\r\n PeruvianNuevoSol: 'PEN',\r\n PhilippinePeso: 'PHP',\r\n Zloty: 'PLN',\r\n QatariRial: 'QAR',\r\n SaudiRiyal: 'SAR',\r\n SingaporeDollar: 'SGD',\r\n ThaiBaht: 'THB',\r\n NewTaiwanDollar: 'TWD',\r\n VenezuelanBolivar: 'VEF',\r\n VietnamDong: 'VND',\r\n NewTurkishLira: 'TRY',\r\n NigerianNaira: 'NGN',\r\n Won: 'KRW',\r\n};\r\n\r\nexport const getConvertedCurrencyDealMinimumBid = (minimumBid, dealCurrency, accountCurrency, exchangeRateMapping) => {\r\n if (minimumBid && accountCurrency && exchangeRateMapping) {\r\n const dealCurrencyId = CurrencyCode2CurrencyId[MTCurrencyConvertor[dealCurrency] || 'USD'] || 12;\r\n const dealCurrencyToUSD = get(find(exchangeRateMapping, item => item.CurrencyId === dealCurrencyId), 'ExchangeRateValue', 1);\r\n\r\n const accountCurrencyId = CurrencyCode2CurrencyId[accountCurrency] || 12;\r\n const accountCurrencyToUSD = get(find(exchangeRateMapping, item => item.CurrencyId === accountCurrencyId), 'ExchangeRateValue', 1);\r\n\r\n return ceil((minimumBid * dealCurrencyToUSD) / accountCurrencyToUSD, 2);\r\n }\r\n return minimumBid;\r\n};\r\n","/* istanbul ignore file */\r\n\r\nimport React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { get, isNumber, uniq, chain, sortBy, compact } from 'underscore';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport decimal from '@bingads-webui-component-legacy/humanize/decimal';\r\nimport { getDealDetailsStyle } from './deal-detils-style';\r\nimport { getTargetConstraints } from './deal-constraints';\r\nimport { MTCurrencyConvertor } from './account-currency-daily-exchange-rate';\r\n\r\nexport function getVideoConstraintDuration(dealDetails, i18n) {\r\n const minimumDuration = get(dealDetails, 'DealAdQualityConstraints[0].MinimumDuration');\r\n if (minimumDuration && isNumber(minimumDuration)) {\r\n return `${Math.round(minimumDuration/1000, 1)} ${i18n.getString(_TL_('seconds'))}`;\r\n }\r\n return i18n.getString(_TL_('Unavailable'));\r\n}\r\n\r\nexport function isNetflixDeal(deal) {\r\n return deal.Seller && deal.Seller.toLowerCase().indexOf('netflix') > -1;\r\n}\r\n\r\nexport function isDealDeleted(deal) {\r\n return deal.Error && deal.Error === 'InvalidId';\r\n}\r\n\r\nconst AgeRanges = {\r\n EighteenToTwentyFive: _TL_('18-24'),\r\n TwentyFiveToThirtyFive: _TL_('25-34'),\r\n ThirtyFiveToFifty: _TL_('35-49'),\r\n FiftyToSixtyFive: _TL_('50-64'),\r\n SixtyFiveAndAbove: _TL_('65+'),\r\n Unknown: _TL_('Unknown'),\r\n};\r\n\r\nconst sortAgeRanges = ageRanges => sortBy(ageRanges, ageRange => AgeRanges[ageRange]);\r\n\r\nconst formatAgeRange = (ageRange, i18n) => (AgeRanges[ageRange] ? i18n.getString(AgeRanges[ageRange]) : ageRange);\r\n\r\nconst formatAgeRanges = (ageRanges, i18n) => {\r\n return chain(sortAgeRanges(ageRanges))\r\n .map(ageRange => formatAgeRange(ageRange, i18n))\r\n .join(i18n.getString(_TL_(', ')))\r\n .value();\r\n};\r\n\r\nexport function targetConstraintsToText(dealDetails, targetType, i18n, locationMap = {}) {\r\n const { mandatory, isRestricted } = getTargetConstraints(dealDetails, targetType);\r\n\r\n if (mandatory.length === 0) {\r\n if (isRestricted) {\r\n if (isNetflixDeal(dealDetails)) {\r\n return i18n.getString(_TL_('Unavailable'));\r\n }\r\n return i18n.getString(_TL_('Restricted'));\r\n }\r\n return i18n.getString(_TL_('No Restrictions'));\r\n }\r\n\r\n if (targetType === 'Location') {\r\n return uniq(mandatory.map((location) => {\r\n const locationName = locationMap[location];\r\n return locationName;\r\n })).join(', ');\r\n } else if (targetType === 'Age') {\r\n return formatAgeRanges(mandatory, i18n);\r\n }\r\n return mandatory.join(', ');\r\n}\r\n\r\nexport const DealDetails = (props) => {\r\n const { i18n, dealDetails, style, shouldShowGenre } = props;\r\n const classes = useDefaultStyles(getDealDetailsStyle);\r\n const dealOptions = compact([{\r\n name: i18n.getString(_TL_('Publisher')),\r\n value: dealDetails.Seller,\r\n }, {\r\n name: i18n.getString(_TL_('Minimum bid ')),\r\n value: dealDetails.MinimumBid ?\r\n `${decimal.fromFloatToString(dealDetails.MinimumBid, 2)} ${MTCurrencyConvertor[dealDetails.Currency] || 'USD'}` : `${i18n.getString(_TL_('Unavailable'))}`,\r\n }, {\r\n name: i18n.getString(_TL_('Duration ')),\r\n value: `${getVideoConstraintDuration(dealDetails, i18n)}`,\r\n }, {\r\n name: i18n.getString(_TL_('Country')),\r\n value: dealDetails.CountryName || i18n.getString(_TL_('Everywhere')),\r\n }, {\r\n name: i18n.getString(_TL_('Device targeting')),\r\n value: targetConstraintsToText(dealDetails, 'Device', i18n),\r\n }, {\r\n name: i18n.getString(_TL_('Gender targeting')),\r\n value: targetConstraintsToText(dealDetails, 'Gender', i18n),\r\n }, {\r\n name: i18n.getString(_TL_('Age targeting')),\r\n value: dealDetails.AgeRange || targetConstraintsToText(dealDetails, 'Age', i18n),\r\n }, {\r\n name: i18n.getString(_TL_('Audience targeting')),\r\n value: targetConstraintsToText(dealDetails, 'Audience', i18n),\r\n }, shouldShowGenre && {\r\n name: i18n.getString(_TL_('Genre targeting')),\r\n value: dealDetails.Genre ? _TL_('Available') : _TL_('Unavailable'),\r\n }]);\r\n\r\n return (\r\n
\r\n
\r\n
{i18n.getString(_TL_('Media deal details'))}
\r\n
\r\n {dealOptions.map(option => (\r\n
\r\n
{option.name}
\r\n
{option.value}
\r\n
\r\n ))}\r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\nDealDetails.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n dealDetails: PropTypes.shape({\r\n Seller: PropTypes.string,\r\n StartDate: PropTypes.string,\r\n EndDate: PropTypes.string,\r\n Genre: PropTypes.string,\r\n Currency: PropTypes.string,\r\n Duration: PropTypes.string,\r\n CountryName: PropTypes.string,\r\n MinimumBid: PropTypes.number,\r\n AskPrice: PropTypes.number,\r\n }).isRequired,\r\n style: PropTypes.shape({}),\r\n};\r\n\r\nDealDetails.defaultProps = {\r\n style: {},\r\n};\r\n","/* istanbul ignore file */\r\n\r\nexport function bytesForHuman(bytes) {\r\n if (!bytes) {\r\n return '';\r\n }\r\n let num = bytes;\r\n const units = ['', 'K', 'M', 'B', 'T', 'P'];\r\n\r\n let i = 0;\r\n\r\n for (i; num > 1000; i += 1) {\r\n num /= 1000;\r\n }\r\n\r\n return `${num.toFixed(1)} ${units[i]}`;\r\n}\r\n","import { pick, each, values, filter, extend, isUndefined, isNull, isEmpty, mapObject } from 'underscore';\r\n\r\nconst verifiedTrackingSettingAttachment = (ad) => {\r\n const verifiedTrackingSettings = ad.data.VerifiedTrackingSettings;\r\n if (isUndefined(verifiedTrackingSettings) || isNull(verifiedTrackingSettings)) {\r\n return {};\r\n }\r\n\r\n if (isEmpty(verifiedTrackingSettings)) {\r\n return { VerifiedTrackingData: '' };\r\n }\r\n const results = [];\r\n\r\n each(verifiedTrackingSettings, (setting) => {\r\n const result = [];\r\n mapObject(setting, (value, key) => {\r\n result.push({ Key: key, Value: value });\r\n });\r\n results.push(result);\r\n });\r\n\r\n return { VerifiedTrackingData: JSON.stringify(results) };\r\n};\r\n\r\nexport const viewModelToModelForAd = ({ adsViewModel, campaign, adGroup }, isDeletedEntities = false) => {\r\n // parse the ads\r\n const adViewModel = [];\r\n\r\n each(adsViewModel, (ad) => {\r\n const finalUrl = ad.data.FinalUrls;\r\n const trackingUrlTemplate = ad.data.TrackingUrlTemplate;\r\n const finalUrlSuffix = ad.data.FinalUrlSuffix;\r\n const urlCustomParameters = ad.data.UrlCustomParameters;\r\n\r\n const video = ad.data.video ? JSON.stringify([{ id: ad.data.video.id, idString: ad.data.video.idString, subType: ad.data.video.type }]) : undefined;\r\n const image = ad.data.image ? JSON.stringify([{\r\n id: ad.data.image.id,\r\n subType: 'DisplayCreativeImage',\r\n targetWidth: ad.data.image.targetWidth,\r\n targetHeight: ad.data.image.targetHeight,\r\n cropX: ad.data.image.cropX,\r\n cropY: ad.data.image.cropY,\r\n cropWidth: ad.data.image.cropWidth,\r\n cropHeight: ad.data.image.cropHeight,\r\n }]) : undefined;\r\n\r\n const verifiedTrackingSettingAttachmentObj = verifiedTrackingSettingAttachment(ad);\r\n const impressionTrackingUrls = ad.data.ImpressionTrackingUrls ? { ImpressionTrackingUrls: ad.data.ImpressionTrackingUrls } : {};\r\n\r\n const fields = {\r\n 'Client Id': `${ad.uid}`,\r\n FinalUrls: finalUrl,\r\n TrackingUrlTemplate: trackingUrlTemplate,\r\n FinalUrlSuffix: finalUrlSuffix,\r\n UrlCustomParameters: urlCustomParameters,\r\n Campaign: pick(campaign, 'Id'),\r\n AdGroup: pick(adGroup, 'Id'),\r\n ...verifiedTrackingSettingAttachmentObj,\r\n ...impressionTrackingUrls,\r\n };\r\n\r\n if (image) {\r\n extend(fields, { Images: image });\r\n }\r\n if (video) {\r\n extend(fields, { Videos: video });\r\n }\r\n\r\n if (ad.Id) {\r\n fields.Id = ad.Id;\r\n }\r\n\r\n if (isDeletedEntities) {\r\n fields.Status = 'Deleted';\r\n }\r\n\r\n if (ad.adSubType) {\r\n fields.AdSubType = ad.adSubType;\r\n }\r\n\r\n adViewModel.push(fields);\r\n });\r\n\r\n return adViewModel;\r\n};\r\n\r\nconst adsWithIdsAttached = (savedAdsData, oldAdsData) => {\r\n const ads = [];\r\n\r\n each(oldAdsData, (ad, idx) => {\r\n // From API find the saved Item that has the client id same as the view model uid.\r\n // Once we have this item we try to patch the Id into the data model, so next time we know this will be an update scenario.\r\n const savedAdItem = filter(savedAdsData, sAd => sAd['Client Id'] === `${ad.uid}`);\r\n\r\n if (savedAdItem && savedAdItem[0] && savedAdItem[0].Id) {\r\n ads[idx] = { ...ad, Id: savedAdItem[0].Id };\r\n } else {\r\n ads[idx] = { ...ad, Id: undefined };\r\n }\r\n });\r\n\r\n return ads;\r\n};\r\n\r\nexport const bulkModelToViewModelForAd = ({\r\n adsModel,\r\n originalAdsModel,\r\n}) => {\r\n const processedAds = adsWithIdsAttached(adsModel, originalAdsModel.data);\r\n\r\n const adViewModel = {\r\n data: processedAds,\r\n isValid: true,\r\n isDirty: false,\r\n currentPageIndex: 1,\r\n };\r\n\r\n return adViewModel;\r\n};\r\n\r\n\r\nexport const modelToViewModelForAd = ({\r\n adsModel,\r\n}) => {\r\n const adsVideoModel = { ...adsModel };\r\n\r\n return adsVideoModel;\r\n};\r\n\r\nexport const splitUpdateAndCreateAds = ({\r\n adsViewModel, oldAdsModel, campaign, adGroup,\r\n}) => {\r\n const adIds = [];\r\n\r\n const adsToCreate = [];\r\n const adsToUpdate = [];\r\n const adsToDelete = [];\r\n\r\n each(values(adsViewModel.data), (ad) => {\r\n if (ad.data && (ad.data.video || ad.data.image)) {\r\n const adToSave = { ...ad };\r\n if (adsViewModel.adSubType) {\r\n adToSave.adSubType = adsViewModel.adSubType;\r\n }\r\n\r\n // check if the ad has ID\r\n if (adToSave.Id) {\r\n adsToUpdate.push(adToSave);\r\n\r\n // add the Ids of Ads that have already been saved to API\r\n // so that we can delete if the oldAdsModel contains more Ids\r\n adIds.push(adToSave.Id);\r\n } else {\r\n adsToCreate.push(adToSave);\r\n }\r\n }\r\n });\r\n\r\n if (oldAdsModel) {\r\n // get ids of the ads that are deleted (missing in adIds array)\r\n each(values(oldAdsModel.data), (oldAd) => {\r\n if (oldAd.Id && !adIds.includes(oldAd.Id)) {\r\n adsToDelete.push(oldAd);\r\n }\r\n });\r\n }\r\n\r\n const adsNeededToCreate = viewModelToModelForAd({ adsViewModel: adsToCreate, campaign, adGroup });\r\n\r\n const adsNeededToUpdate = [\r\n ...viewModelToModelForAd({ adsViewModel: adsToUpdate, campaign, adGroup }),\r\n ...viewModelToModelForAd({ adsViewModel: adsToDelete, campaign, adGroup }, true),\r\n ];\r\n\r\n return { adsNeededToCreate, adsNeededToUpdate };\r\n};\r\n","import Promise from 'bluebird';\r\nimport _ from 'underscore';\r\nimport { ResponsiveAd } from '@bingads-webui/campaign-odata-schemas';\r\nimport { newVideoFromMTObject } from '@bingads-webui-campaign-react/image-experience-video-part';\r\nimport { edmCampaign, getEntityFromScope } from '@bingads-webui/edm-campaign';\r\nimport { QueryParam } from '@bingads-webui-react/scope-service';\r\n\r\nimport { isBulkWrappedResponse, getBulkUploadErrorType, modelToViewModelForBulkErrors, ERROR_ENTITY } from '../common';\r\nimport { bulkModelToViewModelForAd, splitUpdateAndCreateAds } from './ad';\r\n\r\nconst attachUidToErrorProperty = errors => _.map(errors, (error) => {\r\n // eslint-disable-next-line no-param-reassign\r\n error.Property = `${error.Property}_${error['Client Id']}`;\r\n\r\n return error;\r\n});\r\n\r\nconst GENERIC_ERROR_MESSAGE_KEY = _TL_(\"We've encountered an error and can't continue. Please contact support for further assistance.\");\r\n\r\nconst adEDM = edmCampaign.types.resolve('Model.ResponsiveAd');\r\nconst adResource = new adEDM.ResourceIdentifier();\r\n\r\n\r\nconst createData = data => adResource.bulkCreate.bind(adResource)(data);\r\n\r\nconst updateData = data => adResource.bulkUpdate.bind(adResource)(data);\r\n\r\nconst bulkUpsertAdSettingsEntityErrorMap = {\r\n [getBulkUploadErrorType(ResponsiveAd)]: ERROR_ENTITY.Ad,\r\n};\r\n\r\nexport const getODataConfig = (serverContext) => {\r\n const isLocal = () => {\r\n const hostname = document.location.hostname.toLowerCase();\r\n return hostname.indexOf('ads.microsoft.com') === -1 &&\r\n hostname.indexOf('ads-int.microsoft.com') === -1;\r\n };\r\n\r\n const odataPath = isLocal() ? 'Advertiser/V2' : 'Campaign/V2';\r\n\r\n const oDataConfig = {\r\n odataToken: serverContext.Token,\r\n oDataToken: serverContext.Token,\r\n odataPath: `${serverContext.ServicesEndpoints.CampaignAPI}${odataPath}`,\r\n oDataPath: `${serverContext.ServicesEndpoints.CampaignAPI}${odataPath}`,\r\n };\r\n\r\n return oDataConfig;\r\n};\r\n\r\nexport const getErrorsPlaceholders = () => ({\r\n systemErrors: [],\r\n serverErrors: [],\r\n});\r\n\r\nconst postVideoByUrl = ({ videoUrl }) => {\r\n const queryParam = new QueryParam(window.location);\r\n\r\n queryParam.remove(['adGroupId', 'campaignId']);\r\n const { currentEntity } = getEntityFromScope(queryParam);\r\n\r\n return currentEntity\r\n .Videos['Default.CreateVideo']\r\n .$makeCall({\r\n functionParams: {},\r\n payload: {\r\n videoUrl,\r\n description: '',\r\n },\r\n })\r\n .toPromise();\r\n};\r\n\r\nconst uploadVideo = ({ ad }) => postVideoByUrl({ videoUrl: ad.data.video.url }).then((res) => {\r\n _.extend(ad.data.video, newVideoFromMTObject({ SubType: 'VideoMedia16X9', Status: 'Draft', Id: res.value }));\r\n});\r\n\r\nconst uploadVideoIfNeeded = ({ ads }) => {\r\n const videoPromises = [];\r\n ads.data.forEach((ad) => {\r\n if (ad.data && ad.data.video && !ad.data.video.id) {\r\n videoPromises.push(uploadVideo({ ad }));\r\n }\r\n });\r\n\r\n if (_.isEmpty(videoPromises)) {\r\n return Promise.resolve(ads);\r\n }\r\n\r\n return Promise.all(videoPromises).then(() => ads);\r\n};\r\n\r\nexport const saveAds = ({\r\n ads,\r\n oldAdsModel,\r\n campaign,\r\n adGroup,\r\n activity = null,\r\n}, { scenario, i18n }) => uploadVideoIfNeeded({ ads }).then((adsViewModel) => {\r\n const { adsNeededToCreate, adsNeededToUpdate } = splitUpdateAndCreateAds({\r\n adsViewModel, oldAdsModel, campaign, adGroup,\r\n });\r\n\r\n const promises = {};\r\n\r\n if (adsNeededToCreate.length > 0) {\r\n promises.createAds = createData(adsNeededToCreate);\r\n }\r\n\r\n if (adsNeededToUpdate.length > 0) {\r\n promises.updateAds = updateData(adsNeededToUpdate);\r\n }\r\n\r\n return Promise.props(promises).then((results) => {\r\n const updatedAds = results.updateAds || [];\r\n const createdAds = results.createAds || [];\r\n\r\n const result = [...updatedAds, ...createdAds];\r\n\r\n const data = {\r\n ads: bulkModelToViewModelForAd({\r\n adsModel: result,\r\n originalAdsModel: adsViewModel,\r\n }),\r\n ...getErrorsPlaceholders(),\r\n };\r\n\r\n\r\n if (activity) {\r\n activity.signal(`onAdsSavedSuccessfully, redirecting to campaign grid page - adCount: ${result.length}`);\r\n }\r\n return data;\r\n }, (bulkOrSystemError) => {\r\n if (isBulkWrappedResponse(bulkOrSystemError)) {\r\n const { entity, errors } = bulkOrSystemError;\r\n\r\n // we need to attach uid to each error to identify which video panel has an error.\r\n // the uid is stored in the clientid of the error.\r\n const errorsWithPropertyIdsAttached = attachUidToErrorProperty(errors);\r\n\r\n const entities = entity ?\r\n bulkModelToViewModelForAd({\r\n adsModel: entity,\r\n originalAdsModel: adsViewModel,\r\n }) :\r\n adsViewModel;\r\n\r\n const serverErrors = modelToViewModelForBulkErrors(\r\n errorsWithPropertyIdsAttached,\r\n bulkUpsertAdSettingsEntityErrorMap,\r\n scenario,\r\n i18n,\r\n activity\r\n );\r\n\r\n if (activity) {\r\n activity.signal(`onAdsSavedUnsuccessfully, ${JSON.stringify(serverErrors)}`);\r\n }\r\n // eslint-disable-next-line prefer-promise-reject-errors\r\n return Promise.reject({\r\n ads: { ...entities },\r\n serverErrors,\r\n });\r\n }\r\n\r\n // Activity\r\n // eslint-disable-next-line no-console\r\n console.warn(`Campaign bulk upsert system error: ${bulkOrSystemError.stack || bulkOrSystemError.message || bulkOrSystemError}`);\r\n // eslint-disable-next-line prefer-promise-reject-errors\r\n return Promise.reject({\r\n ads: adsViewModel,\r\n systemErrors: [i18n.getString(GENERIC_ERROR_MESSAGE_KEY)],\r\n // TODO: We would want to return the criterions with Ids, but UI's bulk drops them\r\n });\r\n });\r\n});\r\n","import { odata } from '@bingads-webui/http-util';\r\nimport { getODataConfig } from '../model/ad-bulk';\r\n\r\nconst expireTimeDefault = 86400 * 1000; // 1 day\r\n\r\n\r\nexport function setLocalStorageWithExpire(key, data, expire) {\r\n const obj = {\r\n data,\r\n time: Date.now(),\r\n expire,\r\n };\r\n localStorage.setItem(key, JSON.stringify(obj));\r\n}\r\n\r\nfunction getLocalStorageWithExpire(key) {\r\n let val = localStorage.getItem(key);\r\n if (!val) {\r\n return null;\r\n }\r\n try {\r\n val = JSON.parse(val);\r\n } catch (error) {\r\n console.error('Error during JSON parse:', error);\r\n return null;\r\n }\r\n if (Date.now() - val.time > val.expire) {\r\n localStorage.removeItem(key);\r\n return { val: val.data, expired: true };\r\n }\r\n return { val: val.data, expired: false };\r\n}\r\n\r\nexport function getKey() {\r\n const date = new Date();\r\n return `${date.getFullYear}/${date.getMonth}/${date.getDay}`;\r\n}\r\n\r\nexport async function fetchExchangeRateMapping(serverContext) {\r\n const oDataConfig = getODataConfig(serverContext);\r\n const baseURL = `${oDataConfig.oDataPath}/Customers(${serverContext.CurrentCustomer.Id})/Accounts(${serverContext.CurrentAccount.Id})/`;\r\n const url = `${baseURL}/Default.GetExchangeRate`;\r\n\r\n try {\r\n const result = await odata.get(url, oDataConfig);\r\n if (result && result.value) {\r\n setLocalStorageWithExpire(getKey(), result.value, expireTimeDefault);\r\n return result.value;\r\n }\r\n } catch (error) {\r\n console.error(error + url);\r\n }\r\n return Promise.resolve();\r\n}\r\n\r\nexport function getAccountExchangeRateFromLocalStorage(serverContext) {\r\n let exchangeRateMapping = getLocalStorageWithExpire(getKey());\r\n\r\n if (!exchangeRateMapping || exchangeRateMapping.expired) {\r\n exchangeRateMapping = fetchExchangeRateMapping(serverContext);\r\n }\r\n\r\n return exchangeRateMapping;\r\n}\r\n","import config from '@bingads-webui-component-legacy/config/index';\r\nimport localStorage from '@bingads-webui-component-legacy/storage/localStorage';\r\n\r\nexport const isDealCampaign = () => location.pathname.includes('awarenessmediadeal');\r\nexport const isCTVCampaign = () => location.pathname.includes('awareness') && !isDealCampaign();\r\n\r\nexport const getVideoDeal = () => {\r\n if (!isDealCampaign()) {\r\n return null;\r\n }\r\n let videoDeal = config.get('VideoMediaDeal');\r\n if (!videoDeal) {\r\n if (localStorage.supportsStorage()) {\r\n videoDeal = localStorage.get('VideoMediaDeal');\r\n config.set('VideoMediaDeal', videoDeal);\r\n }\r\n }\r\n\r\n return videoDeal;\r\n};\r\n","import React, { useEffect, useState, useContext, useCallback, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport _ from 'underscore';\r\nimport { withCustomValidation, withError } from '@bingads-webui-react/validation';\r\nimport { VideoExperience, newVideoFromMTObject, ImageExperienceVideo } from '@bingads-webui-campaign-react/image-experience-video-part';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { entityIs, propertyIs, andComp } from '@bingads-webui-campaign-react/form-error';\r\nimport { Stack } from '@bingads-webui-react/fabric-control';\r\nimport { withControlErrorHandling, withUnvalidatedControlErrors } from '@bingads-webui-campaign-react/error-handling';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { withPreference } from '@bingads-webui-react/preference-context';\r\nimport { CopilotVideoEditor } from '@bingads-webui-campaign-react/edit-video-ads-view';\r\nimport { withAssetLibraryServicesLoaded } from '@bingads-webui-campaign-react/asset-library-services';\r\nimport { UiBlocker } from '@bingads-webui-react/ui-blocker';\r\nimport { TaskManager } from '@bingads-webui-universal/task-manager';\r\nimport { VideoTemplateEditorContextWrapper } from '@bingads-webui-campaign-react/video-ads-editor';\r\n\r\nimport { AddVideoButton } from './add-video-button';\r\nimport { IconButton } from '../common/shared-components';\r\nimport { VideoAdsSuggestionCarousel } from './video-ads-suggestion-carousel';\r\nimport { useVideoAdsCopilot } from './use-video-ads-copilot';\r\nimport { PlacementInfoWithStars } from './video-metadata';\r\nimport { ERROR_ENTITY } from '../common';\r\n\r\nconst entityIsAd = entityIs(ERROR_ENTITY.Ad);\r\n// TODO - move to a common place.\r\nconst legacyTemplates = ['00000001-0000-0000-0000-000000000000', '00000001-0000-0000-0000-000000000001'];\r\n\r\nexport const validateVideo = (video, i18n, videoRequirementForDeal, skipQualityValidation) => {\r\n const messages = [];\r\n\r\n if (!video) {\r\n messages.push(i18n.getString(_TL_('Please add a video.')));\r\n return messages;\r\n }\r\n\r\n if (video.Status !== 'Active') {\r\n return [];\r\n }\r\n\r\n /* istanbul ignore next */\r\n if (video.quality === 0 && !skipQualityValidation) {\r\n messages.push(i18n.getString(_TL_('Your video is low quality and doesn\\'t meet our requirements to serve on eligible networks. Please upload another file and try again.')));\r\n }\r\n\r\n if ((video.height < 720 || video.width < 960) && !skipQualityValidation) {\r\n messages.push(i18n.getString(_TL_('Your video must be at least 960x720 pixels. Please upload another file and try again.')));\r\n }\r\n\r\n /* istanbul ignore next */\r\n if (videoRequirementForDeal && video.quality < videoRequirementForDeal) {\r\n if (videoRequirementForDeal === 2) {\r\n messages.push(i18n.getString(_TL_('For this deal your asset must meet the General CTV requirements.')));\r\n } else if (videoRequirementForDeal === 4) {\r\n messages.push(i18n.getString(_TL_('For this deal your asset must meet the Premium Video requirements.')));\r\n }\r\n }\r\n\r\n if (messages.length > 1) {\r\n return video.Status === 'Active' ? [_.first(messages)] : [];\r\n }\r\n\r\n // for draft video, we only show processing error message.\r\n return messages;\r\n};\r\n\r\nconst getStyles = (/* components, theme */) => ({\r\n videoPanelButton: {\r\n justifyContent: 'flex-end',\r\n display: 'none',\r\n cursor: 'pointer',\r\n borderRadius: 99,\r\n background: '#FFFFFF',\r\n width: 32,\r\n height: 32,\r\n },\r\n videoPanelButtonContainer: {\r\n position: 'absolute',\r\n left: '50%',\r\n top: '50%',\r\n transform: 'translate(-50%, -50%)',\r\n columnGap: '10px',\r\n display: 'flex',\r\n },\r\n});\r\n\r\nconst CustomComponent = (props) => {\r\n const {\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n onDataChange,\r\n idx,\r\n i18n,\r\n videoAd,\r\n updateValidation,\r\n videoRequirementForDeal,\r\n permissions,\r\n renderError,\r\n assetLibraryConfig,\r\n dataService,\r\n copilotEnabled,\r\n isCTV,\r\n multiVideoMode,\r\n isVideoRequired,\r\n skipQualityValidation,\r\n loadClipchampPlayer,\r\n useBrandKit,\r\n setUseBrandKit,\r\n isBrandKitEmpty,\r\n ...rest\r\n } = props;\r\n const {\r\n getVideo,\r\n } = dataService;\r\n const {\r\n cid, aid, perfMarker, serverContext,\r\n } = rest;\r\n\r\n const video = videoAd && videoAd.video ? videoAd.video : null;\r\n\r\n const videoTemplateUIEnabled = permissions && permissions.dynamic && permissions.dynamic.VideoTemplateUI;\r\n const isGoogleImportVideoAdNeedsRepair = permissions && permissions.IsGoogleImportVideoAdsEnabled\r\n && _.get(videoAd, 'video.sourceType') === 'GoogleImported'\r\n && _.get(videoAd, 'video.status') === 'Failed';\r\n\r\n const activity = useContext(ActivityContext);\r\n\r\n const classes = useDefaultStyles(getStyles);\r\n\r\n const [isUploading, setIsUploading] = useState(false);\r\n const [showVideoEditor, setShowVideoEditor] = useState(false);\r\n const [isFetchingVideo, setIsFetchingVideo] = useState(false);\r\n const [multiVideoList, setMultiVideoList] = useState(() => (videoAd && videoAd.videos ? [...videoAd.videos] : []));\r\n const [showMultiVideoCopilotEditor, setShowMultiVideoCopilotEditor] = useState({\r\n isOpen: false,\r\n });\r\n const [isVideoFetched, setIsVideoFetched] = useState(false);\r\n\r\n const enableEdit = video && video.template;\r\n const templateId = video && video.template && video.template.templateId;\r\n const isLegacyTemplate = legacyTemplates.includes(templateId);\r\n\r\n const onErrorsUpdated = (errors) => {\r\n // already converted using i18n;\r\n\r\n if (errors) {\r\n updateValidation(errors, { video: null });\r\n }\r\n };\r\n\r\n const onUpdateVideoList = (list) => {\r\n if (list.length > 0) {\r\n const validationMessage = validateVideo(list[0], i18n, videoRequirementForDeal, skipQualityValidation);\r\n updateValidation(validationMessage, { video: list[0] });\r\n if (activity) {\r\n activity.signal(`onVideoValidated - messages: ${validationMessage} - isValid: ${validationMessage.length === 0}`);\r\n }\r\n } else {\r\n updateValidation([i18n.getString(_TL_('Please add a video.'))], { video: null });\r\n }\r\n };\r\n\r\n const onUpdateMultiAdVideoList = useCallback((list) => {\r\n const validVideos = list.filter(multiVideo => multiVideo !== undefined);\r\n setMultiVideoList(validVideos);\r\n\r\n let validationMessages = [];\r\n if (validVideos.length > 0) {\r\n validationMessages = validVideos.map(valVideo => validateVideo(valVideo, i18n, videoRequirementForDeal, skipQualityValidation));\r\n }\r\n\r\n const aggregatedMessages = validationMessages.flat();\r\n\r\n updateValidation(aggregatedMessages, { videos: validVideos });\r\n if (activity) {\r\n activity.signal(`onVideoValidated - messages: ${aggregatedMessages} - isValid: ${aggregatedMessages.length === 0}`);\r\n }\r\n }, [i18n, updateValidation, videoRequirementForDeal, activity, skipQualityValidation]);\r\n\r\n useEffect(() => {\r\n if (isUploading) {\r\n updateValidation([i18n.getString(_TL_('Please wait while we upload your video.'))], { video: null });\r\n\r\n if (activity) {\r\n activity.signal('video is uploading');\r\n }\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [isUploading]);\r\n\r\n useEffect(() => {\r\n const shouldDirty = !(_.isUndefined(videoAd) || _.isNull(videoAd));\r\n ((multiVideoMode === false) && updateValidation(\r\n videoAd ? validateVideo(videoAd.video, i18n, videoRequirementForDeal, skipQualityValidation) : [i18n.getString(_TL_('Please add a video.'))],\r\n { video: videoAd && videoAd.video ? videoAd.video : null },\r\n shouldDirty\r\n ));\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n const onRenderItemDropdown = (values, videoAsset) => {\r\n if (values.uploadVideo !== null) {\r\n return null;\r\n }\r\n\r\n return (\r\n
\r\n
\r\n values.onReplace(videoAsset.Type)}\r\n iconProps={{ iconName: 'Edit' }}\r\n className=\"edit-icon-button\"\r\n styles={{ root: { borderRadius: '99px', height: 32, width: 32 } }}\r\n />\r\n
\r\n
\r\n );\r\n };\r\n\r\n const onRenderItemDropdownCoPilot = (values) => {\r\n if (values.uploadVideo !== null) {\r\n return null;\r\n }\r\n\r\n return (\r\n
\r\n {enableEdit &&\r\n
\r\n setShowVideoEditor(true)}\r\n iconProps={{ iconName: 'Edit' }}\r\n className=\"edit-icon-button\"\r\n styles={{ root: { borderRadius: '99px', height: 32, width: 32 } }}\r\n />\r\n
\r\n }\r\n
\r\n {\r\n const validationMessage = validateVideo(null, i18n, videoRequirementForDeal, skipQualityValidation);\r\n updateValidation(validationMessage, { video: null });\r\n }}\r\n iconProps={{ iconName: 'Cancel' }}\r\n className=\"remove-icon-button\"\r\n styles={{ root: { borderRadius: '99px', height: 32, width: 32 } }}\r\n />\r\n
\r\n
\r\n );\r\n };\r\n\r\n const onRenderItemDropDownForMultiModeWithCopilot = useCallback((selectedVideo, selectedIdx) => {\r\n const selectedMultiVideo = multiVideoList[selectedIdx];\r\n\r\n\r\n return (\r\n
\r\n {\r\n selectedVideo.template && (\r\n
\r\n setShowMultiVideoCopilotEditor({\r\n isOpen: true,\r\n video: selectedMultiVideo,\r\n idx: selectedIdx,\r\n })}\r\n iconProps={{ iconName: 'Edit' }}\r\n className=\"edit-icon-button\"\r\n styles={{ root: { borderRadius: '99px', height: 32, width: 32 } }}\r\n />\r\n
\r\n )\r\n }\r\n
\r\n {\r\n // remove only the selected video\r\n const updatedVideos = [...multiVideoList];\r\n updatedVideos.splice(selectedIdx, 1);\r\n onUpdateMultiAdVideoList(updatedVideos);\r\n }}\r\n\r\n iconProps={{ iconName: 'Cancel' }}\r\n className=\"remove-icon-button\"\r\n styles={{ root: { borderRadius: '99px', height: 32, width: 32 } }}\r\n />\r\n
\r\n
\r\n );\r\n }, [multiVideoList, classes.videoPanelButton, onUpdateMultiAdVideoList]);\r\n\r\n const getNewVideoObject = useCallback((newVideo) => {\r\n const validationMessage = validateVideo(newVideo, i18n, videoRequirementForDeal, skipQualityValidation);\r\n const videoObject = new ImageExperienceVideo({\r\n ...newVideo,\r\n width: newVideo.template.width,\r\n height: newVideo.template.height,\r\n src: newVideo.src || newVideo.url,\r\n type: 'VideoMedia16X9',\r\n thumbnailUrl: newVideo.thumbnailUrl,\r\n });\r\n videoObject.url = newVideo.url;\r\n if (!videoObject.recommendationId) {\r\n videoObject.recommendationId = newVideo.recommendationId || newVideo.suggestionId;\r\n }\r\n\r\n return { videoObject, validationMessage };\r\n }, [i18n, videoRequirementForDeal, skipQualityValidation]);\r\n\r\n const updateWithNewVideo = useCallback((newVideo) => {\r\n const { videoObject, validationMessage } = getNewVideoObject(newVideo);\r\n\r\n if (multiVideoMode) {\r\n const isDuplicate = multiVideoList.find(v => v.recommendationId === videoObject.recommendationId);\r\n if (!isDuplicate) {\r\n onUpdateMultiAdVideoList([...multiVideoList, videoObject]);\r\n }\r\n } else {\r\n updateValidation(validationMessage, {\r\n video: videoObject,\r\n });\r\n }\r\n }, [getNewVideoObject, multiVideoMode, multiVideoList, onUpdateMultiAdVideoList, updateValidation]);\r\n\r\n const updateWithNewVideoAtIdx = useCallback((newVideo, newVideoIdx) => {\r\n const videoObject = new ImageExperienceVideo({\r\n ...newVideo,\r\n width: newVideo.template.width,\r\n height: newVideo.template.height,\r\n src: newVideo.src || newVideo.url,\r\n type: 'VideoMedia16X9',\r\n thumbnailUrl: newVideo.thumbnailUrl,\r\n });\r\n videoObject.url = newVideo.url;\r\n if (!videoObject.recommendationId) {\r\n videoObject.recommendationId = newVideo.recommendationId || newVideo.suggestionId;\r\n }\r\n\r\n const updatedVideos = [...multiVideoList];\r\n updatedVideos[newVideoIdx] = videoObject;\r\n onUpdateMultiAdVideoList(updatedVideos);\r\n }, [multiVideoList, onUpdateMultiAdVideoList]);\r\n\r\n const onChangeVideo = useCallback((newVideo) => {\r\n updateWithNewVideo({ ...newVideo, status: 'Active' });\r\n }, [updateWithNewVideo]);\r\n\r\n const onChangeMultiVideo = useCallback((newVideo, newVideoIdx) => {\r\n updateWithNewVideoAtIdx({ ...newVideo, status: 'Active' }, newVideoIdx);\r\n }, [updateWithNewVideoAtIdx]);\r\n\r\n useEffect(() => {\r\n if (!multiVideoMode && video && video.id && video.metadata && !video.template) {\r\n setIsFetchingVideo(true);\r\n getVideo({ id: video.id, fetchMetadata: true }).then((newVideo) => {\r\n updateWithNewVideo(newVideoFromMTObject(newVideo));\r\n }).finally(() => {\r\n setIsFetchingVideo(false);\r\n });\r\n }\r\n }, [getVideo, updateWithNewVideo, video, multiVideoMode]);\r\n\r\n useEffect(() => {\r\n if (!isFetchingVideo & !isVideoFetched && copilotEnabled && multiVideoMode && multiVideoList.length > 0 && multiVideoList.some(v => v && v.id && v.metadata && !v.template)) {\r\n setIsFetchingVideo(true);\r\n const getVideoPromises = [];\r\n const updatedVideos = [];\r\n multiVideoList.forEach((v, index) => {\r\n if (v && v.id && v.metadata && !v.template) {\r\n getVideoPromises.push(getVideo({ id: v.id, fetchMetadata: true }).then((newVideo) => {\r\n const { videoObject } = getNewVideoObject(newVideoFromMTObject(newVideo));\r\n updatedVideos.push([videoObject, index]);\r\n }));\r\n } else {\r\n updatedVideos.push([v, index]);\r\n }\r\n });\r\n\r\n Promise.all(getVideoPromises).finally(() => {\r\n const existingVideos = [...multiVideoList];\r\n updatedVideos.forEach(([newVideo, index]) => {\r\n existingVideos[index] = newVideo;\r\n });\r\n\r\n onUpdateMultiAdVideoList(existingVideos);\r\n setIsFetchingVideo(false);\r\n setIsVideoFetched(true);\r\n });\r\n }\r\n }, [getVideo, updateWithNewVideo, multiVideoMode, multiVideoList, isFetchingVideo, onUpdateMultiAdVideoList, copilotEnabled, isVideoFetched, getNewVideoObject]);\r\n\r\n useEffect(() => {\r\n if (multiVideoMode && isVideoRequired && _.isEmpty(videoAd.videos)) {\r\n updateValidation([i18n.getString(_TL_('Please add a video.'))], { video: null }, false);\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n const { finalUrlForCopilot } = useVideoAdsCopilot();\r\n\r\n return (\r\n <>\r\n \r\n {(multiVideoMode === false) ? (\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n {!isGoogleImportVideoAdNeedsRepair && videoAd && videoAd.video && videoAd.video.quality !== undefined && (\r\n )}\r\n
) : (\r\n
\r\n \r\n
)}\r\n {renderError}\r\n {copilotEnabled && (!multiVideoMode || (multiVideoMode && multiVideoList.length < 5)) &&\r\n \r\n }\r\n \r\n {\r\n copilotEnabled && video && video.template && (\r\n videoTemplateUIEnabled && !isLegacyTemplate ? (\r\n {\r\n setShowVideoEditor(newOpen);\r\n }}\r\n isCTV={isCTV}\r\n cid={cid}\r\n aid={aid}\r\n finalUrl={finalUrlForCopilot}\r\n assetLibraryConfig={assetLibraryConfig}\r\n permissions={permissions}\r\n isAADUser={serverContext && serverContext.IsAADUser}\r\n serverContext={serverContext}\r\n perfMarker={perfMarker.createChild('VideoTemplateEditor')}\r\n isDialog\r\n loadClipchampPlayer={loadClipchampPlayer}\r\n />\r\n ) : (\r\n {\r\n setShowVideoEditor(newOpen);\r\n }}\r\n onApply={onChangeVideo}\r\n cid={cid}\r\n aid={aid}\r\n finalUrl={finalUrlForCopilot}\r\n assetLibraryConfig={assetLibraryConfig}\r\n permissions={permissions}\r\n isAADUser={serverContext && serverContext.IsAADUser}\r\n i18n={i18n}\r\n perfMarker={perfMarker.createChild('CopilotVideoEditor')}\r\n isCTV={isCTV}\r\n />\r\n )\r\n )\r\n }\r\n {\r\n copilotEnabled && multiVideoMode && (\r\n videoTemplateUIEnabled ? (\r\n onChangeMultiVideo(newVideo, showMultiVideoCopilotEditor.idx)}\r\n setIsOpen={(newOpen) => {\r\n setShowMultiVideoCopilotEditor({ isOpen: newOpen });\r\n }}\r\n isCTV={isCTV}\r\n cid={cid}\r\n aid={aid}\r\n finalUrl={finalUrlForCopilot}\r\n assetLibraryConfig={assetLibraryConfig}\r\n permissions={permissions}\r\n isAADUser={serverContext && serverContext.IsAADUser}\r\n serverContext={serverContext}\r\n perfMarker={perfMarker.createChild('VideoTemplateEditor')}\r\n isDialog\r\n loadClipchampPlayer={loadClipchampPlayer}\r\n />\r\n ) : (\r\n {\r\n setShowMultiVideoCopilotEditor({ isOpen: newOpen });\r\n }}\r\n onApply={newVideo => onChangeMultiVideo(newVideo, showMultiVideoCopilotEditor.idx)}\r\n cid={cid}\r\n aid={aid}\r\n finalUrl={finalUrlForCopilot}\r\n assetLibraryConfig={assetLibraryConfig}\r\n permissions={permissions}\r\n isAADUser={serverContext && serverContext.IsAADUser}\r\n i18n={i18n}\r\n perfMarker={perfMarker.createChild('CopilotVideoEditor')}\r\n isCTV={isCTV}\r\n />\r\n )\r\n )\r\n }\r\n \r\n );\r\n};\r\n\r\n\r\nCustomComponent.propTypes = {\r\n onDataChange: PropTypes.func.isRequired,\r\n idx: PropTypes.number.isRequired,\r\n videoAd: PropTypes.shape({\r\n video: PropTypes.shape({\r\n Status: PropTypes.string,\r\n VideoTemplateUI: PropTypes.bool,\r\n }),\r\n messages: PropTypes.arrayOf(PropTypes.string),\r\n }).isRequired,\r\n updateValidation: PropTypes.func.isRequired,\r\n videoRequirementForDeal: PropTypes.number.isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n permissions: PropTypes.shape({\r\n dynamic: PropTypes.shape({\r\n VideoCopilotGeneration: PropTypes.bool,\r\n }),\r\n }).isRequired,\r\n renderError: PropTypes.node.isRequired,\r\n cid: PropTypes.string.isRequired,\r\n aid: PropTypes.string.isRequired,\r\n oDataConfig: PropTypes.shape({}).isRequired,\r\n perfMarker: PropTypes.shape({\r\n createChild: PropTypes.func,\r\n }).isRequired,\r\n serverContext: PropTypes.shape({\r\n IsAADUser: PropTypes.bool,\r\n }).isRequired,\r\n preferenceService: PropTypes.shape({}).isRequired,\r\n copilotEnabled: PropTypes.bool.isRequired,\r\n isVideoRequired: PropTypes.bool.isRequired,\r\n};\r\n\r\nconst VideoExperienceWithValidation = _.compose(\r\n withControlErrorHandling,\r\n withUnvalidatedControlErrors,\r\n withError,\r\n withCustomValidation,\r\n withAssetLibraryServicesLoaded\r\n)(CustomComponent);\r\n\r\nconst ValidatedVideoExperience = (props) => {\r\n const {\r\n videoAd, idx, i18n, multiVideoMode, isCTV, isVideoRequired, ...rest\r\n } = props;\r\n\r\n const {\r\n serverContext, preferenceService, cid, aid, oDataConfig,\r\n } = rest;\r\n\r\n const videoProp = andComp(entityIsAd, propertyIs(`Video.VideoMedia16X9_${idx}`));\r\n\r\n const validVideos = videoAd && Array.isArray(videoAd.videos) ? videoAd.videos.filter(video => video !== undefined) : [];\r\n\r\n const multiAdDataObj = { videos: validVideos };\r\n\r\n const dataObj = { video: videoAd ? videoAd.video : null };\r\n\r\n const processingMessage = i18n.getString(_TL_('We\\'re processing your video and reviewing its quality, which may take some time to complete. Please provide your Final URL and select Save. Then, you can check your video\\'s status from the ad grid.'));\r\n\r\n const passiveMessages = videoAd && videoAd.video && videoAd.video.Status === 'Draft' ? [processingMessage] : [];\r\n\r\n const updatedVideoAd = multiVideoMode ? { videos: validVideos } : videoAd;\r\n\r\n const activityLogger = useContext(ActivityContext);\r\n\r\n const assetLibraryConfig = {\r\n cid,\r\n aid,\r\n oDataConfig,\r\n dateFormat: _.get(serverContext, ['CurrentUser', 'CultureDateTimeFormat', 'ShortDatePattern']),\r\n timeZone: _.get(serverContext, ['CurrentAccount', 'TimeZone']),\r\n preferencesService: preferenceService,\r\n activityLogger,\r\n };\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nValidatedVideoExperience.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n videoAd: PropTypes.shape({\r\n video: PropTypes.shape({\r\n Status: PropTypes.string,\r\n }),\r\n }).isRequired,\r\n idx: PropTypes.number.isRequired,\r\n multiVideoMode: PropTypes.bool,\r\n isCTV: PropTypes.bool,\r\n isVideoRequired: PropTypes.bool.isRequired,\r\n skipQualityValidation: PropTypes.bool,\r\n};\r\n\r\nValidatedVideoExperience.defaultProps = {\r\n multiVideoMode: false,\r\n isCTV: false,\r\n skipQualityValidation: false,\r\n};\r\n\r\nconst VideoExperienceWithPreference = withPreference(ValidatedVideoExperience);\r\n\r\nconst VideoExperienceWithPreferenceRecommendationFetch = (props) => {\r\n const copilotFetchTaskManager = useMemo(() => new TaskManager(), []);\r\n const { fetch, isBrandKitEmpty, fetchBrandKit } = useVideoAdsCopilot();\r\n const { useBrandKit } = props;\r\n\r\n useEffect(() => {\r\n fetchBrandKit();\r\n }, [fetchBrandKit]);\r\n\r\n useEffect(() => {\r\n if (props.copilotEnabled) {\r\n fetch(copilotFetchTaskManager, useBrandKit);\r\n }\r\n }, [props, copilotFetchTaskManager, fetch]);\r\n\r\n return ;\r\n};\r\n\r\nexport { VideoExperienceWithPreference as ValidatedVideoExperience };\r\nexport { VideoExperienceWithPreferenceRecommendationFetch as ValidatedVideoExperienceWithRecommendationFetch };\r\n","import React, { useContext, useEffect, useMemo, useState, useCallback } from 'react';\r\nimport _ from 'underscore';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { withCustomValidation, withError, ValidationGroup } from '@bingads-webui-react/validation';\r\nimport { withControlErrorHandling, withUnvalidatedControlErrors } from '@bingads-webui-campaign-react/error-handling';\r\nimport { ValidatedFinalUrl as UrlInput } from '@bingads-webui-campaign-react/validated-url-input';\r\n\r\n\r\nconst ValidatedFinalUrl = withControlErrorHandling(withUnvalidatedControlErrors(withError(withCustomValidation(UrlInput))));\r\n\r\nexport const FinalUrl = ({\r\n i18n,\r\n finalUrlsObj,\r\n containerClassName,\r\n setCopilotFinalUrl,\r\n isAdGridEditorMode,\r\n}) => {\r\n const activity = useContext(ActivityContext);\r\n const [validationState, setValidationState] = useState({});\r\n const [updatedCopilotFinalUrl, setUpdatedCopilotFinalUrl] = useState(false);\r\n\r\n const updateValidationState = (result) => {\r\n setValidationState(result);\r\n };\r\n\r\n const notifyCopilotFinalURLchange = useCallback(() => {\r\n const isValid = _.result(validationState, 'isValid', false);\r\n const finalUrls = _.result(validationState, ['data', 'FinalUrls'], undefined);\r\n const finalUrl = _.first(finalUrls);\r\n\r\n if (isValid) {\r\n if (activity) {\r\n activity.signal(`[VideoAdsCopilot] - Final URL changed to ${finalUrl}`);\r\n }\r\n\r\n setCopilotFinalUrl(finalUrl);\r\n setUpdatedCopilotFinalUrl(true);\r\n }\r\n }, [activity, validationState, setCopilotFinalUrl]);\r\n\r\n const handleKeyUp = useCallback((e) => {\r\n const { key } = e;\r\n if (key === 'Enter') {\r\n notifyCopilotFinalURLchange();\r\n }\r\n }, [notifyCopilotFinalURLchange]);\r\n\r\n const additionalProperties = useMemo(() => ({ onBlur: notifyCopilotFinalURLchange, onKeyUp: handleKeyUp }), [notifyCopilotFinalURLchange, handleKeyUp]);\r\n\r\n useEffect(() => {\r\n // for editor notify final url to trigger copilot on editor open\r\n if (isAdGridEditorMode && !updatedCopilotFinalUrl) {\r\n notifyCopilotFinalURLchange();\r\n }\r\n }, [isAdGridEditorMode, notifyCopilotFinalURLchange, updatedCopilotFinalUrl]);\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nFinalUrl.propTypes = {\r\n i18n: PropTypes.shape({}).isRequired,\r\n finalUrlsObj: PropTypes.shape({}).isRequired,\r\n containerClassName: PropTypes.string,\r\n setCopilotFinalUrl: PropTypes.func.isRequired,\r\n validationProps: PropTypes.shape({}).isRequired,\r\n isAdGridEditorMode: PropTypes.bool,\r\n};\r\n\r\nFinalUrl.defaultProps = {\r\n containerClassName: '',\r\n isAdGridEditorMode: false,\r\n};\r\n","import React, { useContext, useMemo, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport _ from 'underscore';\r\nimport { Stack } from '@bingads-webui-react/fabric-control';\r\nimport { ResponsiveAd } from '@bingads-webui/campaign-odata-schemas';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { mergeI18n } from '@bingads-webui-campaign-react/i18n-merger';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { ValidationGroup } from '@bingads-webui-react/validation';\r\nimport { ThirdPartyMeasurementContainerWithValidation } from '@bingads-webui-campaign-react/third-party-measurement';\r\nimport { CopilotRepositoryProvider } from '@bingads-webui/inline-copilot';\r\nimport { withRecommendationContext } from '@bingads-webui-campaign-react/perf-max-recommendation';\r\nimport { AdvancedSettings } from '@bingads-webui-campaign-react/display-plus-native-ads';\r\nimport { setClarityTag } from '@bingads-webui-universal/clarity';\r\nimport { CampaignFetchProvider } from '@bingads-webui-campaign-react/campaign-http';\r\n\r\nimport { ValidatedVideoExperience } from './validated-video-experience';\r\nimport { getAdsStepStyles } from './styles';\r\nimport { IconButton } from '../common/shared-components';\r\nimport { FinalUrl } from './final-url';\r\nimport { useVideoAdsCopilot } from './use-video-ads-copilot';\r\nimport { getODataConfig } from '../model/ad-bulk';\r\n\r\nconst VideoPanel = ({\r\n i18n,\r\n perfMarker,\r\n cid,\r\n aid,\r\n onUpdate,\r\n onRemovePanel,\r\n removeCloseButton,\r\n permissions,\r\n videoAd,\r\n keyIndex,\r\n isSelectedPanel,\r\n videoRequirementForDeal,\r\n oDataConfig: oDataConfigProp,\r\n customStyleFunction,\r\n useCustomStyleFunction,\r\n biddingScheme,\r\n isForDeal,\r\n isXandrServingCampaign,\r\n dealLoaded,\r\n setCopilotFinalUrl,\r\n isAdGridEditorMode,\r\n copilotFetchTaskManager,\r\n copilotEnabled,\r\n loadClipchampPlayer,\r\n useBrandKit,\r\n setUseBrandKit,\r\n}) => {\r\n const defaultClasses = useDefaultStyles(getAdsStepStyles);\r\n\r\n const customClasses = useDefaultStyles(customStyleFunction);\r\n\r\n const classes = useCustomStyleFunction ? customClasses : defaultClasses;\r\n\r\n const videoTypesWithOrder = ['VideoMedia16X9'];\r\n\r\n const serverContext = useContext(ServerContext);\r\n\r\n const {\r\n DynamicPermissions: {\r\n EnableMSANVideoCampaigns,\r\n },\r\n } = serverContext;\r\n\r\n const oDataConfig = oDataConfigProp || getODataConfig(serverContext);\r\n\r\n const isBiddingStrategyCPV = _.get(biddingScheme, 'Type') === 'ManualCpv';\r\n\r\n const legacyI18n = useMemo(() => window.globalLegacyI18n.get('$/i18n!legacy/global'), []);\r\n\r\n const i18nMerged = useMemo(() => mergeI18n(legacyI18n, i18n), [legacyI18n, i18n]);\r\n\r\n const finalUrlsObj = { FinalUrls: videoAd && videoAd.FinalUrls };\r\n\r\n const { fetch, isBrandKitEmpty, fetchBrandKit } = useVideoAdsCopilot();\r\n\r\n const verifiedTrackingSettingObj = useMemo(() => ({\r\n VerifiedTrackingSettings: videoAd && videoAd.VerifiedTrackingSettings,\r\n }), [videoAd]);\r\n\r\n const shouldRepairGoogleImportVideoAd = permissions && permissions.IsGoogleImportVideoAdsEnabled\r\n && _.get(videoAd, 'video.sourceType') === 'GoogleImported'\r\n && _.get(videoAd, 'video.status') === 'Failed';\r\n\r\n const onValidationUpdate = (result) => {\r\n onUpdate(result);\r\n };\r\n\r\n useEffect(() => {\r\n fetchBrandKit();\r\n }, [fetchBrandKit]);\r\n\r\n useEffect(() => {\r\n if (copilotEnabled) {\r\n fetch(copilotFetchTaskManager, useBrandKit);\r\n setClarityTag({ VideoCopilotGeneration: true });\r\n }\r\n }, [copilotEnabled, copilotFetchTaskManager, fetch, useBrandKit]);\r\n\r\n const advancedSettings = useMemo(() => (\r\n \r\n ), [biddingScheme, verifiedTrackingSettingObj.VerifiedTrackingSettings, videoAd]);\r\n\r\n return (\r\n
\r\n \r\n \r\n {!removeCloseButton &&\r\n
\r\n \r\n
\r\n }\r\n \r\n
\r\n \r\n
\r\n {\r\n // If Xandr serving campaign\r\n // and\r\n // CPM and enable IAS\r\n isXandrServingCampaign &&\r\n permissions.EnableIASVerifiedImpressionTrackingURLsForBrandAwarenessCampaign && !isBiddingStrategyCPV\r\n && (\r\n \r\n )}\r\n {\r\n // Hide when Deal or CTV or EditMode Xandr Serving\r\n EnableMSANVideoCampaigns &&\r\n !isForDeal && !isBiddingStrategyCPV && !(isAdGridEditorMode && isXandrServingCampaign) &&\r\n
\r\n {advancedSettings}\r\n
\r\n }\r\n
\r\n \r\n
\r\n );\r\n};\r\n\r\nVideoPanel.propTypes = {\r\n perfMarker: PropTypes.shape({}).isRequired,\r\n permissions: PropTypes.shape({\r\n EnableIASVerifiedImpressionTrackingURLsForBrandAwarenessCampaign: PropTypes.bool,\r\n IsMOATEnabled: PropTypes.bool,\r\n IsGoogleImportVideoAdsEnabled: PropTypes.bool,\r\n dynamic: PropTypes.shape({\r\n VideoCopilotGeneration: PropTypes.bool,\r\n }),\r\n }).isRequired,\r\n cid: PropTypes.number.isRequired,\r\n aid: PropTypes.number.isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n getLocale: PropTypes.func.isRequired,\r\n }).isRequired,\r\n biddingScheme: PropTypes.shape({}).isRequired,\r\n onUpdate: PropTypes.func.isRequired,\r\n onRemovePanel: PropTypes.func.isRequired,\r\n removeCloseButton: PropTypes.bool.isRequired,\r\n videoAd: PropTypes.shape([]).isRequired,\r\n keyIndex: PropTypes.number.isRequired,\r\n isSelectedPanel: PropTypes.bool.isRequired,\r\n oDataConfig: PropTypes.shape({}),\r\n customStyleFunction: PropTypes.func,\r\n useCustomStyleFunction: PropTypes.bool,\r\n videoRequirementForDeal: PropTypes.number,\r\n isForDeal: PropTypes.bool,\r\n dealLoaded: PropTypes.bool,\r\n setCopilotFinalUrl: PropTypes.func.isRequired,\r\n isAdGridEditorMode: PropTypes.bool,\r\n copilotFetchTaskManager: PropTypes.shape({}).isRequired,\r\n copilotEnabled: PropTypes.bool.isRequired,\r\n isXandrServingCampaign: PropTypes.bool,\r\n};\r\n\r\nVideoPanel.defaultProps = {\r\n oDataConfig: null,\r\n customStyleFunction: _.noop,\r\n videoRequirementForDeal: null,\r\n useCustomStyleFunction: false,\r\n isForDeal: false,\r\n dealLoaded: null,\r\n isAdGridEditorMode: false,\r\n isXandrServingCampaign: false,\r\n};\r\n\r\nconst VideoPanelWithContexts = ({ ...props }) => {\r\n const [copilotFinalUrl, setCopilotFinalUrl] = React.useState('');\r\n const serverContext = useContext(ServerContext);\r\n const { permissions } = props;\r\n const isUsingVideoTemplates = permissions && permissions.dynamic && permissions.dynamic.VideoTemplateUI;\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nVideoPanelWithContexts.propTypes = {\r\n i18n: PropTypes.shape({\r\n getLocale: PropTypes.func.isRequired,\r\n }).isRequired,\r\n campaignId: PropTypes.number.isRequired,\r\n};\r\n\r\nconst WrappedComponent = withRecommendationContext(VideoPanelWithContexts);\r\n\r\nexport { WrappedComponent as VideoPanel };\r\n\r\n","import { useState, useCallback } from 'react';\r\nimport _ from 'underscore';\r\n\r\nconst ITEMS_PER_PAGE = 10;\r\n\r\nconst MAX_ITEMS = 10;\r\n\r\nconst addItemsToPages = (pages, lastPage, lastPageIndex, count) => {\r\n const page = lastPage;\r\n\r\n if (page.numberOfAdsInPage + count > ITEMS_PER_PAGE) {\r\n const remaining = count - (ITEMS_PER_PAGE - page.numberOfAdsInPage);\r\n const itemsBefore = pages.slice(0, lastPageIndex - 1);\r\n const itemsAfter = pages.slice(lastPageIndex, pages.length);\r\n\r\n const newPageItem = { numberOfAdsInPage: ITEMS_PER_PAGE, pageNumber: page.pageNumber, id: page.id };\r\n\r\n const nextPageItem = { numberOfAdsInPage: 0, pageNumber: page.pageNumber + 1, id: Math.random() };\r\n\r\n return addItemsToPages([...itemsBefore, newPageItem, ...itemsAfter], nextPageItem, lastPageIndex + 1, remaining);\r\n }\r\n\r\n const itemsBefore = pages.slice(0, lastPageIndex - 1);\r\n const itemsAfter = pages.slice(lastPageIndex, pages.length);\r\n\r\n const newPageItem = { numberOfAdsInPage: page.numberOfAdsInPage + count, pageNumber: page.pageNumber, id: page.id };\r\n\r\n return {\r\n currentPage: newPageItem,\r\n pages: [...itemsBefore, newPageItem, ...itemsAfter],\r\n };\r\n};\r\n\r\nexport const usePageManager = (ads, initialAdsCount = 1) => {\r\n const calculateTotalPages = () => {\r\n if (_.isUndefined(ads)) {\r\n return 1;\r\n }\r\n const totalPages = Math.ceil(ads.length / ITEMS_PER_PAGE);\r\n\r\n return totalPages;\r\n };\r\n\r\n const [totalPages, setTotalPages] = useState(calculateTotalPages());\r\n\r\n const maxItems = MAX_ITEMS;\r\n\r\n const createPages = () => {\r\n if (_.isUndefined(ads)) {\r\n return [{ numberOfAdsInPage: initialAdsCount, pageNumber: 1, id: Math.random() }];\r\n }\r\n\r\n if (ads.length === 0) {\r\n return [{ numberOfAdsInPage: initialAdsCount, pageNumber: 1, id: Math.random() }];\r\n }\r\n\r\n let totalAds = ads.length;\r\n\r\n return _.map(_.range(totalPages), (idx) => {\r\n const numberOfAdsInPage = totalAds > ITEMS_PER_PAGE ? ITEMS_PER_PAGE : totalAds;\r\n\r\n totalAds -= ITEMS_PER_PAGE;\r\n return { numberOfAdsInPage, pageNumber: idx + 1, id: Math.random() };\r\n });\r\n };\r\n\r\n const [currentPageIndex, setCurrentPageIndex] = useState(1);\r\n\r\n const [pages, setPages] = useState(createPages());\r\n\r\n const [currentPage, setCurrentPage] = useState(pages[0]);\r\n\r\n const getPageAdjustedIndex = (idx, pageNumber = null) => {\r\n const page = pageNumber || currentPageIndex;\r\n\r\n const val = (((page - 1) * ITEMS_PER_PAGE) + idx);\r\n\r\n return val;\r\n };\r\n\r\n const onAddPage = useCallback(() => {\r\n const newPage = { numberOfAdsInPage: 1, pageNumber: currentPageIndex + 1, id: Math.random() };\r\n\r\n setPages([...pages.concat(newPage)]);\r\n setCurrentPage(newPage);\r\n setCurrentPageIndex(currentPageIndex + 1);\r\n setTotalPages(totalPages + 1);\r\n }, [currentPageIndex, pages, totalPages]);\r\n\r\n const onAddItem = () => {\r\n const page = currentPage;\r\n\r\n if (page.numberOfAdsInPage === ITEMS_PER_PAGE) {\r\n onAddPage();\r\n } else {\r\n const itemsBefore = pages.slice(0, currentPageIndex - 1);\r\n const itemsAfter = pages.slice(currentPageIndex, pages.length);\r\n\r\n const newPageItem = { numberOfAdsInPage: page.numberOfAdsInPage + 1, pageNumber: page.pageNumber, id: page.id };\r\n setCurrentPage(newPageItem);\r\n setPages([...itemsBefore, newPageItem, ...itemsAfter]);\r\n }\r\n };\r\n\r\n const onAddItemsToPage = (count) => {\r\n const lastPage = pages[pages.length - 1];\r\n\r\n const lastPageIndex = pages.length;\r\n\r\n const {\r\n pages: newPages,\r\n } = addItemsToPages(pages, lastPage, lastPageIndex, count);\r\n\r\n setPages(newPages);\r\n setTotalPages(newPages.length);\r\n setCurrentPage(newPages[newPages.length - 1]);\r\n setCurrentPageIndex(newPages.length);\r\n };\r\n\r\n const goToNextPage = () => {\r\n setCurrentPageIndex(currentPageIndex + 1);\r\n setCurrentPage({ ...pages[(currentPageIndex - 1) + 1] });\r\n };\r\n\r\n const goToPrevPage = () => {\r\n setCurrentPageIndex(currentPageIndex - 1);\r\n setCurrentPage({ ...pages[(currentPageIndex - 1) - 1] });\r\n };\r\n\r\n const goToPage = (val) => {\r\n const valInt = parseInt(val, 10);\r\n if (valInt > 0 && valInt <= totalPages) {\r\n _.debounce(setCurrentPageIndex(parseInt(valInt, 10)), 100);\r\n setCurrentPage(pages[valInt - 1]);\r\n }\r\n };\r\n\r\n const removeLastPage = () => {\r\n setCurrentPage({ ...pages[(currentPageIndex - 1) - 1] });\r\n setPages([...pages.splice(0, pages.length - 1)]);\r\n setCurrentPageIndex(currentPageIndex - 1);\r\n setTotalPages(totalPages - 1);\r\n };\r\n\r\n const removeItemFromLastPage = () => {\r\n const lastPage = pages[pages.length - 1];\r\n\r\n if (lastPage.numberOfAdsInPage === 1) {\r\n removeLastPage();\r\n } else {\r\n const newPage = { id: lastPage.id, numberOfAdsInPage: lastPage.numberOfAdsInPage - 1, pageNumber: lastPage.pageNumber };\r\n\r\n const itemsBefore = pages.slice(0, pages.length - 1);\r\n\r\n setCurrentPage({ ...newPage });\r\n setPages([...itemsBefore, newPage]);\r\n }\r\n };\r\n\r\n const removeItem = () => {\r\n if (currentPage.numberOfAdsInPage === 1) {\r\n removeLastPage();\r\n } else if (pages.length === 1) {\r\n const newPage = { id: currentPage.id, numberOfAdsInPage: currentPage.numberOfAdsInPage - 1, pageNumber: currentPage.pageNumber };\r\n\r\n setCurrentPage({ ...newPage });\r\n setPages([newPage]);\r\n } else {\r\n removeItemFromLastPage();\r\n }\r\n };\r\n\r\n return {\r\n currentPage,\r\n currentPageIndex,\r\n pages,\r\n getPageAdjustedIndex,\r\n goToPrevPage,\r\n goToNextPage,\r\n goToPage,\r\n onAddPage,\r\n onAddItem,\r\n onAddItemsToPage,\r\n removeItem,\r\n totalPages,\r\n maxItems,\r\n };\r\n};\r\n","/* eslint-disable jsx-a11y/anchor-is-valid */\r\nimport React, { useState, useEffect, useContext, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport _ from 'underscore';\r\nimport { MessageBar } from '@fluentui/react';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { FontIcon, Text } from '@bingads-webui-react/fabric-control';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { setClarityTag } from '@bingads-webui-universal/clarity';\r\nimport { TaskManager } from '@bingads-webui-universal/task-manager';\r\nimport { useCopilotLoggers, useInitCopilotLoggers } from '@bingads-webui-campaign-react/copilot-loggers';\r\nimport { isCopilotRegionRestricted } from '@bingads-webui-react/copilot-utils';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { VideoPanel } from './video-panel';\r\nimport { PlacementQualities } from '../ad-components';\r\nimport { Link, TextField } from '../common/shared-components';\r\nimport { getAdsStepStyles } from './styles';\r\nimport { usePageManager } from './page-manager';\r\n\r\n// TODO: Upload video styling for smaller videos.\r\n// TODO: Upload video styling for larger videos.\r\n// TODO: Add background of video while uploading.\r\n// TODO: Add label for processing.\r\n// TODO: Add progress video background\r\n// TODO: Add suggested placements component next to the video.\r\n\r\n\r\n// TODO: Add dots for Ad Preview pagination - DONE\r\n\r\n\r\nexport const VideoAdsContainer = (props) => {\r\n const {\r\n aid,\r\n cid,\r\n i18n,\r\n perfMarker,\r\n onAdsValidation,\r\n currentVideoIndex,\r\n ads = [],\r\n oDataConfig,\r\n disablePagination,\r\n permissions,\r\n deal,\r\n dealLoaded,\r\n customStyleFunction,\r\n useCustomStyleFunction,\r\n resetFields,\r\n isAdGridEditorMode,\r\n allowCopilotVideoGeneration,\r\n biddingScheme = {},\r\n campaignId,\r\n hideFooter,\r\n isXandrServingCampaign,\r\n loadClipchampPlayer,\r\n } = props;\r\n\r\n const videoRequirementForDeal = _.get(deal, ['DealAdQualityConstraints', '0', 'VideoQuality']);\r\n\r\n const isForDeal = !_.isEmpty(deal);\r\n\r\n let dealVideoRequirementText;\r\n if (videoRequirementForDeal === PlacementQualities.ONLY_PERFECT) {\r\n dealVideoRequirementText = i18n.getString(_TL_('Your campaign\\'s media deal requires that your video is of excellent quality (three stars). For more information about the technical requirements, see '));\r\n } else if (videoRequirementForDeal === PlacementQualities.ONLY_EXCELLENT) {\r\n dealVideoRequirementText = i18n.getString(_TL_('For this deal your asset must meet the General Video requirements.'));\r\n }\r\n\r\n const isEditScenario = useMemo(() => isAdGridEditorMode && ads && ads[0] && ads[0].Id, [ads, isAdGridEditorMode]);\r\n\r\n useInitCopilotLoggers({ campaignId, feature: 'VideoAds', isEditScenario });\r\n\r\n const { logEnterFlow } = useCopilotLoggers();\r\n\r\n const defaultClasses = useDefaultStyles(getAdsStepStyles);\r\n\r\n const activity = useContext(ActivityContext);\r\n\r\n const customClasses = useDefaultStyles(customStyleFunction);\r\n\r\n const classes = useCustomStyleFunction ? customClasses : defaultClasses;\r\n\r\n const [videoAds, setVideoAds] = useState(ads || []);\r\n\r\n const [useBrandKit, setUseBrandKit] = useState(true);\r\n\r\n const copilotFetchTaskManager = useMemo(() => new TaskManager(), []);\r\n\r\n const serverContext = useContext(ServerContext);\r\n const [isAdsCopilotRegionRestricted, setIsAdsCopilotRegionRestricted] = useState(true);\r\n useEffect(() => {\r\n isCopilotRegionRestricted({\r\n feature: 'Recommendations',\r\n permissions,\r\n serverContext,\r\n }).then(setIsAdsCopilotRegionRestricted);\r\n }, [permissions, serverContext]);\r\n\r\n const copilotEnabled = allowCopilotVideoGeneration &&\r\n permissions.dynamic.VideoCopilotGeneration &&\r\n !isAdsCopilotRegionRestricted &&\r\n (!videoRequirementForDeal || videoRequirementForDeal < PlacementQualities.ONLY_PERFECT);\r\n\r\n const {\r\n goToNextPage,\r\n goToPrevPage,\r\n goToPage,\r\n getPageAdjustedIndex,\r\n currentPage,\r\n currentPageIndex,\r\n pages,\r\n onAddItem,\r\n removeItem,\r\n totalPages,\r\n maxItems,\r\n } = usePageManager(ads);\r\n\r\n const onAddAd = () => {\r\n onAddItem();\r\n if (activity) {\r\n activity.signal(`Adding new ad panel - current total: ${currentPage.numberOfAdsInPage}`);\r\n }\r\n };\r\n\r\n const onVideoPanelUpdate = (result, idx, uid) => {\r\n let itemAtIdx = videoAds[idx] || { video: null, FinalUrls: [], uid: null };\r\n\r\n if (itemAtIdx.uid === null) {\r\n itemAtIdx = { ...result, uid, Id: itemAtIdx.Id };\r\n } else {\r\n itemAtIdx = { ...result, uid: itemAtIdx.uid, Id: itemAtIdx.Id };\r\n }\r\n\r\n const itemsBefore = videoAds.slice(0, idx);\r\n const itemsAfter = videoAds.slice(idx + 1, videoAds.length);\r\n setVideoAds([...itemsBefore, { ...itemAtIdx }, ...itemsAfter]);\r\n };\r\n\r\n const onRemovePanel = (idx) => {\r\n if (activity) {\r\n activity.signal(`Removing ad panel at idx ${idx}`);\r\n }\r\n videoAds.splice(idx, 1);\r\n\r\n setVideoAds([...videoAds]);\r\n\r\n removeItem();\r\n };\r\n\r\n const isAllValid = () => {\r\n let valid = true;\r\n // eslint-disable-next-line consistent-return\r\n _.each(videoAds, (ad) => {\r\n if (!ad.isValid) {\r\n valid = false;\r\n }\r\n });\r\n\r\n return valid;\r\n };\r\n\r\n const isAllDirty = () => {\r\n let dirty = false;\r\n // eslint-disable-next-line consistent-return\r\n _.each(videoAds, (ad) => {\r\n if (ad.isDirty) {\r\n dirty = true;\r\n }\r\n });\r\n\r\n return dirty;\r\n };\r\n\r\n useEffect(() => {\r\n if (activity) {\r\n activity.signal(`[VideoAdsCopilot] - useBrandKitToggle changed to ${useBrandKit}`);\r\n }\r\n }, [useBrandKit, activity]);\r\n\r\n useEffect(() => {\r\n const result = {\r\n data: [...videoAds], isValid: isAllValid(), isDirty: isAllDirty(), currentPageIndex,\r\n };\r\n onAdsValidation(result);\r\n if (activity) {\r\n activity.signal(`onVideoAdsContainerValidated - ${JSON.stringify(result)}`);\r\n }\r\n // disabling exhaustive deps since the onAdsValidation value changes on each rerender.\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [currentPageIndex, videoAds]);\r\n\r\n useEffect(() => {\r\n if (resetFields) {\r\n setVideoAds([]);\r\n }\r\n }, [resetFields]);\r\n\r\n useEffect(() => {\r\n setClarityTag('XandrVideoAds', 'true');\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (!_.isEqual(ads, videoAds) && !isAdGridEditorMode) {\r\n // check if ads has any ad that has id. (update scenario)\r\n let shouldUpdate = false;\r\n\r\n _.each(ads, (ad) => {\r\n const videoAd = _.filter(videoAds, vAd => vAd.uid === ad.uid);\r\n\r\n if (videoAd && videoAd[0] && _.isUndefined(videoAd[0].Id) && ad.Id) {\r\n shouldUpdate = true;\r\n }\r\n\r\n // For reload scenario if we can't find any ad in local state, refresh state\r\n if (permissions.dynamic.MultiAdFormat && _.isEmpty(videoAd) && ad.Id) {\r\n shouldUpdate = true;\r\n }\r\n });\r\n\r\n if (shouldUpdate) {\r\n setVideoAds(ads);\r\n }\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [ads]);\r\n\r\n useEffect(() => {\r\n if (copilotEnabled) {\r\n logEnterFlow();\r\n }\r\n }, [copilotEnabled, logEnterFlow]);\r\n\r\n return (\r\n
\r\n {\r\n dealVideoRequirementText &&\r\n \r\n {dealVideoRequirementText}\r\n {(videoRequirementForDeal === PlacementQualities.ONLY_PERFECT) &&\r\n \r\n {i18n.getString(_TL_('About video ads'))}.\r\n }\r\n \r\n }\r\n {\r\n _.map(pages, (page) => {\r\n const panels = _.map(_.range(page.numberOfAdsInPage), (idx) => {\r\n const videoAd = (videoAds[getPageAdjustedIndex(idx, page.pageNumber)] && videoAds[getPageAdjustedIndex(idx, page.pageNumber)].data);\r\n\r\n const uid = (videoAds[getPageAdjustedIndex(idx, page.pageNumber)] && videoAds[getPageAdjustedIndex(idx, page.pageNumber)].uid) || Math.random();\r\n\r\n const isCurrentPage = page.id === currentPage.id;\r\n\r\n return (\r\n
\r\n onVideoPanelUpdate(result, getPageAdjustedIndex(idx, page.pageNumber), uid)}\r\n onRemovePanel={() => onRemovePanel(getPageAdjustedIndex(idx, page.pageNumber), page)}\r\n removeCloseButton={page.numberOfAdsInPage === 1}\r\n keyIndex={uid}\r\n videoRequirementForDeal={videoRequirementForDeal}\r\n isSelectedPanel={currentVideoIndex === idx}\r\n oDataConfig={oDataConfig}\r\n biddingScheme={biddingScheme}\r\n isXandrServingCampaign={isXandrServingCampaign}\r\n isForDeal={isForDeal}\r\n dealLoaded={dealLoaded}\r\n isAdGridEditorMode={isAdGridEditorMode}\r\n copilotEnabled={copilotEnabled}\r\n loadClipchampPlayer={loadClipchampPlayer}\r\n useBrandKit={useBrandKit}\r\n setUseBrandKit={setUseBrandKit}\r\n />\r\n
\r\n );\r\n });\r\n\r\n return panels;\r\n })\r\n }\r\n
\r\n {\r\n (!hideFooter && (currentPage.numberOfAdsInPage < maxItems && !disablePagination)) && (\r\n \r\n  {i18n.getString(_TL_('Create another ad'))}\r\n \r\n )\r\n }\r\n
\r\n {totalPages > 1 && !disablePagination && (\r\n
\r\n
\r\n \r\n Prev \r\n \r\n goToPage(val)}\r\n />\r\n of {totalPages} \r\n \r\n Next \r\n \r\n
\r\n
\r\n )}\r\n
\r\n );\r\n};\r\n\r\n\r\nVideoAdsContainer.propTypes = {\r\n aid: PropTypes.string.isRequired,\r\n cid: PropTypes.string.isRequired,\r\n biddingScheme: PropTypes.shape({}).isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n perfMarker: PropTypes.shape({}).isRequired,\r\n permissions: PropTypes.shape({\r\n dynamic: PropTypes.shape({\r\n VideoCopilotGeneration: PropTypes.bool,\r\n }),\r\n }).isRequired,\r\n onAdsValidation: PropTypes.func.isRequired,\r\n ads: PropTypes.shape({\r\n data: PropTypes.shape({}),\r\n }).isRequired,\r\n oDataConfig: PropTypes.shape({}),\r\n disablePagination: PropTypes.bool,\r\n customStyleFunction: PropTypes.func,\r\n useCustomStyleFunction: PropTypes.bool,\r\n resetFields: PropTypes.bool,\r\n currentVideoIndex: PropTypes.number,\r\n isAdGridEditorMode: PropTypes.bool,\r\n hideFooter: PropTypes.bool,\r\n deal: PropTypes.shape({}),\r\n dealLoaded: PropTypes.bool,\r\n allowCopilotVideoGeneration: PropTypes.bool,\r\n campaignId: PropTypes.number,\r\n isXandrServingCampaign: PropTypes.bool,\r\n};\r\n\r\nVideoAdsContainer.defaultProps = {\r\n oDataConfig: null,\r\n disablePagination: false,\r\n customStyleFunction: _.noop,\r\n useCustomStyleFunction: false,\r\n deal: null,\r\n dealLoaded: false,\r\n resetFields: false,\r\n hideFooter: false,\r\n currentVideoIndex: 0,\r\n isAdGridEditorMode: false,\r\n allowCopilotVideoGeneration: false,\r\n campaignId: -1,\r\n isXandrServingCampaign: false,\r\n};\r\n","/* istanbul ignore file */\r\n\r\nimport { get, uniq, isEmpty } from 'underscore';\r\nimport { edmCampaign } from '@bingads-webui/edm-campaign';\r\nimport { getTargetConstraints, getCountriesLocations } from '../common/deal-constraints';\r\n\r\nexport const fillLocationForDeal = async (deal, serverContext) => {\r\n if (!deal) {\r\n return Promise.resolve();\r\n }\r\n const locationIds = getTargetConstraints(deal, 'Location').mandatory;\r\n\r\n const cid = serverContext.CurrentCustomer.Id;\r\n const aid = serverContext.CurrentAccount.Id;\r\n const lcid = serverContext ? serverContext.CurrentUser.LocaleID : '1033';\r\n\r\n const responses = await getCountriesLocations(locationIds, lcid, cid, aid);\r\n const CountryName = uniq(responses.map(res => res.data.EnglishName)).join(',');\r\n return {\r\n ...deal,\r\n CountryName,\r\n };\r\n};\r\n\r\nexport const getDealDetails = async (cid, aid, campaignId, serverContext) => {\r\n try {\r\n const targets = await edmCampaign\r\n .Customers.$withKey(cid)\r\n .Accounts.$withKey(aid)\r\n .Campaigns.$withKey(campaignId)\r\n .CampaignCriterions.$cast('Model.CampaignCriterion')\r\n .get({\r\n filter: {\r\n where: \"isof(Criterion,'Model.DealCriterion')\",\r\n },\r\n })\r\n .toPromise();\r\n\r\n const dealId = get(targets, 'value[0].Criterion.DealId');\r\n\r\n if (!dealId) {\r\n return Promise.resolve();\r\n }\r\n\r\n try {\r\n const dealDetail = await edmCampaign\r\n .Customers.$withKey(cid)\r\n .Accounts.$withKey(aid)\r\n .Deals.$withKey(targets.value[0].Criterion.DealId)\r\n .get()\r\n .toPromise();\r\n\r\n if (serverContext) {\r\n const filledDeal = await fillLocationForDeal(dealDetail, serverContext);\r\n return filledDeal;\r\n }\r\n return dealDetail;\r\n } catch (error) {\r\n console.error(error);\r\n // If we get an error with errorCode InvalidId,\r\n // we will return the dealId and the error code as it is deleted by Xandr.\r\n const errorCodeTarget = GetDealErrorCode(error, 'InvalidId');\r\n if (errorCodeTarget) {\r\n return Promise.resolve({\r\n Id: dealId,\r\n Error: errorCodeTarget,\r\n });\r\n }\r\n return Promise.resolve();\r\n }\r\n } catch (error) {\r\n console.error(error);\r\n return Promise.resolve();\r\n }\r\n};\r\n\r\nconst GetDealErrorCode = (error, expectedError) => {\r\n if (error.status !== 400) {\r\n return null;\r\n }\r\n\r\n const responseErrArray = get(error, ['responseJSON', 'value']);\r\n if (isEmpty(responseErrArray)) {\r\n return null;\r\n }\r\n\r\n if (get(responseErrArray, [0, 'Code']) === expectedError) {\r\n return expectedError;\r\n }\r\n return null;\r\n};\r\n","import React, { useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Button, makeStyles, mergeClasses, tokens } from '@fluentui/react-components';\r\n\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\n\r\nconst useStyles = makeStyles({\r\n buttonStyle: {\r\n marginRight: tokens.spacingHorizontalS,\r\n marginTop: tokens.spacingVerticalL,\r\n },\r\n});\r\n\r\nexport const AdEditorFooter = ({\r\n cancel,\r\n save,\r\n saveAndCreateAnother,\r\n}) => {\r\n const classes = useStyles();\r\n const i18n = useContext(I18nContext);\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n
\r\n );\r\n};\r\n\r\nAdEditorFooter.propTypes = {\r\n cancel: PropTypes.func.isRequired,\r\n save: PropTypes.func.isRequired,\r\n saveAndCreateAnother: PropTypes.func.isRequired,\r\n};\r\n","import React, { useEffect, useState, useContext } from 'react';\r\nimport _ from 'underscore';\r\nimport PropTypes from 'prop-types';\r\nimport { FluentProvider, webLightTheme, Divider } from '@fluentui/react-components';\r\nimport { ErrorMessages } from '@bingads-webui-react/validation';\r\nimport { withComponentErrorLogging } from '@bingads-webui-campaign-react/global-error-options';\r\nimport { withLoggingContext, useCopilotLoggers } from '@bingads-webui-campaign-react/copilot-loggers';\r\nimport { InstrumentationContext } from '@bingads-webui-react/hoc-with-instrumentation';\r\nimport { getLogVersion } from '@bingads-webui-campaign-react/asset-library-model';\r\nimport {\r\n getLoggerWithoutPageInfo,\r\n createVideoRepository,\r\n createImageRepository,\r\n createFolderRepository,\r\n uploadVideoMetadata,\r\n} from '@bingads-webui-campaign-react/asset-library-services';\r\nimport { newVideoFromMTObject } from '@bingads-webui-campaign-react/image-experience-video-part';\r\nimport { UiBlocker } from '@bingads-webui-react/ui-blocker';\r\n\r\n\r\nimport { saveAds, getDealDetails } from '../model';\r\nimport { VideoAdsContainer } from './video-ads-container';\r\nimport { AdPreview } from './ad-preview';\r\nimport { AdEditorFooter } from './ad-editor-footer';\r\n\r\nconst getAdsStepStyles = (/* components, theme */) => ({\r\n videoPanelRoot: {\r\n marginTop: 20,\r\n width: 500,\r\n minHeight: 181,\r\n padding: 20,\r\n paddingBottom: 20,\r\n background: '#FFFFFF',\r\n boxShadow: '0px 2px 4px rgba(0, 0, 0, 0.1)',\r\n borderRadius: 6,\r\n '& .image-list-item-status-indicator': {\r\n background: 'linear-gradient(180deg, rgba(0, 0, 0, 0) 0%, #000000 100%)',\r\n borderRadius: 6,\r\n width: '170px !important',\r\n height: '96px !important',\r\n paddingTop: '10px !important',\r\n '&:hover': {\r\n '& .edit-button': {\r\n display: 'none',\r\n },\r\n },\r\n '& .placeholder-content': {\r\n color: 'white !important',\r\n },\r\n },\r\n '& .error': {\r\n marginTop: 20,\r\n },\r\n '& .image-experience-content': {\r\n width: 170,\r\n '& .col-sm-3': {\r\n background: 'linear-gradient(180deg, rgba(0, 0, 0, 0) 0%, #000000 100%)',\r\n borderRadius: 6,\r\n width: '170px !important',\r\n height: '96px !important',\r\n paddingTop: '10px !important',\r\n display: 'flex',\r\n flexWrap: 'wrap',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n '&:hover': {\r\n '& .edit-button': {\r\n display: 'none',\r\n },\r\n },\r\n '& .placeholder-content': {\r\n color: 'white !important',\r\n },\r\n '& .ms-Button': {\r\n width: 56,\r\n height: 24,\r\n marginTop: 10,\r\n },\r\n '& .image-list-content': {\r\n width: '170px !important', // fixed for 16:9 aspect ratio\r\n border: 'none !important',\r\n padding: '0px !important',\r\n },\r\n },\r\n },\r\n '& .image-section-label': {\r\n display: 'flex',\r\n alignItems: 'center',\r\n },\r\n '& .image-list-label': {\r\n fontWeight: 600,\r\n },\r\n '& .image-list-content': {\r\n width: '170px !important', // fixed for 16:9 aspect ratio\r\n border: 'none !important',\r\n padding: '0px !important',\r\n },\r\n '& .image-list-item-video': {\r\n position: 'relative',\r\n width: '170px !important', // fixed for 16:9 aspect ratio\r\n '&:hover': {\r\n '& .edit-button': {\r\n display: 'flex',\r\n },\r\n },\r\n '& .placeholder-content': {\r\n color: 'black !important',\r\n },\r\n\r\n },\r\n '& .image-item-ratio-label': {\r\n paddingTop: 10,\r\n },\r\n '& .thumbnail-preview': {\r\n borderRadius: 6,\r\n filter: 'drop-shadow(0px 0.6px 1.8px rgba(0, 0, 0, 0.1)) drop-shadow(0px 3.2px 7.2px rgba(0, 0, 0, 0.13))',\r\n width: '170px !important',\r\n height: '96px !important',\r\n },\r\n },\r\n selectedPanel: {\r\n border: '1px solid #0078D4',\r\n },\r\n videoPanelHeader: {\r\n display: 'flex',\r\n width: '100%',\r\n justifyContent: 'flex-end',\r\n },\r\n adPreviewTitle: {\r\n fontSize: 18,\r\n fontWeight: 600,\r\n },\r\n previewContainer: {\r\n height: 280,\r\n width: 498,\r\n },\r\n adPreviewHeader: {\r\n height: 40,\r\n },\r\n adPreviewRoot: {\r\n width: 540,\r\n padding: 20,\r\n paddingBottom: 20,\r\n display: 'flex',\r\n flexWrap: 'wrap',\r\n },\r\n video: {\r\n borderRadius: '6px',\r\n filter: 'drop-shadow(0px 0.6px 1.8px rgba(0, 0, 0, 0.1)) drop-shadow(0px 3.2px 7.2px rgba(0, 0, 0, 0.13))',\r\n },\r\n previewTag: {\r\n marginTop: 10,\r\n },\r\n pagination: {\r\n paddingTop: 10,\r\n width: '100%',\r\n },\r\n pageControls: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n columnGap: '10px',\r\n },\r\n paginationIndicatorDot: {\r\n height: 8,\r\n width: 8,\r\n borderRadius: '50%',\r\n display: 'inline-block',\r\n cursor: 'pointer',\r\n },\r\n paginationButton: {\r\n height: 8,\r\n width: 8,\r\n opacity: 0,\r\n },\r\n paginationIndicator: {\r\n display: 'flex',\r\n columnGap: '2px',\r\n },\r\n videoPanelContent: {\r\n display: 'flex',\r\n flexWrap: 'wrap',\r\n },\r\n placementInfoTile: {\r\n paddingTop: 20,\r\n marginLeft: 10,\r\n },\r\n});\r\n\r\nconst containerStyle = {\r\n display: 'flex',\r\n '& .image-list-content': {\r\n border: 'none !important',\r\n padding: '0px !important',\r\n },\r\n};\r\n\r\nconst AdEditor = ({\r\n aid,\r\n cid,\r\n i18n,\r\n perfMarker,\r\n permissions,\r\n adsModel,\r\n campaignId,\r\n adGroupId,\r\n onAdsValidation,\r\n oDataConfig,\r\n resetFields,\r\n biddingScheme,\r\n isXandrServingCampaign,\r\n onCancel,\r\n onSave,\r\n onSaveAndCreateAnother,\r\n isMultiAdFormatAd,\r\n loadClipchampPlayer,\r\n}) => {\r\n const [deal, setDeal] = useState(null);\r\n const [dealLoaded, setDealLoaded] = useState(false);\r\n const [serverErrors, setServerErrors] = useState(null);\r\n const [blocking, setBlocking] = useState(false);\r\n const instrumentation = useContext(InstrumentationContext);\r\n const { logSuggestionsApplied } = useCopilotLoggers();\r\n\r\n useEffect(() => {\r\n const fetchDeal = async () => {\r\n const dealDetail = await getDealDetails(cid, aid, campaignId);\r\n setDeal(dealDetail);\r\n setDealLoaded(true);\r\n };\r\n\r\n fetchDeal();\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n const scenario = instrumentation.createScenario('XandrVideoAdsAdEditing');\r\n const activity = scenario.createActivity('Ad');\r\n const versionForLog = getLogVersion(permissions);\r\n const logger = getLoggerWithoutPageInfo(activity, versionForLog, 'XandrVideoAdsAdEditing');\r\n\r\n const videoRepository = createVideoRepository({\r\n oDataConfig,\r\n aid,\r\n cid,\r\n });\r\n const folderRepository = createFolderRepository({\r\n i18n,\r\n logger,\r\n oDataConfig,\r\n aid,\r\n cid,\r\n });\r\n const imageRepository = createImageRepository({\r\n oDataConfig,\r\n aid,\r\n cid,\r\n logger,\r\n i18n,\r\n activity,\r\n });\r\n\r\n const saveAd = () => saveAds({\r\n ads: isMultiAdFormatAd ? { ...adsModel, adSubType: 'Video' } : adsModel,\r\n campaign: { Id: campaignId },\r\n adGroup: { Id: adGroupId },\r\n activity,\r\n }, { scenario, i18n }).then((adData) => {\r\n const suggestionIds = _.chain(adsModel.data)\r\n .map(ad => ad.data.video.recommendationId).compact().value();\r\n\r\n logSuggestionsApplied(\r\n campaignId,\r\n adGroupId,\r\n undefined /* textSuggestions */,\r\n undefined /* imageSuggestionIds */,\r\n suggestionIds\r\n );\r\n return adData;\r\n }).finally(() => setBlocking(false));\r\n\r\n const saveVideoAd = () => {\r\n setBlocking(true);\r\n\r\n if (adsModel.data[0].data.video.id) {\r\n return saveAd();\r\n }\r\n\r\n const videoMetaData = _.omit(adsModel.data[0].data.video, 'savedMaterial');\r\n const { savedImages, savedLogo } = adsModel.data[0].data.video.savedMaterial || {};\r\n\r\n return uploadVideoMetadata({\r\n videoMetadata: videoMetaData,\r\n newVideoFromMTObject,\r\n savedImages,\r\n savedLogo,\r\n folderRepository,\r\n imageRepository,\r\n videoRepository,\r\n }).then((uploadedVideo) => {\r\n // eslint-disable-next-line no-param-reassign\r\n adsModel.data[0].data.video = uploadedVideo;\r\n return saveAd();\r\n });\r\n };\r\n\r\n const save = (saveAnother) => {\r\n setServerErrors(null);\r\n\r\n if (!adsModel.isValid) {\r\n return Promise.resolve(false);\r\n }\r\n\r\n return saveVideoAd().then((result) => {\r\n if (result && result.ads && result.ads.data) {\r\n if (saveAnother) {\r\n onSaveAndCreateAnother(result);\r\n } else {\r\n onSave(result);\r\n }\r\n }\r\n }).catch((result) => {\r\n setServerErrors(result.serverErrors);\r\n });\r\n };\r\n\r\n const cancel = () => {\r\n onCancel();\r\n };\r\n\r\n return (\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n error.message) : []} />\r\n
\r\n _.noop}\r\n ads={adsModel}\r\n disablePagination\r\n customStyleFunction={getAdsStepStyles}\r\n useCustomStyleFunction\r\n permissions={permissions}\r\n loadClipchampPlayer={loadClipchampPlayer}\r\n />\r\n
\r\n \r\n save(false)}\r\n saveAndCreateAnother={() => save(true)}\r\n />\r\n
\r\n \r\n
);\r\n};\r\nAdEditor.propTypes = {\r\n containerStyle: PropTypes.shape({}).isRequired,\r\n permissions: PropTypes.shape({}).isRequired,\r\n aid: PropTypes.string.isRequired,\r\n cid: PropTypes.string.isRequired,\r\n campaignId: PropTypes.string.isRequired,\r\n adGroupId: PropTypes.string.isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n perfMarker: PropTypes.shape({}).isRequired,\r\n adsModel: PropTypes.shape({\r\n data: PropTypes.shape({}),\r\n isValid: PropTypes.bool.isRequired,\r\n }).isRequired,\r\n onAdsValidation: PropTypes.func.isRequired,\r\n oDataConfig: PropTypes.shape({}).isRequired,\r\n resetFields: PropTypes.bool.isRequired,\r\n serverErrors: PropTypes.shape({}),\r\n biddingScheme: PropTypes.shape({}),\r\n isXandrServingCampaign: PropTypes.bool,\r\n isMultiAdFormatAd: PropTypes.bool,\r\n onCancel: PropTypes.func.isRequired,\r\n onSave: PropTypes.func.isRequired,\r\n onSaveAndCreateAnother: PropTypes.func.isRequired,\r\n};\r\n\r\nAdEditor.defaultProps = {\r\n serverErrors: null,\r\n biddingScheme: {},\r\n isXandrServingCampaign: false,\r\n isMultiAdFormatAd: false,\r\n};\r\n\r\n\r\nconst AdEditorWithErrorLogging = withLoggingContext(withComponentErrorLogging(\r\n AdEditor,\r\n 'XandrVideoAdsAdEditing'\r\n));\r\n\r\nexport { AdEditorWithErrorLogging as AdEditor };\r\n\r\n"],"names":["ErrorReason","_ref","reason","_jsx","children","Text","variant","styles","root","color","ExclusionErrors","_ref2","errors","map","error","className","_","Value","Key","value","_jsxs","style","display","defaultProps","textStyles","fontWeight","IpExclusions","exclusions","placeholder","handleExclusionInputChange","i18n","useContext","I18nContext","_useState","useState","_useState2","_slicedToArray","exclusionList","setExclusionList","useMemo","handleExclusionTextFieldChange","useCallback","input","target","type","Stack","horizontal","tokens","childrenGap","getString","_TL_","HelpButton","topic","TextField","multiline","rows","resizable","onChange","length","getStyles","link","paddingLeft","SiteExclusionNote","withSiteMap","level","siteMap","path","getRoutePathById","classes","useDefaultStyles","showAWFWarning","PermissionsContext","dynamic","AWFWebExclusionsWarning","MessageBar","layout","MessageBarBody","MessageBarTitle","ScopeLevel","AdGroup","size","Link","href","rel","textFieldStyles","fieldGroup","borderColor","SiteExclusions","readOnlyExclusions","readOnly","WebExclusions","showSiteExclusion","showIPExclusion","showAccordion","siteInputProps","ipInputProps","exclusionData","setExclusionsCallback","siteExclusions","Campaign","campaignExclusions","adgroupExclusions","campaignReadOnlySiteExclusions","ipExclusions","hasSiteExclusionsErrors","find","hasIpExclusionsErrors","siteExclusionsError","NegativeSitesResult","ipExclusionsError","NegativeIPsResult","siteExclusionsInput","_objectSpread","ipExclusionsInput","Accordion","multiple","collapsible","AccordionItem","AccordionHeader","AccordionPanel","entitySeparator","formatInvalidEntities","InvalidEntities","ValidEntities","join","getExclusionCount","split","getSummary","siteExclusionsCount","ipExclusionsCount","adgroupLevelExclusionCount","campaignLevelExclusionCount","webExclusionPropertyVal","propertyIs","ServerValidatedWebExclusions","withAttentionBeacon","withFormError","showError","Adapters","FormErrorBeaconAdapter","ValidationBeaconAdapter","WebExclusionsWithValidation","withCustomValidation","updateValidation","parentData","rest","_objectWithoutProperties","_excluded","exclusionsData","keyName","patchExclusions","_defineProperty","ServerValidatedWebExclusionsWithValidation","WebExclusionsSection","expand","ValidatedPanel","title","TextTitle","titleKey","icon","image","iconStyles","width","topicKey","details","attentionBeaconProps","getExtraProps","getPanelErrorProps","actuationProps","expandKey","formErrorProps","filter","TEXT_CONTENT","description","block","allow","listLabel","ariaLabel","useTagContentStyles","fontWeightSemibold","List","alignItems","columnGap","spacingHorizontalXS","marginBottom","spacingVerticalL","ListItem","justifyContent","Container","flexDirection","ButtonContainer","spacingHorizontalL","PopoverContentBefore","spacingHorizontalS","EntitySelector","maxWidth","marginTop","spacingVerticalS","useStaticStyles","CustomWebsiteListTagItemRenderer","content","callMT","async","url","method","body","headers","response","fetch","JSON","stringify","ok","Error","json","getHeadersRequestByServerContext","serverContext","lcid","CurrentUser","Locale","PageTrackingId","Authorization","Token","CustomerAccountId","CurrentAccount","Id","CustomerId","AdvertiserCustomerID","RequestMethod","repository","getListsByAccountId","SharedEntityScope","SharedEntityType","SharedEntityId","ServicesEndpoints","CmAPI","Post","associateListsToCampaign","lists","campaignId","previousAssociations","this","getListsByCampaignId","previousSet","Set","newSet","removedAssociations","Array","from","id","has","newAssociations","deleteListsAssociationedWithCampaign","Associations","EntityId","EntityType","Delete","getListsIdsByCampaignId","EntityIds","item","websiteExclusionListIds","allWebsiteExclusionLists","exclusionListsByListId","Map","SharedEntities","websiteExclusionList","listId","get","WebsiteListSelector","listType","selected","isUnderlineLink","isGreyBackground","linkType","text","linkText","Label","ServerEntitySelectorInline","fetchData","then","count","items","Name","customFilter","search","toLowerCase","includes","selectionMode","onRenderTagContent","onRenderItemContent","flatItem","name","itemCount","ItemCount","popOverContentBefore","withProps","extraProps","WrappedComponent","HoC","props","finalProps","displayName","concat","getDisplayName","hoistNonReactStatics","withStoreLoadingContainer","minHeight","paddingTop","withStoreErrorContainer","padding","lineHeight","flexGrow","marginLeft","UrlContainer","MobileUrlContainer","storeFormattedText","providerId","getStoreResponse","isStoreNotFoundFetchError","storeFetchError","isArray","raw","some","ErrorCode","createStoreDetails","storeUrl","DestinationUrl","withStoreFromProviderId","HOC","fetchComplete","storeDetails","storeFetchState","setStoreFetchState","activity","ActivityContext","storeQueries","getStoreQueriesWithLocalMock","useEffect","getStore","getStoreError","trace","loadingSpinner","Loading","isVisible","loadingError","Alert","message","dismissible","React","undefined","noop","getTopLevelDomainFromUrl","hostNameParts","URL","hostname","partCount","isFinalUrlAlignedWithStoreDomain","finalUrl","storeDomain","finalUrlDomain","withStoreUrl","validationProps","storeDetailsInternal","useRef","current","domain","validationOnUrlChange","finalUrlValidatorError","result","storeUrlText","classNames","prepopulateUrl","STEP_STATE","WizardPerfMarkerContext","createContext","StepPerfMarker","parentPerfMarker","markerName","stepPerfMarkerRef","_useContext","_useContext$register","register","_useContext$unregiste","unregister","currentStepState","useWizardService","state","toStrings","createChild","autoEnd","handleStepStateChange","STEP_STATES","FETCHING","willFetchFile","LOADING","willInit","ACTIVE","willRender","setTimeout","done","propTypes","PropTypes","isRequired","WizardPerfMarker","wizardName","wizardMarker","wizardPerfMarkerContext","currentStepId","getCurrentStepId","currentStep","perfMarkerRef","checkAndCreateChildMarker","Provider","ErrorString","Fragment","nowrap","Errors","SpanWithComponent","_ref3","SpanText","Component","withVerticalAlignCenterSpan","defaultRender","verticalAlign","nameErrorCode","getNameErrorMsg","_ref4","code","maxLength","number","validateName","_ref5","checkShouldShowError","attribute","isInvalid","isDirty","checkShouldShowErrors","isCampaignNameValid","defaultName","CampaignName","setName","campaingNameText","shouldShowError","classnames","label","onRenderLabel","HelpPopup","e","x","locationTargetsOptionKeys","everywhere","specific","bundleOrDefaultMarket","getLocationsString","settings","isAdGroupLevel","arguments","bidStrategyType","hideBid","targetOption","_settings$currentLoca","currentLocations","isTargetEverywhere","includedLocations","SelectionStatus","excludedLocations","forEach","index","location","LocalizationKeys","bidAdjustmentDropdown","bidAdjustmentInput","getLocationTargetTitleDetails","parentLevelSettings","currentLevelSettings","useParentLevel","BING_MAPS_API_KEY","toasterId","SpecificLocationTargetsEditor","data","setData","edmCampaign","allowPositiveLocationTargeting","allowNegativeLocationTargeting","showSearchTypeOptions","strings","scope","defaultSelectedSearchType","isBrandAwarenessCampaignScenario","showBulkLocations","mapRef","mapBulkLocationsRef","isDrawerOpen","setIsBulkLocationsSearchDrawerOpen","_useToastController","useToastController","dispatchToast","dismissToast","ServerContext","makeLocationsCall","_scope$values","values","cid","aid","Customers","$withKey","Accounts","Locations","select","IsBrandAwarenessCampaignScenario","toPromise","catch","console","log","makeBulkLocationsCall","searchTerms","countryCode","_scope$values2","signal","$makeCall","query","where","servingChannel","payload","renderToaster","toastId","intent","toastTitle","toastMessage","Toast","ToastTitle","action","ToastTrigger","Button","appearance","Dismiss24Regular","onClick","ToastBody","pauseOnHover","timeout","position","handleBulkLocationsSearchDrawerOpen","searchOptions","getLocations","skipBingMapAPISearch","getIsRadiusTarget","targetingType","defaultGetIsRadiusTarget","TARGETING_TYPE","Included","setBulkLocationsData","targetedLocations","conflictingCount","duplicateCount","includedLocationIds","loc","excludedLocationIds","newIncludedLocations","newExcludedLocations","locId","push","_toConsumableArray","mergeLocations","Toaster","BulkLocationsSearchProvider","onBulkLocationsSearch","onAddLocations","setIsDrawerOpen","campaignApiToken","bingMapsApiKey","campaignApiServiceRoot","CampaignAPI","CampaignAPIPath","BulkLocationsSearchDrawer","BingMapsContextProvider","BingMapsLocationTargetsEditor","onBulkLocationButtonClick","locationTargets","negativeLocationTargets","isRadiusExcludeEnabled","maxLocationTargets","maxNegativeLocationTargets","onLocationTargetsChange","bingMapLocations","onNegativeLocationTargetsChange","customizedLocationEqual","isLegacyLocationAndRadiusEqual","singleLineShimmer","ShimmerElementType","line","height","SingleLineShimmer","Shimmer","shimmerElements","radiusShimmerElement","gap","SectionShimmer","wrapperClass","mergeStyles","selectors","margin","border","shimmerWithElementFirstRow","shimmerWithElementSecondRow","circle","RadiusShimmer","audienceShimmerElement","AudienceSignalShimmer","withShimmer","ShimmerWrapper","showShimmer","ERROR_ENTITY","AssetGroup","CampaignLocation","CampaignRadius","CampaignNegativeLocation","CampaignLocationIntent","CampaignDayTimeCriterion","CampaignNegativeWebpage","AudienceGroupAssetGroupAssociation","BrandListAssociation","CnDefaultLocationTargetsViewModel","bidMode","Criterion","BidAdjustment","LocationCriterion","CountryCode","Latitude","LesLocationType","LocationId","LocationType","Longitude","NameTypeCombo","Type","OriginalBidAdjustment","OriginalCashbackPercent","CriterionType","Status","initLocations","peopleInLocation","peopleSearchingForLocation","globalDefaultLocationTargetsViewModel","getDefaultLocationTargetsViewModel","isCnMarket","getDefaultLanguagesViewModel","campaignLanguageStrings","None","Albanian","Arabic","Bosnian","Bulgarian","Croatian","Czech","Danish","Dutch","English","Estonian","Finnish","French","German","Greek","Hungarian","Icelandic","Italian","Japanese","Latvian","Lithuanian","Macedonian","Maltese","Norwegian","Polish","Portuguese","Romanian","Russian","Serbian","SimplifiedChinese","Slovak","Slovenian","Spanish","Swedish","TraditionalChinese","Turkish","Hebrew","Hindi","Malay","Thai","Indonesian","Tagalog","Vietnamese","entityIsCampaign","entityIs","campaignNameProp","andComp","ValidatedCampaignNameWithShimmer","RemainingCharsValidatedTextField","field","schema","CampaignNamePanel","key","isLoading","ValidatedFixedPanel","PANEL_KEYS","CAMPAIGN_NAME","LANGUAGE_TARGET","LOCATIONS","AD_SCHEDULE","BUDGET","START_END_DATES","SHORT_HEADLINES","DESCRIPTIONS","IMAGES","AUDIENCE_SIGNAL","VIDEOS","BID_STRATEGY","BID_VALUE","URL_OPTIONS","LOGOS","FINAL_URL_EXPANSION","AUTO_GEN_ASSETS","PAGE_FEEDS","CAMPAIGN_URL_OPTIONS","BRAND_EXCLUSIONS","COST_PER_SALE","SHOPPING","CONVERSIONS","PRONG_IMAGES","SPOTLIGHT_IMAGES","NEW_CUSTOMER_ACQUISITION","APP","DISCLAIMERS","BRAND_SHOWROOM","LanguageTargetValidationAdapter","AdapterFactory","defaultValue","valueToInject","functionToInject","LanguageTargetValidatorFactory","defaultValidator","defaultErrors","isEmpty","SingleLanguageTargetValidator","SingleLanguageTargetValidationAdapter","ValidatedLanguageTarget","withError","withValidation","LanguageTarget","ValidatedSingleLanguageTarget","SingleLanguageTarget","campaignLanguagesProp","ServerValidatedLanguageTargetWithShimmer","withControlErrorHandling","withUnvalidatedControlErrors","LanguageTargetPanel","locale","CurrentLocale","DynamicPermissions","Permissions","permissions","_props$data","Languages","lang","toString","LanguageImg","validator","minuteToSaveMap","ZERO","FIFTEEN","THIRTY","FORTY_FIVE","getDay","day","getMin","min","getTime","hour","is12","getAdScheduleDetails","adScheduleView","hideBidAdjustment","schedules","koModel","useCampaignSettings","campaignDayTimeRanges","dayTimeRanges","dateSettings","getDateSettings","EndDate","StartDate","to","hideAdScheduleBidAdjustments","timeDisplayType","len","schedule","dayTime","startHour","StartHour","endHour","EndHour","startMin","StartMinute","endMin","EndMinute","dateTimePart","Day","BidAdjustmentType","BidAdjustmentAmount","getDayTimeDetails","adScheduleUseSearcherTimeZone","getAdScheduleUseSearcherTimeZone","campaignDayTimeCriterions","ServerValidatedLegacyAdScheduleWithShimmer","ValidatedLegacyAdSchedule","AdSchedulePanel","setAdScheduleView","setAdScheduleViewCallback","view","adSchedules","AdScheduleImg","isCreation","entity","entityIsAdgroup","adgroupLanguageProp","ServerValidatedLanguageTarget","SingleLanguageTargetPanel","Language","IsDomesticSimplifiedChineseEnabled","showSelectedLanguages","multiSelect","supportAllOption","additionalOptions","useLocalizeBudget","localizeBudget","budget","currency","formatCurrency","Number","toUpperCase","withSymbol","maximumFractionDigits","BudgetRange","BingAdsWebUIStaticLegacyPageContext","budgetTitle","fontSize","budgetProp","ServerValidatedBudgetComponentWithShimmer","BudgetComponent","BudgetPanel","CurrencyCode","getResponsiveStyles","useResponsiveStyles","onDataChange","budgetAmount","campaignType","showBudgetSuggestion","isCampaignSetting","campaign","DailyRange","budgetSuggestion","Currency","GlobalMaximumBudget","DailyBudget","CeilingValue","GlobalMinimumBudget","FloorValue","budgetTitleDetails","onFieldChange","updatedData","prevData","onBudgetChange","newBudget","budgetAmountValue","onBudgetChangeFromBudgetSuggestion","shouldLocalize","Amount","onBudgetValidate","isValid","messages","isBudgetValid","budgetErrors","budgetSuggestionData","setBudgetSuggestionData","loadBudget","useBudgetSuggestionRepository","mode","MODE","EDITING","assetGroup","datas","finally","BudgetImg","as","headingClassName","showDropdown","onNotifyValidation","withSlider","BudgetSuggestionDialog","Budget","minBudget","maxBudget","defaultBudget","ValidatedLegacyDateSettingWithShimmer","ValidatedLegacyDateSetting","_Fragment","DateSettingsPanel","timeZone","getDateSettingDetails","StartEndDateImg","TimeZone","isCreate","initialValue","Date","ShortHeadlinesPanel","headlinesCardSummaryDetails","allAssetsExpand","featureName","setAddNewShortHeadlinesCallback","isOptional","iconAltText","HeadlineAssetCollection","showDeleteButton","DescriptionsPanel","descriptionsCardSummaryDetails","setAddNewDescriptionCallback","DescriptionAssetCollection","BaseImagePanel","panelKey","imagesData","containerRef","portalContainerState","addNewImageCallback","maxUploadNum","ImageListSummaryCardDetails","images","isLogos","ImageListPortalContainerWithControlErrorHandling","containerState","PerfMaxImageSuggestionCarousel","addImageCallback","ImagesPanel","imageExperienceAddNewImageCallback","imagesContainerRef","imageExperiencePortalContainerState","_excluded2","LogosPanel","logos","logoExperienceAddNewImageCallback","logosContainerRef","logoExperiencePortalContainerState","_excluded3","defaultProp","DEFAULT_MESSAGE","isPmaxCampaign","ConversionBasedBiddingBanner","conversionGoalsDetails","isCampaignCreation","usesMaxClicks","campaignSetting","first","getUsesMaxClicks","hasActiveGoal","getHasActiveGoal","messageSettings","getTemplateToDisplay","onSetConversionTracking","save","wordBreak","ReactTemplate","template","model","b","disableShrink","DefaultButton","getBidStrategyStyles","bottomMargin","bidStrategyProp","ServerValidatedBidStrategyComponent","BidStrategyComponent","BidStrategyPanel","ScopeContext","bidRange","KeywordBidRange","options","conversionGoalDetails","bidStrategy","cpa","roas","isInitialAdditionalDetailsChecked","_options$bidStrategyC","bidStrategyComponentOptions","_options$biddingBanne","biddingBannerOptions","_options$scenario","scenario","bidStrategyOptions","hideAdditionalDetails","restBidStrategyComponentOptions","restBiddingBannerOptions","Object","assign","_objectDestructuringEmpty","bidStrategyTitleDetails","targetValue","bidStrategyText","MAX_CONVERSIONS","MAX_CONVERSIONS_VALUE","predefinedBidStrategy","BID_STRATEGY_OPTIONS_MAP","TargetCpaWarningBanner","addBottomMargin","onBidStrategyChange","newBidStrategy","onMarketingMetricChange","newMarketingMetric","isMarketingMetricValid","marketingMetricErrors","BidStrategyImg","selectedBidStrategy","defaultChecked","marketingMetricsValue","inputUnit","hideMessage","getUrlOptionsStyles","urlOptionsContainer","ValidatedUrlOptionsParameterWithShimmer","ValidatedUrlOptionsParameter","ValidatedUrlOptionsParameterWithErrorWithShimmer","ValidatedUrlOptionsParameterWithError","UrlOptionsPanel","isTrackingUrlTemplateRequired","isWithError","showDescription","urlParameterOptions","trackingUrlTemplate","TrackingUrlTemplate","finalUrlSuffix","FinalUrlSuffix","urlCustomParameters","UrlCustomParameters","urlOptions","urlOptionsDetails","getUrlOptionsDetails","UrlOptionsImg","PriceModelToRange","ManualCpa","ManualCpc","ValidatedBidValue","onBidChange","bidValueType","BiddingScheme","getBidRange","bidCeil","bidFloor","SearchBid","_getBidRange","CustomValidatedDefaultBid","placeholderText","currencyCode","properties","minimum","maximum","required","htmlFor","bidValueProp","ServerValidatedBidValueComponentWithShimmer","BidValuePanel","bidAmount","bidValueDetails","onBidValueChange","AppDetailsPanel","selectedApp","AppSetting","AppPanelWithShimmer","AppPanel","AudienceSignalSection","src","SignalsSparkleImg","alt","modelToViewModelDayTimeTargets","targets","resetId","schedulingRows","criterion","multiplier","CriterionBid","Multiplier","FromHour","FromMinute","ToHour","ToMinute","window","Math","abs","formatDateInEntitySet","date","kendo","parseDate","dateString","useDateRangeDefault","preferenceService","PreferenceContext","waterFallDateFilters","WaterfallFilterStorage","getFilters","WaterfallFilterType","DateFilter","waterfallDateFilterProcessor","useP$DaterangeDefault","dateFilter","Promise","resolve","useDateRange","dateRange","start","RangeStartDate","end","RangeEndDate","getConversionGoalTitleDetails","conversionGoals","goalScopeSelection","goalSelection","Scopes","CAMPAIGN","getFinalUrlExpansionTitleDetails","isFinalUrlExpansionEnabled","selectedTargetsView","viewmodel","exactUrls","rules","conditions","WebPage","Parameter","Conditions","condition","Operator","ArgumentOperand","exactUrlsDetails","rulesDetails","getBidStrategyMap","MaxClicks","MaxConversions","MaxConversionValue","MaxImpressions","MaxReach","ManualCpm","ManualCpv","EnhancedCpc","CostPerSale","TargetRoas","TargetCpa","TargetImpressionShare","getBidTitleDetails","bid","getBidBudgetTitleDetails","amount","bidType","bidVal","formatPercent","getBudgetTitleDetails","getListingGroupDetails","isEditing","productFilter","listingGroup","operand","pluck","getStoreTitleDetails","storesData","storeContainerData","isAudience","storeId","ProviderId","countries","stores","store","salesCountry","SalesCountry","localInventoryAdsEnabled","LocalInventoryAdsEnabled","getSearchThemeDetails","searchThemes","SearchTheme","getDisclaimerTitleDetails","disclaimer","selectedDisclaimer","PercentCpc","Commission","Individual","individual","ExcludedSites","ExcludedIPs","Targeted","Computer","Desktop","Tablet","Smartphone","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday","ConversionGoalKeyToStringMapping","Campaign_Goals_Account_Level_Label","Campaign_Goals_Account_Level_Subtext","Campaign_Goals_Campaign_Level_Label","Campaign_Goals_Campaign_Level_Subtext","GoalSelector_List_Header","GoalSelector_Result_List_Header","GoalSelector_Radio_Aria_Label","GoalSelector_EmptyList_Content","EntitySelector_Search_Placeholder","UnifiedEventTracking_Goal_Creation_Type_Event_Category","GoalSelector_Result_Action_Bar","GoalSelector_TrackingStatus_Value_InactiveDueToTagUnavailable","GoalSelector_TrackingStatus_Value_NoRecentConversion","GoalSelector_TrackingStatus_Value_RecordingConversions","GoalSelector_TrackingStatus_Value_TagInactive","GoalSelector_TrackingStatus_Value_Unverified","Segment_Goal_Category_Download","Segment_Goal_Category_Purchase","Segment_Goal_Category_AddToCart","Segment_Goal_Category_BeginCheckout","Segment_Goal_Category_BookAppointment","Segment_Goal_Category_Contact","Segment_Goal_Category_GetDirections","Segment_Goal_Category_InStoreVisit","Segment_Goal_Category_Other","Segment_Goal_Category_OutboundClick","Segment_Goal_Category_PageView","Segment_Goal_Category_RequestQuote","Segment_Goal_Category_SignUp","Segment_Goal_Category_SubmitLeadForm","Segment_Goal_Category_Subscribe","Segment_Goal_Category_Unassigned","Campaign_Goals_Option_Goals","Campaign_Goals_Option_GoalSets","EntitySelector_Pagination_Page","EntitySelector_Pagination_TotalPageCountText","EntitySelector_Pagination_PreviousPageText","EntitySelector_Pagination_NextPageText","getAdsStepStyles","displayAdPanelRoot","paddingBottom","background","boxShadow","borderRadius","float","flexWrap","marginRight","fontFamily","backgroundColor","addNewImageButton","selectedPanel","displayAdPanelHeader","displayAdPanelButton","cursor","displayAdPanelButtonContainer","left","top","transform","previewContainer","emptyPreview","adPreviewRoot","adPreviewSizeHeader","adPreviewPageTitle","adPreviewSizeTitle","paddingRight","adPreviewPanel","displayAd","previewTag","previewTagText","pagination","pageControls","pageControl","pageControlPreviousIcon","pageControlNextIcon","paginationIndicatorDot","paginationButton","opacity","paginationIndicator","displayAdPanelContent","placementInfoTile","placementInfos","rowGap","enabledPlacement","enabledText","disabledPlacement","disabledText","fontStyle","placementLabel","placmentResolution","displayAdPanelFinalUrlContainer","displayImageLabel","getCreativeWorkbenchStyles","creativeWorkbenchRoot","header","copilotIcon","getImageSuggestionCarouselStyles","imageSuggestionCarouselRoot","croppedImage","getDisplayAdStepBaseStyles","displayAdsStepRoot","CropPreview","overflow","CroppedImageView","partnerTrafficString","onoTrafficString","standard","sizeText","targetText","mobile","getSupportedSize","supportedSize","source","sourceSize","baseSize","getStandardOnO","getStandardOthers","getMobileOnO","getMobileOthers","getOptionsTranslated","sourceWidth","sourceHeight","sourceOptions","resultOptions","getTargetOptions","standardOptions","mobileOptions","_ref6","itemType","DropdownMenuItemType","Header","Divider","AdPreview","ads","onUpdateCurrentImageIndex","disablePagination","customStyleFunction","useCustomStyleFunction","displayAds","defaultClasses","customClasses","currentPageIndex","currentImageIdx","setCurrentImageIdx","targetOptions","getPageAdjustedIndex","idx","goToImageIndex","displayAdsInPage","slice","currentAd","currentImage","resizeImageHeight","cropHeight","cropWidth","aspectRatio","currentImageTarget","option","targetWidth","targetHeight","adPreviewPageHeader","adPreviewTargetTitle","originalWidth","SourceX","cropX","SourceY","cropY","SourceWidth","disabled","FontIcon","iconName","tabIndex","role","onKeyDown","Pagination","totalPages","goToPrevPage","goToNextPage","goToPage","val","imageModelToViewModel","imageModel","exec","parseInt","disableEdit","subType","cropSettings","SourceHeight","originalHeight","imagePlacementsToImage","crops","defaults","filtered","AspectRatiosForDisplayAds","_aspectRatio$minSize","minSize","minWidth","selectedImage","selectedIndex","findIndex","TargetWidth","TargetHeight","CropWidth","CropHeight","CropX","CropY","_ref4$cropSettings","imagePlacements","AddImage","advertiserCustomerId","accountId","perfMarker","oDataConfig","suggestionState","suggestionPoller","fullUrl","urlPrefix","onUpdateUrlPrefix","onUpdateUrlValue","dateFormat","activityLogger","displayImagePicker","setDisplayImagePicker","selectedMediaPanelSource","setSelectedMediaPanelSource","onNewImageSelected","isAADUser","creativeEditorProps","addImageChildPerfmarker","emptyFinalUrl","_useAssetLibraryImage","useAssetLibraryImagePicker","isDisplayAds","imagePickerError","setImagePickerError","clearImagePickerError","uploadImage","processUploadedImage","addImageByUrl","getStockImages","getInvestImages","onSelectStockImage","onImageSelected","onImagesSelected","socialMediaDataSource","customMediaSourceConfig","_suggestionState$sugg","suggestion","AddImageCrudAdComponent","isOpen","setIsOpen","newOpen","imageExperienceProps","finalUrlProtocol","onUpdateFinalUrl","onUpdateFinalUrlPrefix","isMultimediaAd","imageOption","constants","defaultImageOption","managedViewSelectionState","updateManagedViewSelectionState","stockImageConfig","investImageConfig","socialImageConfig","assetLibraryConfig","preferencesService","onImageAddError","enableStockMultipleSelection","enableInvestMultipleSelection","enableWebsiteMultipleSelection","errorMessage","imageType","adCreatorScenario","buttonContainer","PopulateImages","instrumentation","onUpdateUrl","showAddButton","ScenarioContext","privateUrl","setPrivateUrl","validateAdUrl","urlPrefixValue","_getUrlPrefixAndDesti","getUrlPrefixAndDestination","_useWebsiteSuggestion","useWebsiteSuggestion","adContext","logActivity","hasErrorInUrl","scenarioName","scenarioValue","evt","newPrefix","substring","_getUrlPrefixAndDesti3","original","newUrl","getUpdatedFullUrlOnPrefixUpdate","getUpdatedFullUrlOnTextUpdate","IsAADUser","wrapped","withPreference","withInstrumentation","NO_RECOMMENDATION","FinalURL","DEFAULT","placements","SuperLeaderboard","Leaderboard","FullBanner","SmallLeaderboard","Banner","LargeBanner","MediumBanner","SmallBanner","HalfBanner","Billboard","LandscapeLargeBanner","Landscape","LargeRectangle","MediumRectangle","Rectangle","Square","Portrait","HalfPage","WideSkyscraper","Skyscraper","ratios","_ratios","ratioGrouping","XWide","Vertical","addPlacementToAd","ad","MTPlacement","templateName","trim","getPlacement","placement","getRandomImageForEachRatioGroup","adsWithRatioGroups","randomImages","randomImage","group","randomAd","thumbnailUrl","suggestionId","recommendationId","apply","processAndGroupAds","groupedAds","groupAdsByImages","imageUrls","imageUrl","groupedByPlacement","ratiosKey","groupAdsByRatio","imagesToSuggest","getItemsForListFromGroupedAds","ratioGroups","sampleAd","newItem","previewSrc","previewType","getAdsInMatchingGroup","matchingGroup","getODataConfig","odataPath","document","indexOf","isLocal","odataToken","oDataToken","oDataPath","DisplayAdsEditorDrawer","withComponentErrorLogging","DisplayAdsEditor","rootContainer","imageContainer","buttonContainerStyle","bottom","choiceGroupStyles","dropdownStyles","dropdown","editButtonStyle","entityIsAd","Ad","imageTypeFromImage","standardDeviceType","mobileDeviceType","standardSizes","mobileSizes","CustomComponent","isLoadingImage","onRenderCustomAddImageButton","_useImagePicker","useImagePicker","isDisplayImageRegroupEnabled","IsDisplayImageRegroupEnabled","InstrumentationContext","isImageEditDisplayed","setIsImageEditDisplayed","_useState3","_useState4","isDisplayTemplateEditorOpen","setIsDisplayTemplateEditorOpen","_useState5","_useState6","deviceFormatType","setDeviceFormatType","mediaRepository","MediaRepository","cmpId","currentPlacementIndex","copilotRepository","useCopilotRepositoryContext","_useBrandKitService","useBrandKitService","brandKitDataService","brandkitApiState","shouldDirty","deviceType","_displayAd$image","findDeviceType","getImageTypeFromSize","creativeData","onEdit","creativeMeta","version","onRemoveImage","dropdownOptions","mobileOnO","mobileOnoOptions","mobileOthers","mobileOtherOptions","getMobileTargetOptions","standardOnO","standardOnoOptions","standardOthers","standardOtherOptions","getStandardTargetOptions","deviceFormatOptions","onChangeTarget","event","selectItem","currentItem","imagePlacementIndex","imageViewModel","selectedItem","imageKey","firstItem","minCropSize","getMinimumSizeForImage","baseImage","base","Src","Width","Height","onSaveEditImage","newAdData","placementTitle","_ref4$template","placementFromTemplate","getPlacementFromTemplate","resizeImageHeightForThumbnail","imageControl","IconButton","iconProps","HelpPopupInline","ChoiceGroup","selectedKey","Dropdown","AddImageButton","FinalUrls","MediaEditorPanel","onDismiss","onApply","aspectRatioConfig","hasRightRail","onRenderRightRailContent","previewImageUrl","_ref5$cropSettings","PreviewSingleRightRailWrapper","previewTitle","previewSettings","Preview","isThumbsUpDownEnabled","isTestEnv","isTestEnvironment","disabledPivotItemKeys","PivotItemKey","Effect","customizedDefaultSelectedPivotItemKey","Crop","containerClassName","editorContainer","hasFetchBrandKitData","useBrandKit","showNavigation","showSummaryBarControl","displayTemplatesDataService","imageData","metadata","onApplyCreative","sourceType","originalSourceType","ImageExperienceWithValidation","withServerContext","ValidatedImageExperience","ImageProp","dataObj","ValidatedFinalUrl","UrlInput","DisplayAdPanel","onUpdate","onRemovePanel","removeCloseButton","keyIndex","isSelectedPanel","legacyI18n","globalLegacyI18n","i18nMerged","mergeI18n","finalUrlsObj","verifiedTrackingSettingObj","VerifiedTrackingSettings","isIasTrackingEnable","isAdvancedURLOptionsForMSANDisplayEnabled","isImpressionTrackingForDisplayAndVideoEnabled","IsMOATEnabled","onValidationUpdate","advancedSettings","AdvancedSettings","impressionTrackingUrls","ImpressionTrackingUrls","verifiedTrackingSettings","isDisplay","isVideo","ValidationGroup","ResponsiveAd","onValidate","validateOnRender","disableRemoveAll","hideRatioLabel","ImageExperienceCircleUploadType","disableUploadTextField","ImagePickerContainerHeight","ThirdPartyMeasurementContainerWithValidation","videoAd","adType","DisplayAdsContainer","onAdsValidation","currentImageIndex","_props$ads","resetFields","isAdGridEditorMode","initialAdsCount","DisplayAds","setDisplayAds","_usePageManager","usePageManager","currentPage","pages","onAddItem","removeItem","maxItems","onAddAd","numberOfAdsInPage","isAllValid","valid","isAllDirty","dirty","setClarityTag","shouldUpdate","vAd","uid","rootDisplayAdsContainer","page","pageNumber","isCurrentPage","itemAtIdx","itemsBefore","itemsAfter","onImagePanelUpdate","splice","container","CTAInCreativeEditor","newCTA","stopPropagation","ValidatedLegacyCallToAction","CallToAction","valueText","CallToActionValue","ctaText","CallToActionText","isCustomCTAEnabled","formatBrandkitForAPI","obj","formattedObj","keys","SubType","useDisplayAdsCopilot","RecommendationContext","setRecommendationContext","logBannerGenerated","useCopilotLoggers","isLoadingBrandKit","setIsLoadingBrandkit","brandkit","setBrandKit","isBrandKitEmpty","setIsBrandKitEmpty","isBrandKitEnabled","BrandKitUI","fetchDisplayAdsAssetRecommendations","fetchDisplayAdsTemplateDefinition","editDisplayAdsAssetRecommendations","getBrandKitDataByAccId","useBrandKitDataService","fetchBrandKit","_asyncToGenerator","_regeneratorRuntime","mark","_callee","restrictionCall","_response$BrandKits","_response$BrandKits$","_response$BrandKits$2","_response$BrandKits$3","_response$BrandKits$4","_response$BrandKits$5","wrap","_context","prev","next","isCopilotRegionRestricted","feature","accId","sent","BrandKits","Fonts","Images","LandscapeLogos","Palettes","SquareLogos","DisplayAdsWithBrandKit","stop","_callee2","_args2","_context2","abrupt","ImageAssets","Ads","_processAndGroupAds","RecommendedAssets","RecommendationId","fetchAigcTemplateDefinition","templateId","err","generate","updatedCreative","finalUrlForCopilot","useFluentV2Styles","makeStyles","button","addIcon","DisplayAdPanelWithCopilot","_useDisplayAdsCopilot","fluentV2Styles","isAdvancedURLOptionsForMSANVideoEnabled","onCTAUpdate","setCTA","onRenderCTA","imageObj","onGenerateCreative","creativeDataInner","AddRegular","AllRecommendationsPanel","onSelectImageSuggestion","_useContext2$","_useContext2$2","handleDismiss","handleSelectImageSuggestion","matchingAds","Panel","scrollableContent","main","animation","PanelType","custom","customWidth","closeButtonAriaLabel","headerText","FluentProvider","theme","webLightTheme","ViewAllRecommendations","creatives","onFinalUrlEntered","onCreativeSelected","IMAGE_DIM","getFullyShownImagesCount","itemWidth","floor","getCarouselStyles","components","_ref$palette","palette","iconFontFamily","carouselParent","disabledCarouselParent","pointerEvents","objectFit","imageContainerLeftMargin","overflowX","overflowY","isCollapsible","imageParentContainer","imageParentLeftOffset","numberOfImages","imageClickableContainer","loadingMessageContainer","loadingText","panel","panelHeading","panelTitle","panelIcon","panelHelpButton","imageHintRight","right","imageHintLeft","paddleBtn","moreIcon","themeDarkAlt","seeAll","whiteSpace","textOverflow","seeAllInHeader","themePrimary","useBrandKitHeader","spinner","getBlockerStyle","parentContainer","LoadingShimmer","shimmerElement","Spinner","labelPosition","customElementsGroup","ShimmerElementsGroup","ImageView","setWidth","setHeight","resizeHeight","img","Image","onload","naturalWidth","naturalHeight","imgWidth","imgHeight","getImageDimension","DisplayAdsImageSuggestionCarousel","_ref3$maxUploadNum","_ref3$useBrandKit","setUseBrandKit","isSeeAllPanelOpen","setIsSeeAllPanelOpen","_useState7","_useState8","setImagesToSuggest","_useState9","_useState10","isCopilotEnabled","setIsCopilotEnabled","_useContext2","recommendationContext","reportRecommendations","logSuggestionsViewed","imageSuggestions","carouselState","carousel","isError","panelState","panelImages","hasMore","suggestionImages","onOffsetChange","offset","viewedImages","suggestionIds","onSelectImage","allGroupedAds","onSelectSeeAllImages","_ref7","onRenderImage","classesProp","onBrandKitToggle","truncatedImages","isRestricted","ImageSuggestionCarousel","helpTopic","onSelectSeeAll","showEllipsisWhenNoMoreImages","showViewAllInHeader","enableBrandKit","stylingOverrides","initialImageContainerLeftMargin","seeAllLinkText","messageBarType","MessageBarType","CreativeWorkbench","onFinalURLFocusOut","onCreateAds","isNewLogo","dataModel","setDataModel","useId","updateToast","finalUrlFromContext","finalUrlValidationProps","addingRecommendationToast","media","errorOnCreateAdsToast","DismissRegular","openRatioPicker","CopilotIcon","additionalProperties","onBlur","finalUrls","inline","useStyles","selectableImageContainer","shorthands","colorTransparentBackground","selectedImageContainer","colorPaletteBlueBorderActive","selectableImageList","gridTemplateColumns","ratioDescription","imageCheckbox","SelectableImage","onSelect","checked","handleClick","imageDimension","dimensionList","maxHeightRatio","maxWidthRatio","ratio","mergeClasses","Checkbox","bordered","shape","fit","Badge","RatioPickerInternal","open","onOpenChange","onApplyButtonText","fill","creativeSelections","setCreativeSelections","isApplying","setIsApplying","onRatioApply","selectedCreatives","creative","onImageSelect","newSelectedCreative","Dialog","DialogSurface","DialogBody","DialogTitle","DialogTrigger","DialogContent","DialogActions","disableButtonEnhancement","RatioPicker","handleRatioPickerState","CreateAnotherAdMenu","onCreateWithAI","onCreateFromExistingImage","handleCreateWithAI","handleCreateFromExistingImage","Menu","MenuTrigger","Add20Regular","MenuPopover","MenuList","MenuItem","GlanceHorizontalSparkles20Regular","Image20Regular","CreateAdWithAiDialog","_useCopilotRepository2","initialFinalUrl","setFinalUrl","setImages","selectedImages","setSelectedImages","handleFinalUrlUpdate","handleSelectImages","ids","lastId","handleCreateAds","flatten","CreateDisplayAdDialog","onFinalUrlUpdate","onSelectedImagesUpdate","useCreateAds","addToAssetLibrary","addCreatives","creativesToAdd","savedImages","savedImage","creativeId","getProcessedCreative","DisplayAdsContainerWithCopilot","hideFooter","isEditScenario","useInitCopilotLoggers","logEnterFlow","copilotFinalUrl","setCopilotFinalUrl","isCreateAdDialogOpen","setIsCreateAdDialogOpen","onAddItemsToPage","newAds","isAdsEmpty","addCreativesToDisplayAds","currentItemCount","createAds","MultiAdFormat","pageComponent","CampaignFetchProvider","CopilotRepositoryProvider","getLocale","recommendationType","containerStyle","AdEditor","adsModel","serverErrors","ErrorMessages","onUpdateCurrentVideoIndex","StepHeader","DisplayAdsWithCopilot","_ref2$data","_ref3$errors","_state$context$wizard","context","wizardData","_state$context$wizard2","editingAdId","currentStates","PerformanceMarkerContext","setCurrentImageIndex","saveFailed","useFormService","results","newAdsData","restResults","removeEmptyAds","dataPatch","matchStepState","SAVING","ActuationGroup","isActive","AttentionBeaconGroup","FormErrorGroup","showAllValidationErrors","UnmappedFormErrors","getVerifiedTrackingSettings","setting","vendor","vendorName","keyMap","IAS_advertiserEntityId","IAS_publisherEntityId","Save","_useWizardService","send","isBlocking","onNextClicked","WIZARD_EVENTS","UPDATE_WIZARD_DATA","isCreateAnother","SAVE_AND_EXIT","buttonText","PrimaryButton","SaveAndCreateAnother","_useWizardService2","SAVE_AND_NEXT","EditAdFooter","cancelButtonText","CancelButton","DISPLAY_AD","StepConfig","Activity","scenarioContext","logSuggestionsApplied","imageRepository","ImageRepository","load","initialAds","savedAdModel","random","imageAsset","Asset","verifiedTrackingSetting","getImageByIdAsync","IdString","imgObjMT","imageObject","newImageFromMTObject","imageSources","Existing","croppedImagePlacements","getAutoCroppedImages","originalImageToCrop","isMultimediaAdinMSANEnabled","aspectRatioOption","defaultAspectRatioOption","metaData","uriDecodedMetaData","replace","decodedMetadata","parseSync","onSave","onSaveAndCreateAnother","isMultiAdFormatAd","reject","saveAds","adSubType","adGroup","adGroupId","compact","EditDisplayAdWizardInternal","gridData","onCancel","wizardPerfMarker","config","initialStep","steps","actions","onDone","onExited","initialWizardData","attachStepActivities","PerformanceMarkerProvider","immediateDone","Scenario","Wizard","LayoutContainer","DefaultTemplate","Layout","component","StepContainer","BusyBlocker","CancelWizardDialog","EditDisplayAdWizard","withLoggingContext","withRecommendationContext","withSignal","FabricPrimaryButton","CommonEventParser","FabricDefaultButton","FabricLink","FabricTextField","FabricIconButton","videoPanelRoot","videoRepairPanelRoot","videoPanelHeader","adPreviewTitle","adPreviewHeader","video","videoPanelContent","videoPanelFinalUrlContainer","starStyle","loadClipchampPlayer","videos","videoRef","currentVideoIdx","setCurrentVideoIdx","videoHeight","setVideoHeight","videoTemplateUIEnabled","VideoTemplateUI","goToVideoIndex","videosInPage","currentVideo","_currentVideo$data","_currentVideo$data$vi","ClipchampPlayer","videoUrl","controls","ref","buttonContainerMultiple","addIconMultiple","AddVideoButton","multiVideoMode","overrideClasses","borderRadiusLarge","overlay","fontSizeBase200","qualityContainer","info","spacingVerticalXXL","borderRadiusMedium","fontSizeBase400","videoContainer","VideoSuggestionCard","videoAsset","onSelectVideoSuggestion","showQuality","_React$useState","_React$useState2","showVideo","setShowVideo","totalSeconds","duration","minutes","seconds","durationString","texts","scenes","scene","curlyTemplate","getVideoDescription","submitEvent","onMouseOver","onMouseOut","onFocus","autoPlay","loop","TimerRegular","PlacementQualityToText","quality","getPanelStyles","subtitle","neutralDark","panelHeader","alignSelf","contentHeading","gridContainer","VideoRecommendationsPanel","close","contentRef","videoAssets","isVideoAsAnAssetEnabled","VideoAsAnAsset","isAmplifyEnabled","currentTarget","closest","contains","onSelection","isFooterAtBottom","onRenderFooterContent","strong","VideoAdsSuggestionCarousel","_ref4$useBrandKit","videosToSuggest","setVideosToSuggest","videoSuggestions","onSelectIndex","__","_ref8","alwaysShowViewAll","classOverrides","useVideoAdsCopilot","fetchVideoAdsAssetRecommendations","updatedResponse","taskManager","addTask","taskId","taskFn","campaignObjective","getLocalStorage","videoMetadata","sourceVideoBitRate","VideoAssets","convertBpsToKbps","bps","Kbps","pow","Placements","PlacementQualities","StarsToQuality","enabled","PlacementTitle","titleText","PlacementInfoWithStars","_videoAd$video2","_videoAd$video2$quali","numberOfStars","numberOfDisabledStars","Icon","isBulkWrappedResponse","bulkResult","serverErrorsCompare","curr","isEqual","getBulkUploadErrorType","entitySchema","getBulkUploadEntityType","modelToViewModelForBulkErrors","bulkUpsertEntityErrorMap","errorProcessor","identity","getBulkApiErrors","errorType","mappedErrorType","mapBulkUpsertErrors","ReferencedEntityInvalidIdErrors","removeReferencedEntityInvalidIdErrors","bulkErrors","needsAttention","getDealDetailsStyle","dealDetails","flex","DeviceKeys","Computers","Tablets","Smartphones","ConnectedTVs","getCountriesLocations","locationIds","reqs","odata","batch","needContentType","targetTypes","getTargetConstraints","deal","targetType","ret","mandatory","DealTargetConstraints","devicesConstraints","TargetType","Mandatory","DealTargetRestrictionLevel","getLocationCritetions","_x","_getLocationCritetions","locationCriterions","CurrentCustomer","LocaleID","each","locationTargetConverter","buildLocationCriterionFromSearchResult","status","modelConstraints","_x2","_x3","_x4","_modelConstraints","isCreating","deviceConstraints","locationConstraints","ageConstraints","genderConstraints","audienceConstraints","dealLocationTargets","locations","adGroupModel","ageRanges","initialAgeRanges","negativeAgeRanges","initialGenderTypes","negativeGenderTYpes","genderTypes","audiences","dealLocationList","deviceTypes","deviceRestrictions","difference","deviceRestricted","locationRestricted","ageRestricted","genderRestricted","audienceRestricted","genreRestricted","CurrencyCode2CurrencyId","AUD","BRL","ARS","CAD","CLP","COP","DKK","EUR","HKD","INR","JPY","MXN","NOK","NZD","PEN","SGD","ZAR","SEK","CHF","USD","GBP","VEF","TWD","MYR","PHP","VND","THB","IDR","DZD","BHD","EGP","IQD","JOD","KWD","LBP","MAD","QAR","OMR","SAR","TND","CNY","TRY","PLN","AED","ILS","NGN","KRW","MTCurrencyConvertor","AustralianDollar","BrazilianReal","CanadianDollar","SwissFranc","DanishKrone","EURO","UKPound","JapaneseYen","NorwegianKrone","NewZealandDollar","SwedishKrona","USDollar","SouthAfricanRand","ArgentinePeso","ChileanPeso","YuanRenminbi","ColombianPeso","UAEDirham","AlgerianDinar","EgyptianPound","HongKongDollar","IndonesianRupiah","IsraeliSheqel","IndianRupee","LebanesePound","MoroccanDirham","MexicanPeso","MalaysianRinggit","PeruvianNuevoSol","PhilippinePeso","Zloty","QatariRial","SaudiRiyal","SingaporeDollar","ThaiBaht","NewTaiwanDollar","VenezuelanBolivar","VietnamDong","NewTurkishLira","NigerianNaira","Won","getConvertedCurrencyDealMinimumBid","minimumBid","dealCurrency","accountCurrency","exchangeRateMapping","dealCurrencyId","dealCurrencyToUSD","CurrencyId","accountCurrencyId","accountCurrencyToUSD","ceil","getVideoConstraintDuration","minimumDuration","isNumber","round","isNetflixDeal","Seller","isDealDeleted","AgeRanges","EighteenToTwentyFive","TwentyFiveToThirtyFive","ThirtyFiveToFifty","FiftyToSixtyFive","SixtyFiveAndAbove","Unknown","formatAgeRanges","chain","sortBy","ageRange","sortAgeRanges","formatAgeRange","targetConstraintsToText","locationMap","_getTargetConstraints","uniq","DealDetails","shouldShowGenre","dealOptions","MinimumBid","decimal","fromFloatToString","CountryName","AgeRange","Genre","bytesForHuman","bytes","num","i","toFixed","viewModelToModelForAd","adsViewModel","isDeletedEntities","adViewModel","idString","verifiedTrackingSettingAttachmentObj","isUndefined","isNull","VerifiedTrackingData","mapObject","verifiedTrackingSettingAttachment","fields","pick","extend","Videos","AdSubType","bulkModelToViewModelForAd","savedAdsData","oldAdsData","savedAdItem","sAd","adsWithIdsAttached","originalAdsModel","modelToViewModelForAd","adResource","types","ResourceIdentifier","bulkUpsertAdSettingsEntityErrorMap","getErrorsPlaceholders","systemErrors","uploadVideo","queryParam","QueryParam","remove","getEntityFromScope","currentEntity","functionParams","postVideoByUrl","res","newVideoFromMTObject","oldAdsModel","_ref4$activity","videoPromises","uploadVideoIfNeeded","_splitUpdateAndCreate","adIds","adsToCreate","adsToUpdate","adsToDelete","adToSave","oldAd","adsNeededToCreate","adsNeededToUpdate","splitUpdateAndCreateAds","promises","bulkCreate","bind","updateAds","bulkUpdate","updateData","updatedAds","createdAds","bulkOrSystemError","errorsWithPropertyIdsAttached","Property","attachUidToErrorProperty","entities","warn","stack","setLocalStorageWithExpire","expire","time","now","localStorage","setItem","getKey","getFullYear","getMonth","_fetchExchangeRateMapping","baseURL","t0","getAccountExchangeRateFromLocalStorage","getItem","parse","expired","getLocalStorageWithExpire","fetchExchangeRateMapping","isDealCampaign","pathname","isCTVCampaign","getVideoDeal","videoDeal","supportsStorage","set","legacyTemplates","validateVideo","videoRequirementForDeal","skipQualityValidation","videoPanelButton","videoPanelButtonContainer","VideoExperienceWithValidation","withAssetLibraryServicesLoaded","renderError","dataService","copilotEnabled","isCTV","isVideoRequired","getVideo","isGoogleImportVideoAdNeedsRepair","IsGoogleImportVideoAdsEnabled","isUploading","setIsUploading","showVideoEditor","setShowVideoEditor","isFetchingVideo","setIsFetchingVideo","multiVideoList","setMultiVideoList","showMultiVideoCopilotEditor","setShowMultiVideoCopilotEditor","_useState11","_useState12","isVideoFetched","setIsVideoFetched","enableEdit","isLegacyTemplate","onErrorsUpdated","onUpdateMultiAdVideoList","list","validVideos","multiVideo","validationMessages","valVideo","aggregatedMessages","flat","onRenderItemDropdownCoPilot","validationMessage","onRenderItemDropDownForMultiModeWithCopilot","selectedVideo","selectedIdx","selectedMultiVideo","updatedVideos","getNewVideoObject","newVideo","videoObject","ImageExperienceVideo","updateWithNewVideo","_getNewVideoObject","v","updateWithNewVideoAtIdx","newVideoIdx","onChangeVideo","onChangeMultiVideo","fetchMetadata","getVideoPromises","all","existingVideos","UiBlocker","blocking","blockUiContainer","blockerIndicator","_createElement","VideoExperience","videoList","onVideoListUpdated","onVideoUploadStatusUpdate","showErrors","videoLabelHelpTopic","CustomAddVideoControl","onRenderItemDropdown","onReplace","enableShowingErrors","VideoTemplateEditorContextWrapper","videoMetaData","isDialog","CopilotVideoEditor","ValidatedVideoExperience","videoProp","multiAdDataObj","processingMessage","passiveMessages","updatedVideoAd","customErrorRendering","VideoExperienceWithPreference","VideoExperienceWithPreferenceRecommendationFetch","copilotFetchTaskManager","TaskManager","_useVideoAdsCopilot2","FinalUrl","validationState","setValidationState","updatedCopilotFinalUrl","setUpdatedCopilotFinalUrl","notifyCopilotFinalURLchange","handleKeyUp","onKeyUp","VideoPanel","oDataConfigProp","biddingScheme","isForDeal","isXandrServingCampaign","dealLoaded","EnableMSANVideoCampaigns","isBiddingStrategyCPV","_useVideoAdsCopilot","shouldRepairGoogleImportVideoAd","VideoCopilotGeneration","allowedVideoSizes","videoExperienceCircleUploadType","videoPickerContainerHeight","EnableIASVerifiedImpressionTrackingURLsForBrandAwarenessCampaign","isMOATEnabled","isUsingVideoTemplates","enableLogoAndCTA","useClipchamp","ITEMS_PER_PAGE","addItemsToPages","lastPage","lastPageIndex","remaining","newPageItem","nextPageItem","setTotalPages","setCurrentPageIndex","totalAds","createPages","setPages","setCurrentPage","onAddPage","newPage","removeLastPage","valInt","newPages","removeItemFromLastPage","VideoAdsContainer","dealVideoRequirementText","currentVideoIndex","allowCopilotVideoGeneration","_props$biddingScheme","videoAds","setVideoAds","isAdsCopilotRegionRestricted","setIsAdsCopilotRegionRestricted","rootVideoAdsContainer","onVideoPanelUpdate","fillLocationForDeal","responses","EnglishName","getDealDetails","dealId","dealDetail","filledDeal","errorCodeTarget","Campaigns","CampaignCriterions","$cast","Deals","DealId","GetDealErrorCode","t1","_x5","_x6","expectedError","responseErrArray","buttonStyle","AdEditorFooter","cancel","saveAndCreateAnother","setDeal","setDealLoaded","setServerErrors","setBlocking","fetchDeal","createScenario","createActivity","versionForLog","getLogVersion","logger","getLoggerWithoutPageInfo","videoRepository","createVideoRepository","folderRepository","createFolderRepository","createImageRepository","saveAd","adData","saveAnother","savedMaterial","savedLogo","uploadVideoMetadata","uploadedVideo","saveVideoAd","AdEditorWithErrorLogging"],"sourceRoot":""}