{"version":3,"file":"product.js","mappings":"yBAYA,SAASA,SAASC,KAChB,OAAe,OAARA,KAA+B,iBAARA,KAAoB,gBAAiBA,KAAOA,IAAIC,cAAgBC,MAChG,CACA,SAASC,OAAOC,OAAQC,UACP,IAAXD,SACFA,OAAS,CAAC,QAEA,IAARC,MACFA,IAAM,CAAC,GAETH,OAAOI,KAAKD,KAAKE,SAAQC,WACI,IAAhBJ,OAAOI,KAAsBJ,OAAOI,KAAOH,IAAIG,KAAcT,SAASM,IAAIG,OAAST,SAASK,OAAOI,OAASN,OAAOI,KAAKD,IAAIG,MAAMC,OAAS,GACpJN,OAAOC,OAAOI,KAAMH,IAAIG,KAC1B,GAEJ,CACA,MAAME,YAAc,CAClBC,KAAM,CAAC,EACP,gBAAAC,GAAoB,EACpB,mBAAAC,GAAuB,EACvBC,cAAe,CACb,IAAAC,GAAQ,EACRC,SAAU,IAEZ,aAAAC,GACE,OAAO,IACT,EACA,gBAAAC,GACE,MAAO,EACT,EACA,cAAAC,GACE,OAAO,IACT,EACA,WAAAC,GACE,MAAO,CACL,SAAAC,GAAa,EAEjB,EACA,aAAAC,GACE,MAAO,CACLC,SAAU,GACVC,WAAY,GACZC,MAAO,CAAC,EACR,YAAAC,GAAgB,EAChB,oBAAAC,GACE,MAAO,EACT,EAEJ,EACA,eAAAC,GACE,MAAO,CAAC,CACV,EACA,UAAAC,GACE,OAAO,IACT,EACAC,SAAU,CACRC,KAAM,GACNC,KAAM,GACNC,SAAU,GACVC,KAAM,GACNC,OAAQ,GACRC,SAAU,GACVC,SAAU,GACVC,OAAQ,KAGZ,SAAS,6BACP,MAAMC,IAA0B,oBAAbC,SAA2BA,SAAW,CAAC,EAE1D,OADArC,OAAOoC,IAAK7B,aACL6B,GACT,CACA,MAAME,UAAY,CAChBD,SAAU9B,YACVgC,UAAW,CACTC,UAAW,IAEbb,SAAU,CACRC,KAAM,GACNC,KAAM,GACNC,SAAU,GACVC,KAAM,GACNC,OAAQ,GACRC,SAAU,GACVC,SAAU,GACVC,OAAQ,IAEVM,QAAS,CACP,YAAAC,GAAgB,EAChB,SAAAC,GAAa,EACb,EAAAC,GAAM,EACN,IAAAC,GAAQ,GAEVC,YAAa,WACX,OAAOC,IACT,EACA,gBAAAtC,GAAoB,EACpB,mBAAAC,GAAuB,EACvB,gBAAAsC,GACE,MAAO,CACL,gBAAAC,GACE,MAAO,EACT,EAEJ,EACA,KAAAC,GAAS,EACT,IAAAC,GAAQ,EACRC,OAAQ,CAAC,EACT,UAAAC,GAAc,EACd,YAAAC,GAAgB,EAChB,UAAAC,GACE,MAAO,CAAC,CACV,EACA,qBAAAC,CAAsBC,UACpB,MAA0B,oBAAfJ,YACTI,WACO,MAEFJ,WAAWI,SAAU,EAC9B,EACA,oBAAAC,CAAqBC,IACO,oBAAfN,YAGXC,aAAaK,GACf,GAEF,SAAS,2BACP,MAAMC,IAAwB,oBAAXC,OAAyBA,OAAS,CAAC,EAEtD,OADA7D,OAAO4D,IAAKtB,WACLsB,GACT,CCtHA,SAAS,eAASH,SAAUK,OAI1B,YAHc,IAAVA,QACFA,MAAQ,GAEHT,WAAWI,SAAUK,MAC9B,CACA,SAAS,YACP,OAAOX,KAAKY,KACd,CAeA,SAASC,aAAaC,GAAIC,WACX,IAATA,OACFA,KAAO,KAET,MAAML,OAAS,2BACf,IAAIM,OACAC,aACAC,gBACJ,MAAMC,SAtBR,SAA0BL,IACxB,MAAMJ,OAAS,2BACf,IAAIvC,MAUJ,OATIuC,OAAOb,mBACT1B,MAAQuC,OAAOb,iBAAiBiB,GAAI,QAEjC3C,OAAS2C,GAAGM,eACfjD,MAAQ2C,GAAGM,cAERjD,QACHA,MAAQ2C,GAAG3C,OAENA,KACT,CASmB,CAAiB2C,IA6BlC,OA5BIJ,OAAOW,iBACTJ,aAAeE,SAASG,WAAaH,SAASI,gBAC1CN,aAAaO,MAAM,KAAKrE,OAAS,IACnC8D,aAAeA,aAAaO,MAAM,MAAMC,KAAIC,GAAKA,EAAEC,QAAQ,IAAK,OAAMC,KAAK,OAI7EV,gBAAkB,IAAIR,OAAOW,gBAAiC,SAAjBJ,aAA0B,GAAKA,gBAE5EC,gBAAkBC,SAASU,cAAgBV,SAASW,YAAcX,SAASY,aAAeZ,SAASa,aAAeb,SAASG,WAAaH,SAASrB,iBAAiB,aAAa6B,QAAQ,aAAc,sBACrMX,OAASE,gBAAgBe,WAAWT,MAAM,MAE/B,MAATT,OAE0BE,aAAxBP,OAAOW,gBAAgCH,gBAAgBgB,IAEhC,KAAlBlB,OAAO7D,OAA8BgF,WAAWnB,OAAO,KAE5CmB,WAAWnB,OAAO,KAE3B,MAATD,OAE0BE,aAAxBP,OAAOW,gBAAgCH,gBAAgBkB,IAEhC,KAAlBpB,OAAO7D,OAA8BgF,WAAWnB,OAAO,KAE5CmB,WAAWnB,OAAO,KAEjCC,cAAgB,CACzB,CACA,SAAS,eAASoB,GAChB,MAAoB,iBAANA,GAAwB,OAANA,GAAcA,EAAE1F,aAAkE,WAAnDC,OAAO0F,UAAUL,SAASM,KAAKF,GAAGG,MAAM,GAAI,EAC7G,CAQA,SAAS,eACP,MAAMC,GAAK7F,OAAO8F,UAAUvF,QAAU,OAAIwF,EAAYD,UAAU,IAC1DE,SAAW,CAAC,YAAa,cAAe,aAC9C,IAAK,IAAIC,EAAI,EAAGA,EAAIH,UAAUvF,OAAQ0F,GAAK,EAAG,CAC5C,MAAMC,WAAaD,EAAI,GAAKH,UAAUvF,QAAU0F,OAAIF,EAAYD,UAAUG,GAC1E,GAAIC,mBAZQC,KAYmDD,aAV3C,oBAAXpC,aAAwD,IAAvBA,OAAOsC,YAC1CD,gBAAgBC,YAElBD,OAA2B,IAAlBA,KAAKE,UAAoC,KAAlBF,KAAKE,YAOkC,CAC1E,MAAMC,UAAYtG,OAAOI,KAAKJ,OAAOkG,aAAaK,QAAOjG,KAAO0F,SAASQ,QAAQlG,KAAO,IACxF,IAAK,IAAImG,UAAY,EAAGC,IAAMJ,UAAU/F,OAAQkG,UAAYC,IAAKD,WAAa,EAAG,CAC/E,MAAME,QAAUL,UAAUG,WACpBG,KAAO5G,OAAO6G,yBAAyBX,WAAYS,cAC5CZ,IAATa,MAAsBA,KAAKE,aACzB,eAASjB,GAAGc,WAAa,eAAST,WAAWS,UAC3CT,WAAWS,SAASI,WACtBlB,GAAGc,SAAWT,WAAWS,SAEzB,aAAOd,GAAGc,SAAUT,WAAWS,WAEvB,eAASd,GAAGc,WAAa,eAAST,WAAWS,WACvDd,GAAGc,SAAW,CAAC,EACXT,WAAWS,SAASI,WACtBlB,GAAGc,SAAWT,WAAWS,SAEzB,aAAOd,GAAGc,SAAUT,WAAWS,WAGjCd,GAAGc,SAAWT,WAAWS,SAG/B,CACF,CACF,CArCF,IAAgBR,KAsCd,OAAON,EACT,CACA,SAAS,qBAAe3B,GAAI8C,QAASC,UACnC/C,GAAG3C,MAAM2F,YAAYF,QAASC,SAChC,CACA,SAASE,qBAAqBC,MAC5B,IAAI,OACFC,OAAM,eACNC,eAAc,KACdC,MACEH,KACJ,MAAMtD,OAAS,2BACT0D,eAAiBH,OAAOI,UAC9B,IACIC,KADAC,UAAY,KAEhB,MAAMC,SAAWP,OAAOQ,OAAOC,MAC/BT,OAAOU,UAAUxG,MAAMyG,eAAiB,OACxClE,OAAOH,qBAAqB0D,OAAOY,gBACnC,MAAMC,IAAMZ,eAAiBE,cAAgB,OAAS,OAChDW,aAAe,CAACC,QAASlI,SACd,SAARgI,KAAkBE,SAAWlI,QAAkB,SAARgI,KAAkBE,SAAWlI,OAEvEmI,QAAU,KACdX,MAAO,IAAItE,MAAOkF,UACA,OAAdX,YACFA,UAAYD,MAEd,MAAMa,SAAWC,KAAKC,IAAID,KAAKE,KAAKhB,KAAOC,WAAaC,SAAU,GAAI,GAChEe,aAAe,GAAMH,KAAKI,IAAIL,SAAWC,KAAKK,IAAM,EAC1D,IAAIC,gBAAkBtB,cAAgBmB,cAAgBrB,eAAiBE,eAOvE,GANIW,aAAaW,gBAAiBxB,kBAChCwB,gBAAkBxB,gBAEpBD,OAAOU,UAAUgB,SAAS,CACxB,CAACxB,MAAOuB,kBAENX,aAAaW,gBAAiBxB,gBAUhC,OATAD,OAAOU,UAAUxG,MAAMyH,SAAW,SAClC3B,OAAOU,UAAUxG,MAAMyG,eAAiB,GACxC1E,YAAW,KACT+D,OAAOU,UAAUxG,MAAMyH,SAAW,GAClC3B,OAAOU,UAAUgB,SAAS,CACxB,CAACxB,MAAOuB,iBACR,SAEJhF,OAAOH,qBAAqB0D,OAAOY,gBAGrCZ,OAAOY,eAAiBnE,OAAOL,sBAAsB4E,QAAQ,EAE/DA,SACF,CAIA,SAAS,sBAAgBY,QAASC,UAIhC,YAHiB,IAAbA,WACFA,SAAW,IAEN,IAAID,QAAQ5H,UAAUkF,QAAOrC,IAAMA,GAAGiF,QAAQD,WACvD,CACA,SAASE,YAAYC,MACnB,IAEE,YADAC,QAAQC,KAAKF,KAEf,CAAE,MAAOG,KAET,CACF,CACA,SAAS,oBAAcC,IAAKC,cACV,IAAZA,UACFA,QAAU,IAEZ,MAAMxF,GAAK5B,SAASlB,cAAcqI,KAElC,OADAvF,GAAGyF,UAAUC,OAAQC,MAAMC,QAAQJ,SAAWA,QAvMhD,SAAyBA,SAIvB,YAHgB,IAAZA,UACFA,QAAU,IAELA,QAAQK,OAAOnF,MAAM,KAAK2B,QAAOyD,KAAOA,EAAED,QACnD,CAkM0D,CAAgBL,UACjExF,EACT,CACA,SAAS,oBAAcA,IACrB,MAAMJ,OAAS,2BACTxB,SAAW,6BACX2H,IAAM/F,GAAGgG,wBACTzJ,KAAO6B,SAAS7B,KAChB0J,UAAYjG,GAAGiG,WAAa1J,KAAK0J,WAAa,EAC9CC,WAAalG,GAAGkG,YAAc3J,KAAK2J,YAAc,EACjDC,UAAYnG,KAAOJ,OAASA,OAAOwG,QAAUpG,GAAGmG,UAChDE,WAAarG,KAAOJ,OAASA,OAAO0G,QAAUtG,GAAGqG,WACvD,MAAO,CACLE,IAAKR,IAAIQ,IAAMJ,UAAYF,UAC3BO,KAAMT,IAAIS,KAAOH,WAAaH,WAElC,CAuBA,SAASO,aAAazG,GAAI0G,MAExB,OADe,2BACD3H,iBAAiBiB,GAAI,MAAMhB,iBAAiB0H,KAC5D,CACA,SAAS,mBAAa1G,IACpB,IACI+B,EADA4E,MAAQ3G,GAEZ,GAAI2G,MAAO,CAGT,IAFA5E,EAAI,EAEuC,QAAnC4E,MAAQA,MAAMC,kBACG,IAAnBD,MAAMxE,WAAgBJ,GAAK,GAEjC,OAAOA,CACT,CAEF,CACA,SAAS,qBAAe/B,GAAIgF,UAC1B,MAAM6B,QAAU,GAChB,IAAIC,OAAS9G,GAAG+G,cAChB,KAAOD,QACD9B,SACE8B,OAAO7B,QAAQD,WAAW6B,QAAQG,KAAKF,QAE3CD,QAAQG,KAAKF,QAEfA,OAASA,OAAOC,cAElB,OAAOF,OACT,CAWA,SAASI,iBAAiBjH,GAAIkH,KAAMC,gBAClC,MAAMvH,OAAS,2BACf,OAAIuH,eACKnH,GAAY,UAATkH,KAAmB,cAAgB,gBAAkB7F,WAAWzB,OAAOb,iBAAiBiB,GAAI,MAAMhB,iBAA0B,UAATkI,KAAmB,eAAiB,eAAiB7F,WAAWzB,OAAOb,iBAAiBiB,GAAI,MAAMhB,iBAA0B,UAATkI,KAAmB,cAAgB,kBAE9QlH,GAAGoH,WACZ,CACA,SAAS,wBAAkBpH,IACzB,OAAQ2F,MAAMC,QAAQ5F,IAAMA,GAAK,CAACA,KAAKqC,QAAOgF,KAAOA,GACvD,CC9RA,IAAIC,QAgBAC,aAqDAC,QA5DJ,SAASC,aAIP,OAHKH,UACHA,QAVJ,WACE,MAAM1H,OAAS,2BACTxB,SAAW,6BACjB,MAAO,CACLsJ,aAActJ,SAASuJ,iBAAmBvJ,SAASuJ,gBAAgBtK,OAAS,mBAAoBe,SAASuJ,gBAAgBtK,MACzHuK,SAAU,iBAAkBhI,QAAUA,OAAOiI,eAAiBzJ,oBAAoBwB,OAAOiI,eAE7F,CAGcC,IAELR,OACT,CA6CA,SAASS,UAAUC,WAOjB,YANkB,IAAdA,YACFA,UAAY,CAAC,GAEVT,eACHA,aA/CJ,SAAoBU,OAClB,IAAI,UACF1J,gBACY,IAAV0J,MAAmB,CAAC,EAAIA,MAC5B,MAAMX,QAAUG,aACV7H,OAAS,2BACTsI,SAAWtI,OAAOtB,UAAU4J,SAC5BC,GAAK5J,WAAaqB,OAAOtB,UAAUC,UACnC6J,OAAS,CACbC,KAAK,EACLC,SAAS,GAELC,YAAc3I,OAAOT,OAAOqJ,MAC5BC,aAAe7I,OAAOT,OAAOuJ,OAC7BJ,QAAUH,GAAGQ,MAAM,+BACzB,IAAIC,KAAOT,GAAGQ,MAAM,wBACpB,MAAME,KAAOV,GAAGQ,MAAM,2BAChBG,QAAUF,MAAQT,GAAGQ,MAAM,8BAC3BI,QAAuB,UAAbb,SAChB,IAAIc,MAAqB,aAAbd,SAqBZ,OAjBKU,MAAQI,OAAS1B,QAAQM,OADV,CAAC,YAAa,YAAa,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,YACxGtF,QAAQ,GAAGiG,eAAeE,iBAAmB,IAC9FG,KAAOT,GAAGQ,MAAM,uBACXC,OAAMA,KAAO,CAAC,EAAG,EAAG,WACzBI,OAAQ,GAINV,UAAYS,UACdX,OAAOa,GAAK,UACZb,OAAOE,SAAU,IAEfM,MAAQE,QAAUD,QACpBT,OAAOa,GAAK,MACZb,OAAOC,KAAM,GAIRD,MACT,CAMmBc,CAAWlB,YAErBT,YACT,CA4BA,SAAS4B,aAIP,OAHK3B,UACHA,QA3BJ,WACE,MAAM5H,OAAS,2BACTwI,OAASL,YACf,IAAIqB,oBAAqB,EACzB,SAASC,WACP,MAAMlB,GAAKvI,OAAOtB,UAAUC,UAAU+K,cACtC,OAAOnB,GAAG7F,QAAQ,WAAa,GAAK6F,GAAG7F,QAAQ,UAAY,GAAK6F,GAAG7F,QAAQ,WAAa,CAC1F,CACA,GAAI+G,WAAY,CACd,MAAMlB,GAAKoB,OAAO3J,OAAOtB,UAAUC,WACnC,GAAI4J,GAAGqB,SAAS,YAAa,CAC3B,MAAOC,MAAOC,OAASvB,GAAGzH,MAAM,YAAY,GAAGA,MAAM,KAAK,GAAGA,MAAM,KAAKC,KAAIgJ,KAAOC,OAAOD,OAC1FP,mBAAqBK,MAAQ,IAAgB,KAAVA,OAAgBC,MAAQ,CAC7D,CACF,CACA,MAAMG,UAAY,+CAA+CC,KAAKlK,OAAOtB,UAAUC,WACjFwL,gBAAkBV,WAExB,MAAO,CACLA,SAAUD,oBAAsBW,gBAChCX,sCACAY,UAJgBD,iBAAmBF,WAAazB,OAAOC,IAKvDwB,oBAEJ,CAGcI,IAELzC,OACT,CAiJA,IAAI0C,cAAgB,CAClB,EAAAC,CAAGC,OAAQC,QAASC,UAClB,MAAMC,KAAOzL,KACb,IAAKyL,KAAKC,iBAAmBD,KAAKE,UAAW,OAAOF,KACpD,GAAuB,mBAAZF,QAAwB,OAAOE,KAC1C,MAAMG,OAASJ,SAAW,UAAY,OAKtC,OAJAF,OAAO1J,MAAM,KAAKvE,SAAQwO,QACnBJ,KAAKC,gBAAgBG,SAAQJ,KAAKC,gBAAgBG,OAAS,IAChEJ,KAAKC,gBAAgBG,OAAOD,QAAQL,QAAQ,IAEvCE,IACT,EACA,IAAAK,CAAKR,OAAQC,QAASC,UACpB,MAAMC,KAAOzL,KACb,IAAKyL,KAAKC,iBAAmBD,KAAKE,UAAW,OAAOF,KACpD,GAAuB,mBAAZF,QAAwB,OAAOE,KAC1C,SAASM,cACPN,KAAKO,IAAIV,OAAQS,aACbA,YAAYE,uBACPF,YAAYE,eAErB,IAAK,IAAIC,KAAOpJ,UAAUvF,OAAQ4O,KAAO,IAAItF,MAAMqF,MAAOE,KAAO,EAAGA,KAAOF,KAAME,OAC/ED,KAAKC,MAAQtJ,UAAUsJ,MAEzBb,QAAQc,MAAMZ,KAAMU,KACtB,CAEA,OADAJ,YAAYE,eAAiBV,QACtBE,KAAKJ,GAAGC,OAAQS,YAAaP,SACtC,EACA,KAAAc,CAAMf,QAASC,UACb,MAAMC,KAAOzL,KACb,IAAKyL,KAAKC,iBAAmBD,KAAKE,UAAW,OAAOF,KACpD,GAAuB,mBAAZF,QAAwB,OAAOE,KAC1C,MAAMG,OAASJ,SAAW,UAAY,OAItC,OAHIC,KAAKc,mBAAmB/I,QAAQ+H,SAAW,GAC7CE,KAAKc,mBAAmBX,QAAQL,SAE3BE,IACT,EACA,MAAAe,CAAOjB,SACL,MAAME,KAAOzL,KACb,IAAKyL,KAAKC,iBAAmBD,KAAKE,UAAW,OAAOF,KACpD,IAAKA,KAAKc,mBAAoB,OAAOd,KACrC,MAAMgB,MAAQhB,KAAKc,mBAAmB/I,QAAQ+H,SAI9C,OAHIkB,OAAS,GACXhB,KAAKc,mBAAmBG,OAAOD,MAAO,GAEjChB,IACT,EACA,GAAAO,CAAIV,OAAQC,SACV,MAAME,KAAOzL,KACb,OAAKyL,KAAKC,iBAAmBD,KAAKE,UAAkBF,KAC/CA,KAAKC,iBACVJ,OAAO1J,MAAM,KAAKvE,SAAQwO,aACD,IAAZN,QACTE,KAAKC,gBAAgBG,OAAS,GACrBJ,KAAKC,gBAAgBG,QAC9BJ,KAAKC,gBAAgBG,OAAOxO,SAAQ,CAACsP,aAAcF,UAC7CE,eAAiBpB,SAAWoB,aAAaV,gBAAkBU,aAAaV,iBAAmBV,UAC7FE,KAAKC,gBAAgBG,OAAOa,OAAOD,MAAO,EAC5C,GAEJ,IAEKhB,MAZ2BA,IAapC,EACA,IAAAmB,GACE,MAAMnB,KAAOzL,KACb,IAAKyL,KAAKC,iBAAmBD,KAAKE,UAAW,OAAOF,KACpD,IAAKA,KAAKC,gBAAiB,OAAOD,KAClC,IAAIH,OACAuB,KACAC,QACJ,IAAK,IAAIC,MAAQjK,UAAUvF,OAAQ4O,KAAO,IAAItF,MAAMkG,OAAQC,MAAQ,EAAGA,MAAQD,MAAOC,QACpFb,KAAKa,OAASlK,UAAUkK,OAEH,iBAAZb,KAAK,IAAmBtF,MAAMC,QAAQqF,KAAK,KACpDb,OAASa,KAAK,GACdU,KAAOV,KAAKvJ,MAAM,EAAGuJ,KAAK5O,QAC1BuP,QAAUrB,OAEVH,OAASa,KAAK,GAAGb,OACjBuB,KAAOV,KAAK,GAAGU,KACfC,QAAUX,KAAK,GAAGW,SAAWrB,MAE/BoB,KAAKI,QAAQH,SAcb,OAboBjG,MAAMC,QAAQwE,QAAUA,OAASA,OAAO1J,MAAM,MACtDvE,SAAQwO,QACdJ,KAAKc,oBAAsBd,KAAKc,mBAAmBhP,QACrDkO,KAAKc,mBAAmBlP,SAAQsP,eAC9BA,aAAaN,MAAMS,QAAS,CAACjB,SAAUgB,MAAM,IAG7CpB,KAAKC,iBAAmBD,KAAKC,gBAAgBG,QAC/CJ,KAAKC,gBAAgBG,OAAOxO,SAAQsP,eAClCA,aAAaN,MAAMS,QAASD,KAAK,GAErC,IAEKpB,IACT,GA6WF,MAAMyB,qBAAuB,CAACC,QAASC,UAAWC,aAC5CD,YAAcD,QAAQxG,UAAU2G,SAASD,WAC3CF,QAAQxG,UAAUC,IAAIyG,YACZD,WAAaD,QAAQxG,UAAU2G,SAASD,YAClDF,QAAQxG,UAAU4G,OAAOF,UAC3B,EA+GF,MAAMG,mBAAqB,CAACL,QAASC,UAAWC,aAC1CD,YAAcD,QAAQxG,UAAU2G,SAASD,WAC3CF,QAAQxG,UAAUC,IAAIyG,YACZD,WAAaD,QAAQxG,UAAU2G,SAASD,YAClDF,QAAQxG,UAAU4G,OAAOF,UAC3B,EA2DF,MAAMI,qBAAuB,CAACpJ,OAAQqJ,WACpC,IAAKrJ,QAAUA,OAAOsH,YAActH,OAAOQ,OAAQ,OACnD,MACMsI,QAAUO,QAAQC,QADItJ,OAAOuJ,UAAY,eAAiB,IAAIvJ,OAAOQ,OAAOgJ,cAElF,GAAIV,QAAS,CACX,IAAIW,OAASX,QAAQpP,cAAc,IAAIsG,OAAOQ,OAAOkJ,uBAChDD,QAAUzJ,OAAOuJ,YAChBT,QAAQa,WACVF,OAASX,QAAQa,WAAWjQ,cAAc,IAAIsG,OAAOQ,OAAOkJ,sBAG5DtN,uBAAsB,KAChB0M,QAAQa,aACVF,OAASX,QAAQa,WAAWjQ,cAAc,IAAIsG,OAAOQ,OAAOkJ,sBACxDD,QAAQA,OAAOP,SACrB,KAIFO,QAAQA,OAAOP,QACrB,GAEIU,OAAS,CAAC5J,OAAQoI,SACtB,IAAKpI,OAAO6J,OAAOzB,OAAQ,OAC3B,MAAMiB,QAAUrJ,OAAO6J,OAAOzB,OAAO1O,cAAc,oBAC/C2P,SAASA,QAAQS,gBAAgB,UAAU,EAE3CC,QAAU/J,SACd,IAAKA,QAAUA,OAAOsH,YAActH,OAAOQ,OAAQ,OACnD,IAAIwJ,OAAShK,OAAOQ,OAAOyJ,oBAC3B,MAAM5K,IAAMW,OAAO6J,OAAO3Q,OAC1B,IAAKmG,MAAQ2K,QAAUA,OAAS,EAAG,OACnCA,OAAS7I,KAAKE,IAAI2I,OAAQ3K,KAC1B,MAAM6K,cAAgD,SAAhClK,OAAOQ,OAAO0J,cAA2BlK,OAAOmK,uBAAyBhJ,KAAKiJ,KAAKpK,OAAOQ,OAAO0J,eACjHG,YAAcrK,OAAOqK,YAC3B,GAAIrK,OAAOQ,OAAO8J,MAAQtK,OAAOQ,OAAO8J,KAAKC,KAAO,EAAG,CACrD,MAAMC,aAAeH,YACfI,eAAiB,CAACD,aAAeR,QASvC,OARAS,eAAe5G,QAAQrB,MAAMkI,KAAK,CAChCxR,OAAQ8Q,SACPxM,KAAI,CAACmN,EAAG/L,IACF4L,aAAeN,cAAgBtL,UAExCoB,OAAO6J,OAAO7Q,SAAQ,CAAC8P,QAASlK,KAC1B6L,eAAepE,SAASyC,QAAQ8B,SAAShB,OAAO5J,OAAQpB,EAAE,GAGlE,CACA,MAAMiM,qBAAuBR,YAAcH,cAAgB,EAC3D,GAAIlK,OAAOQ,OAAOsK,QAAU9K,OAAOQ,OAAOuK,KACxC,IAAK,IAAInM,EAAIyL,YAAcL,OAAQpL,GAAKiM,qBAAuBb,OAAQpL,GAAK,EAAG,CAC7E,MAAMoM,WAAapM,EAAIS,IAAMA,KAAOA,KAChC2L,UAAYX,aAAeW,UAAYH,uBAAsBjB,OAAO5J,OAAQgL,UAClF,MAEA,IAAK,IAAIpM,EAAIuC,KAAKC,IAAIiJ,YAAcL,OAAQ,GAAIpL,GAAKuC,KAAKE,IAAIwJ,qBAAuBb,OAAQ3K,IAAM,GAAIT,GAAK,EACtGA,IAAMyL,cAAgBzL,EAAIiM,sBAAwBjM,EAAIyL,cACxDT,OAAO5J,OAAQpB,EAGrB,EAyJF,IAAIqM,OAAS,CACXC,WApvBF,WACE,MAAMlL,OAASrE,KACf,IAAI0J,MACAE,OACJ,MAAM1I,GAAKmD,OAAOnD,GAEhBwI,WADiC,IAAxBrF,OAAOQ,OAAO6E,OAAiD,OAAxBrF,OAAOQ,OAAO6E,MACtDrF,OAAOQ,OAAO6E,MAEdxI,GAAGsO,YAGX5F,YADkC,IAAzBvF,OAAOQ,OAAO+E,QAAmD,OAAzBvF,OAAOQ,OAAO+E,OACtDvF,OAAOQ,OAAO+E,OAEd1I,GAAGuO,aAEA,IAAV/F,OAAerF,OAAOqL,gBAA6B,IAAX9F,QAAgBvF,OAAOsL,eAKnEjG,MAAQA,MAAQkG,SAASjI,aAAazG,GAAI,iBAAmB,EAAG,IAAM0O,SAASjI,aAAazG,GAAI,kBAAoB,EAAG,IACvH0I,OAASA,OAASgG,SAASjI,aAAazG,GAAI,gBAAkB,EAAG,IAAM0O,SAASjI,aAAazG,GAAI,mBAAqB,EAAG,IACrH4J,OAAO+E,MAAMnG,SAAQA,MAAQ,GAC7BoB,OAAO+E,MAAMjG,UAASA,OAAS,GACnC5M,OAAO8S,OAAOzL,OAAQ,CACpBqF,YACAE,cACAxB,KAAM/D,OAAOqL,eAAiBhG,MAAQE,SAE1C,EAwtBEmG,aAttBF,WACE,MAAM1L,OAASrE,KACf,SAASgQ,0BAA0B7M,KAAM8M,OACvC,OAAO1N,WAAWY,KAAKjD,iBAAiBmE,OAAO6L,kBAAkBD,SAAW,EAC9E,CACA,MAAMpL,OAASR,OAAOQ,QAChB,UACJE,UAAS,SACToL,SACA/H,KAAMgI,WACNC,aAAcC,IAAG,SACjBC,UACElM,OACEmM,UAAYnM,OAAOoM,SAAW5L,OAAO4L,QAAQC,QAC7CC,qBAAuBH,UAAYnM,OAAOoM,QAAQvC,OAAO3Q,OAAS8G,OAAO6J,OAAO3Q,OAChF2Q,OAAS,sBAAgBiC,SAAU,IAAI9L,OAAOQ,OAAOgJ,4BACrD+C,aAAeJ,UAAYnM,OAAOoM,QAAQvC,OAAO3Q,OAAS2Q,OAAO3Q,OACvE,IAAIsT,SAAW,GACf,MAAMC,WAAa,GACbC,gBAAkB,GACxB,IAAIC,aAAenM,OAAOoM,mBACE,mBAAjBD,eACTA,aAAenM,OAAOoM,mBAAmBtO,KAAK0B,SAEhD,IAAI6M,YAAcrM,OAAOsM,kBACE,mBAAhBD,cACTA,YAAcrM,OAAOsM,kBAAkBxO,KAAK0B,SAE9C,MAAM+M,uBAAyB/M,OAAOwM,SAAStT,OACzC8T,yBAA2BhN,OAAOyM,WAAWvT,OACnD,IAAI+T,aAAezM,OAAOyM,aACtBC,eAAiBP,aACjBQ,cAAgB,EAChB/E,MAAQ,EACZ,QAA0B,IAAf2D,WACT,OAE0B,iBAAjBkB,cAA6BA,aAAa9N,QAAQ,MAAQ,EACnE8N,aAAe/O,WAAW+O,aAAavP,QAAQ,IAAK,KAAO,IAAMqO,WAChC,iBAAjBkB,eAChBA,aAAe/O,WAAW+O,eAE5BjN,OAAOoN,aAAeH,aAGtBpD,OAAO7Q,SAAQ8P,UACTmD,IACFnD,QAAQ5O,MAAMmT,WAAa,GAE3BvE,QAAQ5O,MAAMoT,YAAc,GAE9BxE,QAAQ5O,MAAMqT,aAAe,GAC7BzE,QAAQ5O,MAAMsT,UAAY,EAAE,IAI1BhN,OAAOiN,gBAAkBjN,OAAOkN,UAClC,qBAAehN,UAAW,kCAAmC,IAC7D,qBAAeA,UAAW,iCAAkC,KAE9D,MAAMiN,YAAcnN,OAAO8J,MAAQ9J,OAAO8J,KAAKC,KAAO,GAAKvK,OAAOsK,KAQlE,IAAIsD,UAPAD,YACF3N,OAAOsK,KAAKuD,WAAWhE,QACd7J,OAAOsK,MAChBtK,OAAOsK,KAAKwD,cAKd,MAAMC,qBAAgD,SAAzBvN,OAAO0J,eAA4B1J,OAAOwN,aAAerV,OAAOI,KAAKyH,OAAOwN,aAAa9O,QAAOjG,UACnE,IAA1CuH,OAAOwN,YAAY/U,KAAKiR,gBACrChR,OAAS,EACZ,IAAK,IAAI0F,EAAI,EAAGA,EAAI2N,aAAc3N,GAAK,EAAG,CAExC,IAAIqP,MAKJ,GANAL,UAAY,EAER/D,OAAOjL,KAAIqP,MAAQpE,OAAOjL,IAC1B+O,aACF3N,OAAOsK,KAAK4D,YAAYtP,EAAGqP,MAAOpE,SAEhCA,OAAOjL,IAAyC,SAAnC0E,aAAa2K,MAAO,WAArC,CAEA,GAA6B,SAAzBzN,OAAO0J,cAA0B,CAC/B6D,uBACFlE,OAAOjL,GAAG1E,MAAM8F,OAAO6L,kBAAkB,UAAY,IAEvD,MAAMsC,YAAcvS,iBAAiBqS,OAC/BG,iBAAmBH,MAAM/T,MAAMmD,UAC/BgR,uBAAyBJ,MAAM/T,MAAMoD,gBAO3C,GANI8Q,mBACFH,MAAM/T,MAAMmD,UAAY,QAEtBgR,yBACFJ,MAAM/T,MAAMoD,gBAAkB,QAE5BkD,OAAO8N,aACTV,UAAY5N,OAAOqL,eAAiBvH,iBAAiBmK,MAAO,SAAS,GAAQnK,iBAAiBmK,MAAO,UAAU,OAC1G,CAEL,MAAM5I,MAAQsG,0BAA0BwC,YAAa,SAC/CI,YAAc5C,0BAA0BwC,YAAa,gBACrDK,aAAe7C,0BAA0BwC,YAAa,iBACtDd,WAAa1B,0BAA0BwC,YAAa,eACpDb,YAAc3B,0BAA0BwC,YAAa,gBACrDM,UAAYN,YAAYtS,iBAAiB,cAC/C,GAAI4S,WAA2B,eAAdA,UACfb,UAAYvI,MAAQgI,WAAaC,gBAC5B,CACL,MAAM,YACJnC,YAAW,YACXlH,aACEgK,MACJL,UAAYvI,MAAQkJ,YAAcC,aAAenB,WAAaC,aAAerJ,YAAckH,YAC7F,CACF,CACIiD,mBACFH,MAAM/T,MAAMmD,UAAY+Q,kBAEtBC,yBACFJ,MAAM/T,MAAMoD,gBAAkB+Q,wBAE5B7N,OAAO8N,eAAcV,UAAYzM,KAAKuN,MAAMd,WAClD,MACEA,WAAa7B,YAAcvL,OAAO0J,cAAgB,GAAK+C,cAAgBzM,OAAO0J,cAC1E1J,OAAO8N,eAAcV,UAAYzM,KAAKuN,MAAMd,YAC5C/D,OAAOjL,KACTiL,OAAOjL,GAAG1E,MAAM8F,OAAO6L,kBAAkB,UAAY,GAAG+B,eAGxD/D,OAAOjL,KACTiL,OAAOjL,GAAG+P,gBAAkBf,WAE9BlB,gBAAgB7I,KAAK+J,WACjBpN,OAAOiN,gBACTP,cAAgBA,cAAgBU,UAAY,EAAIT,cAAgB,EAAIF,aAC9C,IAAlBE,eAA6B,IAANvO,IAASsO,cAAgBA,cAAgBnB,WAAa,EAAIkB,cAC3E,IAANrO,IAASsO,cAAgBA,cAAgBnB,WAAa,EAAIkB,cAC1D9L,KAAKyN,IAAI1B,eAAiB,OAAUA,cAAgB,GACpD1M,OAAO8N,eAAcpB,cAAgB/L,KAAKuN,MAAMxB,gBAChD9E,MAAQ5H,OAAOqO,gBAAmB,GAAGrC,SAAS3I,KAAKqJ,eACvDT,WAAW5I,KAAKqJ,iBAEZ1M,OAAO8N,eAAcpB,cAAgB/L,KAAKuN,MAAMxB,iBAC/C9E,MAAQjH,KAAKE,IAAIrB,OAAOQ,OAAOsO,mBAAoB1G,QAAUpI,OAAOQ,OAAOqO,gBAAmB,GAAGrC,SAAS3I,KAAKqJ,eACpHT,WAAW5I,KAAKqJ,eAChBA,cAAgBA,cAAgBU,UAAYX,cAE9CjN,OAAOoN,aAAeQ,UAAYX,aAClCE,cAAgBS,UAChBxF,OAAS,CArE2D,CAsEtE,CAaA,GAZApI,OAAOoN,YAAcjM,KAAKC,IAAIpB,OAAOoN,YAAarB,YAAcc,YAC5DZ,KAAOC,WAA+B,UAAlB1L,OAAOuO,QAAwC,cAAlBvO,OAAOuO,UAC1DrO,UAAUxG,MAAMmL,MAAQ,GAAGrF,OAAOoN,YAAcH,kBAE9CzM,OAAOwO,iBACTtO,UAAUxG,MAAM8F,OAAO6L,kBAAkB,UAAY,GAAG7L,OAAOoN,YAAcH,kBAE3EU,aACF3N,OAAOsK,KAAK2E,kBAAkBrB,UAAWpB,WAItChM,OAAOiN,eAAgB,CAC1B,MAAMyB,cAAgB,GACtB,IAAK,IAAItQ,EAAI,EAAGA,EAAI4N,SAAStT,OAAQ0F,GAAK,EAAG,CAC3C,IAAIuQ,eAAiB3C,SAAS5N,GAC1B4B,OAAO8N,eAAca,eAAiBhO,KAAKuN,MAAMS,iBACjD3C,SAAS5N,IAAMoB,OAAOoN,YAAcrB,YACtCmD,cAAcrL,KAAKsL,eAEvB,CACA3C,SAAW0C,cACP/N,KAAKuN,MAAM1O,OAAOoN,YAAcrB,YAAc5K,KAAKuN,MAAMlC,SAASA,SAAStT,OAAS,IAAM,GAC5FsT,SAAS3I,KAAK7D,OAAOoN,YAAcrB,WAEvC,CACA,GAAII,WAAa3L,OAAOuK,KAAM,CAC5B,MAAMhH,KAAO2I,gBAAgB,GAAKO,aAClC,GAAIzM,OAAOqO,eAAiB,EAAG,CAC7B,MAAMO,OAASjO,KAAKiJ,MAAMpK,OAAOoM,QAAQiD,aAAerP,OAAOoM,QAAQkD,aAAe9O,OAAOqO,gBACvFU,UAAYxL,KAAOvD,OAAOqO,eAChC,IAAK,IAAIjQ,EAAI,EAAGA,EAAIwQ,OAAQxQ,GAAK,EAC/B4N,SAAS3I,KAAK2I,SAASA,SAAStT,OAAS,GAAKqW,UAElD,CACA,IAAK,IAAI3Q,EAAI,EAAGA,EAAIoB,OAAOoM,QAAQiD,aAAerP,OAAOoM,QAAQkD,YAAa1Q,GAAK,EACnD,IAA1B4B,OAAOqO,gBACTrC,SAAS3I,KAAK2I,SAASA,SAAStT,OAAS,GAAK6K,MAEhD0I,WAAW5I,KAAK4I,WAAWA,WAAWvT,OAAS,GAAK6K,MACpD/D,OAAOoN,aAAerJ,IAE1B,CAEA,GADwB,IAApByI,SAAStT,SAAcsT,SAAW,CAAC,IAClB,IAAjBS,aAAoB,CACtB,MAAMhU,IAAM+G,OAAOqL,gBAAkBY,IAAM,aAAejM,OAAO6L,kBAAkB,eACnFhC,OAAO3K,QAAO,CAACyL,EAAG6E,eACXhP,OAAOkN,UAAWlN,OAAOuK,OAC1ByE,aAAe3F,OAAO3Q,OAAS,IAIlCF,SAAQ8P,UACTA,QAAQ5O,MAAMjB,KAAO,GAAGgU,gBAAgB,GAE5C,CACA,GAAIzM,OAAOiN,gBAAkBjN,OAAOiP,qBAAsB,CACxD,IAAIC,cAAgB,EACpBhD,gBAAgB1T,SAAQ2W,iBACtBD,eAAiBC,gBAAkB1C,cAAgB,EAAE,IAEvDyC,eAAiBzC,aACjB,MAAM2C,QAAUF,cAAgB3D,WAChCS,SAAWA,SAAShP,KAAIqS,MAClBA,MAAQ,GAAWlD,aACnBkD,KAAOD,QAAgBA,QAAU/C,YAC9BgD,MAEX,CACA,GAAIrP,OAAOsP,yBAA0B,CACnC,IAAIJ,cAAgB,EACpBhD,gBAAgB1T,SAAQ2W,iBACtBD,eAAiBC,gBAAkB1C,cAAgB,EAAE,IAEvDyC,eAAiBzC,aACjB,MAAM8C,YAAcvP,OAAOoM,oBAAsB,IAAMpM,OAAOsM,mBAAqB,GACnF,GAAI4C,cAAgBK,WAAahE,WAAY,CAC3C,MAAMiE,iBAAmBjE,WAAa2D,cAAgBK,YAAc,EACpEvD,SAASxT,SAAQ,CAAC6W,KAAMI,aACtBzD,SAASyD,WAAaJ,KAAOG,eAAe,IAE9CvD,WAAWzT,SAAQ,CAAC6W,KAAMI,aACxBxD,WAAWwD,WAAaJ,KAAOG,eAAe,GAElD,CACF,CAOA,GANArX,OAAO8S,OAAOzL,OAAQ,CACpB6J,cACA2C,kBACAC,sBACAC,kCAEElM,OAAOiN,gBAAkBjN,OAAOkN,UAAYlN,OAAOiP,qBAAsB,CAC3E,qBAAe/O,UAAW,mCAAuC8L,SAAS,GAAb,MAC7D,qBAAe9L,UAAW,iCAAqCV,OAAO+D,KAAO,EAAI2I,gBAAgBA,gBAAgBxT,OAAS,GAAK,EAAnE,MAC5D,MAAMgX,eAAiBlQ,OAAOwM,SAAS,GACjC2D,iBAAmBnQ,OAAOyM,WAAW,GAC3CzM,OAAOwM,SAAWxM,OAAOwM,SAAShP,KAAI4S,GAAKA,EAAIF,gBAC/ClQ,OAAOyM,WAAazM,OAAOyM,WAAWjP,KAAI4S,GAAKA,EAAID,iBACrD,CAeA,GAdI5D,eAAiBD,sBACnBtM,OAAOuI,KAAK,sBAEViE,SAAStT,SAAW6T,yBAClB/M,OAAOQ,OAAO6P,eAAerQ,OAAOsQ,gBACxCtQ,OAAOuI,KAAK,yBAEVkE,WAAWvT,SAAW8T,0BACxBhN,OAAOuI,KAAK,0BAEV/H,OAAO+P,qBACTvQ,OAAOwQ,qBAETxQ,OAAOuI,KAAK,mBACP4D,WAAc3L,OAAOkN,SAA8B,UAAlBlN,OAAOuO,QAAwC,SAAlBvO,OAAOuO,QAAoB,CAC5F,MAAM0B,oBAAsB,GAAGjQ,OAAOkQ,wCAChCC,2BAA6B3Q,OAAOnD,GAAGyF,UAAU2G,SAASwH,qBAC5DlE,cAAgB/L,OAAOoQ,wBACpBD,4BAA4B3Q,OAAOnD,GAAGyF,UAAUC,IAAIkO,qBAChDE,4BACT3Q,OAAOnD,GAAGyF,UAAU4G,OAAOuH,oBAE/B,CACF,EAscEI,iBApcF,SAA0BpQ,OACxB,MAAMT,OAASrE,KACTmV,aAAe,GACf3E,UAAYnM,OAAOoM,SAAWpM,OAAOQ,OAAO4L,QAAQC,QAC1D,IACIzN,EADAmS,UAAY,EAEK,iBAAVtQ,MACTT,OAAOgR,cAAcvQ,QACF,IAAVA,OACTT,OAAOgR,cAAchR,OAAOQ,OAAOC,OAErC,MAAMwQ,gBAAkB7I,OAClB+D,UACKnM,OAAO6J,OAAO7J,OAAOkR,oBAAoB9I,QAE3CpI,OAAO6J,OAAOzB,OAGvB,GAAoC,SAAhCpI,OAAOQ,OAAO0J,eAA4BlK,OAAOQ,OAAO0J,cAAgB,EAC1E,GAAIlK,OAAOQ,OAAOiN,gBACfzN,OAAOmR,eAAiB,IAAInY,SAAQiV,QACnC6C,aAAajN,KAAKoK,MAAM,SAG1B,IAAKrP,EAAI,EAAGA,EAAIuC,KAAKiJ,KAAKpK,OAAOQ,OAAO0J,eAAgBtL,GAAK,EAAG,CAC9D,MAAMwJ,MAAQpI,OAAOqK,YAAczL,EACnC,GAAIwJ,MAAQpI,OAAO6J,OAAO3Q,SAAWiT,UAAW,MAChD2E,aAAajN,KAAKoN,gBAAgB7I,OACpC,MAGF0I,aAAajN,KAAKoN,gBAAgBjR,OAAOqK,cAI3C,IAAKzL,EAAI,EAAGA,EAAIkS,aAAa5X,OAAQ0F,GAAK,EACxC,QAA+B,IAApBkS,aAAalS,GAAoB,CAC1C,MAAM2G,OAASuL,aAAalS,GAAGwS,aAC/BL,UAAYxL,OAASwL,UAAYxL,OAASwL,SAC5C,EAIEA,WAA2B,IAAdA,aAAiB/Q,OAAOU,UAAUxG,MAAMqL,OAAS,GAAGwL,cACvE,EAyZEP,mBAvZF,WACE,MAAMxQ,OAASrE,KACTkO,OAAS7J,OAAO6J,OAEhBwH,YAAcrR,OAAOuJ,UAAYvJ,OAAOqL,eAAiBrL,OAAOU,UAAU4Q,WAAatR,OAAOU,UAAU6Q,UAAY,EAC1H,IAAK,IAAI3S,EAAI,EAAGA,EAAIiL,OAAO3Q,OAAQ0F,GAAK,EACtCiL,OAAOjL,GAAG4S,mBAAqBxR,OAAOqL,eAAiBxB,OAAOjL,GAAG0S,WAAazH,OAAOjL,GAAG2S,WAAaF,YAAcrR,OAAOyR,uBAE9H,EAgZEC,qBAvYF,SAA8BtR,gBACV,IAAdA,YACFA,UAAYzE,MAAQA,KAAKyE,WAAa,GAExC,MAAMJ,OAASrE,KACT6E,OAASR,OAAOQ,QAChB,OACJqJ,OACAmC,aAAcC,IAAG,SACjBO,UACExM,OACJ,GAAsB,IAAlB6J,OAAO3Q,OAAc,YACkB,IAAhC2Q,OAAO,GAAG2H,mBAAmCxR,OAAOwQ,qBAC/D,IAAImB,cAAgBvR,UAChB6L,MAAK0F,aAAevR,WACxBJ,OAAO4R,qBAAuB,GAC9B5R,OAAOmR,cAAgB,GACvB,IAAIlE,aAAezM,OAAOyM,aACE,iBAAjBA,cAA6BA,aAAa9N,QAAQ,MAAQ,EACnE8N,aAAe/O,WAAW+O,aAAavP,QAAQ,IAAK,KAAO,IAAMsC,OAAO+D,KACvC,iBAAjBkJ,eAChBA,aAAe/O,WAAW+O,eAE5B,IAAK,IAAIrO,EAAI,EAAGA,EAAIiL,OAAO3Q,OAAQ0F,GAAK,EAAG,CACzC,MAAMqP,MAAQpE,OAAOjL,GACrB,IAAIiT,YAAc5D,MAAMuD,kBACpBhR,OAAOkN,SAAWlN,OAAOiN,iBAC3BoE,aAAehI,OAAO,GAAG2H,mBAE3B,MAAMM,eAAiBH,cAAgBnR,OAAOiN,eAAiBzN,OAAO+R,eAAiB,GAAKF,cAAgB5D,MAAMU,gBAAkB1B,cAC9H+E,uBAAyBL,aAAenF,SAAS,IAAMhM,OAAOiN,eAAiBzN,OAAO+R,eAAiB,GAAKF,cAAgB5D,MAAMU,gBAAkB1B,cACpJgF,cAAgBN,aAAeE,aAC/BK,WAAaD,YAAcjS,OAAO0M,gBAAgB9N,GAClDuT,eAAiBF,aAAe,GAAKA,aAAejS,OAAO+D,KAAO/D,OAAO0M,gBAAgB9N,GACzFwT,UAAYH,aAAe,GAAKA,YAAcjS,OAAO+D,KAAO,GAAKmO,WAAa,GAAKA,YAAclS,OAAO+D,MAAQkO,aAAe,GAAKC,YAAclS,OAAO+D,KAC3JqO,YACFpS,OAAOmR,cAActN,KAAKoK,OAC1BjO,OAAO4R,qBAAqB/N,KAAKjF,IAEnCiK,qBAAqBoF,MAAOmE,UAAW5R,OAAO6R,mBAC9CxJ,qBAAqBoF,MAAOkE,eAAgB3R,OAAO8R,wBACnDrE,MAAM/M,SAAW+K,KAAO6F,cAAgBA,cACxC7D,MAAMsE,iBAAmBtG,KAAO+F,sBAAwBA,qBAC1D,CACF,EA4VEQ,eA1VF,SAAwBpS,WACtB,MAAMJ,OAASrE,KACf,QAAyB,IAAdyE,UAA2B,CACpC,MAAMqS,WAAazS,OAAOgM,cAAgB,EAAI,EAE9C5L,UAAYJ,QAAUA,OAAOI,WAAaJ,OAAOI,UAAYqS,YAAc,CAC7E,CACA,MAAMjS,OAASR,OAAOQ,OAChBkS,eAAiB1S,OAAO2S,eAAiB3S,OAAO+R,eACtD,IAAI,SACF7Q,SAAQ,YACR0R,YAAW,MACXC,MAAK,aACLC,cACE9S,OACJ,MAAM+S,aAAeH,YACfI,OAASH,MACf,GAAuB,IAAnBH,eACFxR,SAAW,EACX0R,aAAc,EACdC,OAAQ,MACH,CACL3R,UAAYd,UAAYJ,OAAO+R,gBAAkBW,eACjD,MAAMO,mBAAqB9R,KAAKyN,IAAIxO,UAAYJ,OAAO+R,gBAAkB,EACnEmB,aAAe/R,KAAKyN,IAAIxO,UAAYJ,OAAO2S,gBAAkB,EACnEC,YAAcK,oBAAsB/R,UAAY,EAChD2R,MAAQK,cAAgBhS,UAAY,EAChC+R,qBAAoB/R,SAAW,GAC/BgS,eAAchS,SAAW,EAC/B,CACA,GAAIV,OAAOuK,KAAM,CACf,MAAMoI,gBAAkBnT,OAAOkR,oBAAoB,GAC7CkC,eAAiBpT,OAAOkR,oBAAoBlR,OAAO6J,OAAO3Q,OAAS,GACnEma,oBAAsBrT,OAAOyM,WAAW0G,iBACxCG,mBAAqBtT,OAAOyM,WAAW2G,gBACvCG,aAAevT,OAAOyM,WAAWzM,OAAOyM,WAAWvT,OAAS,GAC5Dsa,aAAerS,KAAKyN,IAAIxO,WAE5B0S,aADEU,cAAgBH,qBACFG,aAAeH,qBAAuBE,cAEtCC,aAAeD,aAAeD,oBAAsBC,aAElET,aAAe,IAAGA,cAAgB,EACxC,CACAna,OAAO8S,OAAOzL,OAAQ,CACpBkB,kBACA4R,0BACAF,wBACAC,eAEErS,OAAO+P,qBAAuB/P,OAAOiN,gBAAkBjN,OAAOiT,aAAYzT,OAAO0R,qBAAqBtR,WACtGwS,cAAgBG,cAClB/S,OAAOuI,KAAK,yBAEVsK,QAAUG,QACZhT,OAAOuI,KAAK,oBAEVwK,eAAiBH,aAAeI,SAAWH,QAC7C7S,OAAOuI,KAAK,YAEdvI,OAAOuI,KAAK,WAAYrH,SAC1B,EA8REwS,oBArRF,WACE,MAAM1T,OAASrE,MACT,OACJkO,OAAM,OACNrJ,OAAM,SACNsL,SAAQ,YACRzB,aACErK,OACEmM,UAAYnM,OAAOoM,SAAW5L,OAAO4L,QAAQC,QAC7CsB,YAAc3N,OAAOsK,MAAQ9J,OAAO8J,MAAQ9J,OAAO8J,KAAKC,KAAO,EAC/DoJ,iBAAmB9R,UAChB,sBAAgBiK,SAAU,IAAItL,OAAOgJ,aAAa3H,yBAAyBA,YAAY,GAEhG,IAAI+R,YACAC,UACAC,UACJ,GAAI3H,UACF,GAAI3L,OAAOuK,KAAM,CACf,IAAIyE,WAAanF,YAAcrK,OAAOoM,QAAQiD,aAC1CG,WAAa,IAAGA,WAAaxP,OAAOoM,QAAQvC,OAAO3Q,OAASsW,YAC5DA,YAAcxP,OAAOoM,QAAQvC,OAAO3Q,SAAQsW,YAAcxP,OAAOoM,QAAQvC,OAAO3Q,QACpF0a,YAAcD,iBAAiB,6BAA6BnE,eAC9D,MACEoE,YAAcD,iBAAiB,6BAA6BtJ,sBAG1DsD,aACFiG,YAAc/J,OAAO3K,QAAO4J,SAAWA,QAAQ8B,SAAWP,cAAa,GACvEyJ,UAAYjK,OAAO3K,QAAO4J,SAAWA,QAAQ8B,SAAWP,YAAc,IAAG,GACzEwJ,UAAYhK,OAAO3K,QAAO4J,SAAWA,QAAQ8B,SAAWP,YAAc,IAAG,IAEzEuJ,YAAc/J,OAAOQ,aAGrBuJ,cACGjG,cAEHmG,UDpoBN,SAAwBjX,GAAIgF,UAC1B,MAAMkS,QAAU,GAChB,KAAOlX,GAAGmX,oBAAoB,CAC5B,MAAMC,KAAOpX,GAAGmX,mBACZnS,SACEoS,KAAKnS,QAAQD,WAAWkS,QAAQlQ,KAAKoQ,MACpCF,QAAQlQ,KAAKoQ,MACpBpX,GAAKoX,IACP,CACA,OAAOF,OACT,CC0nBkBG,CAAeN,YAAa,IAAIpT,OAAOgJ,4BAA4B,GAC3EhJ,OAAOuK,OAAS+I,YAClBA,UAAYjK,OAAO,IAIrBgK,UDrpBN,SAAwBhX,GAAIgF,UAC1B,MAAMsS,QAAU,GAChB,KAAOtX,GAAGuX,wBAAwB,CAChC,MAAMC,KAAOxX,GAAGuX,uBACZvS,SACEwS,KAAKvS,QAAQD,WAAWsS,QAAQtQ,KAAKwQ,MACpCF,QAAQtQ,KAAKwQ,MACpBxX,GAAKwX,IACP,CACA,OAAOF,OACT,CC2oBkBG,CAAeV,YAAa,IAAIpT,OAAOgJ,4BAA4B,GAC3EhJ,OAAOuK,MAAuB,KAAd8I,YAClBA,UAAYhK,OAAOA,OAAO3Q,OAAS,MAIzC2Q,OAAO7Q,SAAQ8P,UACbK,mBAAmBL,QAASA,UAAY8K,YAAapT,OAAO+T,kBAC5DpL,mBAAmBL,QAASA,UAAYgL,UAAWtT,OAAOgU,gBAC1DrL,mBAAmBL,QAASA,UAAY+K,UAAWrT,OAAOiU,eAAe,IAE3EzU,OAAO0U,mBACT,EA+NEC,kBAtIF,SAA2BC,gBACzB,MAAM5U,OAASrE,KACTyE,UAAYJ,OAAOgM,aAAehM,OAAOI,WAAaJ,OAAOI,WAC7D,SACJoM,SAAQ,OACRhM,OACA6J,YAAawK,cACb7J,UAAW8J,kBACX7E,UAAW8E,mBACT/U,OACJ,IACIiQ,UADA5F,YAAcuK,eAElB,MAAMI,oBAAsBC,SAC1B,IAAIjK,UAAYiK,OAASjV,OAAOoM,QAAQiD,aAOxC,OANIrE,UAAY,IACdA,UAAYhL,OAAOoM,QAAQvC,OAAO3Q,OAAS8R,WAEzCA,WAAahL,OAAOoM,QAAQvC,OAAO3Q,SACrC8R,WAAahL,OAAOoM,QAAQvC,OAAO3Q,QAE9B8R,SAAS,EAKlB,QAH2B,IAAhBX,cACTA,YA/CJ,SAAmCrK,QACjC,MAAM,WACJyM,WAAU,OACVjM,QACER,OACEI,UAAYJ,OAAOgM,aAAehM,OAAOI,WAAaJ,OAAOI,UACnE,IAAIiK,YACJ,IAAK,IAAIzL,EAAI,EAAGA,EAAI6N,WAAWvT,OAAQ0F,GAAK,OACT,IAAtB6N,WAAW7N,EAAI,GACpBwB,WAAaqM,WAAW7N,IAAMwB,UAAYqM,WAAW7N,EAAI,IAAM6N,WAAW7N,EAAI,GAAK6N,WAAW7N,IAAM,EACtGyL,YAAczL,EACLwB,WAAaqM,WAAW7N,IAAMwB,UAAYqM,WAAW7N,EAAI,KAClEyL,YAAczL,EAAI,GAEXwB,WAAaqM,WAAW7N,KACjCyL,YAAczL,GAOlB,OAHI4B,OAAO0U,sBACL7K,YAAc,QAA4B,IAAhBA,eAA6BA,YAAc,GAEpEA,WACT,CAwBkB8K,CAA0BnV,SAEtCwM,SAASrN,QAAQiB,YAAc,EACjC6P,UAAYzD,SAASrN,QAAQiB,eACxB,CACL,MAAMgV,KAAOjU,KAAKE,IAAIb,OAAOsO,mBAAoBzE,aACjD4F,UAAYmF,KAAOjU,KAAKuN,OAAOrE,YAAc+K,MAAQ5U,OAAOqO,eAC9D,CAEA,GADIoB,WAAazD,SAAStT,SAAQ+W,UAAYzD,SAAStT,OAAS,GAC5DmR,cAAgBwK,gBAAkB7U,OAAOQ,OAAOuK,KAKlD,YAJIkF,YAAc8E,oBAChB/U,OAAOiQ,UAAYA,UACnBjQ,OAAOuI,KAAK,qBAIhB,GAAI8B,cAAgBwK,eAAiB7U,OAAOQ,OAAOuK,MAAQ/K,OAAOoM,SAAWpM,OAAOQ,OAAO4L,QAAQC,QAEjG,YADArM,OAAOgL,UAAYgK,oBAAoB3K,cAGzC,MAAMsD,YAAc3N,OAAOsK,MAAQ9J,OAAO8J,MAAQ9J,OAAO8J,KAAKC,KAAO,EAGrE,IAAIS,UACJ,GAAIhL,OAAOoM,SAAW5L,OAAO4L,QAAQC,SAAW7L,OAAOuK,KACrDC,UAAYgK,oBAAoB3K,kBAC3B,GAAIsD,YAAa,CACtB,MAAM0H,mBAAqBrV,OAAO6J,OAAO3K,QAAO4J,SAAWA,QAAQ8B,SAAWP,cAAa,GAC3F,IAAIiL,iBAAmB/J,SAAS8J,mBAAmBE,aAAa,2BAA4B,IACxF9O,OAAO+E,MAAM8J,oBACfA,iBAAmBnU,KAAKC,IAAIpB,OAAO6J,OAAO1K,QAAQkW,oBAAqB,IAEzErK,UAAY7J,KAAKuN,MAAM4G,iBAAmB9U,OAAO8J,KAAKC,KACxD,MAAO,GAAIvK,OAAO6J,OAAOQ,aAAc,CACrC,MAAMmF,WAAaxP,OAAO6J,OAAOQ,aAAakL,aAAa,2BAEzDvK,UADEwE,WACUjE,SAASiE,WAAY,IAErBnF,WAEhB,MACEW,UAAYX,YAEd1R,OAAO8S,OAAOzL,OAAQ,CACpB+U,oCACA9E,oBACA6E,oCACA9J,oBACA6J,4BACAxK,0BAEErK,OAAOwV,aACTzL,QAAQ/J,QAEVA,OAAOuI,KAAK,qBACZvI,OAAOuI,KAAK,oBACRvI,OAAOwV,aAAexV,OAAOQ,OAAOiV,sBAClCX,oBAAsB9J,WACxBhL,OAAOuI,KAAK,mBAEdvI,OAAOuI,KAAK,eAEhB,EAkDEmN,mBAhDF,SAA4B7Y,GAAI8Y,MAC9B,MAAM3V,OAASrE,KACT6E,OAASR,OAAOQ,OACtB,IAAIyN,MAAQpR,GAAGyM,QAAQ,IAAI9I,OAAOgJ,6BAC7ByE,OAASjO,OAAOuJ,WAAaoM,MAAQA,KAAKzc,OAAS,GAAKyc,KAAKtP,SAASxJ,KACzE,IAAI8Y,KAAKpX,MAAMoX,KAAKxW,QAAQtC,IAAM,EAAG8Y,KAAKzc,SAASF,SAAQ4c,UACpD3H,OAAS2H,OAAO9T,SAAW8T,OAAO9T,QAAQ,IAAItB,OAAOgJ,8BACxDyE,MAAQ2H,OACV,IAGJ,IACIpG,WADAqG,YAAa,EAEjB,GAAI5H,MACF,IAAK,IAAIrP,EAAI,EAAGA,EAAIoB,OAAO6J,OAAO3Q,OAAQ0F,GAAK,EAC7C,GAAIoB,OAAO6J,OAAOjL,KAAOqP,MAAO,CAC9B4H,YAAa,EACbrG,WAAa5Q,EACb,KACF,CAGJ,IAAIqP,QAAS4H,WAUX,OAFA7V,OAAO8V,kBAAepX,OACtBsB,OAAO+V,kBAAerX,GARtBsB,OAAO8V,aAAe7H,MAClBjO,OAAOoM,SAAWpM,OAAOQ,OAAO4L,QAAQC,QAC1CrM,OAAO+V,aAAexK,SAAS0C,MAAMsH,aAAa,2BAA4B,IAE9EvV,OAAO+V,aAAevG,WAOtBhP,OAAOwV,0BAA+CtX,IAAxBsB,OAAO+V,cAA8B/V,OAAO+V,eAAiB/V,OAAOqK,aACpGrK,OAAOgW,qBAEX,GA+KA,IAAI5V,UAAY,CACdxD,aAlKF,SAA4BE,WACb,IAATA,OACFA,KAAOnB,KAAK0P,eAAiB,IAAM,KAErC,MACM,OACJ7K,OACAwL,aAAcC,IAAG,UACjB7L,UAAS,UACTM,WALa/E,KAOf,GAAI6E,OAAOyV,iBACT,OAAOhK,KAAO7L,UAAYA,UAE5B,GAAII,OAAOkN,QACT,OAAOtN,UAET,IAAI8V,iBAAmBtZ,aAAa8D,UAAW5D,MAG/C,OAFAoZ,kBAdeva,KAcY8V,wBACvBxF,MAAKiK,kBAAoBA,kBACtBA,kBAAoB,CAC7B,EA8IEC,aA5IF,SAAsB/V,UAAWgW,cAC/B,MAAMpW,OAASrE,MAEbqQ,aAAcC,IAAG,OACjBzL,OAAM,UACNE,UAAS,SACTQ,UACElB,OACJ,IA0BIqW,YA1BAC,EAAI,EACJC,EAAI,EAEJvW,OAAOqL,eACTiL,EAAIrK,KAAO7L,UAAYA,UAEvBmW,EAAInW,UAEFI,OAAO8N,eACTgI,EAAInV,KAAKuN,MAAM4H,GACfC,EAAIpV,KAAKuN,MAAM6H,IAEjBvW,OAAOwW,kBAAoBxW,OAAOI,UAClCJ,OAAOI,UAAYJ,OAAOqL,eAAiBiL,EAAIC,EAC3C/V,OAAOkN,QACThN,UAAUV,OAAOqL,eAAiB,aAAe,aAAerL,OAAOqL,gBAAkBiL,GAAKC,EACpF/V,OAAOyV,mBACbjW,OAAOqL,eACTiL,GAAKtW,OAAOyR,wBAEZ8E,GAAKvW,OAAOyR,wBAEd/Q,UAAUxG,MAAMmD,UAAY,eAAeiZ,QAAQC,aAKrD,MAAM7D,eAAiB1S,OAAO2S,eAAiB3S,OAAO+R,eAEpDsE,YADqB,IAAnB3D,eACY,GAECtS,UAAYJ,OAAO+R,gBAAkBW,eAElD2D,cAAgBnV,UAClBlB,OAAOwS,eAAepS,WAExBJ,OAAOuI,KAAK,eAAgBvI,OAAOI,UAAWgW,aAChD,EAgGErE,aA9FF,WACE,OAAQpW,KAAK6Q,SAAS,EACxB,EA6FEmG,aA3FF,WACE,OAAQhX,KAAK6Q,SAAS7Q,KAAK6Q,SAAStT,OAAS,EAC/C,EA0FEud,YAxFF,SAAqBrW,UAAWK,MAAOiW,aAAcC,gBAAiBC,eAClD,IAAdxW,YACFA,UAAY,QAEA,IAAVK,QACFA,MAAQ9E,KAAK6E,OAAOC,YAED,IAAjBiW,eACFA,cAAe,QAEO,IAApBC,kBACFA,iBAAkB,GAEpB,MAAM3W,OAASrE,MACT,OACJ6E,OAAM,UACNE,WACEV,OACJ,GAAIA,OAAO6W,WAAarW,OAAOsW,+BAC7B,OAAO,EAET,MAAM/E,aAAe/R,OAAO+R,eACtBY,aAAe3S,OAAO2S,eAC5B,IAAIoE,aAKJ,GAJiDA,aAA7CJ,iBAAmBvW,UAAY2R,aAA6BA,aAAsB4E,iBAAmBvW,UAAYuS,aAA6BA,aAAiCvS,UAGnLJ,OAAOwS,eAAeuE,cAClBvW,OAAOkN,QAAS,CAClB,MAAMsJ,IAAMhX,OAAOqL,eACnB,GAAc,IAAV5K,MACFC,UAAUsW,IAAM,aAAe,cAAgBD,iBAC1C,CACL,IAAK/W,OAAOmE,QAAQI,aAMlB,OALAzE,qBAAqB,CACnBE,cACAC,gBAAiB8W,aACjB7W,KAAM8W,IAAM,OAAS,SAEhB,EAETtW,UAAUgB,SAAS,CACjB,CAACsV,IAAM,OAAS,QAASD,aACzBE,SAAU,UAEd,CACA,OAAO,CACT,CAiCA,OAhCc,IAAVxW,OACFT,OAAOgR,cAAc,GACrBhR,OAAOmW,aAAaY,cAChBL,eACF1W,OAAOuI,KAAK,wBAAyB9H,MAAOmW,UAC5C5W,OAAOuI,KAAK,oBAGdvI,OAAOgR,cAAcvQ,OACrBT,OAAOmW,aAAaY,cAChBL,eACF1W,OAAOuI,KAAK,wBAAyB9H,MAAOmW,UAC5C5W,OAAOuI,KAAK,oBAETvI,OAAO6W,YACV7W,OAAO6W,WAAY,EACd7W,OAAOkX,oCACVlX,OAAOkX,kCAAoC,SAAuBhT,GAC3DlE,SAAUA,OAAOsH,WAClBpD,EAAErL,SAAW8C,OACjBqE,OAAOU,UAAUpH,oBAAoB,gBAAiB0G,OAAOkX,mCAC7DlX,OAAOkX,kCAAoC,YACpClX,OAAOkX,kCACdlX,OAAO6W,WAAY,EACfH,cACF1W,OAAOuI,KAAK,iBAEhB,GAEFvI,OAAOU,UAAUrH,iBAAiB,gBAAiB2G,OAAOkX,sCAGvD,CACT,GAmBA,SAASC,eAAepX,MACtB,IAAI,OACFC,OAAM,aACN0W,aAAY,UACZU,UAAS,KACTC,MACEtX,KACJ,MAAM,YACJsK,YAAW,cACXwK,eACE7U,OACJ,IAAIa,IAAMuW,UAKV,GAJKvW,MAC8BA,IAA7BwJ,YAAcwK,cAAqB,OAAgBxK,YAAcwK,cAAqB,OAAkB,SAE9G7U,OAAOuI,KAAK,aAAa8O,QACrBX,cAAgBrM,cAAgBwK,cAAe,CACjD,GAAY,UAARhU,IAEF,YADAb,OAAOuI,KAAK,uBAAuB8O,QAGrCrX,OAAOuI,KAAK,wBAAwB8O,QACxB,SAARxW,IACFb,OAAOuI,KAAK,sBAAsB8O,QAElCrX,OAAOuI,KAAK,sBAAsB8O,OAEtC,CACF,CAsdA,IAAIpJ,MAAQ,CACVqJ,QAxaF,SAAiBlP,MAAO3H,MAAOiW,aAAcE,SAAUW,cACvC,IAAVnP,QACFA,MAAQ,QAEW,IAAjBsO,eACFA,cAAe,GAEI,iBAAVtO,QACTA,MAAQmD,SAASnD,MAAO,KAE1B,MAAMpI,OAASrE,KACf,IAAI6T,WAAapH,MACboH,WAAa,IAAGA,WAAa,GACjC,MAAM,OACJhP,OAAM,SACNgM,SAAQ,WACRC,WAAU,cACVoI,cAAa,YACbxK,YACA2B,aAAcC,IAAG,UACjBvL,UAAS,QACT2L,SACErM,OACJ,IAAKqM,UAAYuK,WAAaW,SAAWvX,OAAOsH,WAAatH,OAAO6W,WAAarW,OAAOsW,+BACtF,OAAO,OAEY,IAAVrW,QACTA,MAAQT,OAAOQ,OAAOC,OAExB,MAAM2U,KAAOjU,KAAKE,IAAIrB,OAAOQ,OAAOsO,mBAAoBU,YACxD,IAAIS,UAAYmF,KAAOjU,KAAKuN,OAAOc,WAAa4F,MAAQpV,OAAOQ,OAAOqO,gBAClEoB,WAAazD,SAAStT,SAAQ+W,UAAYzD,SAAStT,OAAS,GAChE,MAAMkH,WAAaoM,SAASyD,WAE5B,GAAIzP,OAAO0U,oBACT,IAAK,IAAItW,EAAI,EAAGA,EAAI6N,WAAWvT,OAAQ0F,GAAK,EAAG,CAC7C,MAAM4Y,qBAAuBrW,KAAKuN,MAAkB,IAAZtO,WAClCqX,eAAiBtW,KAAKuN,MAAsB,IAAhBjC,WAAW7N,IACvC8Y,mBAAqBvW,KAAKuN,MAA0B,IAApBjC,WAAW7N,EAAI,SACpB,IAAtB6N,WAAW7N,EAAI,GACpB4Y,qBAAuBC,gBAAkBD,oBAAsBE,oBAAsBA,mBAAqBD,gBAAkB,EAC9HjI,WAAa5Q,EACJ4Y,qBAAuBC,gBAAkBD,oBAAsBE,qBACxElI,WAAa5Q,EAAI,GAEV4Y,qBAAuBC,iBAChCjI,WAAa5Q,EAEjB,CAGF,GAAIoB,OAAOwV,aAAehG,aAAenF,YAAa,CACpD,IAAKrK,OAAO2X,iBAAmB1L,IAAM7L,UAAYJ,OAAOI,WAAaA,UAAYJ,OAAO+R,eAAiB3R,UAAYJ,OAAOI,WAAaA,UAAYJ,OAAO+R,gBAC1J,OAAO,EAET,IAAK/R,OAAO4X,gBAAkBxX,UAAYJ,OAAOI,WAAaA,UAAYJ,OAAO2S,iBAC1EtI,aAAe,KAAOmF,WACzB,OAAO,CAGb,CAOA,IAAI4H,UAIJ,GAVI5H,cAAgBqF,eAAiB,IAAM6B,cACzC1W,OAAOuI,KAAK,0BAIdvI,OAAOwS,eAAepS,WAEQgX,UAA1B5H,WAAanF,YAAyB,OAAgBmF,WAAanF,YAAyB,OAAwB,QAGpH4B,MAAQ7L,YAAcJ,OAAOI,YAAc6L,KAAO7L,YAAcJ,OAAOI,UAczE,OAbAJ,OAAO2U,kBAAkBnF,YAErBhP,OAAOiT,YACTzT,OAAO6Q,mBAET7Q,OAAO0T,sBACe,UAAlBlT,OAAOuO,QACT/O,OAAOmW,aAAa/V,WAEJ,UAAdgX,YACFpX,OAAO6X,gBAAgBnB,aAAcU,WACrCpX,OAAO8X,cAAcpB,aAAcU,aAE9B,EAET,GAAI5W,OAAOkN,QAAS,CAClB,MAAMsJ,IAAMhX,OAAOqL,eACb0M,EAAI9L,IAAM7L,WAAaA,UAC7B,GAAc,IAAVK,MAAa,CACf,MAAM0L,UAAYnM,OAAOoM,SAAWpM,OAAOQ,OAAO4L,QAAQC,QACtDF,YACFnM,OAAOU,UAAUxG,MAAMyG,eAAiB,OACxCX,OAAOgY,mBAAoB,GAEzB7L,YAAcnM,OAAOiY,2BAA6BjY,OAAOQ,OAAO0X,aAAe,GACjFlY,OAAOiY,2BAA4B,EACnC7b,uBAAsB,KACpBsE,UAAUsW,IAAM,aAAe,aAAee,CAAC,KAGjDrX,UAAUsW,IAAM,aAAe,aAAee,EAE5C5L,WACF/P,uBAAsB,KACpB4D,OAAOU,UAAUxG,MAAMyG,eAAiB,GACxCX,OAAOgY,mBAAoB,CAAK,GAGtC,KAAO,CACL,IAAKhY,OAAOmE,QAAQI,aAMlB,OALAzE,qBAAqB,CACnBE,cACAC,eAAgB8X,EAChB7X,KAAM8W,IAAM,OAAS,SAEhB,EAETtW,UAAUgB,SAAS,CACjB,CAACsV,IAAM,OAAS,OAAQe,EACxBd,SAAU,UAEd,CACA,OAAO,CACT,CAuBA,OAtBAjX,OAAOgR,cAAcvQ,OACrBT,OAAOmW,aAAa/V,WACpBJ,OAAO2U,kBAAkBnF,YACzBxP,OAAO0T,sBACP1T,OAAOuI,KAAK,wBAAyB9H,MAAOmW,UAC5C5W,OAAO6X,gBAAgBnB,aAAcU,WACvB,IAAV3W,MACFT,OAAO8X,cAAcpB,aAAcU,WACzBpX,OAAO6W,YACjB7W,OAAO6W,WAAY,EACd7W,OAAOmY,gCACVnY,OAAOmY,8BAAgC,SAAuBjU,GACvDlE,SAAUA,OAAOsH,WAClBpD,EAAErL,SAAW8C,OACjBqE,OAAOU,UAAUpH,oBAAoB,gBAAiB0G,OAAOmY,+BAC7DnY,OAAOmY,8BAAgC,YAChCnY,OAAOmY,8BACdnY,OAAO8X,cAAcpB,aAAcU,WACrC,GAEFpX,OAAOU,UAAUrH,iBAAiB,gBAAiB2G,OAAOmY,iCAErD,CACT,EAoREC,YAlRF,SAAqBhQ,MAAO3H,MAAOiW,aAAcE,UAO/C,QANc,IAAVxO,QACFA,MAAQ,QAEW,IAAjBsO,eACFA,cAAe,GAEI,iBAAVtO,MAAoB,CAE7BA,MADsBmD,SAASnD,MAAO,GAExC,CACA,MAAMpI,OAASrE,KACf,GAAIqE,OAAOsH,UAAW,YACD,IAAV7G,QACTA,MAAQT,OAAOQ,OAAOC,OAExB,MAAMkN,YAAc3N,OAAOsK,MAAQtK,OAAOQ,OAAO8J,MAAQtK,OAAOQ,OAAO8J,KAAKC,KAAO,EACnF,IAAI8N,SAAWjQ,MACf,GAAIpI,OAAOQ,OAAOuK,KAChB,GAAI/K,OAAOoM,SAAWpM,OAAOQ,OAAO4L,QAAQC,QAE1CgM,UAAsBrY,OAAOoM,QAAQiD,iBAChC,CACL,IAAIiJ,iBACJ,GAAI3K,YAAa,CACf,MAAM6B,WAAa6I,SAAWrY,OAAOQ,OAAO8J,KAAKC,KACjD+N,iBAAmBtY,OAAO6J,OAAO3K,QAAO4J,SAA6D,EAAlDA,QAAQyM,aAAa,6BAAmC/F,aAAY,GAAG5E,MAC5H,MACE0N,iBAAmBtY,OAAOkR,oBAAoBmH,UAEhD,MAAME,KAAO5K,YAAcxM,KAAKiJ,KAAKpK,OAAO6J,OAAO3Q,OAAS8G,OAAOQ,OAAO8J,KAAKC,MAAQvK,OAAO6J,OAAO3Q,QAC/F,eACJuU,gBACEzN,OAAOQ,OACX,IAAI0J,cAAgBlK,OAAOQ,OAAO0J,cACZ,SAAlBA,cACFA,cAAgBlK,OAAOmK,wBAEvBD,cAAgB/I,KAAKiJ,KAAKlM,WAAW8B,OAAOQ,OAAO0J,cAAe,KAC9DuD,gBAAkBvD,cAAgB,GAAM,IAC1CA,eAAgC,IAGpC,IAAIsO,YAAcD,KAAOD,iBAAmBpO,cAO5C,GANIuD,iBACF+K,YAAcA,aAAeF,iBAAmBnX,KAAKiJ,KAAKF,cAAgB,IAExE0M,UAAYnJ,gBAAkD,SAAhCzN,OAAOQ,OAAO0J,gBAA6ByD,cAC3E6K,aAAc,GAEZA,YAAa,CACf,MAAMpB,UAAY3J,eAAiB6K,iBAAmBtY,OAAOqK,YAAc,OAAS,OAASiO,iBAAmBtY,OAAOqK,YAAc,EAAIrK,OAAOQ,OAAO0J,cAAgB,OAAS,OAChLlK,OAAOyY,QAAQ,CACbrB,oBACAE,SAAS,EACThC,iBAAgC,SAAd8B,UAAuBkB,iBAAmB,EAAIA,iBAAmBC,KAAO,EAC1FG,eAA8B,SAAdtB,UAAuBpX,OAAOgL,eAAYtM,GAE9D,CACA,GAAIiP,YAAa,CACf,MAAM6B,WAAa6I,SAAWrY,OAAOQ,OAAO8J,KAAKC,KACjD8N,SAAWrY,OAAO6J,OAAO3K,QAAO4J,SAA6D,EAAlDA,QAAQyM,aAAa,6BAAmC/F,aAAY,GAAG5E,MACpH,MACEyN,SAAWrY,OAAOkR,oBAAoBmH,SAE1C,CAKF,OAHAjc,uBAAsB,KACpB4D,OAAOsX,QAAQe,SAAU5X,MAAOiW,aAAcE,SAAS,IAElD5W,MACT,EA4ME2Y,UAzMF,SAAmBlY,MAAOiW,aAAcE,eACjB,IAAjBF,eACFA,cAAe,GAEjB,MAAM1W,OAASrE,MACT,QACJ0Q,QAAO,OACP7L,OAAM,UACNqW,WACE7W,OACJ,IAAKqM,SAAWrM,OAAOsH,UAAW,OAAOtH,YACpB,IAAVS,QACTA,MAAQT,OAAOQ,OAAOC,OAExB,IAAImY,SAAWpY,OAAOqO,eACO,SAAzBrO,OAAO0J,eAAsD,IAA1B1J,OAAOqO,gBAAwBrO,OAAOqY,qBAC3ED,SAAWzX,KAAKC,IAAIpB,OAAOmK,qBAAqB,WAAW,GAAO,IAEpE,MAAM2O,UAAY9Y,OAAOqK,YAAc7J,OAAOsO,mBAAqB,EAAI8J,SACjEzM,UAAYnM,OAAOoM,SAAW5L,OAAO4L,QAAQC,QACnD,GAAI7L,OAAOuK,KAAM,CACf,GAAI8L,YAAc1K,WAAa3L,OAAOuY,oBAAqB,OAAO,EAMlE,GALA/Y,OAAOyY,QAAQ,CACbrB,UAAW,SAGbpX,OAAOgZ,YAAchZ,OAAOU,UAAUqC,WAClC/C,OAAOqK,cAAgBrK,OAAO6J,OAAO3Q,OAAS,GAAKsH,OAAOkN,QAI5D,OAHAtR,uBAAsB,KACpB4D,OAAOsX,QAAQtX,OAAOqK,YAAcyO,UAAWrY,MAAOiW,aAAcE,SAAS,KAExE,CAEX,CACA,OAAIpW,OAAOsK,QAAU9K,OAAO6S,MACnB7S,OAAOsX,QAAQ,EAAG7W,MAAOiW,aAAcE,UAEzC5W,OAAOsX,QAAQtX,OAAOqK,YAAcyO,UAAWrY,MAAOiW,aAAcE,SAC7E,EAoKEqC,UAjKF,SAAmBxY,MAAOiW,aAAcE,eACjB,IAAjBF,eACFA,cAAe,GAEjB,MAAM1W,OAASrE,MACT,OACJ6E,OAAM,SACNgM,SAAQ,WACRC,WAAU,aACVT,aAAY,QACZK,QAAO,UACPwK,WACE7W,OACJ,IAAKqM,SAAWrM,OAAOsH,UAAW,OAAOtH,YACpB,IAAVS,QACTA,MAAQT,OAAOQ,OAAOC,OAExB,MAAM0L,UAAYnM,OAAOoM,SAAW5L,OAAO4L,QAAQC,QACnD,GAAI7L,OAAOuK,KAAM,CACf,GAAI8L,YAAc1K,WAAa3L,OAAOuY,oBAAqB,OAAO,EAClE/Y,OAAOyY,QAAQ,CACbrB,UAAW,SAGbpX,OAAOgZ,YAAchZ,OAAOU,UAAUqC,UACxC,CAEA,SAASmW,UAAUC,KACjB,OAAIA,IAAM,GAAWhY,KAAKuN,MAAMvN,KAAKyN,IAAIuK,MAClChY,KAAKuN,MAAMyK,IACpB,CACA,MAAM3B,oBAAsB0B,UALVlN,aAAehM,OAAOI,WAAaJ,OAAOI,WAMtDgZ,mBAAqB5M,SAAShP,KAAI2b,KAAOD,UAAUC,OACzD,IAAIE,SAAW7M,SAAS4M,mBAAmBja,QAAQqY,qBAAuB,GAC1E,QAAwB,IAAb6B,UAA4B7Y,OAAOkN,QAAS,CACrD,IAAI4L,cACJ9M,SAASxT,SAAQ,CAAC6W,KAAMI,aAClBuH,qBAAuB3H,OAEzByJ,cAAgBrJ,UAClB,SAE2B,IAAlBqJ,gBACTD,SAAW7M,SAAS8M,cAAgB,EAAIA,cAAgB,EAAIA,eAEhE,CACA,IAAIC,UAAY,EAShB,QARwB,IAAbF,WACTE,UAAY9M,WAAWtN,QAAQka,UAC3BE,UAAY,IAAGA,UAAYvZ,OAAOqK,YAAc,GACvB,SAAzB7J,OAAO0J,eAAsD,IAA1B1J,OAAOqO,gBAAwBrO,OAAOqY,qBAC3EU,UAAYA,UAAYvZ,OAAOmK,qBAAqB,YAAY,GAAQ,EACxEoP,UAAYpY,KAAKC,IAAImY,UAAW,KAGhC/Y,OAAOsK,QAAU9K,OAAO4S,YAAa,CACvC,MAAM4G,UAAYxZ,OAAOQ,OAAO4L,SAAWpM,OAAOQ,OAAO4L,QAAQC,SAAWrM,OAAOoM,QAAUpM,OAAOoM,QAAQvC,OAAO3Q,OAAS,EAAI8G,OAAO6J,OAAO3Q,OAAS,EACvJ,OAAO8G,OAAOsX,QAAQkC,UAAW/Y,MAAOiW,aAAcE,SACxD,CAAO,OAAIpW,OAAOuK,MAA+B,IAAvB/K,OAAOqK,aAAqB7J,OAAOkN,SAC3DtR,uBAAsB,KACpB4D,OAAOsX,QAAQiC,UAAW9Y,MAAOiW,aAAcE,SAAS,KAEnD,GAEF5W,OAAOsX,QAAQiC,UAAW9Y,MAAOiW,aAAcE,SACxD,EAiGE6C,WA9FF,SAAoBhZ,MAAOiW,aAAcE,eAClB,IAAjBF,eACFA,cAAe,GAEjB,MAAM1W,OAASrE,KACf,IAAIqE,OAAOsH,UAIX,YAHqB,IAAV7G,QACTA,MAAQT,OAAOQ,OAAOC,OAEjBT,OAAOsX,QAAQtX,OAAOqK,YAAa5J,MAAOiW,aAAcE,SACjE,EAqFE8C,eAlFF,SAAwBjZ,MAAOiW,aAAcE,SAAU+C,gBAChC,IAAjBjD,eACFA,cAAe,QAEC,IAAdiD,YACFA,UAAY,IAEd,MAAM3Z,OAASrE,KACf,GAAIqE,OAAOsH,UAAW,YACD,IAAV7G,QACTA,MAAQT,OAAOQ,OAAOC,OAExB,IAAI2H,MAAQpI,OAAOqK,YACnB,MAAM+K,KAAOjU,KAAKE,IAAIrB,OAAOQ,OAAOsO,mBAAoB1G,OAClD6H,UAAYmF,KAAOjU,KAAKuN,OAAOtG,MAAQgN,MAAQpV,OAAOQ,OAAOqO,gBAC7DzO,UAAYJ,OAAOgM,aAAehM,OAAOI,WAAaJ,OAAOI,UACnE,GAAIA,WAAaJ,OAAOwM,SAASyD,WAAY,CAG3C,MAAM2J,YAAc5Z,OAAOwM,SAASyD,WAEhC7P,UAAYwZ,aADC5Z,OAAOwM,SAASyD,UAAY,GACH2J,aAAeD,YACvDvR,OAASpI,OAAOQ,OAAOqO,eAE3B,KAAO,CAGL,MAAMwK,SAAWrZ,OAAOwM,SAASyD,UAAY,GAEzC7P,UAAYiZ,WADIrZ,OAAOwM,SAASyD,WACOoJ,UAAYM,YACrDvR,OAASpI,OAAOQ,OAAOqO,eAE3B,CAGA,OAFAzG,MAAQjH,KAAKC,IAAIgH,MAAO,GACxBA,MAAQjH,KAAKE,IAAI+G,MAAOpI,OAAOyM,WAAWvT,OAAS,GAC5C8G,OAAOsX,QAAQlP,MAAO3H,MAAOiW,aAAcE,SACpD,EA+CEZ,oBA7CF,WACE,MAAMhW,OAASrE,KACf,GAAIqE,OAAOsH,UAAW,OACtB,MAAM,OACJ9G,OAAM,SACNsL,UACE9L,OACEkK,cAAyC,SAAzB1J,OAAO0J,cAA2BlK,OAAOmK,uBAAyB3J,OAAO0J,cAC/F,IACIc,UADA6O,aAAe7Z,OAAO+V,aAE1B,MAAM+D,cAAgB9Z,OAAOuJ,UAAY,eAAiB,IAAI/I,OAAOgJ,aACrE,GAAIhJ,OAAOuK,KAAM,CACf,GAAI/K,OAAO6W,UAAW,OACtB7L,UAAYO,SAASvL,OAAO8V,aAAaP,aAAa,2BAA4B,IAC9E/U,OAAOiN,eACLoM,aAAe7Z,OAAO+Z,aAAe7P,cAAgB,GAAK2P,aAAe7Z,OAAO6J,OAAO3Q,OAAS8G,OAAO+Z,aAAe7P,cAAgB,GACxIlK,OAAOyY,UACPoB,aAAe7Z,OAAOga,cAAc,sBAAgBlO,SAAU,GAAGgO,0CAA0C9O,eAAe,IAC1H,gBAAS,KACPhL,OAAOsX,QAAQuC,aAAa,KAG9B7Z,OAAOsX,QAAQuC,cAERA,aAAe7Z,OAAO6J,OAAO3Q,OAASgR,eAC/ClK,OAAOyY,UACPoB,aAAe7Z,OAAOga,cAAc,sBAAgBlO,SAAU,GAAGgO,0CAA0C9O,eAAe,IAC1H,gBAAS,KACPhL,OAAOsX,QAAQuC,aAAa,KAG9B7Z,OAAOsX,QAAQuC,aAEnB,MACE7Z,OAAOsX,QAAQuC,aAEnB,GAoSA,IAAI9O,KAAO,CACTkP,WAzRF,SAAoBvB,gBAClB,MAAM1Y,OAASrE,MACT,OACJ6E,OAAM,SACNsL,UACE9L,OACJ,IAAKQ,OAAOuK,MAAQ/K,OAAOoM,SAAWpM,OAAOQ,OAAO4L,QAAQC,QAAS,OACrE,MAAMwB,WAAa,KACF,sBAAgB/B,SAAU,IAAItL,OAAOgJ,4BAC7CxQ,SAAQ,CAAC6D,GAAIuL,SAClBvL,GAAG1C,aAAa,0BAA2BiO,MAAM,GACjD,EAEEuF,YAAc3N,OAAOsK,MAAQ9J,OAAO8J,MAAQ9J,OAAO8J,KAAKC,KAAO,EAC/DsE,eAAiBrO,OAAOqO,gBAAkBlB,YAAcnN,OAAO8J,KAAKC,KAAO,GAC3E2P,gBAAkBla,OAAO6J,OAAO3Q,OAAS2V,gBAAmB,EAC5DsL,eAAiBxM,aAAe3N,OAAO6J,OAAO3Q,OAASsH,OAAO8J,KAAKC,MAAS,EAC5E6P,eAAiBC,iBACrB,IAAK,IAAIzb,EAAI,EAAGA,EAAIyb,eAAgBzb,GAAK,EAAG,CAC1C,MAAMkK,QAAU9I,OAAOuJ,UAAY,oBAAc,eAAgB,CAAC/I,OAAO8Z,kBAAoB,oBAAc,MAAO,CAAC9Z,OAAOgJ,WAAYhJ,OAAO8Z,kBAC7Ita,OAAO8L,SAASyO,OAAOzR,QACzB,GAEF,GAAIoR,gBAAiB,CACnB,GAAI1Z,OAAOga,mBAAoB,CAE7BJ,eADoBvL,eAAiB7O,OAAO6J,OAAO3Q,OAAS2V,gBAE5D7O,OAAOya,eACPza,OAAO0L,cACT,MACE3J,YAAY,mLAEd8L,YACF,MAAO,GAAIsM,eAAgB,CACzB,GAAI3Z,OAAOga,mBAAoB,CAE7BJ,eADoB5Z,OAAO8J,KAAKC,KAAOvK,OAAO6J,OAAO3Q,OAASsH,OAAO8J,KAAKC,MAE1EvK,OAAOya,eACPza,OAAO0L,cACT,MACE3J,YAAY,8KAEd8L,YACF,MACEA,aAEF7N,OAAOyY,QAAQ,CACbC,8BACAtB,UAAW5W,OAAOiN,oBAAiB/O,EAAY,QAEnD,EAwOE+Z,QAtOF,SAAiB3T,OACf,IAAI,eACF4T,eAAc,QACdpB,SAAU,EAAI,UACdF,UAAS,aACTjB,aAAY,iBACZb,iBAAgB,aAChBc,aAAY,aACZsE,mBACY,IAAV5V,MAAmB,CAAC,EAAIA,MAC5B,MAAM9E,OAASrE,KACf,IAAKqE,OAAOQ,OAAOuK,KAAM,OACzB/K,OAAOuI,KAAK,iBACZ,MAAM,OACJsB,OAAM,eACN+N,eAAc,eACdD,eAAc,SACd7L,SAAQ,OACRtL,QACER,QACE,eACJyN,gBACEjN,OAGJ,GAFAR,OAAO4X,gBAAiB,EACxB5X,OAAO2X,gBAAiB,EACpB3X,OAAOoM,SAAW5L,OAAO4L,QAAQC,QAanC,OAZIiL,UACG9W,OAAOiN,gBAAuC,IAArBzN,OAAOiQ,UAE1BzP,OAAOiN,gBAAkBzN,OAAOiQ,UAAYzP,OAAO0J,cAC5DlK,OAAOsX,QAAQtX,OAAOoM,QAAQvC,OAAO3Q,OAAS8G,OAAOiQ,UAAW,GAAG,GAAO,GACjEjQ,OAAOiQ,YAAcjQ,OAAOwM,SAAStT,OAAS,GACvD8G,OAAOsX,QAAQtX,OAAOoM,QAAQiD,aAAc,GAAG,GAAO,GAJtDrP,OAAOsX,QAAQtX,OAAOoM,QAAQvC,OAAO3Q,OAAQ,GAAG,GAAO,IAO3D8G,OAAO4X,eAAiBA,eACxB5X,OAAO2X,eAAiBA,oBACxB3X,OAAOuI,KAAK,WAGd,IAAI2B,cAAgB1J,OAAO0J,cACL,SAAlBA,cACFA,cAAgBlK,OAAOmK,wBAEvBD,cAAgB/I,KAAKiJ,KAAKlM,WAAWsC,OAAO0J,cAAe,KACvDuD,gBAAkBvD,cAAgB,GAAM,IAC1CA,eAAgC,IAGpC,MAAM2E,eAAiBrO,OAAOqY,mBAAqB3O,cAAgB1J,OAAOqO,eAC1E,IAAIkL,aAAelL,eACfkL,aAAelL,gBAAmB,IACpCkL,cAAgBlL,eAAiBkL,aAAelL,gBAElDkL,cAAgBvZ,OAAOma,qBACvB3a,OAAO+Z,aAAeA,aACtB,MAAMpM,YAAc3N,OAAOsK,MAAQ9J,OAAO8J,MAAQ9J,OAAO8J,KAAKC,KAAO,EACjEV,OAAO3Q,OAASgR,cAAgB6P,aAClChY,YAAY,6OACH4L,aAAoC,QAArBnN,OAAO8J,KAAKsQ,MACpC7Y,YAAY,2EAEd,MAAM8Y,qBAAuB,GACvBC,oBAAsB,GAC5B,IAAIzQ,YAAcrK,OAAOqK,iBACO,IAArBiL,iBACTA,iBAAmBtV,OAAOga,cAAcnQ,OAAO3K,QAAOrC,IAAMA,GAAGyF,UAAU2G,SAASzI,OAAO+T,oBAAmB,IAE5GlK,YAAciL,iBAEhB,MAAMyF,OAAuB,SAAd3D,YAAyBA,UAClC4D,OAAuB,SAAd5D,YAAyBA,UACxC,IAAI6D,gBAAkB,EAClBC,eAAiB,EACrB,MAAM3C,KAAO5K,YAAcxM,KAAKiJ,KAAKP,OAAO3Q,OAASsH,OAAO8J,KAAKC,MAAQV,OAAO3Q,OAE1EiiB,yBADiBxN,YAAc9D,OAAOyL,kBAAkB1K,OAAS0K,mBACrB7H,qBAA0C,IAAjB0I,cAAgCjM,cAAgB,EAAI,GAAM,GAErI,GAAIiR,wBAA0BpB,aAAc,CAC1CkB,gBAAkB9Z,KAAKC,IAAI2Y,aAAeoB,wBAAyBtM,gBACnE,IAAK,IAAIjQ,EAAI,EAAGA,EAAImb,aAAeoB,wBAAyBvc,GAAK,EAAG,CAClE,MAAMwJ,MAAQxJ,EAAIuC,KAAKuN,MAAM9P,EAAI2Z,MAAQA,KACzC,GAAI5K,YAAa,CACf,MAAMyN,kBAAoB7C,KAAOnQ,MAAQ,EACzC,IAAK,IAAIxJ,EAAIiL,OAAO3Q,OAAS,EAAG0F,GAAK,EAAGA,GAAK,EACvCiL,OAAOjL,GAAGgM,SAAWwQ,mBAAmBP,qBAAqBhX,KAAKjF,EAK1E,MACEic,qBAAqBhX,KAAK0U,KAAOnQ,MAAQ,EAE7C,CACF,MAAO,GAAI+S,wBAA0BjR,cAAgBqO,KAAOwB,aAAc,CACxEmB,eAAiB/Z,KAAKC,IAAI+Z,yBAA2B5C,KAAsB,EAAfwB,cAAmBlL,gBAC/E,IAAK,IAAIjQ,EAAI,EAAGA,EAAIsc,eAAgBtc,GAAK,EAAG,CAC1C,MAAMwJ,MAAQxJ,EAAIuC,KAAKuN,MAAM9P,EAAI2Z,MAAQA,KACrC5K,YACF9D,OAAO7Q,SAAQ,CAACiV,MAAOuB,cACjBvB,MAAMrD,SAAWxC,OAAO0S,oBAAoBjX,KAAK2L,WAAW,IAGlEsL,oBAAoBjX,KAAKuE,MAE7B,CACF,CA8BA,GA7BApI,OAAOqb,qBAAsB,EAC7Bjf,uBAAsB,KACpB4D,OAAOqb,qBAAsB,CAAK,IAEhCL,QACFH,qBAAqB7hB,SAAQoP,QAC3ByB,OAAOzB,OAAOkT,mBAAoB,EAClCxP,SAASyP,QAAQ1R,OAAOzB,QACxByB,OAAOzB,OAAOkT,mBAAoB,CAAK,IAGvCP,QACFD,oBAAoB9hB,SAAQoP,QAC1ByB,OAAOzB,OAAOkT,mBAAoB,EAClCxP,SAASyO,OAAO1Q,OAAOzB,QACvByB,OAAOzB,OAAOkT,mBAAoB,CAAK,IAG3Ctb,OAAOya,eACsB,SAAzBja,OAAO0J,cACTlK,OAAO0L,eACEiC,cAAgBkN,qBAAqB3hB,OAAS,GAAK8hB,QAAUF,oBAAoB5hB,OAAS,GAAK6hB,SACxG/a,OAAO6J,OAAO7Q,SAAQ,CAACiV,MAAOuB,cAC5BxP,OAAOsK,KAAK4D,YAAYsB,WAAYvB,MAAOjO,OAAO6J,OAAO,IAGzDrJ,OAAO+P,qBACTvQ,OAAOwQ,qBAEL8G,QACF,GAAIuD,qBAAqB3hB,OAAS,GAAK8hB,QACrC,QAA8B,IAAnBtC,eAAgC,CACzC,MAAM8C,sBAAwBxb,OAAOyM,WAAWpC,aAE1CoR,KADoBzb,OAAOyM,WAAWpC,YAAc4Q,iBACzBO,sBAC7Bd,aACF1a,OAAOmW,aAAanW,OAAOI,UAAYqb,OAEvCzb,OAAOsX,QAAQjN,YAAclJ,KAAKiJ,KAAK6Q,iBAAkB,GAAG,GAAO,GAC/D9E,eACFnW,OAAO0b,gBAAgBC,eAAiB3b,OAAO0b,gBAAgBC,eAAiBF,KAChFzb,OAAO0b,gBAAgBxF,iBAAmBlW,OAAO0b,gBAAgBxF,iBAAmBuF,MAG1F,MACE,GAAItF,aAAc,CAChB,MAAMyF,MAAQjO,YAAckN,qBAAqB3hB,OAASsH,OAAO8J,KAAKC,KAAOsQ,qBAAqB3hB,OAClG8G,OAAOsX,QAAQtX,OAAOqK,YAAcuR,MAAO,GAAG,GAAO,GACrD5b,OAAO0b,gBAAgBxF,iBAAmBlW,OAAOI,SACnD,OAEG,GAAI0a,oBAAoB5hB,OAAS,GAAK6hB,OAC3C,QAA8B,IAAnBrC,eAAgC,CACzC,MAAM8C,sBAAwBxb,OAAOyM,WAAWpC,aAE1CoR,KADoBzb,OAAOyM,WAAWpC,YAAc6Q,gBACzBM,sBAC7Bd,aACF1a,OAAOmW,aAAanW,OAAOI,UAAYqb,OAEvCzb,OAAOsX,QAAQjN,YAAc6Q,eAAgB,GAAG,GAAO,GACnD/E,eACFnW,OAAO0b,gBAAgBC,eAAiB3b,OAAO0b,gBAAgBC,eAAiBF,KAChFzb,OAAO0b,gBAAgBxF,iBAAmBlW,OAAO0b,gBAAgBxF,iBAAmBuF,MAG1F,KAAO,CACL,MAAMG,MAAQjO,YAAcmN,oBAAoB5hB,OAASsH,OAAO8J,KAAKC,KAAOuQ,oBAAoB5hB,OAChG8G,OAAOsX,QAAQtX,OAAOqK,YAAcuR,MAAO,GAAG,GAAO,EACvD,CAKJ,GAFA5b,OAAO4X,eAAiBA,eACxB5X,OAAO2X,eAAiBA,eACpB3X,OAAO6b,YAAc7b,OAAO6b,WAAWC,UAAY1F,aAAc,CACnE,MAAM2F,WAAa,CACjBrD,8BACAtB,oBACAjB,0BACAb,kCACAc,cAAc,GAEZ5T,MAAMC,QAAQzC,OAAO6b,WAAWC,SAClC9b,OAAO6b,WAAWC,QAAQ9iB,SAAQ2J,KAC3BA,EAAE2E,WAAa3E,EAAEnC,OAAOuK,MAAMpI,EAAE8V,QAAQ,IACxCsD,WACHzE,QAAS3U,EAAEnC,OAAO0J,gBAAkB1J,OAAO0J,eAAgBoN,SAC3D,IAEKtX,OAAO6b,WAAWC,mBAAmB9b,OAAOtH,aAAesH,OAAO6b,WAAWC,QAAQtb,OAAOuK,MACrG/K,OAAO6b,WAAWC,QAAQrD,QAAQ,IAC7BsD,WACHzE,QAAStX,OAAO6b,WAAWC,QAAQtb,OAAO0J,gBAAkB1J,OAAO0J,eAAgBoN,SAGzF,CACAtX,OAAOuI,KAAK,UACd,EA4BEyT,YA1BF,WACE,MACM,OACJxb,OAAM,SACNsL,UAHanQ,KAKf,IAAK6E,OAAOuK,MALGpP,KAKYyQ,SALZzQ,KAK8B6E,OAAO4L,QAAQC,QAAS,OALtD1Q,KAMR8e,eACP,MAAMwB,eAAiB,GAPRtgB,KAQRkO,OAAO7Q,SAAQ8P,UACpB,MAAMV,WAA4C,IAA7BU,QAAQoT,iBAAqF,EAAlDpT,QAAQyM,aAAa,2BAAiCzM,QAAQoT,iBAC9HD,eAAe7T,OAASU,OAAO,IAVlBnN,KAYRkO,OAAO7Q,SAAQ8P,UACpBA,QAAQgB,gBAAgB,0BAA0B,IAEpDmS,eAAejjB,SAAQ8P,UACrBgD,SAASyO,OAAOzR,QAAQ,IAhBXnN,KAkBR8e,eAlBQ9e,KAmBR2b,QAnBQ3b,KAmBOqP,UAAW,EACnC,GA6DA,SAASmR,iBAAiBnc,OAAQwH,MAAO4U,QACvC,MAAM3f,OAAS,4BACT,OACJ+D,QACER,OACEqc,mBAAqB7b,OAAO6b,mBAC5BC,mBAAqB9b,OAAO8b,mBAClC,OAAID,sBAAuBD,QAAUE,oBAAsBF,QAAU3f,OAAO8f,WAAaD,qBAC5D,YAAvBD,qBACF7U,MAAMgV,kBACC,EAKb,CACA,SAASC,aAAajV,OACpB,MAAMxH,OAASrE,KACTV,SAAW,6BACjB,IAAIiJ,EAAIsD,MACJtD,EAAEwY,gBAAexY,EAAIA,EAAEwY,eAC3B,MAAMlU,KAAOxI,OAAO0b,gBACpB,GAAe,gBAAXxX,EAAEyY,KAAwB,CAC5B,GAAuB,OAAnBnU,KAAKoU,WAAsBpU,KAAKoU,YAAc1Y,EAAE0Y,UAClD,OAEFpU,KAAKoU,UAAY1Y,EAAE0Y,SACrB,KAAsB,eAAX1Y,EAAEyY,MAAoD,IAA3BzY,EAAE2Y,cAAc3jB,SACpDsP,KAAKsU,QAAU5Y,EAAE2Y,cAAc,GAAGE,YAEpC,GAAe,eAAX7Y,EAAEyY,KAGJ,YADAR,iBAAiBnc,OAAQkE,EAAGA,EAAE2Y,cAAc,GAAGG,OAGjD,MAAM,OACJxc,OAAM,QACNyc,QAAO,QACP5Q,SACErM,OACJ,IAAKqM,QAAS,OACd,IAAK7L,OAAO0c,eAAmC,UAAlBhZ,EAAEiZ,YAAyB,OACxD,GAAInd,OAAO6W,WAAarW,OAAOsW,+BAC7B,QAEG9W,OAAO6W,WAAarW,OAAOkN,SAAWlN,OAAOuK,MAChD/K,OAAOyY,UAET,IAAI2E,SAAWlZ,EAAErL,OACjB,GAAiC,YAA7B2H,OAAO6c,oBACJrd,OAAOU,UAAUuI,SAASmU,UAAW,OAE5C,GAAI,UAAWlZ,GAAiB,IAAZA,EAAEoZ,MAAa,OACnC,GAAI,WAAYpZ,GAAKA,EAAEqZ,OAAS,EAAG,OACnC,GAAI/U,KAAKgV,WAAahV,KAAKiV,QAAS,OAGpC,MAAMC,uBAAyBld,OAAOmd,gBAA4C,KAA1Bnd,OAAOmd,eAEzDC,UAAY1Z,EAAE2Z,aAAe3Z,EAAE2Z,eAAiB3Z,EAAEyR,KACpD+H,sBAAwBxZ,EAAErL,QAAUqL,EAAErL,OAAO8Q,YAAciU,YAC7DR,SAAWQ,UAAU,IAEvB,MAAME,kBAAoBtd,OAAOsd,kBAAoBtd,OAAOsd,kBAAoB,IAAItd,OAAOmd,iBACrFI,kBAAoB7Z,EAAErL,SAAUqL,EAAErL,OAAO8Q,YAG/C,GAAInJ,OAAOwd,YAAcD,eAlF3B,SAAwBlc,SAAUoc,MAahC,YAZa,IAATA,OACFA,KAAOtiB,MAET,SAASuiB,cAAcrhB,IACrB,IAAKA,IAAMA,KAAO,8BAAiBA,KAAO,2BAAa,OAAO,KAC1DA,GAAGshB,eAActhB,GAAKA,GAAGshB,cAC7B,MAAMC,MAAQvhB,GAAGyM,QAAQzH,UACzB,OAAKuc,OAAUvhB,GAAGwhB,YAGXD,OAASF,cAAcrhB,GAAGwhB,cAAc5jB,MAFtC,IAGX,CACOyjB,CAAcD,KACvB,CAoE4CK,CAAeR,kBAAmBV,UAAYA,SAAS9T,QAAQwU,oBAEvG,YADA9d,OAAOue,YAAa,GAGtB,GAAI/d,OAAOge,eACJpB,SAAS9T,QAAQ9I,OAAOge,cAAe,OAE9CvB,QAAQwB,SAAWva,EAAE8Y,MACrBC,QAAQyB,SAAWxa,EAAEya,MACrB,MAAMvC,OAASa,QAAQwB,SACjBG,OAAS3B,QAAQyB,SAIvB,IAAKvC,iBAAiBnc,OAAQkE,EAAGkY,QAC/B,OAEFzjB,OAAO8S,OAAOjD,KAAM,CAClBgV,WAAW,EACXC,SAAS,EACToB,qBAAqB,EACrBC,iBAAapgB,EACbqgB,iBAAargB,IAEfue,QAAQb,OAASA,OACjBa,QAAQ2B,OAASA,OACjBpW,KAAKwW,eAAiB,YACtBhf,OAAOue,YAAa,EACpBve,OAAOkL,aACPlL,OAAOif,oBAAiBvgB,EACpB8B,OAAOmZ,UAAY,IAAGnR,KAAK0W,oBAAqB,GACpD,IAAI1C,gBAAiB,EACjBY,SAAStb,QAAQ0G,KAAK2W,qBACxB3C,gBAAiB,EACS,WAAtBY,SAAS3jB,WACX+O,KAAKgV,WAAY,IAGjBviB,SAAS1B,eAAiB0B,SAAS1B,cAAcuI,QAAQ0G,KAAK2W,oBAAsBlkB,SAAS1B,gBAAkB6jB,UACjHniB,SAAS1B,cAAcC,OAEzB,MAAM4lB,qBAAuB5C,gBAAkBxc,OAAOqf,gBAAkB7e,OAAO8e,0BAC1E9e,OAAO+e,gCAAiCH,sBAA0BhC,SAASoC,mBAC9Etb,EAAEsY,iBAEAhc,OAAOif,UAAYjf,OAAOif,SAASpT,SAAWrM,OAAOyf,UAAYzf,OAAO6W,YAAcrW,OAAOkN,SAC/F1N,OAAOyf,SAAShD,eAElBzc,OAAOuI,KAAK,aAAcrE,EAC5B,CAEA,SAASwb,YAAYlY,OACnB,MAAMvM,SAAW,6BACX+E,OAASrE,KACT6M,KAAOxI,OAAO0b,iBACd,OACJlb,OAAM,QACNyc,QACAjR,aAAcC,IAAG,QACjBI,SACErM,OACJ,IAAKqM,QAAS,OACd,IAAK7L,OAAO0c,eAAuC,UAAtB1V,MAAM2V,YAAyB,OAC5D,IAOIwC,YAPAzb,EAAIsD,MAER,GADItD,EAAEwY,gBAAexY,EAAIA,EAAEwY,eACZ,gBAAXxY,EAAEyY,KAAwB,CAC5B,GAAqB,OAAjBnU,KAAKsU,QAAkB,OAE3B,GADW5Y,EAAE0Y,YACFpU,KAAKoU,UAAW,MAC7B,CAEA,GAAe,cAAX1Y,EAAEyY,MAEJ,GADAgD,YAAc,IAAIzb,EAAE0b,gBAAgB1gB,QAAO6Y,GAAKA,EAAEgF,aAAevU,KAAKsU,UAAS,IAC1E6C,aAAeA,YAAY5C,aAAevU,KAAKsU,QAAS,YAE7D6C,YAAczb,EAEhB,IAAKsE,KAAKgV,UAIR,YAHIhV,KAAKuW,aAAevW,KAAKsW,aAC3B9e,OAAOuI,KAAK,oBAAqBrE,IAIrC,MAAM8Y,MAAQ2C,YAAY3C,MACpB2B,MAAQgB,YAAYhB,MAC1B,GAAIza,EAAE2b,wBAGJ,OAFA5C,QAAQb,OAASY,WACjBC,QAAQ2B,OAASD,OAGnB,IAAK3e,OAAOqf,eAaV,OAZKnb,EAAErL,OAAOiJ,QAAQ0G,KAAK2W,qBACzBnf,OAAOue,YAAa,QAElB/V,KAAKgV,YACP7kB,OAAO8S,OAAOwR,QAAS,CACrBb,OAAQY,MACR4B,OAAQD,MACRF,SAAUzB,MACV0B,SAAUC,QAEZnW,KAAKwW,eAAiB,cAI1B,GAAIxe,OAAOsf,sBAAwBtf,OAAOuK,KACxC,GAAI/K,OAAOsL,cAET,GAAIqT,MAAQ1B,QAAQ2B,QAAU5e,OAAOI,WAAaJ,OAAO2S,gBAAkBgM,MAAQ1B,QAAQ2B,QAAU5e,OAAOI,WAAaJ,OAAO+R,eAG9H,OAFAvJ,KAAKgV,WAAY,OACjBhV,KAAKiV,SAAU,QAGZ,GAAIT,MAAQC,QAAQb,QAAUpc,OAAOI,WAAaJ,OAAO2S,gBAAkBqK,MAAQC,QAAQb,QAAUpc,OAAOI,WAAaJ,OAAO+R,eACrI,OAGJ,GAAI9W,SAAS1B,eACP2K,EAAErL,SAAWoC,SAAS1B,eAAiB2K,EAAErL,OAAOiJ,QAAQ0G,KAAK2W,mBAG/D,OAFA3W,KAAKiV,SAAU,OACfzd,OAAOue,YAAa,GAIpB/V,KAAKqW,qBACP7e,OAAOuI,KAAK,YAAarE,GAE3B+Y,QAAQ8C,UAAY9C,QAAQwB,SAC5BxB,QAAQ+C,UAAY/C,QAAQyB,SAC5BzB,QAAQwB,SAAWzB,MACnBC,QAAQyB,SAAWC,MACnB,MAAMsB,MAAQhD,QAAQwB,SAAWxB,QAAQb,OACnC8D,MAAQjD,QAAQyB,SAAWzB,QAAQ2B,OACzC,GAAI5e,OAAOQ,OAAOmZ,WAAaxY,KAAKgf,KAAKF,OAAS,EAAIC,OAAS,GAAKlgB,OAAOQ,OAAOmZ,UAAW,OAC7F,QAAgC,IAArBnR,KAAKsW,YAA6B,CAC3C,IAAIsB,WACApgB,OAAOqL,gBAAkB4R,QAAQyB,WAAazB,QAAQ2B,QAAU5e,OAAOsL,cAAgB2R,QAAQwB,WAAaxB,QAAQb,OACtH5T,KAAKsW,aAAc,EAGfmB,MAAQA,MAAQC,MAAQA,OAAS,KACnCE,WAA4D,IAA/Cjf,KAAKkf,MAAMlf,KAAKyN,IAAIsR,OAAQ/e,KAAKyN,IAAIqR,QAAgB9e,KAAKK,GACvEgH,KAAKsW,YAAc9e,OAAOqL,eAAiB+U,WAAa5f,OAAO4f,WAAa,GAAKA,WAAa5f,OAAO4f,WAG3G,CASA,GARI5X,KAAKsW,aACP9e,OAAOuI,KAAK,oBAAqBrE,QAEH,IAArBsE,KAAKuW,cACV9B,QAAQwB,WAAaxB,QAAQb,QAAUa,QAAQyB,WAAazB,QAAQ2B,SACtEpW,KAAKuW,aAAc,IAGnBvW,KAAKsW,aAA0B,cAAX5a,EAAEyY,MAAwBnU,KAAK8X,gCAErD,YADA9X,KAAKgV,WAAY,GAGnB,IAAKhV,KAAKuW,YACR,OAEF/e,OAAOue,YAAa,GACf/d,OAAOkN,SAAWxJ,EAAEqc,YACvBrc,EAAEsY,iBAEAhc,OAAOggB,2BAA6BhgB,OAAOigB,QAC7Cvc,EAAEwc,kBAEJ,IAAIjF,KAAOzb,OAAOqL,eAAiB4U,MAAQC,MACvCS,YAAc3gB,OAAOqL,eAAiB4R,QAAQwB,SAAWxB,QAAQ8C,UAAY9C,QAAQyB,SAAWzB,QAAQ+C,UACxGxf,OAAOogB,iBACTnF,KAAOta,KAAKyN,IAAI6M,OAASxP,IAAM,GAAK,GACpC0U,YAAcxf,KAAKyN,IAAI+R,cAAgB1U,IAAM,GAAK,IAEpDgR,QAAQxB,KAAOA,KACfA,MAAQjb,OAAOqgB,WACX5U,MACFwP,MAAQA,KACRkF,aAAeA,aAEjB,MAAMG,qBAAuB9gB,OAAO+gB,iBACpC/gB,OAAOif,eAAiBxD,KAAO,EAAI,OAAS,OAC5Czb,OAAO+gB,iBAAmBJ,YAAc,EAAI,OAAS,OACrD,MAAMK,OAAShhB,OAAOQ,OAAOuK,OAASvK,OAAOkN,QACvCuT,aAA2C,SAA5BjhB,OAAO+gB,kBAA+B/gB,OAAO2X,gBAA8C,SAA5B3X,OAAO+gB,kBAA+B/gB,OAAO4X,eACjI,IAAKpP,KAAKiV,QAAS,CAQjB,GAPIuD,QAAUC,cACZjhB,OAAOyY,QAAQ,CACbrB,UAAWpX,OAAOif,iBAGtBzW,KAAKmT,eAAiB3b,OAAOpD,eAC7BoD,OAAOgR,cAAc,GACjBhR,OAAO6W,UAAW,CACpB,MAAMqK,IAAM,IAAIzkB,OAAOf,YAAY,gBAAiB,CAClDylB,SAAS,EACTZ,YAAY,EACZa,OAAQ,CACNC,mBAAmB,KAGvBrhB,OAAOU,UAAU4gB,cAAcJ,IACjC,CACA1Y,KAAK+Y,qBAAsB,GAEvB/gB,OAAOghB,aAAyC,IAA1BxhB,OAAO2X,iBAAqD,IAA1B3X,OAAO4X,gBACjE5X,OAAOyhB,eAAc,GAEvBzhB,OAAOuI,KAAK,kBAAmBrE,EACjC,CAGA,IADA,IAAInI,MAAOkF,UACPuH,KAAKiV,SAAWjV,KAAK0W,oBAAsB4B,uBAAyB9gB,OAAO+gB,kBAAoBC,QAAUC,cAAgB9f,KAAKyN,IAAI6M,OAAS,EAU7I,OATA9iB,OAAO8S,OAAOwR,QAAS,CACrBb,OAAQY,MACR4B,OAAQD,MACRF,SAAUzB,MACV0B,SAAUC,MACVhD,eAAgBnT,KAAK0N,mBAEvB1N,KAAKkZ,eAAgB,OACrBlZ,KAAKmT,eAAiBnT,KAAK0N,kBAG7BlW,OAAOuI,KAAK,aAAcrE,GAC1BsE,KAAKiV,SAAU,EACfjV,KAAK0N,iBAAmBuF,KAAOjT,KAAKmT,eACpC,IAAIgG,qBAAsB,EACtBC,gBAAkBphB,OAAOohB,gBAiD7B,GAhDIphB,OAAOsf,sBACT8B,gBAAkB,GAEhBnG,KAAO,GACLuF,QAAUC,cAA8BzY,KAAK0W,oBAAsB1W,KAAK0N,kBAAoB1V,OAAOiN,eAAiBzN,OAAO+R,eAAiB/R,OAAO0M,gBAAgB1M,OAAOqK,YAAc,GAAKrK,OAAO+R,iBACtM/R,OAAOyY,QAAQ,CACbrB,UAAW,OACXjB,cAAc,EACdb,iBAAkB,IAGlB9M,KAAK0N,iBAAmBlW,OAAO+R,iBACjC4P,qBAAsB,EAClBnhB,OAAOqhB,aACTrZ,KAAK0N,iBAAmBlW,OAAO+R,eAAiB,IAAM/R,OAAO+R,eAAiBvJ,KAAKmT,eAAiBF,OAASmG,mBAGxGnG,KAAO,IACZuF,QAAUC,cAA8BzY,KAAK0W,oBAAsB1W,KAAK0N,kBAAoB1V,OAAOiN,eAAiBzN,OAAO2S,eAAiB3S,OAAO0M,gBAAgB1M,OAAO0M,gBAAgBxT,OAAS,GAAK8G,OAAO2S,iBACjN3S,OAAOyY,QAAQ,CACbrB,UAAW,OACXjB,cAAc,EACdb,iBAAkBtV,OAAO6J,OAAO3Q,QAAmC,SAAzBsH,OAAO0J,cAA2BlK,OAAOmK,uBAAyBhJ,KAAKiJ,KAAKlM,WAAWsC,OAAO0J,cAAe,QAGvJ1B,KAAK0N,iBAAmBlW,OAAO2S,iBACjCgP,qBAAsB,EAClBnhB,OAAOqhB,aACTrZ,KAAK0N,iBAAmBlW,OAAO2S,eAAiB,GAAK3S,OAAO2S,eAAiBnK,KAAKmT,eAAiBF,OAASmG,mBAI9GD,sBACFzd,EAAE2b,yBAA0B,IAIzB7f,OAAO2X,gBAA4C,SAA1B3X,OAAOif,gBAA6BzW,KAAK0N,iBAAmB1N,KAAKmT,iBAC7FnT,KAAK0N,iBAAmB1N,KAAKmT,iBAE1B3b,OAAO4X,gBAA4C,SAA1B5X,OAAOif,gBAA6BzW,KAAK0N,iBAAmB1N,KAAKmT,iBAC7FnT,KAAK0N,iBAAmB1N,KAAKmT,gBAE1B3b,OAAO4X,gBAAmB5X,OAAO2X,iBACpCnP,KAAK0N,iBAAmB1N,KAAKmT,gBAI3Bnb,OAAOmZ,UAAY,EAAG,CACxB,KAAIxY,KAAKyN,IAAI6M,MAAQjb,OAAOmZ,WAAanR,KAAK0W,oBAW5C,YADA1W,KAAK0N,iBAAmB1N,KAAKmT,gBAT7B,IAAKnT,KAAK0W,mBAMR,OALA1W,KAAK0W,oBAAqB,EAC1BjC,QAAQb,OAASa,QAAQwB,SACzBxB,QAAQ2B,OAAS3B,QAAQyB,SACzBlW,KAAK0N,iBAAmB1N,KAAKmT,oBAC7BsB,QAAQxB,KAAOzb,OAAOqL,eAAiB4R,QAAQwB,SAAWxB,QAAQb,OAASa,QAAQyB,SAAWzB,QAAQ2B,OAO5G,CACKpe,OAAOshB,eAAgBthB,OAAOkN,WAG/BlN,OAAOif,UAAYjf,OAAOif,SAASpT,SAAWrM,OAAOyf,UAAYjf,OAAO+P,uBAC1EvQ,OAAO2U,oBACP3U,OAAO0T,uBAELlT,OAAOif,UAAYjf,OAAOif,SAASpT,SAAWrM,OAAOyf,UACvDzf,OAAOyf,SAASC,cAGlB1f,OAAOwS,eAAehK,KAAK0N,kBAE3BlW,OAAOmW,aAAa3N,KAAK0N,kBAC3B,CAEA,SAAS6L,WAAWva,OAClB,MAAMxH,OAASrE,KACT6M,KAAOxI,OAAO0b,gBACpB,IAEIiE,YAFAzb,EAAIsD,MACJtD,EAAEwY,gBAAexY,EAAIA,EAAEwY,eAG3B,GADgC,aAAXxY,EAAEyY,MAAkC,gBAAXzY,EAAEyY,MAO9C,GADAgD,YAAc,IAAIzb,EAAE0b,gBAAgB1gB,QAAO6Y,GAAKA,EAAEgF,aAAevU,KAAKsU,UAAS,IAC1E6C,aAAeA,YAAY5C,aAAevU,KAAKsU,QAAS,WAN5C,CACjB,GAAqB,OAAjBtU,KAAKsU,QAAkB,OAC3B,GAAI5Y,EAAE0Y,YAAcpU,KAAKoU,UAAW,OACpC+C,YAAczb,CAChB,CAIA,GAAI,CAAC,gBAAiB,aAAc,eAAgB,eAAemC,SAASnC,EAAEyY,MAAO,CAEnF,KADgB,CAAC,gBAAiB,eAAetW,SAASnC,EAAEyY,QAAU3c,OAAOqE,QAAQ6B,UAAYlG,OAAOqE,QAAQqC,YAE9G,MAEJ,CACA8B,KAAKoU,UAAY,KACjBpU,KAAKsU,QAAU,KACf,MAAM,OACJtc,OAAM,QACNyc,QACAjR,aAAcC,IAAG,WACjBQ,WAAU,QACVJ,SACErM,OACJ,IAAKqM,QAAS,OACd,IAAK7L,OAAO0c,eAAmC,UAAlBhZ,EAAEiZ,YAAyB,OAKxD,GAJI3U,KAAKqW,qBACP7e,OAAOuI,KAAK,WAAYrE,GAE1BsE,KAAKqW,qBAAsB,GACtBrW,KAAKgV,UAMR,OALIhV,KAAKiV,SAAWjd,OAAOghB,YACzBxhB,OAAOyhB,eAAc,GAEvBjZ,KAAKiV,SAAU,OACfjV,KAAKuW,aAAc,GAKjBve,OAAOghB,YAAchZ,KAAKiV,SAAWjV,KAAKgV,aAAwC,IAA1Bxd,OAAO2X,iBAAqD,IAA1B3X,OAAO4X,iBACnG5X,OAAOyhB,eAAc,GAIvB,MAAMO,aAAe,YACfC,SAAWD,aAAexZ,KAAKwW,eAGrC,GAAIhf,OAAOue,WAAY,CACrB,MAAM2D,SAAWhe,EAAEyR,MAAQzR,EAAE2Z,cAAgB3Z,EAAE2Z,eAC/C7d,OAAO0V,mBAAmBwM,UAAYA,SAAS,IAAMhe,EAAErL,OAAQqpB,UAC/DliB,OAAOuI,KAAK,YAAarE,GACrB+d,SAAW,KAAOD,aAAexZ,KAAK2Z,cAAgB,KACxDniB,OAAOuI,KAAK,wBAAyBrE,EAEzC,CAKA,GAJAsE,KAAK2Z,cAAgB,YACrB,gBAAS,KACFniB,OAAOsH,YAAWtH,OAAOue,YAAa,EAAI,KAE5C/V,KAAKgV,YAAchV,KAAKiV,UAAYzd,OAAOif,gBAAmC,IAAjBhC,QAAQxB,OAAejT,KAAKkZ,eAAiBlZ,KAAK0N,mBAAqB1N,KAAKmT,iBAAmBnT,KAAKkZ,cAIpK,OAHAlZ,KAAKgV,WAAY,EACjBhV,KAAKiV,SAAU,OACfjV,KAAKuW,aAAc,GAMrB,IAAIqD,WAMJ,GATA5Z,KAAKgV,WAAY,EACjBhV,KAAKiV,SAAU,EACfjV,KAAKuW,aAAc,EAGjBqD,WADE5hB,OAAOshB,aACI7V,IAAMjM,OAAOI,WAAaJ,OAAOI,WAEhCoI,KAAK0N,iBAEjB1V,OAAOkN,QACT,OAEF,GAAIlN,OAAOif,UAAYjf,OAAOif,SAASpT,QAIrC,YAHArM,OAAOyf,SAASsC,WAAW,CACzBK,wBAMJ,MAAMC,YAAcD,aAAepiB,OAAO2S,iBAAmB3S,OAAOQ,OAAOuK,KAC3E,IAAIuX,UAAY,EACZ/S,UAAYvP,OAAO0M,gBAAgB,GACvC,IAAK,IAAI9N,EAAI,EAAGA,EAAI6N,WAAWvT,OAAQ0F,GAAKA,EAAI4B,OAAOsO,mBAAqB,EAAItO,OAAOqO,eAAgB,CACrG,MAAMiK,UAAYla,EAAI4B,OAAOsO,mBAAqB,EAAI,EAAItO,OAAOqO,oBACxB,IAA9BpC,WAAW7N,EAAIka,YACpBuJ,aAAeD,YAAc3V,WAAW7N,IAAMwjB,WAAa3V,WAAW7N,EAAIka,cAC5EwJ,UAAY1jB,EACZ2Q,UAAY9C,WAAW7N,EAAIka,WAAarM,WAAW7N,KAE5CyjB,aAAeD,YAAc3V,WAAW7N,MACjD0jB,UAAY1jB,EACZ2Q,UAAY9C,WAAWA,WAAWvT,OAAS,GAAKuT,WAAWA,WAAWvT,OAAS,GAEnF,CACA,IAAIqpB,iBAAmB,KACnBC,gBAAkB,KAClBhiB,OAAOsK,SACL9K,OAAO4S,YACT4P,gBAAkBhiB,OAAO4L,SAAW5L,OAAO4L,QAAQC,SAAWrM,OAAOoM,QAAUpM,OAAOoM,QAAQvC,OAAO3Q,OAAS,EAAI8G,OAAO6J,OAAO3Q,OAAS,EAChI8G,OAAO6S,QAChB0P,iBAAmB,IAIvB,MAAME,OAASL,WAAa3V,WAAW6V,YAAc/S,UAC/CuJ,UAAYwJ,UAAY9hB,OAAOsO,mBAAqB,EAAI,EAAItO,OAAOqO,eACzE,GAAIoT,SAAWzhB,OAAOkiB,aAAc,CAElC,IAAKliB,OAAOmiB,WAEV,YADA3iB,OAAOsX,QAAQtX,OAAOqK,aAGM,SAA1BrK,OAAOif,iBACLwD,OAASjiB,OAAOoiB,gBAAiB5iB,OAAOsX,QAAQ9W,OAAOsK,QAAU9K,OAAO6S,MAAQ0P,iBAAmBD,UAAYxJ,WAAgB9Y,OAAOsX,QAAQgL,YAEtH,SAA1BtiB,OAAOif,iBACLwD,MAAQ,EAAIjiB,OAAOoiB,gBACrB5iB,OAAOsX,QAAQgL,UAAYxJ,WACE,OAApB0J,iBAA4BC,MAAQ,GAAKthB,KAAKyN,IAAI6T,OAASjiB,OAAOoiB,gBAC3E5iB,OAAOsX,QAAQkL,iBAEfxiB,OAAOsX,QAAQgL,WAGrB,KAAO,CAEL,IAAK9hB,OAAOqiB,YAEV,YADA7iB,OAAOsX,QAAQtX,OAAOqK,aAGErK,OAAO8iB,aAAe5e,EAAErL,SAAWmH,OAAO8iB,WAAWC,QAAU7e,EAAErL,SAAWmH,OAAO8iB,WAAWE,QAQ7G9e,EAAErL,SAAWmH,OAAO8iB,WAAWC,OACxC/iB,OAAOsX,QAAQgL,UAAYxJ,WAE3B9Y,OAAOsX,QAAQgL,YATe,SAA1BtiB,OAAOif,gBACTjf,OAAOsX,QAA6B,OAArBiL,iBAA4BA,iBAAmBD,UAAYxJ,WAE9C,SAA1B9Y,OAAOif,gBACTjf,OAAOsX,QAA4B,OAApBkL,gBAA2BA,gBAAkBF,WAOlE,CACF,CAEA,SAASW,WACP,MAAMjjB,OAASrE,MACT,OACJ6E,OAAM,GACN3D,IACEmD,OACJ,GAAInD,IAAyB,IAAnBA,GAAGoH,YAAmB,OAG5BzD,OAAOwN,aACThO,OAAOkjB,gBAIT,MAAM,eACJvL,eAAc,eACdC,eAAc,SACdpL,UACExM,OACEmM,UAAYnM,OAAOoM,SAAWpM,OAAOQ,OAAO4L,QAAQC,QAG1DrM,OAAO2X,gBAAiB,EACxB3X,OAAO4X,gBAAiB,EACxB5X,OAAOkL,aACPlL,OAAO0L,eACP1L,OAAO0T,sBACP,MAAMyP,cAAgBhX,WAAa3L,OAAOuK,OACZ,SAAzBvK,OAAO0J,eAA4B1J,OAAO0J,cAAgB,KAAMlK,OAAO6S,OAAU7S,OAAO4S,aAAgB5S,OAAOQ,OAAOiN,gBAAmB0V,cAGxInjB,OAAOQ,OAAOuK,OAASoB,UACzBnM,OAAOoY,YAAYpY,OAAOgL,UAAW,GAAG,GAAO,GAE/ChL,OAAOsX,QAAQtX,OAAOqK,YAAa,GAAG,GAAO,GAL/CrK,OAAOsX,QAAQtX,OAAO6J,OAAO3Q,OAAS,EAAG,GAAG,GAAO,GAQjD8G,OAAOojB,UAAYpjB,OAAOojB,SAASC,SAAWrjB,OAAOojB,SAASE,SAChEpnB,aAAa8D,OAAOojB,SAASG,eAC7BvjB,OAAOojB,SAASG,cAAgBtnB,YAAW,KACrC+D,OAAOojB,UAAYpjB,OAAOojB,SAASC,SAAWrjB,OAAOojB,SAASE,QAChEtjB,OAAOojB,SAASI,QAClB,GACC,MAGLxjB,OAAO4X,eAAiBA,eACxB5X,OAAO2X,eAAiBA,eACpB3X,OAAOQ,OAAO6P,eAAiB7D,WAAaxM,OAAOwM,UACrDxM,OAAOsQ,eAEX,CAEA,SAASmT,QAAQvf,GACf,MAAMlE,OAASrE,KACVqE,OAAOqM,UACPrM,OAAOue,aACNve,OAAOQ,OAAOkjB,eAAexf,EAAEsY,iBAC/Bxc,OAAOQ,OAAOmjB,0BAA4B3jB,OAAO6W,YACnD3S,EAAEwc,kBACFxc,EAAE0f,6BAGR,CAEA,SAASC,WACP,MAAM7jB,OAASrE,MACT,UACJ+E,UAAS,aACTsL,aAAY,QACZK,SACErM,OACJ,IAAKqM,QAAS,OAWd,IAAIgK,YAVJrW,OAAOwW,kBAAoBxW,OAAOI,UAC9BJ,OAAOqL,eACTrL,OAAOI,WAAaM,UAAUwC,WAE9BlD,OAAOI,WAAaM,UAAUsC,UAGP,IAArBhD,OAAOI,YAAiBJ,OAAOI,UAAY,GAC/CJ,OAAO2U,oBACP3U,OAAO0T,sBAEP,MAAMhB,eAAiB1S,OAAO2S,eAAiB3S,OAAO+R,eAEpDsE,YADqB,IAAnB3D,eACY,GAEC1S,OAAOI,UAAYJ,OAAO+R,gBAAkBW,eAEzD2D,cAAgBrW,OAAOkB,UACzBlB,OAAOwS,eAAexG,cAAgBhM,OAAOI,UAAYJ,OAAOI,WAElEJ,OAAOuI,KAAK,eAAgBvI,OAAOI,WAAW,EAChD,CAEA,SAAS0jB,OAAO5f,GAEdkF,qBADezN,KACcuI,EAAErL,QADhB8C,KAEJ6E,OAAOkN,SAA2C,SAF9C/R,KAEqB6E,OAAO0J,gBAF5BvO,KAEgE6E,OAAOiT,YAFvE9X,KAKRsP,QACT,CAEA,SAAS8Y,uBACP,MAAM/jB,OAASrE,KACXqE,OAAOgkB,gCACXhkB,OAAOgkB,+BAAgC,EACnChkB,OAAOQ,OAAOsf,sBAChB9f,OAAOnD,GAAG3C,MAAM+pB,YAAc,QAElC,CAEA,MAAMhd,OAAS,CAACjH,OAAQuH,UACtB,MAAMtM,SAAW,8BACX,OACJuF,OAAM,GACN3D,GAAE,UACF6D,UAAS,OACTuE,QACEjF,OACEkkB,UAAY1jB,OAAOigB,OACnB0D,UAAuB,OAAX5c,OAAkB,mBAAqB,sBACnD6c,aAAe7c,OAChB1K,IAAoB,iBAAPA,KAGlB5B,SAASkpB,WAAW,aAAcnkB,OAAO+jB,qBAAsB,CAC7DM,SAAS,EACTH,kBAEFrnB,GAAGsnB,WAAW,aAAcnkB,OAAOyc,aAAc,CAC/C4H,SAAS,IAEXxnB,GAAGsnB,WAAW,cAAenkB,OAAOyc,aAAc,CAChD4H,SAAS,IAEXppB,SAASkpB,WAAW,YAAankB,OAAO0f,YAAa,CACnD2E,SAAS,EACTH,kBAEFjpB,SAASkpB,WAAW,cAAenkB,OAAO0f,YAAa,CACrD2E,SAAS,EACTH,kBAEFjpB,SAASkpB,WAAW,WAAYnkB,OAAO+hB,WAAY,CACjDsC,SAAS,IAEXppB,SAASkpB,WAAW,YAAankB,OAAO+hB,WAAY,CAClDsC,SAAS,IAEXppB,SAASkpB,WAAW,gBAAiBnkB,OAAO+hB,WAAY,CACtDsC,SAAS,IAEXppB,SAASkpB,WAAW,cAAenkB,OAAO+hB,WAAY,CACpDsC,SAAS,IAEXppB,SAASkpB,WAAW,aAAcnkB,OAAO+hB,WAAY,CACnDsC,SAAS,IAEXppB,SAASkpB,WAAW,eAAgBnkB,OAAO+hB,WAAY,CACrDsC,SAAS,IAEXppB,SAASkpB,WAAW,cAAenkB,OAAO+hB,WAAY,CACpDsC,SAAS,KAIP7jB,OAAOkjB,eAAiBljB,OAAOmjB,2BACjC9mB,GAAGsnB,WAAW,QAASnkB,OAAOyjB,SAAS,GAErCjjB,OAAOkN,SACThN,UAAUyjB,WAAW,SAAUnkB,OAAO6jB,UAIpCrjB,OAAO8jB,qBACTtkB,OAAOokB,cAAcnf,OAAOC,KAAOD,OAAOE,QAAU,0CAA4C,wBAAyB8d,UAAU,GAEnIjjB,OAAOokB,cAAc,iBAAkBnB,UAAU,GAInDpmB,GAAGsnB,WAAW,OAAQnkB,OAAO8jB,OAAQ,CACnCI,SAAS,IACT,EA2BJ,MAAMK,cAAgB,CAACvkB,OAAQQ,SACtBR,OAAOsK,MAAQ9J,OAAO8J,MAAQ9J,OAAO8J,KAAKC,KAAO,EAmO1D,IAIIia,SAAW,CACbC,MAAM,EACNrN,UAAW,aACXwJ,gBAAgB,EAChB8D,sBAAuB,mBACvBrH,kBAAmB,UACnBnF,aAAc,EACdzX,MAAO,IACPiN,SAAS,EACT4W,sBAAsB,EACtBK,gBAAgB,EAChBlE,QAAQ,EACRmE,gBAAgB,EAChBC,aAAc,SACdxY,SAAS,EACT8S,kBAAmB,wDAEnB9Z,MAAO,KACPE,OAAQ,KAERuR,gCAAgC,EAEhC1b,UAAW,KACX0pB,IAAK,KAELzI,oBAAoB,EACpBC,mBAAoB,GAEpB7I,YAAY,EAEZzE,gBAAgB,EAEhBiH,kBAAkB,EAElBlH,OAAQ,QAIRf,iBAAatP,EACbqmB,gBAAiB,SAEjB9X,aAAc,EACd/C,cAAe,EACf2E,eAAgB,EAChBC,mBAAoB,EACpB+J,oBAAoB,EACpBpL,gBAAgB,EAChBgC,sBAAsB,EACtB7C,mBAAoB,EAEpBE,kBAAmB,EAEnBoI,qBAAqB,EACrBpF,0BAA0B,EAE1BO,eAAe,EAEf/B,cAAc,EAEduS,WAAY,EACZT,WAAY,GACZlD,eAAe,EACf2F,aAAa,EACbF,YAAY,EACZC,gBAAiB,GACjBF,aAAc,IACdZ,cAAc,EACdzC,gBAAgB,EAChB1F,UAAW,EACX6G,0BAA0B,EAC1BlB,0BAA0B,EAC1BC,+BAA+B,EAC/BO,qBAAqB,EAErBkF,mBAAmB,EAEnBnD,YAAY,EACZD,gBAAiB,IAEjBrR,qBAAqB,EAErBiR,YAAY,EAEZkC,eAAe,EACfC,0BAA0B,EAC1B3N,qBAAqB,EAErBjL,MAAM,EACNyP,oBAAoB,EACpBG,qBAAsB,EACtB5B,qBAAqB,EAErBjO,QAAQ,EAER8M,gBAAgB,EAChBD,gBAAgB,EAChB6G,aAAc,KAEdR,WAAW,EACXL,eAAgB,oBAChBG,kBAAmB,KAEnBmH,kBAAkB,EAClBrU,wBAAyB,GAEzBF,uBAAwB,UAExBlH,WAAY,eACZ8Q,gBAAiB,qBACjB/F,iBAAkB,sBAClBlC,kBAAmB,uBACnBC,uBAAwB,6BACxBkC,eAAgB,oBAChBC,eAAgB,oBAChByQ,aAAc,iBACdxb,mBAAoB,wBACpBO,oBAAqB,EAErBwL,oBAAoB,EAEpB0P,cAAc,GAGhB,SAASC,mBAAmB5kB,OAAQ6kB,kBAClC,OAAO,SAAsB5sB,UACf,IAARA,MACFA,IAAM,CAAC,GAET,MAAM6sB,gBAAkB3sB,OAAOI,KAAKN,KAAK,GACnC8sB,aAAe9sB,IAAI6sB,iBACG,iBAAjBC,cAA8C,OAAjBA,eAIR,IAA5B/kB,OAAO8kB,mBACT9kB,OAAO8kB,iBAAmB,CACxBjZ,SAAS,IAGW,eAApBiZ,iBAAoC9kB,OAAO8kB,kBAAoB9kB,OAAO8kB,iBAAiBjZ,UAAY7L,OAAO8kB,iBAAiBtC,SAAWxiB,OAAO8kB,iBAAiBvC,SAChKviB,OAAO8kB,iBAAiBE,MAAO,GAE7B,CAAC,aAAc,aAAarmB,QAAQmmB,kBAAoB,GAAK9kB,OAAO8kB,kBAAoB9kB,OAAO8kB,iBAAiBjZ,UAAY7L,OAAO8kB,iBAAiBzoB,KACtJ2D,OAAO8kB,iBAAiBE,MAAO,GAE3BF,mBAAmB9kB,QAAU,YAAa+kB,cAIT,iBAA5B/kB,OAAO8kB,kBAAmC,YAAa9kB,OAAO8kB,mBACvE9kB,OAAO8kB,iBAAiBjZ,SAAU,GAE/B7L,OAAO8kB,mBAAkB9kB,OAAO8kB,iBAAmB,CACtDjZ,SAAS,IAEX,aAAOgZ,iBAAkB5sB,MATvB,aAAO4sB,iBAAkB5sB,MAfzB,aAAO4sB,iBAAkB5sB,IAyB7B,CACF,CAGA,MAAMgtB,WAAa,CACjB1e,4BACAkE,cACA7K,oBACAslB,WAl4De,CACf1U,cA/EF,SAAuBzQ,SAAU6V,cAC/B,MAAMpW,OAASrE,KACVqE,OAAOQ,OAAOkN,UACjB1N,OAAOU,UAAUxG,MAAMyrB,mBAAqB,GAAGplB,aAC/CP,OAAOU,UAAUxG,MAAM0rB,gBAA+B,IAAbrlB,SAAiB,MAAQ,IAEpEP,OAAOuI,KAAK,gBAAiBhI,SAAU6V,aACzC,EAyEEyB,gBAzCF,SAAyBnB,aAAcU,gBAChB,IAAjBV,eACFA,cAAe,GAEjB,MAAM1W,OAASrE,MACT,OACJ6E,QACER,OACAQ,OAAOkN,UACPlN,OAAOiT,YACTzT,OAAO6Q,mBAETsG,eAAe,CACbnX,cACA0W,0BACAU,oBACAC,KAAM,UAEV,EAwBES,cAtBF,SAAuBpB,aAAcU,gBACd,IAAjBV,eACFA,cAAe,GAEjB,MACM,OACJlW,QAFa7E,UAIRkb,WAAY,EACfrW,OAAOkN,UALI/R,KAMRqV,cAAc,GACrBmG,eAAe,CACbnX,OARarE,KASb+a,0BACAU,oBACAC,KAAM,QAEV,GAq4DEpJ,YACAlD,UACAyW,WAhpCe,CACfC,cAjCF,SAAuBoE,QACrB,MAAM7lB,OAASrE,KACf,IAAKqE,OAAOQ,OAAO0c,eAAiBld,OAAOQ,OAAO6P,eAAiBrQ,OAAO8lB,UAAY9lB,OAAOQ,OAAOkN,QAAS,OAC7G,MAAM7Q,GAAyC,cAApCmD,OAAOQ,OAAO6c,kBAAoCrd,OAAOnD,GAAKmD,OAAOU,UAC5EV,OAAOuJ,YACTvJ,OAAOqb,qBAAsB,GAE/Bxe,GAAG3C,MAAM6rB,OAAS,OAClBlpB,GAAG3C,MAAM6rB,OAASF,OAAS,WAAa,OACpC7lB,OAAOuJ,WACTnN,uBAAsB,KACpB4D,OAAOqb,qBAAsB,CAAK,GAGxC,EAoBE2K,gBAlBF,WACE,MAAMhmB,OAASrE,KACXqE,OAAOQ,OAAO6P,eAAiBrQ,OAAO8lB,UAAY9lB,OAAOQ,OAAOkN,UAGhE1N,OAAOuJ,YACTvJ,OAAOqb,qBAAsB,GAE/Brb,OAA2C,cAApCA,OAAOQ,OAAO6c,kBAAoC,KAAO,aAAanjB,MAAM6rB,OAAS,GACxF/lB,OAAOuJ,WACTnN,uBAAsB,KACpB4D,OAAOqb,qBAAsB,CAAK,IAGxC,GAmpCEpU,OArZa,CACbgf,aArBF,WACE,MAAMjmB,OAASrE,MACT,OACJ6E,QACER,OACJA,OAAOyc,aAAeA,aAAayJ,KAAKlmB,QACxCA,OAAO0f,YAAcA,YAAYwG,KAAKlmB,QACtCA,OAAO+hB,WAAaA,WAAWmE,KAAKlmB,QACpCA,OAAO+jB,qBAAuBA,qBAAqBmC,KAAKlmB,QACpDQ,OAAOkN,UACT1N,OAAO6jB,SAAWA,SAASqC,KAAKlmB,SAElCA,OAAOyjB,QAAUA,QAAQyC,KAAKlmB,QAC9BA,OAAO8jB,OAASA,OAAOoC,KAAKlmB,QAC5BiH,OAAOjH,OAAQ,KACjB,EAOEmmB,aANF,WAEElf,OADetL,KACA,MACjB,GAuZEqS,YAlRgB,CAChBkV,cA7HF,WACE,MAAMljB,OAASrE,MACT,UACJqP,UAAS,YACTwK,YAAW,OACXhV,OAAM,GACN3D,IACEmD,OACEgO,YAAcxN,OAAOwN,YAC3B,IAAKA,aAAeA,aAAmD,IAApCrV,OAAOI,KAAKiV,aAAa9U,OAAc,OAG1E,MAAMktB,WAAapmB,OAAOqmB,cAAcrY,YAAahO,OAAOQ,OAAOukB,gBAAiB/kB,OAAOnD,IAC3F,IAAKupB,YAAcpmB,OAAOsmB,oBAAsBF,WAAY,OAC5D,MACMG,kBADuBH,cAAcpY,YAAcA,YAAYoY,iBAAc1nB,IAClCsB,OAAOwmB,eAClDC,YAAclC,cAAcvkB,OAAQQ,QACpCkmB,WAAanC,cAAcvkB,OAAQumB,kBACnCI,cAAgB3mB,OAAOQ,OAAOghB,WAC9BoF,aAAeL,iBAAiB/E,WAChCqF,WAAarmB,OAAO6L,QACtBoa,cAAgBC,YAClB7pB,GAAGyF,UAAU4G,OAAO,GAAG1I,OAAOkQ,6BAA8B,GAAGlQ,OAAOkQ,qCACtE1Q,OAAO8mB,yBACGL,aAAeC,aACzB7pB,GAAGyF,UAAUC,IAAI,GAAG/B,OAAOkQ,+BACvB6V,iBAAiBjc,KAAKsQ,MAAuC,WAA/B2L,iBAAiBjc,KAAKsQ,OAAsB2L,iBAAiBjc,KAAKsQ,MAA6B,WAArBpa,OAAO8J,KAAKsQ,OACtH/d,GAAGyF,UAAUC,IAAI,GAAG/B,OAAOkQ,qCAE7B1Q,OAAO8mB,wBAELH,gBAAkBC,aACpB5mB,OAAOgmB,mBACGW,eAAiBC,cAC3B5mB,OAAOyhB,gBAIT,CAAC,aAAc,aAAc,aAAazoB,SAAQuK,OAChD,QAAsC,IAA3BgjB,iBAAiBhjB,MAAuB,OACnD,MAAMwjB,iBAAmBvmB,OAAO+C,OAAS/C,OAAO+C,MAAM8I,QAChD2a,gBAAkBT,iBAAiBhjB,OAASgjB,iBAAiBhjB,MAAM8I,QACrE0a,mBAAqBC,iBACvBhnB,OAAOuD,MAAM0jB,WAEVF,kBAAoBC,iBACvBhnB,OAAOuD,MAAM2jB,QACf,IAEF,MAAMC,iBAAmBZ,iBAAiBnP,WAAamP,iBAAiBnP,YAAc5W,OAAO4W,UACvFgQ,YAAc5mB,OAAOuK,OAASwb,iBAAiBrc,gBAAkB1J,OAAO0J,eAAiBid,kBACzFE,QAAU7mB,OAAOuK,KACnBoc,kBAAoB3R,aACtBxV,OAAOsnB,kBAET,aAAOtnB,OAAOQ,OAAQ+lB,kBACtB,MAAMgB,UAAYvnB,OAAOQ,OAAO6L,QAC1Bmb,QAAUxnB,OAAOQ,OAAOuK,KAC9BpS,OAAO8S,OAAOzL,OAAQ,CACpBqf,eAAgBrf,OAAOQ,OAAO6e,eAC9B1H,eAAgB3X,OAAOQ,OAAOmX,eAC9BC,eAAgB5X,OAAOQ,OAAOoX,iBAE5BiP,aAAeU,UACjBvnB,OAAOinB,WACGJ,YAAcU,WACxBvnB,OAAOknB,SAETlnB,OAAOsmB,kBAAoBF,WAC3BpmB,OAAOuI,KAAK,oBAAqBge,kBAC7B/Q,cACE4R,aACFpnB,OAAOgc,cACPhc,OAAOia,WAAWjP,WAClBhL,OAAO0L,iBACG2b,SAAWG,SACrBxnB,OAAOia,WAAWjP,WAClBhL,OAAO0L,gBACE2b,UAAYG,SACrBxnB,OAAOgc,eAGXhc,OAAOuI,KAAK,aAAcge,iBAC5B,EA2CEF,cAzCF,SAAuBrY,YAAaiQ,KAAMwJ,aAIxC,QAHa,IAATxJ,OACFA,KAAO,WAEJjQ,aAAwB,cAATiQ,OAAyBwJ,YAAa,OAC1D,IAAIrB,YAAa,EACjB,MAAM3pB,OAAS,2BACTirB,cAAyB,WAATzJ,KAAoBxhB,OAAOkrB,YAAcF,YAAYrc,aACrEwc,OAASjvB,OAAOI,KAAKiV,aAAaxQ,KAAIqqB,QAC1C,GAAqB,iBAAVA,OAA6C,IAAvBA,MAAM1oB,QAAQ,KAAY,CACzD,MAAM2oB,SAAW5pB,WAAW2pB,MAAME,OAAO,IAEzC,MAAO,CACLC,MAFYN,cAAgBI,SAG5BD,YAEJ,CACA,MAAO,CACLG,MAAOH,MACPA,YACD,IAEHD,OAAOK,MAAK,CAACxqB,EAAGyqB,IAAM3c,SAAS9N,EAAEuqB,MAAO,IAAMzc,SAAS2c,EAAEF,MAAO,MAChE,IAAK,IAAIppB,EAAI,EAAGA,EAAIgpB,OAAO1uB,OAAQ0F,GAAK,EAAG,CACzC,MAAM,MACJipB,MAAK,MACLG,OACEJ,OAAOhpB,GACE,WAATqf,KACExhB,OAAON,WAAW,eAAe6rB,YAAYlmB,UAC/CskB,WAAayB,OAENG,OAASP,YAAYtc,cAC9Bib,WAAayB,MAEjB,CACA,OAAOzB,YAAc,KACvB,GAqRE9V,cA9KoB,CACpBA,cA9BF,WACE,MAAMtQ,OAASrE,MAEbmqB,SAAUqC,UAAS,OACnB3nB,QACER,QACE,mBACJ4M,oBACEpM,OACJ,GAAIoM,mBAAoB,CACtB,MAAMwG,eAAiBpT,OAAO6J,OAAO3Q,OAAS,EACxCkvB,mBAAqBpoB,OAAOyM,WAAW2G,gBAAkBpT,OAAO0M,gBAAgB0G,gBAAuC,EAArBxG,mBACxG5M,OAAO8lB,SAAW9lB,OAAO+D,KAAOqkB,kBAClC,MACEpoB,OAAO8lB,SAAsC,IAA3B9lB,OAAOwM,SAAStT,QAEN,IAA1BsH,OAAOmX,iBACT3X,OAAO2X,gBAAkB3X,OAAO8lB,WAEJ,IAA1BtlB,OAAOoX,iBACT5X,OAAO4X,gBAAkB5X,OAAO8lB,UAE9BqC,WAAaA,YAAcnoB,OAAO8lB,WACpC9lB,OAAO6S,OAAQ,GAEbsV,YAAcnoB,OAAO8lB,UACvB9lB,OAAOuI,KAAKvI,OAAO8lB,SAAW,OAAS,SAE3C,GAgLEzjB,QAjNY,CACZgmB,WAhDF,WACE,MACM,WACJC,WAAU,OACV9nB,OAAM,IACNyL,IAAG,GACHpP,GAAE,OACFoI,QANatJ,KAST4sB,SAzBR,SAAwBC,QAASC,QAC/B,MAAMC,cAAgB,GAYtB,OAXAF,QAAQxvB,SAAQ2vB,OACM,iBAATA,KACThwB,OAAOI,KAAK4vB,MAAM3vB,SAAQsvB,aACpBK,KAAKL,aACPI,cAAc7kB,KAAK4kB,OAASH,WAC9B,IAEuB,iBAATK,MAChBD,cAAc7kB,KAAK4kB,OAASE,KAC9B,IAEKD,aACT,CAWmBE,CAAe,CAAC,cAAepoB,OAAO4W,UAAW,CAChE,YAVazb,KAUO6E,OAAOif,UAAYjf,OAAOif,SAASpT,SACtD,CACD,WAAc7L,OAAOiT,YACpB,CACD,IAAOxH,KACN,CACD,KAAQzL,OAAO8J,MAAQ9J,OAAO8J,KAAKC,KAAO,GACzC,CACD,cAAe/J,OAAO8J,MAAQ9J,OAAO8J,KAAKC,KAAO,GAA0B,WAArB/J,OAAO8J,KAAKsQ,MACjE,CACD,QAAW3V,OAAOE,SACjB,CACD,IAAOF,OAAOC,KACb,CACD,WAAY1E,OAAOkN,SAClB,CACD,SAAYlN,OAAOkN,SAAWlN,OAAOiN,gBACpC,CACD,iBAAkBjN,OAAO+P,sBACvB/P,OAAOkQ,wBACX4X,WAAWzkB,QAAQ0kB,UACnB1rB,GAAGyF,UAAUC,OAAO+lB,YA/BL3sB,KAgCRmrB,sBACT,EAeE+B,cAbF,WACE,MACM,GACJhsB,GAAE,WACFyrB,YAHa3sB,KAKVkB,IAAoB,iBAAPA,KAClBA,GAAGyF,UAAU4G,UAAUof,YANR3sB,KAORmrB,uBACT,IAqNMgC,iBAAmB,CAAC,EAC1B,MAAMC,OACJ,WAAArwB,GACE,IAAImE,GACA2D,OACJ,IAAK,IAAIqH,KAAOpJ,UAAUvF,OAAQ4O,KAAO,IAAItF,MAAMqF,MAAOE,KAAO,EAAGA,KAAOF,KAAME,OAC/ED,KAAKC,MAAQtJ,UAAUsJ,MAEL,IAAhBD,KAAK5O,QAAgB4O,KAAK,GAAGpP,aAAwE,WAAzDC,OAAO0F,UAAUL,SAASM,KAAKwJ,KAAK,IAAIvJ,MAAM,GAAI,GAChGiC,OAASsH,KAAK,IAEbjL,GAAI2D,QAAUsH,KAEZtH,SAAQA,OAAS,CAAC,GACvBA,OAAS,aAAO,CAAC,EAAGA,QAChB3D,KAAO2D,OAAO3D,KAAI2D,OAAO3D,GAAKA,IAClC,MAAM5B,SAAW,6BACjB,GAAIuF,OAAO3D,IAA2B,iBAAd2D,OAAO3D,IAAmB5B,SAAStB,iBAAiB6G,OAAO3D,IAAI3D,OAAS,EAAG,CACjG,MAAM8vB,QAAU,GAQhB,OAPA/tB,SAAStB,iBAAiB6G,OAAO3D,IAAI7D,SAAQyuB,cAC3C,MAAMwB,UAAY,aAAO,CAAC,EAAGzoB,OAAQ,CACnC3D,GAAI4qB,cAENuB,QAAQnlB,KAAK,IAAIklB,OAAOE,WAAW,IAG9BD,OACT,CAGA,MAAMhpB,OAASrE,KACfqE,OAAON,YAAa,EACpBM,OAAOmE,QAAUG,aACjBtE,OAAOiF,OAASL,UAAU,CACxBxJ,UAAWoF,OAAOpF,YAEpB4E,OAAOqE,QAAU2B,aACjBhG,OAAOqH,gBAAkB,CAAC,EAC1BrH,OAAOkI,mBAAqB,GAC5BlI,OAAOkpB,QAAU,IAAIlpB,OAAOmpB,aACxB3oB,OAAO0oB,SAAW1mB,MAAMC,QAAQjC,OAAO0oB,UACzClpB,OAAOkpB,QAAQrlB,QAAQrD,OAAO0oB,SAEhC,MAAM7D,iBAAmB,CAAC,EAC1BrlB,OAAOkpB,QAAQlwB,SAAQowB,MACrBA,IAAI,CACF5oB,cACAR,cACAqpB,aAAcjE,mBAAmB5kB,OAAQ6kB,kBACzCre,GAAIhH,OAAOgH,GAAGkf,KAAKlmB,QACnByH,KAAMzH,OAAOyH,KAAKye,KAAKlmB,QACvB2H,IAAK3H,OAAO2H,IAAIue,KAAKlmB,QACrBuI,KAAMvI,OAAOuI,KAAK2d,KAAKlmB,SACvB,IAIJ,MAAMspB,aAAe,aAAO,CAAC,EAAG9E,SAAUa,kBAqG1C,OAlGArlB,OAAOQ,OAAS,aAAO,CAAC,EAAG8oB,aAAcR,iBAAkBtoB,QAC3DR,OAAOwmB,eAAiB,aAAO,CAAC,EAAGxmB,OAAOQ,QAC1CR,OAAOupB,aAAe,aAAO,CAAC,EAAG/oB,QAG7BR,OAAOQ,QAAUR,OAAOQ,OAAOwG,IACjCrO,OAAOI,KAAKiH,OAAOQ,OAAOwG,IAAIhO,SAAQwwB,YACpCxpB,OAAOgH,GAAGwiB,UAAWxpB,OAAOQ,OAAOwG,GAAGwiB,WAAW,IAGjDxpB,OAAOQ,QAAUR,OAAOQ,OAAOyH,OACjCjI,OAAOiI,MAAMjI,OAAOQ,OAAOyH,OAI7BtP,OAAO8S,OAAOzL,OAAQ,CACpBqM,QAASrM,OAAOQ,OAAO6L,QACvBxP,MAEAyrB,WAAY,GAEZze,OAAQ,GACR4C,WAAY,GACZD,SAAU,GACVE,gBAAiB,GAEjB,YAAArB,GACE,MAAmC,eAA5BrL,OAAOQ,OAAO4W,SACvB,EACA,UAAA9L,GACE,MAAmC,aAA5BtL,OAAOQ,OAAO4W,SACvB,EAEA/M,YAAa,EACbW,UAAW,EAEX4H,aAAa,EACbC,OAAO,EAEPzS,UAAW,EACXoW,kBAAmB,EACnBtV,SAAU,EACVuoB,SAAU,EACV5S,WAAW,EACX,qBAAApF,GAGE,OAAOtQ,KAAKuoB,MAAM/tB,KAAKyE,UAAY,GAAK,IAAM,GAAK,EACrD,EAEAuX,eAAgB3X,OAAOQ,OAAOmX,eAC9BC,eAAgB5X,OAAOQ,OAAOoX,eAE9B8D,gBAAiB,CACf8B,eAAW9e,EACX+e,aAAS/e,EACTmgB,yBAAqBngB,EACrBsgB,oBAAgBtgB,EAChBogB,iBAAapgB,EACbwX,sBAAkBxX,EAClBid,oBAAgBjd,EAChBwgB,wBAAoBxgB,EAEpBygB,kBAAmBnf,OAAOQ,OAAO2e,kBAEjCgD,cAAe,EACfwH,kBAAcjrB,EAEdkrB,WAAY,GACZrI,yBAAqB7iB,EACrBqgB,iBAAargB,EACbke,UAAW,KACXE,QAAS,MAGXyB,YAAY,EAEZc,eAAgBrf,OAAOQ,OAAO6e,eAC9BpC,QAAS,CACPb,OAAQ,EACRwC,OAAQ,EACRH,SAAU,EACVC,SAAU,EACVjD,KAAM,GAGRoO,aAAc,GACdC,aAAc,IAEhB9pB,OAAOuI,KAAK,WAGRvI,OAAOQ,OAAOikB,MAChBzkB,OAAOykB,OAKFzkB,MACT,CACA,iBAAA6L,CAAkBke,UAChB,OAAIpuB,KAAK0P,eACA0e,SAGF,CACL,MAAS,SACT,aAAc,cACd,iBAAkB,eAClB,cAAe,aACf,eAAgB,gBAChB,eAAgB,cAChB,gBAAiB,iBACjB,YAAe,gBACfA,SACJ,CACA,aAAA/P,CAAclR,SACZ,MAAM,SACJgD,SAAQ,OACRtL,QACE7E,KAEEwX,gBAAkB,mBADT,sBAAgBrH,SAAU,IAAItL,OAAOgJ,4BACR,IAC5C,OAAO,mBAAaV,SAAWqK,eACjC,CACA,mBAAAjC,CAAoB9I,OAClB,OAAOzM,KAAKqe,cAAcre,KAAKkO,OAAO3K,QAAO4J,SAA6D,EAAlDA,QAAQyM,aAAa,6BAAmCnN,QAAO,GACzH,CACA,YAAAqS,GACE,MACM,SACJ3O,SAAQ,OACRtL,QAHa7E,UAKRkO,OAAS,sBAAgBiC,SAAU,IAAItL,OAAOgJ,2BACvD,CACA,MAAA0d,GACE,MAAMlnB,OAASrE,KACXqE,OAAOqM,UACXrM,OAAOqM,SAAU,EACbrM,OAAOQ,OAAOghB,YAChBxhB,OAAOyhB,gBAETzhB,OAAOuI,KAAK,UACd,CACA,OAAA0e,GACE,MAAMjnB,OAASrE,KACVqE,OAAOqM,UACZrM,OAAOqM,SAAU,EACbrM,OAAOQ,OAAOghB,YAChBxhB,OAAOgmB,kBAEThmB,OAAOuI,KAAK,WACd,CACA,WAAAyhB,CAAY9oB,SAAUT,OAEpBS,SAAWC,KAAKE,IAAIF,KAAKC,IAAIF,SAAU,GAAI,GAC3C,MAAMG,IAFS1F,KAEIoW,eAEbhR,SAJSpF,KAGIgX,eACItR,KAAOH,SAAWG,IAJ1B1F,KAKR8a,YAAY1V,aAA0B,IAAVN,MAAwB,EAAIA,OALhD9E,KAMRgZ,oBANQhZ,KAOR+X,qBACT,CACA,oBAAAoT,GACE,MAAM9mB,OAASrE,KACf,IAAKqE,OAAOQ,OAAO2kB,eAAiBnlB,OAAOnD,GAAI,OAC/C,MAAMotB,IAAMjqB,OAAOnD,GAAGmM,UAAUzL,MAAM,KAAK2B,QAAO8J,WACT,IAAhCA,UAAU7J,QAAQ,WAA+E,IAA5D6J,UAAU7J,QAAQa,OAAOQ,OAAOkQ,0BAE9E1Q,OAAOuI,KAAK,oBAAqB0hB,IAAItsB,KAAK,KAC5C,CACA,eAAAusB,CAAgBphB,SACd,MAAM9I,OAASrE,KACf,OAAIqE,OAAOsH,UAAkB,GACtBwB,QAAQE,UAAUzL,MAAM,KAAK2B,QAAO8J,WACI,IAAtCA,UAAU7J,QAAQ,iBAAyE,IAAhD6J,UAAU7J,QAAQa,OAAOQ,OAAOgJ,cACjF7L,KAAK,IACV,CACA,iBAAA+W,GACE,MAAM1U,OAASrE,KACf,IAAKqE,OAAOQ,OAAO2kB,eAAiBnlB,OAAOnD,GAAI,OAC/C,MAAMstB,QAAU,GAChBnqB,OAAO6J,OAAO7Q,SAAQ8P,UACpB,MAAMwf,WAAatoB,OAAOkqB,gBAAgBphB,SAC1CqhB,QAAQtmB,KAAK,CACXiF,gBACAwf,wBAEFtoB,OAAOuI,KAAK,cAAeO,QAASwf,WAAW,IAEjDtoB,OAAOuI,KAAK,gBAAiB4hB,QAC/B,CACA,oBAAAhgB,CAAqBigB,KAAMC,YACZ,IAATD,OACFA,KAAO,gBAEK,IAAVC,QACFA,OAAQ,GAEV,MACM,OACJ7pB,OAAM,OACNqJ,OAAM,WACN4C,WAAU,gBACVC,gBACA3I,KAAMgI,WAAU,YAChB1B,aAPa1O,KASf,IAAI2uB,IAAM,EACV,GAAoC,iBAAzB9pB,OAAO0J,cAA4B,OAAO1J,OAAO0J,cAC5D,GAAI1J,OAAOiN,eAAgB,CACzB,IACI8c,UADA3c,UAAY/D,OAAOQ,aAAelJ,KAAKiJ,KAAKP,OAAOQ,aAAasE,iBAAmB,EAEvF,IAAK,IAAI/P,EAAIyL,YAAc,EAAGzL,EAAIiL,OAAO3Q,OAAQ0F,GAAK,EAChDiL,OAAOjL,KAAO2rB,YAChB3c,WAAazM,KAAKiJ,KAAKP,OAAOjL,GAAG+P,iBACjC2b,KAAO,EACH1c,UAAY7B,aAAYwe,WAAY,IAG5C,IAAK,IAAI3rB,EAAIyL,YAAc,EAAGzL,GAAK,EAAGA,GAAK,EACrCiL,OAAOjL,KAAO2rB,YAChB3c,WAAa/D,OAAOjL,GAAG+P,gBACvB2b,KAAO,EACH1c,UAAY7B,aAAYwe,WAAY,GAG9C,MAEE,GAAa,YAATH,KACF,IAAK,IAAIxrB,EAAIyL,YAAc,EAAGzL,EAAIiL,OAAO3Q,OAAQ0F,GAAK,EAAG,EACnCyrB,MAAQ5d,WAAW7N,GAAK8N,gBAAgB9N,GAAK6N,WAAWpC,aAAe0B,WAAaU,WAAW7N,GAAK6N,WAAWpC,aAAe0B,cAEhJue,KAAO,EAEX,MAGA,IAAK,IAAI1rB,EAAIyL,YAAc,EAAGzL,GAAK,EAAGA,GAAK,EAAG,CACxB6N,WAAWpC,aAAeoC,WAAW7N,GAAKmN,aAE5Due,KAAO,EAEX,CAGJ,OAAOA,GACT,CACA,MAAArf,GACE,MAAMjL,OAASrE,KACf,IAAKqE,QAAUA,OAAOsH,UAAW,OACjC,MAAM,SACJkF,SAAQ,OACRhM,QACER,OAcJ,SAASmW,eACP,MAAMqU,eAAiBxqB,OAAOgM,cAAmC,EAApBhM,OAAOI,UAAiBJ,OAAOI,UACtE2W,aAAe5V,KAAKE,IAAIF,KAAKC,IAAIopB,eAAgBxqB,OAAO2S,gBAAiB3S,OAAO+R,gBACtF/R,OAAOmW,aAAaY,cACpB/W,OAAO2U,oBACP3U,OAAO0T,qBACT,CACA,IAAI+W,WACJ,GApBIjqB,OAAOwN,aACThO,OAAOkjB,gBAET,IAAIljB,OAAOnD,GAAGlD,iBAAiB,qBAAqBX,SAAQqQ,UACtDA,QAAQqhB,UACVthB,qBAAqBpJ,OAAQqJ,QAC/B,IAEFrJ,OAAOkL,aACPlL,OAAO0L,eACP1L,OAAOwS,iBACPxS,OAAO0T,sBASHlT,OAAOif,UAAYjf,OAAOif,SAASpT,UAAY7L,OAAOkN,QACxDyI,eACI3V,OAAOiT,YACTzT,OAAO6Q,uBAEJ,CACL,IAA8B,SAAzBrQ,OAAO0J,eAA4B1J,OAAO0J,cAAgB,IAAMlK,OAAO6S,QAAUrS,OAAOiN,eAAgB,CAC3G,MAAM5D,OAAS7J,OAAOoM,SAAW5L,OAAO4L,QAAQC,QAAUrM,OAAOoM,QAAQvC,OAAS7J,OAAO6J,OACzF4gB,WAAazqB,OAAOsX,QAAQzN,OAAO3Q,OAAS,EAAG,GAAG,GAAO,EAC3D,MACEuxB,WAAazqB,OAAOsX,QAAQtX,OAAOqK,YAAa,GAAG,GAAO,GAEvDogB,YACHtU,cAEJ,CACI3V,OAAO6P,eAAiB7D,WAAaxM,OAAOwM,UAC9CxM,OAAOsQ,gBAETtQ,OAAOuI,KAAK,SACd,CACA,eAAA+e,CAAgBqD,aAAcC,iBACT,IAAfA,aACFA,YAAa,GAEf,MAAM5qB,OAASrE,KACTkvB,iBAAmB7qB,OAAOQ,OAAO4W,UAKvC,OAJKuT,eAEHA,aAAoC,eAArBE,iBAAoC,WAAa,cAE9DF,eAAiBE,kBAAqC,eAAjBF,cAAkD,aAAjBA,eAG1E3qB,OAAOnD,GAAGyF,UAAU4G,OAAO,GAAGlJ,OAAOQ,OAAOkQ,yBAAyBma,oBACrE7qB,OAAOnD,GAAGyF,UAAUC,IAAI,GAAGvC,OAAOQ,OAAOkQ,yBAAyBia,gBAClE3qB,OAAO8mB,uBACP9mB,OAAOQ,OAAO4W,UAAYuT,aAC1B3qB,OAAO6J,OAAO7Q,SAAQ8P,UACC,aAAjB6hB,aACF7hB,QAAQ5O,MAAMmL,MAAQ,GAEtByD,QAAQ5O,MAAMqL,OAAS,EACzB,IAEFvF,OAAOuI,KAAK,mBACRqiB,YAAY5qB,OAAOiL,UAddjL,MAgBX,CACA,uBAAA8qB,CAAwB1T,WACtB,MAAMpX,OAASrE,KACXqE,OAAOiM,KAAqB,QAAdmL,YAAwBpX,OAAOiM,KAAqB,QAAdmL,YACxDpX,OAAOiM,IAAoB,QAAdmL,UACbpX,OAAOgM,aAA2C,eAA5BhM,OAAOQ,OAAO4W,WAA8BpX,OAAOiM,IACrEjM,OAAOiM,KACTjM,OAAOnD,GAAGyF,UAAUC,IAAI,GAAGvC,OAAOQ,OAAOkQ,6BACzC1Q,OAAOnD,GAAGgE,IAAM,QAEhBb,OAAOnD,GAAGyF,UAAU4G,OAAO,GAAGlJ,OAAOQ,OAAOkQ,6BAC5C1Q,OAAOnD,GAAGgE,IAAM,OAElBb,OAAOiL,SACT,CACA,KAAA8f,CAAMnpB,SACJ,MAAM5B,OAASrE,KACf,GAAIqE,OAAOgrB,QAAS,OAAO,EAG3B,IAAInuB,GAAK+E,SAAW5B,OAAOQ,OAAO3D,GAIlC,GAHkB,iBAAPA,KACTA,GAAK5B,SAASvB,cAAcmD,MAEzBA,GACH,OAAO,EAETA,GAAGmD,OAASA,OACRnD,GAAGouB,YAAcpuB,GAAGouB,WAAWxwB,MAAQoC,GAAGouB,WAAWxwB,KAAKhB,WAAauG,OAAOQ,OAAOkkB,sBAAsBwG,gBAC7GlrB,OAAOuJ,WAAY,GAErB,MAAM4hB,mBAAqB,IAClB,KAAKnrB,OAAOQ,OAAO0kB,cAAgB,IAAIxiB,OAAOnF,MAAM,KAAKI,KAAK,OAWvE,IAAI+C,UATe,MACjB,GAAI7D,IAAMA,GAAG8M,YAAc9M,GAAG8M,WAAWjQ,cAAe,CAGtD,OAFYmD,GAAG8M,WAAWjQ,cAAcyxB,qBAG1C,CACA,OAAO,sBAAgBtuB,GAAIsuB,sBAAsB,EAAE,EAGrCC,GAmBhB,OAlBK1qB,WAAaV,OAAOQ,OAAOokB,iBAC9BlkB,UAAY,oBAAc,MAAOV,OAAOQ,OAAO0kB,cAC/CroB,GAAG0d,OAAO7Z,WACV,sBAAgB7D,GAAI,IAAImD,OAAOQ,OAAOgJ,cAAcxQ,SAAQ8P,UAC1DpI,UAAU6Z,OAAOzR,QAAQ,KAG7BnQ,OAAO8S,OAAOzL,OAAQ,CACpBnD,MACA6D,oBACAoL,SAAU9L,OAAOuJ,YAAc1M,GAAGouB,WAAWxwB,KAAK4wB,WAAaxuB,GAAGouB,WAAWxwB,KAAOiG,UACpF4qB,OAAQtrB,OAAOuJ,UAAY1M,GAAGouB,WAAWxwB,KAAOoC,GAChDmuB,SAAS,EAET/e,IAA8B,QAAzBpP,GAAGgE,IAAIsF,eAA6D,QAAlC7C,aAAazG,GAAI,aACxDmP,aAA0C,eAA5BhM,OAAOQ,OAAO4W,YAAwD,QAAzBva,GAAGgE,IAAIsF,eAA6D,QAAlC7C,aAAazG,GAAI,cAC9GqP,SAAiD,gBAAvC5I,aAAa5C,UAAW,cAE7B,CACT,CACA,IAAA+jB,CAAK5nB,IACH,MAAMmD,OAASrE,KACf,GAAIqE,OAAOwV,YAAa,OAAOxV,OAE/B,IAAgB,IADAA,OAAO+qB,MAAMluB,IACN,OAAOmD,OAC9BA,OAAOuI,KAAK,cAGRvI,OAAOQ,OAAOwN,aAChBhO,OAAOkjB,gBAITljB,OAAOqoB,aAGProB,OAAOkL,aAGPlL,OAAO0L,eACH1L,OAAOQ,OAAO6P,eAChBrQ,OAAOsQ,gBAILtQ,OAAOQ,OAAOghB,YAAcxhB,OAAOqM,SACrCrM,OAAOyhB,gBAILzhB,OAAOQ,OAAOuK,MAAQ/K,OAAOoM,SAAWpM,OAAOQ,OAAO4L,QAAQC,QAChErM,OAAOsX,QAAQtX,OAAOQ,OAAO0X,aAAelY,OAAOoM,QAAQiD,aAAc,EAAGrP,OAAOQ,OAAOiV,oBAAoB,GAAO,GAErHzV,OAAOsX,QAAQtX,OAAOQ,OAAO0X,aAAc,EAAGlY,OAAOQ,OAAOiV,oBAAoB,GAAO,GAIrFzV,OAAOQ,OAAOuK,MAChB/K,OAAOia,aAITja,OAAOimB,eACP,MAAMsF,aAAe,IAAIvrB,OAAOnD,GAAGlD,iBAAiB,qBAsBpD,OArBIqG,OAAOuJ,WACTgiB,aAAa1nB,QAAQ7D,OAAOsrB,OAAO3xB,iBAAiB,qBAEtD4xB,aAAavyB,SAAQqQ,UACfA,QAAQqhB,SACVthB,qBAAqBpJ,OAAQqJ,SAE7BA,QAAQhQ,iBAAiB,QAAQ6K,IAC/BkF,qBAAqBpJ,OAAQkE,EAAErL,OAAO,GAE1C,IAEFkR,QAAQ/J,QAGRA,OAAOwV,aAAc,EACrBzL,QAAQ/J,QAGRA,OAAOuI,KAAK,QACZvI,OAAOuI,KAAK,aACLvI,MACT,CACA,OAAAwrB,CAAQC,eAAgBC,kBACC,IAAnBD,iBACFA,gBAAiB,QAEC,IAAhBC,cACFA,aAAc,GAEhB,MAAM1rB,OAASrE,MACT,OACJ6E,OAAM,GACN3D,GAAE,UACF6D,UAAS,OACTmJ,QACE7J,OACJ,YAA6B,IAAlBA,OAAOQ,QAA0BR,OAAOsH,YAGnDtH,OAAOuI,KAAK,iBAGZvI,OAAOwV,aAAc,EAGrBxV,OAAOmmB,eAGH3lB,OAAOuK,MACT/K,OAAOgc,cAIL0P,cACF1rB,OAAO6oB,gBACHhsB,IAAoB,iBAAPA,IACfA,GAAGiN,gBAAgB,SAEjBpJ,WACFA,UAAUoJ,gBAAgB,SAExBD,QAAUA,OAAO3Q,QACnB2Q,OAAO7Q,SAAQ8P,UACbA,QAAQxG,UAAU4G,OAAO1I,OAAO6R,kBAAmB7R,OAAO8R,uBAAwB9R,OAAO+T,iBAAkB/T,OAAOgU,eAAgBhU,OAAOiU,gBACzI3L,QAAQgB,gBAAgB,SACxBhB,QAAQgB,gBAAgB,0BAA0B,KAIxD9J,OAAOuI,KAAK,WAGZ5P,OAAOI,KAAKiH,OAAOqH,iBAAiBrO,SAAQwwB,YAC1CxpB,OAAO2H,IAAI6hB,UAAU,KAEA,IAAnBiC,iBACEzrB,OAAOnD,IAA2B,iBAAdmD,OAAOnD,KAC7BmD,OAAOnD,GAAGmD,OAAS,MDlxH3B,SAAqBvH,KACnB,MAAMkzB,OAASlzB,IACfE,OAAOI,KAAK4yB,QAAQ3yB,SAAQC,MAC1B,IACE0yB,OAAO1yB,KAAO,IAChB,CAAE,MAAOiL,GAET,CACA,WACSynB,OAAO1yB,IAChB,CAAE,MAAOiL,GAET,IAEJ,CCswHM0nB,CAAY5rB,SAEdA,OAAOsH,WAAY,GA5CV,IA8CX,CACA,qBAAOukB,CAAeC,aACpB,aAAOhD,iBAAkBgD,YAC3B,CACA,2BAAWhD,GACT,OAAOA,gBACT,CACA,mBAAWtE,GACT,OAAOA,QACT,CACA,oBAAOuH,CAAc3C,KACdL,OAAO1qB,UAAU8qB,cAAaJ,OAAO1qB,UAAU8qB,YAAc,IAClE,MAAMD,QAAUH,OAAO1qB,UAAU8qB,YACd,mBAARC,KAAsBF,QAAQ/pB,QAAQiqB,KAAO,GACtDF,QAAQrlB,KAAKulB,IAEjB,CACA,UAAO4C,CAAIC,QACT,OAAIzpB,MAAMC,QAAQwpB,SAChBA,OAAOjzB,SAAQkzB,GAAKnD,OAAOgD,cAAcG,KAClCnD,SAETA,OAAOgD,cAAcE,QACdlD,OACT,ECvzHF,SAAS,wDAA0B/oB,OAAQwmB,eAAgBhmB,OAAQ2rB,YAejE,OAdInsB,OAAOQ,OAAOokB,gBAChBjsB,OAAOI,KAAKozB,YAAYnzB,SAAQC,MAC9B,IAAKuH,OAAOvH,OAAwB,IAAhBuH,OAAOglB,KAAe,CACxC,IAAI5jB,QAAU,sBAAgB5B,OAAOnD,GAAI,IAAIsvB,WAAWlzB,QAAQ,GAC3D2I,UACHA,QAAU,oBAAc,MAAOuqB,WAAWlzB,MAC1C2I,QAAQoH,UAAYmjB,WAAWlzB,KAC/B+G,OAAOnD,GAAG0d,OAAO3Y,UAEnBpB,OAAOvH,KAAO2I,QACd4kB,eAAevtB,KAAO2I,OACxB,KAGGpB,MACT,CCfA,SAAS4rB,WAAWrsB,MAClB,IAAI,OACFC,OAAM,aACNqpB,aAAY,GACZriB,GAAE,KACFuB,MACExI,KAgBJ,SAASssB,MAAMxvB,IACb,IAAIyvB,IACJ,OAAIzvB,IAAoB,iBAAPA,IAAmBmD,OAAOuJ,YACzC+iB,IAAMtsB,OAAOnD,GAAGnD,cAAcmD,IAC1ByvB,KAAYA,KAEdzvB,KACgB,iBAAPA,KAAiByvB,IAAM,IAAIrxB,SAAStB,iBAAiBkD,MAC5DmD,OAAOQ,OAAOwkB,mBAAmC,iBAAPnoB,IAAmByvB,KAAOA,IAAIpzB,OAAS,GAA+C,IAA1C8G,OAAOnD,GAAGlD,iBAAiBkD,IAAI3D,OACvHozB,IAAMtsB,OAAOnD,GAAGnD,cAAcmD,IACrByvB,KAAsB,IAAfA,IAAIpzB,SACpBozB,IAAMA,IAAI,KAGVzvB,KAAOyvB,IAAYzvB,GAEhByvB,IACT,CACA,SAASC,SAAS1vB,GAAI2vB,UACpB,MAAMhsB,OAASR,OAAOQ,OAAOsiB,YAC7BjmB,GAAK,wBAAkBA,KACpB7D,SAAQyzB,QACLA,QACFA,MAAMnqB,UAAUkqB,SAAW,MAAQ,aAAahsB,OAAOksB,cAAcnvB,MAAM,MACrD,WAAlBkvB,MAAME,UAAsBF,MAAMD,SAAWA,UAC7CxsB,OAAOQ,OAAO6P,eAAiBrQ,OAAOqM,SACxCogB,MAAMnqB,UAAUtC,OAAO8lB,SAAW,MAAQ,UAAUtlB,OAAOosB,WAE/D,GAEJ,CACA,SAAS3hB,SAEP,MAAM,OACJ8X,OAAM,OACNC,QACEhjB,OAAO8iB,WACX,GAAI9iB,OAAOQ,OAAOuK,KAGhB,OAFAwhB,SAASvJ,QAAQ,QACjBuJ,SAASxJ,QAAQ,GAGnBwJ,SAASvJ,OAAQhjB,OAAO4S,cAAgB5S,OAAOQ,OAAOsK,QACtDyhB,SAASxJ,OAAQ/iB,OAAO6S,QAAU7S,OAAOQ,OAAOsK,OAClD,CACA,SAAS+hB,YAAY3oB,GACnBA,EAAEsY,mBACExc,OAAO4S,aAAgB5S,OAAOQ,OAAOuK,MAAS/K,OAAOQ,OAAOsK,UAChE9K,OAAOiZ,YACP1Q,KAAK,kBACP,CACA,SAASukB,YAAY5oB,GACnBA,EAAEsY,mBACExc,OAAO6S,OAAU7S,OAAOQ,OAAOuK,MAAS/K,OAAOQ,OAAOsK,UAC1D9K,OAAO2Y,YACPpQ,KAAK,kBACP,CACA,SAASkc,OACP,MAAMjkB,OAASR,OAAOQ,OAAOsiB,WAK7B,GAJA9iB,OAAOQ,OAAOsiB,WAAa,wDAA0B9iB,OAAQA,OAAOwmB,eAAe1D,WAAY9iB,OAAOQ,OAAOsiB,WAAY,CACvHC,OAAQ,qBACRC,OAAQ,wBAEJxiB,OAAOuiB,SAAUviB,OAAOwiB,OAAS,OACvC,IAAID,OAASsJ,MAAM7rB,OAAOuiB,QACtBC,OAASqJ,MAAM7rB,OAAOwiB,QAC1BrqB,OAAO8S,OAAOzL,OAAO8iB,WAAY,CAC/BC,cACAC,gBAEFD,OAAS,wBAAkBA,QAC3BC,OAAS,wBAAkBA,QAC3B,MAAM+J,WAAa,CAAClwB,GAAIgE,OAClBhE,IACFA,GAAGxD,iBAAiB,QAAiB,SAARwH,IAAiBisB,YAAcD,cAEzD7sB,OAAOqM,SAAWxP,IACrBA,GAAGyF,UAAUC,OAAO/B,OAAOosB,UAAUrvB,MAAM,KAC7C,EAEFwlB,OAAO/pB,SAAQ6D,IAAMkwB,WAAWlwB,GAAI,UACpCmmB,OAAOhqB,SAAQ6D,IAAMkwB,WAAWlwB,GAAI,SACtC,CACA,SAAS2uB,UACP,IAAI,OACFzI,OAAM,OACNC,QACEhjB,OAAO8iB,WACXC,OAAS,wBAAkBA,QAC3BC,OAAS,wBAAkBA,QAC3B,MAAMgK,cAAgB,CAACnwB,GAAIgE,OACzBhE,GAAGvD,oBAAoB,QAAiB,SAARuH,IAAiBisB,YAAcD,aAC/DhwB,GAAGyF,UAAU4G,UAAUlJ,OAAOQ,OAAOsiB,WAAW4J,cAAcnvB,MAAM,KAAK,EAE3EwlB,OAAO/pB,SAAQ6D,IAAMmwB,cAAcnwB,GAAI,UACvCmmB,OAAOhqB,SAAQ6D,IAAMmwB,cAAcnwB,GAAI,SACzC,CA/GAwsB,aAAa,CACXvG,WAAY,CACVC,OAAQ,KACRC,OAAQ,KACRiK,aAAa,EACbP,cAAe,yBACfQ,YAAa,uBACbN,UAAW,qBACXO,wBAAyB,gCAG7BntB,OAAO8iB,WAAa,CAClBC,OAAQ,KACRC,OAAQ,MAmGVhc,GAAG,QAAQ,MACgC,IAArChH,OAAOQ,OAAOsiB,WAAWzW,QAE3B4a,WAEAxC,OACAxZ,SACF,IAEFjE,GAAG,+BAA+B,KAChCiE,QAAQ,IAEVjE,GAAG,WAAW,KACZwkB,SAAS,IAEXxkB,GAAG,kBAAkB,KACnB,IAAI,OACF+b,OAAM,OACNC,QACEhjB,OAAO8iB,WACXC,OAAS,wBAAkBA,QAC3BC,OAAS,wBAAkBA,QACvBhjB,OAAOqM,QACTpB,SAGF,IAAI8X,UAAWC,QAAQ9jB,QAAOrC,MAAQA,KAAI7D,SAAQ6D,IAAMA,GAAGyF,UAAUC,IAAIvC,OAAOQ,OAAOsiB,WAAW8J,YAAW,IAE/G5lB,GAAG,SAAS,CAAComB,GAAIlpB,KACf,IAAI,OACF6e,OAAM,OACNC,QACEhjB,OAAO8iB,WACXC,OAAS,wBAAkBA,QAC3BC,OAAS,wBAAkBA,QAC3B,MAAM5F,SAAWlZ,EAAErL,OACnB,IAAIw0B,eAAiBrK,OAAO3c,SAAS+W,WAAa2F,OAAO1c,SAAS+W,UAClE,GAAIpd,OAAOuJ,YAAc8jB,eAAgB,CACvC,MAAM1X,KAAOzR,EAAEyR,MAAQzR,EAAE2Z,cAAgB3Z,EAAE2Z,eACvClI,OACF0X,eAAiB1X,KAAK2X,MAAK1X,QAAUmN,OAAO1c,SAASuP,SAAWoN,OAAO3c,SAASuP,UAEpF,CACA,GAAI5V,OAAOQ,OAAOsiB,WAAWmK,cAAgBI,eAAgB,CAC3D,GAAIrtB,OAAOutB,YAAcvtB,OAAOQ,OAAO+sB,YAAcvtB,OAAOQ,OAAO+sB,WAAWC,YAAcxtB,OAAOutB,WAAW1wB,KAAOugB,UAAYpd,OAAOutB,WAAW1wB,GAAGoM,SAASmU,WAAY,OAC3K,IAAIqQ,SACA1K,OAAO7pB,OACTu0B,SAAW1K,OAAO,GAAGzgB,UAAU2G,SAASjJ,OAAOQ,OAAOsiB,WAAWoK,aACxDlK,OAAO9pB,SAChBu0B,SAAWzK,OAAO,GAAG1gB,UAAU2G,SAASjJ,OAAOQ,OAAOsiB,WAAWoK,cAGjE3kB,MADe,IAAbklB,SACG,iBAEA,kBAEP,IAAI1K,UAAWC,QAAQ9jB,QAAOrC,MAAQA,KAAI7D,SAAQ6D,IAAMA,GAAGyF,UAAUorB,OAAO1tB,OAAOQ,OAAOsiB,WAAWoK,cACvG,KAEF,MAKMjG,QAAU,KACdjnB,OAAOnD,GAAGyF,UAAUC,OAAOvC,OAAOQ,OAAOsiB,WAAWqK,wBAAwB5vB,MAAM,MAClFiuB,SAAS,EAEX7yB,OAAO8S,OAAOzL,OAAO8iB,WAAY,CAC/BoE,OAVa,KACblnB,OAAOnD,GAAGyF,UAAU4G,UAAUlJ,OAAOQ,OAAOsiB,WAAWqK,wBAAwB5vB,MAAM,MACrFknB,OACAxZ,QAAQ,EAQRgc,gBACAhc,cACAwZ,UACA+G,iBAEJ,CCrMA,SAAS,sCAAkBnpB,SAIzB,YAHgB,IAAZA,UACFA,QAAU,IAEL,IAAIA,QAAQK,OAAOhF,QAAQ,eAAgB,QACjDA,QAAQ,KAAM,MACjB,CCFA,SAASiwB,WAAW5tB,MAClB,IAAI,OACFC,OAAM,aACNqpB,aAAY,GACZriB,GAAE,KACFuB,MACExI,KACJ,MAAM6tB,IAAM,oBAqCZ,IAAIC,WApCJxE,aAAa,CACXkE,WAAY,CACV1wB,GAAI,KACJixB,cAAe,OACfN,WAAW,EACXP,aAAa,EACbc,aAAc,KACdC,kBAAmB,KACnBC,eAAgB,KAChBC,aAAc,KACdC,qBAAqB,EACrBxR,KAAM,UAENyR,gBAAgB,EAChBC,mBAAoB,EACpBC,sBAAuBC,QAAUA,OACjCC,oBAAqBD,QAAUA,OAC/BE,YAAa,GAAGb,aAChBc,kBAAmB,GAAGd,oBACtBe,cAAe,GAAGf,OAClBgB,aAAc,GAAGhB,cACjBiB,WAAY,GAAGjB,YACfV,YAAa,GAAGU,aAChBkB,qBAAsB,GAAGlB,uBACzBmB,yBAA0B,GAAGnB,2BAC7BoB,eAAgB,GAAGpB,gBACnBhB,UAAW,GAAGgB,WACdqB,gBAAiB,GAAGrB,iBACpBsB,cAAe,GAAGtB,eAClBuB,wBAAyB,GAAGvB,kBAGhC5tB,OAAOutB,WAAa,CAClB1wB,GAAI,KACJuyB,QAAS,IAGX,IAAIC,mBAAqB,EACzB,SAASC,uBACP,OAAQtvB,OAAOQ,OAAO+sB,WAAW1wB,KAAOmD,OAAOutB,WAAW1wB,IAAM2F,MAAMC,QAAQzC,OAAOutB,WAAW1wB,KAAuC,IAAhCmD,OAAOutB,WAAW1wB,GAAG3D,MAC9H,CACA,SAASq2B,eAAeC,SAAUC,UAChC,MAAM,kBACJf,mBACE1uB,OAAOQ,OAAO+sB,WACbiC,WACLA,SAAWA,UAAyB,SAAbC,SAAsB,WAAa,QAAtC,qBAElBD,SAASltB,UAAUC,IAAI,GAAGmsB,qBAAqBe,aAC/CD,SAAWA,UAAyB,SAAbC,SAAsB,WAAa,QAAtC,oBAElBD,SAASltB,UAAUC,IAAI,GAAGmsB,qBAAqBe,YAAYA,YAGjE,CACA,SAASC,cAAcxrB,GACrB,MAAMsrB,SAAWtrB,EAAErL,OAAOyQ,QAAQ,sCAAkBtJ,OAAOQ,OAAO+sB,WAAWkB,cAC7E,IAAKe,SACH,OAEFtrB,EAAEsY,iBACF,MAAMpU,MAAQ,mBAAaonB,UAAYxvB,OAAOQ,OAAOqO,eACrD,GAAI7O,OAAOQ,OAAOuK,KAAM,CACtB,GAAI/K,OAAOgL,YAAc5C,MAAO,OAChCpI,OAAOoY,YAAYhQ,MACrB,MACEpI,OAAOsX,QAAQlP,MAEnB,CACA,SAAS6C,SAEP,MAAMgB,IAAMjM,OAAOiM,IACbzL,OAASR,OAAOQ,OAAO+sB,WAC7B,GAAI+B,uBAAwB,OAC5B,IAGIvuB,QACA8T,cAJAhY,GAAKmD,OAAOutB,WAAW1wB,GAC3BA,GAAK,wBAAkBA,IAIvB,MAAM0P,aAAevM,OAAOoM,SAAWpM,OAAOQ,OAAO4L,QAAQC,QAAUrM,OAAOoM,QAAQvC,OAAO3Q,OAAS8G,OAAO6J,OAAO3Q,OAC9Gy2B,MAAQ3vB,OAAOQ,OAAOuK,KAAO5J,KAAKiJ,KAAKmC,aAAevM,OAAOQ,OAAOqO,gBAAkB7O,OAAOwM,SAAStT,OAY5G,GAXI8G,OAAOQ,OAAOuK,MAChB8J,cAAgB7U,OAAO8U,mBAAqB,EAC5C/T,QAAUf,OAAOQ,OAAOqO,eAAiB,EAAI1N,KAAKuN,MAAM1O,OAAOgL,UAAYhL,OAAOQ,OAAOqO,gBAAkB7O,OAAOgL,gBAC7E,IAArBhL,OAAOiQ,WACvBlP,QAAUf,OAAOiQ,UACjB4E,cAAgB7U,OAAO+U,oBAEvBF,cAAgB7U,OAAO6U,eAAiB,EACxC9T,QAAUf,OAAOqK,aAAe,GAGd,YAAhB7J,OAAOmc,MAAsB3c,OAAOutB,WAAW6B,SAAWpvB,OAAOutB,WAAW6B,QAAQl2B,OAAS,EAAG,CAClG,MAAMk2B,QAAUpvB,OAAOutB,WAAW6B,QAClC,IAAIQ,WACApW,UACAqW,SAsBJ,GArBIrvB,OAAO4tB,iBACTP,WAAa/pB,iBAAiBsrB,QAAQ,GAAIpvB,OAAOqL,eAAiB,QAAU,UAAU,GACtFxO,GAAG7D,SAAQyzB,QACTA,MAAMvyB,MAAM8F,OAAOqL,eAAiB,QAAU,UAAewiB,YAAcrtB,OAAO6tB,mBAAqB,GAA7C,IAAmD,IAE3G7tB,OAAO6tB,mBAAqB,QAAuB3vB,IAAlBmW,gBACnCwa,oBAAsBtuB,SAAW8T,eAAiB,GAC9Cwa,mBAAqB7uB,OAAO6tB,mBAAqB,EACnDgB,mBAAqB7uB,OAAO6tB,mBAAqB,EACxCgB,mBAAqB,IAC9BA,mBAAqB,IAGzBO,WAAazuB,KAAKC,IAAIL,QAAUsuB,mBAAoB,GACpD7V,UAAYoW,YAAczuB,KAAKE,IAAI+tB,QAAQl2B,OAAQsH,OAAO6tB,oBAAsB,GAChFwB,UAAYrW,UAAYoW,YAAc,GAExCR,QAAQp2B,SAAQw2B,WACd,MAAMM,gBAAkB,IAAI,CAAC,GAAI,QAAS,aAAc,QAAS,aAAc,SAAStyB,KAAIuyB,QAAU,GAAGvvB,OAAOkuB,oBAAoBqB,YAAWvyB,KAAIwyB,GAAkB,iBAANA,GAAkBA,EAAE3pB,SAAS,KAAO2pB,EAAEzyB,MAAM,KAAOyyB,IAAGC,OACrNT,SAASltB,UAAU4G,UAAU4mB,gBAAgB,IAE3CjzB,GAAG3D,OAAS,EACdk2B,QAAQp2B,SAAQk3B,SACd,MAAMC,YAAc,mBAAaD,QAC7BC,cAAgBpvB,QAClBmvB,OAAO5tB,UAAUC,OAAO/B,OAAOkuB,kBAAkBnxB,MAAM,MAC9CyC,OAAOuJ,WAChB2mB,OAAO/1B,aAAa,OAAQ,UAE1BqG,OAAO4tB,iBACL+B,aAAeP,YAAcO,aAAe3W,WAC9C0W,OAAO5tB,UAAUC,OAAO,GAAG/B,OAAOkuB,yBAAyBnxB,MAAM,MAE/D4yB,cAAgBP,YAClBL,eAAeW,OAAQ,QAErBC,cAAgB3W,WAClB+V,eAAeW,OAAQ,QAE3B,QAEG,CACL,MAAMA,OAASd,QAAQruB,SASvB,GARImvB,QACFA,OAAO5tB,UAAUC,OAAO/B,OAAOkuB,kBAAkBnxB,MAAM,MAErDyC,OAAOuJ,WACT6lB,QAAQp2B,SAAQ,CAACw2B,SAAUW,eACzBX,SAASr1B,aAAa,OAAQg2B,cAAgBpvB,QAAU,gBAAkB,SAAS,IAGnFP,OAAO4tB,eAAgB,CACzB,MAAMgC,qBAAuBhB,QAAQQ,YAC/BS,oBAAsBjB,QAAQ5V,WACpC,IAAK,IAAI5a,EAAIgxB,WAAYhxB,GAAK4a,UAAW5a,GAAK,EACxCwwB,QAAQxwB,IACVwwB,QAAQxwB,GAAG0D,UAAUC,OAAO,GAAG/B,OAAOkuB,yBAAyBnxB,MAAM,MAGzEgyB,eAAea,qBAAsB,QACrCb,eAAec,oBAAqB,OACtC,CACF,CACA,GAAI7vB,OAAO4tB,eAAgB,CACzB,MAAMkC,qBAAuBnvB,KAAKE,IAAI+tB,QAAQl2B,OAAQsH,OAAO6tB,mBAAqB,GAC5EkC,eAAiB1C,WAAayC,qBAAuBzC,YAAc,EAAIgC,SAAWhC,WAClF2C,WAAavkB,IAAM,QAAU,OACnCmjB,QAAQp2B,SAAQk3B,SACdA,OAAOh2B,MAAM8F,OAAOqL,eAAiBmlB,WAAa,OAAS,GAAGD,iBAAiB,GAEnF,CACF,CACA1zB,GAAG7D,SAAQ,CAACyzB,MAAOgE,cASjB,GARoB,aAAhBjwB,OAAOmc,OACT8P,MAAM9yB,iBAAiB,sCAAkB6G,OAAOouB,eAAe51B,SAAQ03B,aACrEA,WAAWC,YAAcnwB,OAAO8tB,sBAAsBvtB,QAAU,EAAE,IAEpE0rB,MAAM9yB,iBAAiB,sCAAkB6G,OAAOquB,aAAa71B,SAAQ43B,UACnEA,QAAQD,YAAcnwB,OAAOguB,oBAAoBmB,MAAM,KAGvC,gBAAhBnvB,OAAOmc,KAAwB,CACjC,IAAIkU,qBAEFA,qBADErwB,OAAO2tB,oBACcnuB,OAAOqL,eAAiB,WAAa,aAErCrL,OAAOqL,eAAiB,aAAe,WAEhE,MAAMylB,OAAS/vB,QAAU,GAAK4uB,MAC9B,IAAIoB,OAAS,EACTC,OAAS,EACgB,eAAzBH,qBACFE,OAASD,MAETE,OAASF,MAEXrE,MAAM9yB,iBAAiB,sCAAkB6G,OAAOsuB,uBAAuB91B,SAAQi4B,aAC7EA,WAAW/2B,MAAMmD,UAAY,6BAA6B0zB,kBAAkBC,UAC5EC,WAAW/2B,MAAMyrB,mBAAqB,GAAG3lB,OAAOQ,OAAOC,SAAS,GAEpE,CACoB,WAAhBD,OAAOmc,MAAqBnc,OAAO0tB,cACrCzB,MAAMyE,UAAY1wB,OAAO0tB,aAAaluB,OAAQe,QAAU,EAAG4uB,OACxC,IAAfc,YAAkBloB,KAAK,mBAAoBkkB,SAE5B,IAAfgE,YAAkBloB,KAAK,mBAAoBkkB,OAC/ClkB,KAAK,mBAAoBkkB,QAEvBzsB,OAAOQ,OAAO6P,eAAiBrQ,OAAOqM,SACxCogB,MAAMnqB,UAAUtC,OAAO8lB,SAAW,MAAQ,UAAUtlB,OAAOosB,UAC7D,GAEJ,CACA,SAASuE,SAEP,MAAM3wB,OAASR,OAAOQ,OAAO+sB,WAC7B,GAAI+B,uBAAwB,OAC5B,MAAM/iB,aAAevM,OAAOoM,SAAWpM,OAAOQ,OAAO4L,QAAQC,QAAUrM,OAAOoM,QAAQvC,OAAO3Q,OAAS8G,OAAOsK,MAAQtK,OAAOQ,OAAO8J,KAAKC,KAAO,EAAIvK,OAAO6J,OAAO3Q,OAASiI,KAAKiJ,KAAKpK,OAAOQ,OAAO8J,KAAKC,MAAQvK,OAAO6J,OAAO3Q,OAC7N,IAAI2D,GAAKmD,OAAOutB,WAAW1wB,GAC3BA,GAAK,wBAAkBA,IACvB,IAAIu0B,eAAiB,GACrB,GAAoB,YAAhB5wB,OAAOmc,KAAoB,CAC7B,IAAI0U,gBAAkBrxB,OAAOQ,OAAOuK,KAAO5J,KAAKiJ,KAAKmC,aAAevM,OAAOQ,OAAOqO,gBAAkB7O,OAAOwM,SAAStT,OAChH8G,OAAOQ,OAAOif,UAAYzf,OAAOQ,OAAOif,SAASpT,SAAWglB,gBAAkB9kB,eAChF8kB,gBAAkB9kB,cAEpB,IAAK,IAAI3N,EAAI,EAAGA,EAAIyyB,gBAAiBzyB,GAAK,EACpC4B,OAAOutB,aACTqD,gBAAkB5wB,OAAOutB,aAAazvB,KAAK0B,OAAQpB,EAAG4B,OAAOiuB,aAG7D2C,gBAAkB,IAAI5wB,OAAOstB,iBAAiB9tB,OAAOuJ,UAAY,gBAAkB,aAAa/I,OAAOiuB,kBAAkBjuB,OAAOstB,gBAGtI,CACoB,aAAhBttB,OAAOmc,OAEPyU,eADE5wB,OAAOytB,eACQztB,OAAOytB,eAAe3vB,KAAK0B,OAAQQ,OAAOouB,aAAcpuB,OAAOquB,YAE/D,gBAAgBruB,OAAOouB,wCAAkDpuB,OAAOquB,uBAGjF,gBAAhBruB,OAAOmc,OAEPyU,eADE5wB,OAAOwtB,kBACQxtB,OAAOwtB,kBAAkB1vB,KAAK0B,OAAQQ,OAAOsuB,sBAE7C,gBAAgBtuB,OAAOsuB,iCAG5C9uB,OAAOutB,WAAW6B,QAAU,GAC5BvyB,GAAG7D,SAAQyzB,QACW,WAAhBjsB,OAAOmc,OACT8P,MAAMyE,UAAYE,gBAAkB,IAElB,YAAhB5wB,OAAOmc,MACT3c,OAAOutB,WAAW6B,QAAQvrB,QAAQ4oB,MAAM9yB,iBAAiB,sCAAkB6G,OAAOiuB,cACpF,IAEkB,WAAhBjuB,OAAOmc,MACTpU,KAAK,mBAAoB1L,GAAG,GAEhC,CACA,SAAS4nB,OACPzkB,OAAOQ,OAAO+sB,WAAa,wDAA0BvtB,OAAQA,OAAOwmB,eAAe+G,WAAYvtB,OAAOQ,OAAO+sB,WAAY,CACvH1wB,GAAI,sBAEN,MAAM2D,OAASR,OAAOQ,OAAO+sB,WAC7B,IAAK/sB,OAAO3D,GAAI,OAChB,IAAIA,GACqB,iBAAd2D,OAAO3D,IAAmBmD,OAAOuJ,YAC1C1M,GAAKmD,OAAOnD,GAAGnD,cAAc8G,OAAO3D,KAEjCA,IAA2B,iBAAd2D,OAAO3D,KACvBA,GAAK,IAAI5B,SAAStB,iBAAiB6G,OAAO3D,MAEvCA,KACHA,GAAK2D,OAAO3D,IAETA,IAAoB,IAAdA,GAAG3D,SACV8G,OAAOQ,OAAOwkB,mBAA0C,iBAAdxkB,OAAO3D,IAAmB2F,MAAMC,QAAQ5F,KAAOA,GAAG3D,OAAS,IACvG2D,GAAK,IAAImD,OAAOnD,GAAGlD,iBAAiB6G,OAAO3D,KAEvCA,GAAG3D,OAAS,IACd2D,GAAKA,GAAGqC,QAAOutB,OACT,qBAAeA,MAAO,WAAW,KAAOzsB,OAAOnD,KAElD,KAGH2F,MAAMC,QAAQ5F,KAAqB,IAAdA,GAAG3D,SAAc2D,GAAKA,GAAG,IAClDlE,OAAO8S,OAAOzL,OAAOutB,WAAY,CAC/B1wB,QAEFA,GAAK,wBAAkBA,IACvBA,GAAG7D,SAAQyzB,QACW,YAAhBjsB,OAAOmc,MAAsBnc,OAAOgtB,WACtCf,MAAMnqB,UAAUC,QAAQ/B,OAAOwuB,gBAAkB,IAAIzxB,MAAM,MAE7DkvB,MAAMnqB,UAAUC,IAAI/B,OAAOmuB,cAAgBnuB,OAAOmc,MAClD8P,MAAMnqB,UAAUC,IAAIvC,OAAOqL,eAAiB7K,OAAOyuB,gBAAkBzuB,OAAO0uB,eACxD,YAAhB1uB,OAAOmc,MAAsBnc,OAAO4tB,iBACtC3B,MAAMnqB,UAAUC,IAAI,GAAG/B,OAAOmuB,gBAAgBnuB,OAAOmc,gBACrD0S,mBAAqB,EACjB7uB,OAAO6tB,mBAAqB,IAC9B7tB,OAAO6tB,mBAAqB,IAGZ,gBAAhB7tB,OAAOmc,MAA0Bnc,OAAO2tB,qBAC1C1B,MAAMnqB,UAAUC,IAAI/B,OAAOuuB,0BAEzBvuB,OAAOgtB,WACTf,MAAMpzB,iBAAiB,QAASq2B,eAE7B1vB,OAAOqM,SACVogB,MAAMnqB,UAAUC,IAAI/B,OAAOosB,UAC7B,IAEJ,CACA,SAASpB,UACP,MAAMhrB,OAASR,OAAOQ,OAAO+sB,WAC7B,GAAI+B,uBAAwB,OAC5B,IAAIzyB,GAAKmD,OAAOutB,WAAW1wB,GACvBA,KACFA,GAAK,wBAAkBA,IACvBA,GAAG7D,SAAQyzB,QACTA,MAAMnqB,UAAU4G,OAAO1I,OAAO0sB,aAC9BT,MAAMnqB,UAAU4G,OAAO1I,OAAOmuB,cAAgBnuB,OAAOmc,MACrD8P,MAAMnqB,UAAU4G,OAAOlJ,OAAOqL,eAAiB7K,OAAOyuB,gBAAkBzuB,OAAO0uB,eAC3E1uB,OAAOgtB,YACTf,MAAMnqB,UAAU4G,WAAW1I,OAAOwuB,gBAAkB,IAAIzxB,MAAM,MAC9DkvB,MAAMnzB,oBAAoB,QAASo2B,eACrC,KAGA1vB,OAAOutB,WAAW6B,SAASpvB,OAAOutB,WAAW6B,QAAQp2B,SAAQyzB,OAASA,MAAMnqB,UAAU4G,UAAU1I,OAAOkuB,kBAAkBnxB,MAAM,OACrI,CACAyJ,GAAG,mBAAmB,KACpB,IAAKhH,OAAOutB,aAAevtB,OAAOutB,WAAW1wB,GAAI,OACjD,MAAM2D,OAASR,OAAOQ,OAAO+sB,WAC7B,IAAI,GACF1wB,IACEmD,OAAOutB,WACX1wB,GAAK,wBAAkBA,IACvBA,GAAG7D,SAAQyzB,QACTA,MAAMnqB,UAAU4G,OAAO1I,OAAOyuB,gBAAiBzuB,OAAO0uB,eACtDzC,MAAMnqB,UAAUC,IAAIvC,OAAOqL,eAAiB7K,OAAOyuB,gBAAkBzuB,OAAO0uB,cAAc,GAC1F,IAEJloB,GAAG,QAAQ,MACgC,IAArChH,OAAOQ,OAAO+sB,WAAWlhB,QAE3B4a,WAEAxC,OACA0M,SACAlmB,SACF,IAEFjE,GAAG,qBAAqB,UACU,IAArBhH,OAAOiQ,WAChBhF,QACF,IAEFjE,GAAG,mBAAmB,KACpBiE,QAAQ,IAEVjE,GAAG,wBAAwB,KACzBmqB,SACAlmB,QAAQ,IAEVjE,GAAG,WAAW,KACZwkB,SAAS,IAEXxkB,GAAG,kBAAkB,KACnB,IAAI,GACFnK,IACEmD,OAAOutB,WACP1wB,KACFA,GAAK,wBAAkBA,IACvBA,GAAG7D,SAAQyzB,OAASA,MAAMnqB,UAAUtC,OAAOqM,QAAU,SAAW,OAAOrM,OAAOQ,OAAO+sB,WAAWX,aAClG,IAEF5lB,GAAG,eAAe,KAChBiE,QAAQ,IAEVjE,GAAG,SAAS,CAAComB,GAAIlpB,KACf,MAAMkZ,SAAWlZ,EAAErL,OACbgE,GAAK,wBAAkBmD,OAAOutB,WAAW1wB,IAC/C,GAAImD,OAAOQ,OAAO+sB,WAAW1wB,IAAMmD,OAAOQ,OAAO+sB,WAAWN,aAAepwB,IAAMA,GAAG3D,OAAS,IAAMkkB,SAAS9a,UAAU2G,SAASjJ,OAAOQ,OAAO+sB,WAAWkB,aAAc,CACpK,GAAIzuB,OAAO8iB,aAAe9iB,OAAO8iB,WAAWC,QAAU3F,WAAapd,OAAO8iB,WAAWC,QAAU/iB,OAAO8iB,WAAWE,QAAU5F,WAAapd,OAAO8iB,WAAWE,QAAS,OACnK,MAAMyK,SAAW5wB,GAAG,GAAGyF,UAAU2G,SAASjJ,OAAOQ,OAAO+sB,WAAWL,aAEjE3kB,MADe,IAAbklB,SACG,iBAEA,kBAEP5wB,GAAG7D,SAAQyzB,OAASA,MAAMnqB,UAAUorB,OAAO1tB,OAAOQ,OAAO+sB,WAAWL,cACtE,KAEF,MAaMjG,QAAU,KACdjnB,OAAOnD,GAAGyF,UAAUC,IAAIvC,OAAOQ,OAAO+sB,WAAW4B,yBACjD,IAAI,GACFtyB,IACEmD,OAAOutB,WACP1wB,KACFA,GAAK,wBAAkBA,IACvBA,GAAG7D,SAAQyzB,OAASA,MAAMnqB,UAAUC,IAAIvC,OAAOQ,OAAO+sB,WAAW4B,4BAEnE3D,SAAS,EAEX7yB,OAAO8S,OAAOzL,OAAOutB,WAAY,CAC/BrG,OAzBa,KACblnB,OAAOnD,GAAGyF,UAAU4G,OAAOlJ,OAAOQ,OAAO+sB,WAAW4B,yBACpD,IAAI,GACFtyB,IACEmD,OAAOutB,WACP1wB,KACFA,GAAK,wBAAkBA,IACvBA,GAAG7D,SAAQyzB,OAASA,MAAMnqB,UAAU4G,OAAOlJ,OAAOQ,OAAO+sB,WAAW4B,4BAEtE1K,OACA0M,SACAlmB,QAAQ,EAeRgc,gBACAkK,cACAlmB,cACAwZ,UACA+G,iBAEJ,CCrbA,SAAS8F,KAAKvxB,MACZ,IAAI,OACFC,OAAM,aACNqpB,aAAY,GACZriB,GAAE,KACFuB,MACExI,KACJ,MAAMtD,OAAS,2BACf4sB,aAAa,CACXkI,KAAM,CACJllB,SAAS,EACTmlB,qBAAqB,EACrBC,SAAU,EACV3J,SAAU,EACV4F,QAAQ,EACRgE,eAAgB,wBAChBC,iBAAkB,yBAGtB3xB,OAAOuxB,KAAO,CACZllB,SAAS,GAEX,IAEIulB,mBACAC,iBAHAC,aAAe,EACfC,WAAY,EAGhB,MAAMC,QAAU,GACVC,QAAU,CACdC,QAAS,EACTC,QAAS,EACTrpB,aAASpK,EACT0zB,gBAAY1zB,EACZ2zB,iBAAa3zB,EACb2K,aAAS3K,EACT4zB,iBAAa5zB,EACb+yB,SAAU,GAENc,MAAQ,CACZ/U,eAAW9e,EACX+e,aAAS/e,EACT+f,cAAU/f,EACVggB,cAAUhgB,EACV8zB,UAAM9zB,EACN+zB,UAAM/zB,EACNg0B,UAAMh0B,EACNi0B,UAAMj0B,EACN2G,WAAO3G,EACP6G,YAAQ7G,EACR0d,YAAQ1d,EACRkgB,YAAQlgB,EACRk0B,aAAc,CAAC,EACfC,eAAgB,CAAC,GAEbpJ,SAAW,CACfnT,OAAG5X,EACH6X,OAAG7X,EACHo0B,mBAAep0B,EACfq0B,mBAAer0B,EACfs0B,cAAUt0B,GAEZ,IAsJIu0B,sBAtJAnC,MAAQ,EAcZ,SAASoC,4BACP,GAAIlB,QAAQ94B,OAAS,EAAG,OAAO,EAC/B,MAAMi6B,GAAKnB,QAAQ,GAAGhV,MAChBoW,GAAKpB,QAAQ,GAAGrT,MAChB0U,GAAKrB,QAAQ,GAAGhV,MAChBsW,GAAKtB,QAAQ,GAAGrT,MAEtB,OADiBxd,KAAKgf,MAAMkT,GAAKF,KAAO,GAAKG,GAAKF,KAAO,EAE3D,CACA,SAASG,cACP,MAAM/yB,OAASR,OAAOQ,OAAO+wB,KACvBE,SAAWQ,QAAQK,YAAY/c,aAAa,qBAAuB/U,OAAOixB,SAChF,GAAIjxB,OAAOgxB,qBAAuBS,QAAQ5oB,SAAW4oB,QAAQ5oB,QAAQmqB,aAAc,CACjF,MAAMC,cAAgBxB,QAAQ5oB,QAAQmqB,aAAevB,QAAQ5oB,QAAQpF,YACrE,OAAO9C,KAAKE,IAAIoyB,cAAehC,SACjC,CACA,OAAOA,QACT,CAYA,SAASiC,iBAAiBxvB,GACxB,MAAM4V,cAHC9Z,OAAOuJ,UAAY,eAAiB,IAAIvJ,OAAOQ,OAAOgJ,aAI7D,QAAItF,EAAErL,OAAOiJ,QAAQgY,gBACjB9Z,OAAO6J,OAAO3K,QAAO4J,SAAWA,QAAQG,SAAS/E,EAAErL,UAASK,OAAS,CAE3E,CASA,SAASy6B,eAAezvB,GAItB,GAHsB,UAAlBA,EAAEiZ,aACJ6U,QAAQ3pB,OAAO,EAAG2pB,QAAQ94B,SAEvBw6B,iBAAiBxvB,GAAI,OAC1B,MAAM1D,OAASR,OAAOQ,OAAO+wB,KAI7B,GAHAK,oBAAqB,EACrBC,kBAAmB,EACnBG,QAAQnuB,KAAKK,KACT8tB,QAAQ94B,OAAS,GAArB,CAKA,GAFA04B,oBAAqB,EACrBK,QAAQ2B,WAAaV,6BAChBjB,QAAQnpB,QAAS,CACpBmpB,QAAQnpB,QAAU5E,EAAErL,OAAOyQ,QAAQ,IAAItJ,OAAOQ,OAAOgJ,4BAChDyoB,QAAQnpB,UAASmpB,QAAQnpB,QAAU9I,OAAO6J,OAAO7J,OAAOqK,cAC7D,IAAIhB,QAAU4oB,QAAQnpB,QAAQpP,cAAc,IAAI8G,OAAOkxB,kBAUvD,GATIroB,UACFA,QAAUA,QAAQ1P,iBAAiB,kDAAkD,IAEvFs4B,QAAQ5oB,QAAUA,QAEhB4oB,QAAQK,YADNjpB,QACoB,qBAAe4oB,QAAQ5oB,QAAS,IAAI7I,OAAOkxB,kBAAkB,QAE7DhzB,GAEnBuzB,QAAQK,YAEX,YADAL,QAAQ5oB,aAAU3K,GAGpBuzB,QAAQR,SAAW8B,aACrB,CACA,GAAItB,QAAQ5oB,QAAS,CACnB,MAAO6oB,QAASC,SA3DpB,WACE,GAAIH,QAAQ94B,OAAS,EAAG,MAAO,CAC7Bod,EAAG,KACHC,EAAG,MAEL,MAAM3T,IAAMqvB,QAAQ5oB,QAAQxG,wBAC5B,MAAO,EAAEmvB,QAAQ,GAAGhV,OAASgV,QAAQ,GAAGhV,MAAQgV,QAAQ,GAAGhV,OAAS,EAAIpa,IAAI0T,EAAI7Z,OAAO0G,SAAW2uB,cAAeE,QAAQ,GAAGrT,OAASqT,QAAQ,GAAGrT,MAAQqT,QAAQ,GAAGrT,OAAS,EAAI/b,IAAI2T,EAAI9Z,OAAOwG,SAAW6uB,aAC5M,CAoD+B+B,GAC3B5B,QAAQC,QAAUA,QAClBD,QAAQE,QAAUA,QAClBF,QAAQ5oB,QAAQnP,MAAMyrB,mBAAqB,KAC7C,CACAoM,WAAY,CA5BZ,CA6BF,CACA,SAAS+B,gBAAgB5vB,GACvB,IAAKwvB,iBAAiBxvB,GAAI,OAC1B,MAAM1D,OAASR,OAAOQ,OAAO+wB,KACvBA,KAAOvxB,OAAOuxB,KACdwC,aAAe/B,QAAQgC,WAAUC,UAAYA,SAASrX,YAAc1Y,EAAE0Y,YACxEmX,cAAgB,IAAG/B,QAAQ+B,cAAgB7vB,GAC3C8tB,QAAQ94B,OAAS,IAGrB24B,kBAAmB,EACnBI,QAAQiC,UAAYhB,4BACfjB,QAAQ5oB,UAGbkoB,KAAKT,MAAQmB,QAAQiC,UAAYjC,QAAQ2B,WAAa9B,aAClDP,KAAKT,MAAQmB,QAAQR,WACvBF,KAAKT,MAAQmB,QAAQR,SAAW,GAAKF,KAAKT,MAAQmB,QAAQR,SAAW,IAAM,IAEzEF,KAAKT,MAAQtwB,OAAOsnB,WACtByJ,KAAKT,MAAQtwB,OAAOsnB,SAAW,GAAKtnB,OAAOsnB,SAAWyJ,KAAKT,MAAQ,IAAM,IAE3EmB,QAAQ5oB,QAAQnP,MAAMmD,UAAY,4BAA4Bk0B,KAAKT,UACrE,CACA,SAASqD,aAAajwB,GACpB,IAAKwvB,iBAAiBxvB,GAAI,OAC1B,GAAsB,UAAlBA,EAAEiZ,aAAsC,eAAXjZ,EAAEyY,KAAuB,OAC1D,MAAMnc,OAASR,OAAOQ,OAAO+wB,KACvBA,KAAOvxB,OAAOuxB,KACdwC,aAAe/B,QAAQgC,WAAUC,UAAYA,SAASrX,YAAc1Y,EAAE0Y,YACxEmX,cAAgB,GAAG/B,QAAQ3pB,OAAO0rB,aAAc,GAC/CnC,oBAAuBC,mBAG5BD,oBAAqB,EACrBC,kBAAmB,EACdI,QAAQ5oB,UACbkoB,KAAKT,MAAQ3vB,KAAKC,IAAID,KAAKE,IAAIkwB,KAAKT,MAAOmB,QAAQR,UAAWjxB,OAAOsnB,UACrEmK,QAAQ5oB,QAAQnP,MAAMyrB,mBAAqB,GAAG3lB,OAAOQ,OAAOC,UAC5DwxB,QAAQ5oB,QAAQnP,MAAMmD,UAAY,4BAA4Bk0B,KAAKT,SACnEgB,aAAeP,KAAKT,MACpBiB,WAAY,EACRR,KAAKT,MAAQ,GAAKmB,QAAQnpB,QAC5BmpB,QAAQnpB,QAAQxG,UAAUC,IAAI,GAAG/B,OAAOmxB,oBAC/BJ,KAAKT,OAAS,GAAKmB,QAAQnpB,SACpCmpB,QAAQnpB,QAAQxG,UAAU4G,OAAO,GAAG1I,OAAOmxB,oBAE1B,IAAfJ,KAAKT,QACPmB,QAAQC,QAAU,EAClBD,QAAQE,QAAU,EAClBF,QAAQnpB,aAAUpK,IAEtB,CAEA,SAAS2gB,iBACPrf,OAAO0b,gBAAgB4E,iCAAkC,CAC3D,CAkBA,SAASZ,YAAYxb,GACnB,IAAKwvB,iBAAiBxvB,KA3HxB,SAAkCA,GAChC,MAAMrC,SAAW,IAAI7B,OAAOQ,OAAO+wB,KAAKG,iBACxC,QAAIxtB,EAAErL,OAAOiJ,QAAQD,WACjB,IAAI7B,OAAOsrB,OAAO3xB,iBAAiBkI,WAAW3C,QAAOuoB,aAAeA,YAAYxe,SAAS/E,EAAErL,UAASK,OAAS,CAEnH,CAsH+Bk7B,CAAyBlwB,GACpD,OAEF,MAAMqtB,KAAOvxB,OAAOuxB,KACpB,IAAKU,QAAQ5oB,QACX,OAEF,IAAKkpB,MAAM/U,YAAcyU,QAAQnpB,QAC/B,OAEGypB,MAAM9U,UACT8U,MAAMltB,MAAQ4sB,QAAQ5oB,QAAQpF,aAAeguB,QAAQ5oB,QAAQ8B,YAC7DonB,MAAMhtB,OAAS0sB,QAAQ5oB,QAAQ+H,cAAgB6gB,QAAQ5oB,QAAQ+B,aAC/DmnB,MAAMnW,OAASxf,aAAaq1B,QAAQK,YAAa,MAAQ,EACzDC,MAAM3T,OAAShiB,aAAaq1B,QAAQK,YAAa,MAAQ,EACzDL,QAAQG,WAAaH,QAAQnpB,QAAQ7E,YACrCguB,QAAQI,YAAcJ,QAAQnpB,QAAQsI,aACtC6gB,QAAQK,YAAYp4B,MAAMyrB,mBAAqB,OAGjD,MAAM0O,YAAc9B,MAAMltB,MAAQksB,KAAKT,MACjCwD,aAAe/B,MAAMhtB,OAASgsB,KAAKT,MACzCyB,MAAMC,KAAOrxB,KAAKE,IAAI4wB,QAAQG,WAAa,EAAIiC,YAAc,EAAG,GAChE9B,MAAMG,MAAQH,MAAMC,KACpBD,MAAME,KAAOtxB,KAAKE,IAAI4wB,QAAQI,YAAc,EAAIiC,aAAe,EAAG,GAClE/B,MAAMI,MAAQJ,MAAME,KACpBF,MAAMM,eAAevc,EAAI0b,QAAQ94B,OAAS,EAAI84B,QAAQ,GAAGhV,MAAQ9Y,EAAE8Y,MACnEuV,MAAMM,eAAetc,EAAIyb,QAAQ94B,OAAS,EAAI84B,QAAQ,GAAGrT,MAAQza,EAAEya,MAKnE,GAJoBxd,KAAKC,IAAID,KAAKyN,IAAI2jB,MAAMM,eAAevc,EAAIic,MAAMK,aAAatc,GAAInV,KAAKyN,IAAI2jB,MAAMM,eAAetc,EAAIgc,MAAMK,aAAarc,IACzH,IAChBvW,OAAOue,YAAa,IAEjBgU,MAAM9U,UAAYsU,UAAW,CAChC,GAAI/xB,OAAOqL,iBAAmBlK,KAAKuN,MAAM6jB,MAAMC,QAAUrxB,KAAKuN,MAAM6jB,MAAMnW,SAAWmW,MAAMM,eAAevc,EAAIic,MAAMK,aAAatc,GAAKnV,KAAKuN,MAAM6jB,MAAMG,QAAUvxB,KAAKuN,MAAM6jB,MAAMnW,SAAWmW,MAAMM,eAAevc,EAAIic,MAAMK,aAAatc,GAGvO,OAFAic,MAAM/U,WAAY,OAClB6B,iBAGF,IAAKrf,OAAOqL,iBAAmBlK,KAAKuN,MAAM6jB,MAAME,QAAUtxB,KAAKuN,MAAM6jB,MAAM3T,SAAW2T,MAAMM,eAAetc,EAAIgc,MAAMK,aAAarc,GAAKpV,KAAKuN,MAAM6jB,MAAMI,QAAUxxB,KAAKuN,MAAM6jB,MAAM3T,SAAW2T,MAAMM,eAAetc,EAAIgc,MAAMK,aAAarc,GAGxO,OAFAgc,MAAM/U,WAAY,OAClB6B,gBAGJ,CACInb,EAAEqc,YACJrc,EAAEsY,iBAEJtY,EAAEwc,kBAhEFxkB,aAAa+2B,uBACbjzB,OAAO0b,gBAAgB4E,iCAAkC,EACzD2S,sBAAwBh3B,YAAW,KACjCojB,gBAAgB,IA+DlBkT,MAAM9U,SAAU,EAChB,MAAM8W,YAAchD,KAAKT,MAAQgB,eAAiBG,QAAQR,SAAWzxB,OAAOQ,OAAO+wB,KAAKzJ,WAClF,QACJoK,QAAO,QACPC,SACEF,QACJM,MAAM9T,SAAW8T,MAAMM,eAAevc,EAAIic,MAAMK,aAAatc,EAAIic,MAAMnW,OAASmY,YAAchC,MAAMltB,MAAkB,EAAV6sB,SAC5GK,MAAM7T,SAAW6T,MAAMM,eAAetc,EAAIgc,MAAMK,aAAarc,EAAIgc,MAAM3T,OAAS2V,YAAchC,MAAMhtB,OAAmB,EAAV4sB,SACzGI,MAAM9T,SAAW8T,MAAMC,OACzBD,MAAM9T,SAAW8T,MAAMC,KAAO,GAAKD,MAAMC,KAAOD,MAAM9T,SAAW,IAAM,IAErE8T,MAAM9T,SAAW8T,MAAMG,OACzBH,MAAM9T,SAAW8T,MAAMG,KAAO,GAAKH,MAAM9T,SAAW8T,MAAMG,KAAO,IAAM,IAErEH,MAAM7T,SAAW6T,MAAME,OACzBF,MAAM7T,SAAW6T,MAAME,KAAO,GAAKF,MAAME,KAAOF,MAAM7T,SAAW,IAAM,IAErE6T,MAAM7T,SAAW6T,MAAMI,OACzBJ,MAAM7T,SAAW6T,MAAMI,KAAO,GAAKJ,MAAM7T,SAAW6T,MAAMI,KAAO,IAAM,IAIpElJ,SAASqJ,gBAAerJ,SAASqJ,cAAgBP,MAAMM,eAAevc,GACtEmT,SAASsJ,gBAAetJ,SAASsJ,cAAgBR,MAAMM,eAAetc,GACtEkT,SAASuJ,WAAUvJ,SAASuJ,SAAWj3B,KAAKY,OACjD8sB,SAASnT,GAAKic,MAAMM,eAAevc,EAAImT,SAASqJ,gBAAkB/2B,KAAKY,MAAQ8sB,SAASuJ,UAAY,EACpGvJ,SAASlT,GAAKgc,MAAMM,eAAetc,EAAIkT,SAASsJ,gBAAkBh3B,KAAKY,MAAQ8sB,SAASuJ,UAAY,EAChG7xB,KAAKyN,IAAI2jB,MAAMM,eAAevc,EAAImT,SAASqJ,eAAiB,IAAGrJ,SAASnT,EAAI,GAC5EnV,KAAKyN,IAAI2jB,MAAMM,eAAetc,EAAIkT,SAASsJ,eAAiB,IAAGtJ,SAASlT,EAAI,GAChFkT,SAASqJ,cAAgBP,MAAMM,eAAevc,EAC9CmT,SAASsJ,cAAgBR,MAAMM,eAAetc,EAC9CkT,SAASuJ,SAAWj3B,KAAKY,MACzBs1B,QAAQK,YAAYp4B,MAAMmD,UAAY,eAAek1B,MAAM9T,eAAe8T,MAAM7T,eAClF,CAoCA,SAAS8V,kBACP,MAAMjD,KAAOvxB,OAAOuxB,KAChBU,QAAQnpB,SAAW9I,OAAOqK,cAAgBrK,OAAO6J,OAAO1K,QAAQ8yB,QAAQnpB,WACtEmpB,QAAQ5oB,UACV4oB,QAAQ5oB,QAAQnP,MAAMmD,UAAY,+BAEhC40B,QAAQK,cACVL,QAAQK,YAAYp4B,MAAMmD,UAAY,sBAExC40B,QAAQnpB,QAAQxG,UAAU4G,OAAO,GAAGlJ,OAAOQ,OAAO+wB,KAAKI,oBACvDJ,KAAKT,MAAQ,EACbgB,aAAe,EACfG,QAAQnpB,aAAUpK,EAClBuzB,QAAQ5oB,aAAU3K,EAClBuzB,QAAQK,iBAAc5zB,EACtBuzB,QAAQC,QAAU,EAClBD,QAAQE,QAAU,EAEtB,CACA,SAASsC,OAAOvwB,GACd,MAAMqtB,KAAOvxB,OAAOuxB,KACd/wB,OAASR,OAAOQ,OAAO+wB,KAC7B,IAAKU,QAAQnpB,QAAS,CAChB5E,GAAKA,EAAErL,SACTo5B,QAAQnpB,QAAU5E,EAAErL,OAAOyQ,QAAQ,IAAItJ,OAAOQ,OAAOgJ,6BAElDyoB,QAAQnpB,UACP9I,OAAOQ,OAAO4L,SAAWpM,OAAOQ,OAAO4L,QAAQC,SAAWrM,OAAOoM,QACnE6lB,QAAQnpB,QAAU,sBAAgB9I,OAAO8L,SAAU,IAAI9L,OAAOQ,OAAO+T,oBAAoB,GAEzF0d,QAAQnpB,QAAU9I,OAAO6J,OAAO7J,OAAOqK,cAG3C,IAAIhB,QAAU4oB,QAAQnpB,QAAQpP,cAAc,IAAI8G,OAAOkxB,kBACnDroB,UACFA,QAAUA,QAAQ1P,iBAAiB,kDAAkD,IAEvFs4B,QAAQ5oB,QAAUA,QAEhB4oB,QAAQK,YADNjpB,QACoB,qBAAe4oB,QAAQ5oB,QAAS,IAAI7I,OAAOkxB,kBAAkB,QAE7DhzB,CAE1B,CACA,IAAKuzB,QAAQ5oB,UAAY4oB,QAAQK,YAAa,OAM9C,IAAIoC,OACAC,OACAC,QACAC,QACA5U,MACAC,MACA4U,WACAC,WACAC,WACAC,YACAZ,YACAC,aACAY,cACAC,cACAC,cACAC,cACAjD,WACAC,YAtBAryB,OAAOQ,OAAOkN,UAChB1N,OAAOU,UAAUxG,MAAMyH,SAAW,SAClC3B,OAAOU,UAAUxG,MAAM+pB,YAAc,QAEvCgO,QAAQnpB,QAAQxG,UAAUC,IAAI,GAAG/B,OAAOmxB,yBAmBJ,IAAzBY,MAAMK,aAAatc,GAAqBpS,GACjDwwB,OAASxwB,EAAE8Y,MACX2X,OAASzwB,EAAEya,QAEX+V,OAASnC,MAAMK,aAAatc,EAC5Bqe,OAASpC,MAAMK,aAAarc,GAE9B,MAAM+e,eAA8B,iBAANpxB,EAAiBA,EAAI,KAC9B,IAAjB4tB,cAAsBwD,iBACxBZ,YAASh2B,EACTi2B,YAASj2B,GAEX,MAAM+yB,SAAW8B,cACjBhC,KAAKT,MAAQwE,gBAAkB7D,SAC/BK,aAAewD,gBAAkB7D,UAC7BvtB,GAAwB,IAAjB4tB,cAAsBwD,gBA8B/BR,WAAa,EACbC,WAAa,IA9Bb3C,WAAaH,QAAQnpB,QAAQ7E,YAC7BouB,YAAcJ,QAAQnpB,QAAQsI,aAC9BwjB,QAAU,oBAAc3C,QAAQnpB,SAASzF,KAAO5G,OAAO0G,QACvD0xB,QAAU,oBAAc5C,QAAQnpB,SAAS1F,IAAM3G,OAAOwG,QACtDgd,MAAQ2U,QAAUxC,WAAa,EAAIsC,OACnCxU,MAAQ2U,QAAUxC,YAAc,EAAIsC,OACpCK,WAAa/C,QAAQ5oB,QAAQpF,aAAeguB,QAAQ5oB,QAAQ8B,YAC5D8pB,YAAchD,QAAQ5oB,QAAQ+H,cAAgB6gB,QAAQ5oB,QAAQ+B,aAC9DipB,YAAcW,WAAazD,KAAKT,MAChCwD,aAAeW,YAAc1D,KAAKT,MAClCoE,cAAgB/zB,KAAKE,IAAI+wB,WAAa,EAAIiC,YAAc,EAAG,GAC3Dc,cAAgBh0B,KAAKE,IAAIgxB,YAAc,EAAIiC,aAAe,EAAG,GAC7Dc,eAAiBF,cACjBG,eAAiBF,cACjBL,WAAa7U,MAAQsR,KAAKT,MAC1BiE,WAAa7U,MAAQqR,KAAKT,MACtBgE,WAAaI,gBACfJ,WAAaI,eAEXJ,WAAaM,gBACfN,WAAaM,eAEXL,WAAaI,gBACfJ,WAAaI,eAEXJ,WAAaM,gBACfN,WAAaM,gBAMbC,gBAAiC,IAAf/D,KAAKT,QACzBmB,QAAQC,QAAU,EAClBD,QAAQE,QAAU,GAEpBF,QAAQK,YAAYp4B,MAAMyrB,mBAAqB,QAC/CsM,QAAQK,YAAYp4B,MAAMmD,UAAY,eAAey3B,iBAAiBC,kBACtE9C,QAAQ5oB,QAAQnP,MAAMyrB,mBAAqB,QAC3CsM,QAAQ5oB,QAAQnP,MAAMmD,UAAY,4BAA4Bk0B,KAAKT,QACrE,CACA,SAASyE,UACP,MAAMhE,KAAOvxB,OAAOuxB,KACd/wB,OAASR,OAAOQ,OAAO+wB,KAC7B,IAAKU,QAAQnpB,QAAS,CAChB9I,OAAOQ,OAAO4L,SAAWpM,OAAOQ,OAAO4L,QAAQC,SAAWrM,OAAOoM,QACnE6lB,QAAQnpB,QAAU,sBAAgB9I,OAAO8L,SAAU,IAAI9L,OAAOQ,OAAO+T,oBAAoB,GAEzF0d,QAAQnpB,QAAU9I,OAAO6J,OAAO7J,OAAOqK,aAEzC,IAAIhB,QAAU4oB,QAAQnpB,QAAQpP,cAAc,IAAI8G,OAAOkxB,kBACnDroB,UACFA,QAAUA,QAAQ1P,iBAAiB,kDAAkD,IAEvFs4B,QAAQ5oB,QAAUA,QAEhB4oB,QAAQK,YADNjpB,QACoB,qBAAe4oB,QAAQ5oB,QAAS,IAAI7I,OAAOkxB,kBAAkB,QAE7DhzB,CAE1B,CACKuzB,QAAQ5oB,SAAY4oB,QAAQK,cAC7BtyB,OAAOQ,OAAOkN,UAChB1N,OAAOU,UAAUxG,MAAMyH,SAAW,GAClC3B,OAAOU,UAAUxG,MAAM+pB,YAAc,IAEvCsN,KAAKT,MAAQ,EACbgB,aAAe,EACfG,QAAQK,YAAYp4B,MAAMyrB,mBAAqB,QAC/CsM,QAAQK,YAAYp4B,MAAMmD,UAAY,qBACtC40B,QAAQ5oB,QAAQnP,MAAMyrB,mBAAqB,QAC3CsM,QAAQ5oB,QAAQnP,MAAMmD,UAAY,8BAClC40B,QAAQnpB,QAAQxG,UAAU4G,OAAO,GAAG1I,OAAOmxB,oBAC3CM,QAAQnpB,aAAUpK,EAClBuzB,QAAQC,QAAU,EAClBD,QAAQE,QAAU,EACpB,CAGA,SAASqD,WAAWtxB,GAClB,MAAMqtB,KAAOvxB,OAAOuxB,KAChBA,KAAKT,OAAwB,IAAfS,KAAKT,MAErByE,UAGAd,OAAOvwB,EAEX,CACA,SAASuxB,eASP,MAAO,CACLC,kBATsB11B,OAAOQ,OAAOykB,kBAAmB,CACvDZ,SAAS,EACTH,SAAS,GAQTyR,2BANgC31B,OAAOQ,OAAOykB,kBAAmB,CACjEZ,SAAS,EACTH,SAAS,GAMb,CAGA,SAASgD,SACP,MAAMqK,KAAOvxB,OAAOuxB,KACpB,GAAIA,KAAKllB,QAAS,OAClBklB,KAAKllB,SAAU,EACf,MAAM,gBACJqpB,gBAAe,0BACfC,2BACEF,eAGJz1B,OAAOU,UAAUrH,iBAAiB,cAAes6B,eAAgB+B,iBACjE11B,OAAOU,UAAUrH,iBAAiB,cAAey6B,gBAAiB6B,2BAClE,CAAC,YAAa,gBAAiB,cAAc38B,SAAQwwB,YACnDxpB,OAAOU,UAAUrH,iBAAiBmwB,UAAW2K,aAAcuB,gBAAgB,IAI7E11B,OAAOU,UAAUrH,iBAAiB,cAAeqmB,YAAaiW,0BAChE,CACA,SAAS1O,UACP,MAAMsK,KAAOvxB,OAAOuxB,KACpB,IAAKA,KAAKllB,QAAS,OACnBklB,KAAKllB,SAAU,EACf,MAAM,gBACJqpB,gBAAe,0BACfC,2BACEF,eAGJz1B,OAAOU,UAAUpH,oBAAoB,cAAeq6B,eAAgB+B,iBACpE11B,OAAOU,UAAUpH,oBAAoB,cAAew6B,gBAAiB6B,2BACrE,CAAC,YAAa,gBAAiB,cAAc38B,SAAQwwB,YACnDxpB,OAAOU,UAAUpH,oBAAoBkwB,UAAW2K,aAAcuB,gBAAgB,IAIhF11B,OAAOU,UAAUpH,oBAAoB,cAAeomB,YAAaiW,0BACnE,CAngBAh9B,OAAOi9B,eAAe51B,OAAOuxB,KAAM,QAAS,CAC1C,GAAAsE,GACE,OAAO/E,KACT,EACA,GAAAgF,CAAI9N,OACF,GAAI8I,QAAU9I,MAAO,CACnB,MAAM3e,QAAU4oB,QAAQ5oB,QAClBP,QAAUmpB,QAAQnpB,QACxBP,KAAK,aAAcyf,MAAO3e,QAASP,QACrC,CACAgoB,MAAQ9I,KACV,IAyfFhhB,GAAG,QAAQ,KACLhH,OAAOQ,OAAO+wB,KAAKllB,SACrB6a,QACF,IAEFlgB,GAAG,WAAW,KACZigB,SAAS,IAEXjgB,GAAG,cAAc,CAAComB,GAAIlpB,KACflE,OAAOuxB,KAAKllB,SA7WnB,SAAsBnI,GACpB,MAAMe,OAASjF,OAAOiF,OACtB,IAAKgtB,QAAQ5oB,QAAS,OACtB,GAAIkpB,MAAM/U,UAAW,OACjBvY,OAAOE,SAAWjB,EAAEqc,YAAYrc,EAAEsY,iBACtC+V,MAAM/U,WAAY,EAClB,MAAMhW,MAAQwqB,QAAQ94B,OAAS,EAAI84B,QAAQ,GAAK9tB,EAChDquB,MAAMK,aAAatc,EAAI9O,MAAMwV,MAC7BuV,MAAMK,aAAarc,EAAI/O,MAAMmX,KAC/B,CAqWElC,CAAavY,EAAE,IAEjB8C,GAAG,YAAY,CAAComB,GAAIlpB,KACblE,OAAOuxB,KAAKllB,SAnRnB,WACE,MAAMklB,KAAOvxB,OAAOuxB,KACpB,IAAKU,QAAQ5oB,QAAS,OACtB,IAAKkpB,MAAM/U,YAAc+U,MAAM9U,QAG7B,OAFA8U,MAAM/U,WAAY,OAClB+U,MAAM9U,SAAU,GAGlB8U,MAAM/U,WAAY,EAClB+U,MAAM9U,SAAU,EAChB,IAAIsY,kBAAoB,IACpBC,kBAAoB,IACxB,MAAMC,kBAAoBxM,SAASnT,EAAIyf,kBACjCG,aAAe3D,MAAM9T,SAAWwX,kBAChCE,kBAAoB1M,SAASlT,EAAIyf,kBACjCI,aAAe7D,MAAM7T,SAAWyX,kBAGnB,IAAf1M,SAASnT,IAASyf,kBAAoB50B,KAAKyN,KAAKsnB,aAAe3D,MAAM9T,UAAYgL,SAASnT,IAC3E,IAAfmT,SAASlT,IAASyf,kBAAoB70B,KAAKyN,KAAKwnB,aAAe7D,MAAM7T,UAAY+K,SAASlT,IAC9F,MAAM8f,iBAAmBl1B,KAAKC,IAAI20B,kBAAmBC,mBACrDzD,MAAM9T,SAAWyX,aACjB3D,MAAM7T,SAAW0X,aAEjB,MAAM/B,YAAc9B,MAAMltB,MAAQksB,KAAKT,MACjCwD,aAAe/B,MAAMhtB,OAASgsB,KAAKT,MACzCyB,MAAMC,KAAOrxB,KAAKE,IAAI4wB,QAAQG,WAAa,EAAIiC,YAAc,EAAG,GAChE9B,MAAMG,MAAQH,MAAMC,KACpBD,MAAME,KAAOtxB,KAAKE,IAAI4wB,QAAQI,YAAc,EAAIiC,aAAe,EAAG,GAClE/B,MAAMI,MAAQJ,MAAME,KACpBF,MAAM9T,SAAWtd,KAAKC,IAAID,KAAKE,IAAIkxB,MAAM9T,SAAU8T,MAAMG,MAAOH,MAAMC,MACtED,MAAM7T,SAAWvd,KAAKC,IAAID,KAAKE,IAAIkxB,MAAM7T,SAAU6T,MAAMI,MAAOJ,MAAME,MACtER,QAAQK,YAAYp4B,MAAMyrB,mBAAqB,GAAG0Q,qBAClDpE,QAAQK,YAAYp4B,MAAMmD,UAAY,eAAek1B,MAAM9T,eAAe8T,MAAM7T,eAClF,CAkPEqD,EAAY,IAEd/a,GAAG,aAAa,CAAComB,GAAIlpB,MACdlE,OAAO6W,WAAa7W,OAAOQ,OAAO+wB,KAAKllB,SAAWrM,OAAOuxB,KAAKllB,SAAWrM,OAAOQ,OAAO+wB,KAAK7D,QAC/F8H,WAAWtxB,EACb,IAEF8C,GAAG,iBAAiB,KACdhH,OAAOuxB,KAAKllB,SAAWrM,OAAOQ,OAAO+wB,KAAKllB,SAC5CmoB,iBACF,IAEFxtB,GAAG,eAAe,KACZhH,OAAOuxB,KAAKllB,SAAWrM,OAAOQ,OAAO+wB,KAAKllB,SAAWrM,OAAOQ,OAAOkN,SACrE8mB,iBACF,IAEF77B,OAAO8S,OAAOzL,OAAOuxB,KAAM,CACzBrK,cACAD,gBACAqP,GAAI7B,OACJ8B,IAAKhB,QACL7H,OAAQ8H,YAEZ,CCtmBA,SAASgB,SAASz2B,MAChB,IAuBI02B,QACAC,KAxBA,OACF12B,OAAM,aACNqpB,aAAY,GACZriB,GAAE,KACFuB,KAAI,OACJ/H,QACET,KACJC,OAAOojB,SAAW,CAChBC,SAAS,EACTC,QAAQ,EACRqT,SAAU,GAEZtN,aAAa,CACXjG,SAAU,CACR/W,SAAS,EACT3P,MAAO,IACPk6B,mBAAmB,EACnBC,sBAAsB,EACtBC,iBAAiB,EACjBC,kBAAkB,EAClBC,mBAAmB,KAKvB,IAEIC,iBAEAC,UACA1Z,UACA2Z,cACAC,kBACAC,aACAC,oBACAC,qBAVAC,mBAAqBh3B,QAAUA,OAAO4iB,SAAW5iB,OAAO4iB,SAAS1mB,MAAQ,IACzE+6B,qBAAuBj3B,QAAUA,OAAO4iB,SAAW5iB,OAAO4iB,SAAS1mB,MAAQ,IAE3Eg7B,mBAAoB,IAAI37B,MAAOkF,UAQnC,SAASuzB,gBAAgBtwB,GAClBlE,SAAUA,OAAOsH,WAActH,OAAOU,WACvCwD,EAAErL,SAAWmH,OAAOU,YACxBV,OAAOU,UAAUpH,oBAAoB,gBAAiBk7B,iBAClD+C,sBAAwBrzB,EAAEkd,QAAUld,EAAEkd,OAAOC,mBAGjDmC,SACF,CACA,MAAMmU,aAAe,KACnB,GAAI33B,OAAOsH,YAActH,OAAOojB,SAASC,QAAS,OAC9CrjB,OAAOojB,SAASE,OAClB4T,WAAY,EACHA,YACTO,qBAAuBR,iBACvBC,WAAY,GAEd,MAAMP,SAAW32B,OAAOojB,SAASE,OAAS2T,iBAAmBS,kBAAoBD,sBAAuB,IAAI17B,MAAOkF,UACnHjB,OAAOojB,SAASuT,SAAWA,SAC3BpuB,KAAK,mBAAoBouB,SAAUA,SAAWa,oBAC9Cd,IAAMt6B,uBAAsB,KAC1Bu7B,cAAc,GACd,EAaEC,IAAMC,aACV,GAAI73B,OAAOsH,YAActH,OAAOojB,SAASC,QAAS,OAClD/mB,qBAAqBo6B,KACrBiB,eACA,IAAIj7B,WAA8B,IAAfm7B,WAA6B73B,OAAOQ,OAAO4iB,SAAS1mB,MAAQm7B,WAC/EL,mBAAqBx3B,OAAOQ,OAAO4iB,SAAS1mB,MAC5C+6B,qBAAuBz3B,OAAOQ,OAAO4iB,SAAS1mB,MAC9C,MAAMo7B,kBAlBc,MACpB,IAAIC,cAMJ,GAJEA,cADE/3B,OAAOoM,SAAWpM,OAAOQ,OAAO4L,QAAQC,QAC1BrM,OAAO6J,OAAO3K,QAAO4J,SAAWA,QAAQxG,UAAU2G,SAAS,yBAAwB,GAEnFjJ,OAAO6J,OAAO7J,OAAOqK,cAElC0tB,cAAe,OAEpB,OAD0BxsB,SAASwsB,cAAcxiB,aAAa,wBAAyB,GAC/D,EASEyiB,IACrBvxB,OAAO+E,MAAMssB,oBAAsBA,kBAAoB,QAA2B,IAAfD,aACtEn7B,MAAQo7B,kBACRN,mBAAqBM,kBACrBL,qBAAuBK,mBAEzBb,iBAAmBv6B,MACnB,MAAM+D,MAAQT,OAAOQ,OAAOC,MACtBw3B,QAAU,KACTj4B,SAAUA,OAAOsH,YAClBtH,OAAOQ,OAAO4iB,SAAS2T,kBACpB/2B,OAAO4S,aAAe5S,OAAOQ,OAAOuK,MAAQ/K,OAAOQ,OAAOsK,QAC7D9K,OAAOiZ,UAAUxY,OAAO,GAAM,GAC9B8H,KAAK,aACKvI,OAAOQ,OAAO4iB,SAAS0T,kBACjC92B,OAAOsX,QAAQtX,OAAO6J,OAAO3Q,OAAS,EAAGuH,OAAO,GAAM,GACtD8H,KAAK,cAGFvI,OAAO6S,OAAS7S,OAAOQ,OAAOuK,MAAQ/K,OAAOQ,OAAOsK,QACvD9K,OAAO2Y,UAAUlY,OAAO,GAAM,GAC9B8H,KAAK,aACKvI,OAAOQ,OAAO4iB,SAAS0T,kBACjC92B,OAAOsX,QAAQ,EAAG7W,OAAO,GAAM,GAC/B8H,KAAK,aAGLvI,OAAOQ,OAAOkN,UAChBgqB,mBAAoB,IAAI37B,MAAOkF,UAC/B7E,uBAAsB,KACpBw7B,KAAK,KAET,EAcF,OAZIl7B,MAAQ,GACVR,aAAau6B,SACbA,QAAUx6B,YAAW,KACnBg8B,SAAS,GACRv7B,QAEHN,uBAAsB,KACpB67B,SAAS,IAKNv7B,KAAK,EAERw7B,MAAQ,KACZR,mBAAoB,IAAI37B,MAAOkF,UAC/BjB,OAAOojB,SAASC,SAAU,EAC1BuU,MACArvB,KAAK,gBAAgB,EAEjB4vB,KAAO,KACXn4B,OAAOojB,SAASC,SAAU,EAC1BnnB,aAAau6B,SACbn6B,qBAAqBo6B,KACrBnuB,KAAK,eAAe,EAEhB6vB,MAAQ,CAACxhB,SAAUyhB,SACvB,GAAIr4B,OAAOsH,YAActH,OAAOojB,SAASC,QAAS,OAClDnnB,aAAau6B,SACR7f,WACH0gB,qBAAsB,GAExB,MAAMW,QAAU,KACd1vB,KAAK,iBACDvI,OAAOQ,OAAO4iB,SAASwT,kBACzB52B,OAAOU,UAAUrH,iBAAiB,gBAAiBm7B,iBAEnDhR,QACF,EAGF,GADAxjB,OAAOojB,SAASE,QAAS,EACrB+U,MAMF,OALIhB,eACFJ,iBAAmBj3B,OAAOQ,OAAO4iB,SAAS1mB,OAE5C26B,cAAe,OACfY,UAGF,MAAMv7B,MAAQu6B,kBAAoBj3B,OAAOQ,OAAO4iB,SAAS1mB,MACzDu6B,iBAAmBv6B,QAAS,IAAIX,MAAOkF,UAAYy2B,mBAC/C13B,OAAO6S,OAASokB,iBAAmB,IAAMj3B,OAAOQ,OAAOuK,OACvDksB,iBAAmB,IAAGA,iBAAmB,GAC7CgB,UAAS,EAELzU,OAAS,KACTxjB,OAAO6S,OAASokB,iBAAmB,IAAMj3B,OAAOQ,OAAOuK,MAAQ/K,OAAOsH,YAActH,OAAOojB,SAASC,UACxGqU,mBAAoB,IAAI37B,MAAOkF,UAC3Bq2B,qBACFA,qBAAsB,EACtBM,IAAIX,mBAEJW,MAEF53B,OAAOojB,SAASE,QAAS,EACzB/a,KAAK,kBAAiB,EAElB+vB,mBAAqB,KACzB,GAAIt4B,OAAOsH,YAActH,OAAOojB,SAASC,QAAS,OAClD,MAAMpoB,SAAW,6BACgB,WAA7BA,SAASs9B,kBACXjB,qBAAsB,EACtBc,OAAM,IAEyB,YAA7Bn9B,SAASs9B,iBACX/U,QACF,EAEIgV,eAAiBt0B,IACC,UAAlBA,EAAEiZ,cACNma,qBAAsB,EACtBC,sBAAuB,EACnBv3B,OAAO6W,WAAa7W,OAAOojB,SAASE,QACxC8U,OAAM,GAAK,EAEPK,eAAiBv0B,IACC,UAAlBA,EAAEiZ,cACNoa,sBAAuB,EACnBv3B,OAAOojB,SAASE,QAClBE,SACF,EAsBFxc,GAAG,QAAQ,KACLhH,OAAOQ,OAAO4iB,SAAS/W,UApBvBrM,OAAOQ,OAAO4iB,SAAS4T,oBACzBh3B,OAAOnD,GAAGxD,iBAAiB,eAAgBm/B,gBAC3Cx4B,OAAOnD,GAAGxD,iBAAiB,eAAgBo/B,iBAU5B,6BACRp/B,iBAAiB,mBAAoBi/B,oBAU5CJ,QACF,IAEFlxB,GAAG,WAAW,KApBRhH,OAAOnD,IAA2B,iBAAdmD,OAAOnD,KAC7BmD,OAAOnD,GAAGvD,oBAAoB,eAAgBk/B,gBAC9Cx4B,OAAOnD,GAAGvD,oBAAoB,eAAgBm/B,iBAQ/B,6BACRn/B,oBAAoB,mBAAoBg/B,oBAY7Ct4B,OAAOojB,SAASC,SAClB8U,MACF,IAEFnxB,GAAG,0BAA0B,MACvBmwB,eAAiBG,sBACnB9T,QACF,IAEFxc,GAAG,8BAA8B,KAC1BhH,OAAOQ,OAAO4iB,SAASyT,qBAG1BsB,OAFAC,OAAM,GAAM,EAGd,IAEFpxB,GAAG,yBAAyB,CAAComB,GAAI3sB,MAAOmW,aAClC5W,OAAOsH,WAActH,OAAOojB,SAASC,UACrCzM,WAAa5W,OAAOQ,OAAO4iB,SAASyT,qBACtCuB,OAAM,GAAM,GAEZD,OACF,IAEFnxB,GAAG,mBAAmB,MAChBhH,OAAOsH,WAActH,OAAOojB,SAASC,UACrCrjB,OAAOQ,OAAO4iB,SAASyT,qBACzBsB,QAGF3a,WAAY,EACZ2Z,eAAgB,EAChBG,qBAAsB,EACtBF,kBAAoBn7B,YAAW,KAC7Bq7B,qBAAsB,EACtBH,eAAgB,EAChBiB,OAAM,EAAK,GACV,MAAI,IAETpxB,GAAG,YAAY,KACb,IAAIhH,OAAOsH,WAActH,OAAOojB,SAASC,SAAY7F,UAArD,CAGA,GAFAthB,aAAak7B,mBACbl7B,aAAau6B,SACTz2B,OAAOQ,OAAO4iB,SAASyT,qBAGzB,OAFAM,eAAgB,OAChB3Z,WAAY,GAGV2Z,eAAiBn3B,OAAOQ,OAAOkN,SAAS8V,SAC5C2T,eAAgB,EAChB3Z,WAAY,CAV0D,CAUrD,IAEnBxW,GAAG,eAAe,MACZhH,OAAOsH,WAActH,OAAOojB,SAASC,UACzCgU,cAAe,EAAI,IAErB1+B,OAAO8S,OAAOzL,OAAOojB,SAAU,CAC7B8U,YACAC,UACAC,YACA5U,eAEJ,CC1SA,SAASkV,MAAM34B,MACb,IAAI,OACFC,OAAM,aACNqpB,aAAY,GACZriB,IACEjH,KACJspB,aAAa,CACXsP,OAAQ,CACN34B,OAAQ,KACR44B,sBAAsB,EACtBC,iBAAkB,EAClBC,sBAAuB,4BACvBC,qBAAsB,mBAG1B,IAAIvjB,aAAc,EACdwjB,eAAgB,EAIpB,SAASC,eACP,MAAMC,aAAel5B,OAAO24B,OAAO34B,OACnC,IAAKk5B,cAAgBA,aAAa5xB,UAAW,OAC7C,MAAMyO,aAAemjB,aAAanjB,aAC5BD,aAAeojB,aAAapjB,aAClC,GAAIA,cAAgBA,aAAaxT,UAAU2G,SAASjJ,OAAOQ,OAAOm4B,OAAOG,uBAAwB,OACjG,GAAI,MAAO/iB,aAAuD,OAClE,IAAI8D,aAEFA,aADEqf,aAAa14B,OAAOuK,KACPQ,SAAS2tB,aAAapjB,aAAaP,aAAa,2BAA4B,IAE5EQ,aAEb/V,OAAOQ,OAAOuK,KAChB/K,OAAOoY,YAAYyB,cAEnB7Z,OAAOsX,QAAQuC,aAEnB,CACA,SAAS4K,OACP,MACEkU,OAAQQ,cACNn5B,OAAOQ,OACX,GAAIgV,YAAa,OAAO,EACxBA,aAAc,EACd,MAAM4jB,YAAcp5B,OAAOtH,YAC3B,GAAIygC,aAAan5B,kBAAkBo5B,YACjCp5B,OAAO24B,OAAO34B,OAASm5B,aAAan5B,OACpCrH,OAAO8S,OAAOzL,OAAO24B,OAAO34B,OAAOwmB,eAAgB,CACjDjW,qBAAqB,EACrByF,qBAAqB,IAEvBrd,OAAO8S,OAAOzL,OAAO24B,OAAO34B,OAAOQ,OAAQ,CACzC+P,qBAAqB,EACrByF,qBAAqB,IAEvBhW,OAAO24B,OAAO34B,OAAOiL,cAChB,GAAI,eAASkuB,aAAan5B,QAAS,CACxC,MAAMq5B,mBAAqB1gC,OAAO8S,OAAO,CAAC,EAAG0tB,aAAan5B,QAC1DrH,OAAO8S,OAAO4tB,mBAAoB,CAChC9oB,qBAAqB,EACrByF,qBAAqB,IAEvBhW,OAAO24B,OAAO34B,OAAS,IAAIo5B,YAAYC,oBACvCL,eAAgB,CAClB,CAGA,OAFAh5B,OAAO24B,OAAO34B,OAAOnD,GAAGyF,UAAUC,IAAIvC,OAAOQ,OAAOm4B,OAAOI,sBAC3D/4B,OAAO24B,OAAO34B,OAAOgH,GAAG,MAAOiyB,eACxB,CACT,CACA,SAAShuB,OAAOsM,SACd,MAAM2hB,aAAel5B,OAAO24B,OAAO34B,OACnC,IAAKk5B,cAAgBA,aAAa5xB,UAAW,OAC7C,MAAM4C,cAAsD,SAAtCgvB,aAAa14B,OAAO0J,cAA2BgvB,aAAa/uB,uBAAyB+uB,aAAa14B,OAAO0J,cAG/H,IAAIovB,iBAAmB,EACvB,MAAMC,iBAAmBv5B,OAAOQ,OAAOm4B,OAAOG,sBAS9C,GARI94B,OAAOQ,OAAO0J,cAAgB,IAAMlK,OAAOQ,OAAOiN,iBACpD6rB,iBAAmBt5B,OAAOQ,OAAO0J,eAE9BlK,OAAOQ,OAAOm4B,OAAOC,uBACxBU,iBAAmB,GAErBA,iBAAmBn4B,KAAKuN,MAAM4qB,kBAC9BJ,aAAarvB,OAAO7Q,SAAQ8P,SAAWA,QAAQxG,UAAU4G,OAAOqwB,oBAC5DL,aAAa14B,OAAOuK,MAAQmuB,aAAa14B,OAAO4L,SAAW8sB,aAAa14B,OAAO4L,QAAQC,QACzF,IAAK,IAAIzN,EAAI,EAAGA,EAAI06B,iBAAkB16B,GAAK,EACzC,sBAAgBs6B,aAAaptB,SAAU,6BAA6B9L,OAAOgL,UAAYpM,OAAO5F,SAAQ8P,UACpGA,QAAQxG,UAAUC,IAAIg3B,iBAAiB,SAI3C,IAAK,IAAI36B,EAAI,EAAGA,EAAI06B,iBAAkB16B,GAAK,EACrCs6B,aAAarvB,OAAO7J,OAAOgL,UAAYpM,IACzCs6B,aAAarvB,OAAO7J,OAAOgL,UAAYpM,GAAG0D,UAAUC,IAAIg3B,kBAI9D,MAAMV,iBAAmB74B,OAAOQ,OAAOm4B,OAAOE,iBACxCW,UAAYX,mBAAqBK,aAAa14B,OAAOuK,KAC3D,GAAI/K,OAAOgL,YAAckuB,aAAaluB,WAAawuB,UAAW,CAC5D,MAAMC,mBAAqBP,aAAa7uB,YACxC,IAAIqvB,eACAtiB,UACJ,GAAI8hB,aAAa14B,OAAOuK,KAAM,CAC5B,MAAM4uB,eAAiBT,aAAarvB,OAAO3K,QAAO4J,SAAWA,QAAQyM,aAAa,6BAA+B,GAAGvV,OAAOgL,cAAa,GACxI0uB,eAAiBR,aAAarvB,OAAO1K,QAAQw6B,gBAC7CviB,UAAYpX,OAAOqK,YAAcrK,OAAO6U,cAAgB,OAAS,MACnE,MACE6kB,eAAiB15B,OAAOgL,UACxBoM,UAAYsiB,eAAiB15B,OAAO6U,cAAgB,OAAS,OAE3D2kB,YACFE,gBAAgC,SAAdtiB,UAAuByhB,kBAAoB,EAAIA,kBAE/DK,aAAatnB,sBAAwBsnB,aAAatnB,qBAAqBzS,QAAQu6B,gBAAkB,IAC/FR,aAAa14B,OAAOiN,eAEpBisB,eADEA,eAAiBD,mBACFC,eAAiBv4B,KAAKuN,MAAMxE,cAAgB,GAAK,EAEjDwvB,eAAiBv4B,KAAKuN,MAAMxE,cAAgB,GAAK,EAE3DwvB,eAAiBD,oBAAsBP,aAAa14B,OAAOqO,eACtEqqB,aAAa5hB,QAAQoiB,eAAgBniB,QAAU,OAAI7Y,GAEvD,CACF,CA9GAsB,OAAO24B,OAAS,CACd34B,OAAQ,MA8GVgH,GAAG,cAAc,KACf,MAAM,OACJ2xB,QACE34B,OAAOQ,OACX,GAAKm4B,QAAWA,OAAO34B,OACvB,GAA6B,iBAAlB24B,OAAO34B,QAAuB24B,OAAO34B,kBAAkBjB,YAAa,CAC7E,MAAM9D,SAAW,6BACX2+B,wBAA0B,KAC9B,MAAMC,cAAyC,iBAAlBlB,OAAO34B,OAAsB/E,SAASvB,cAAci/B,OAAO34B,QAAU24B,OAAO34B,OACzG,GAAI65B,eAAiBA,cAAc75B,OACjC24B,OAAO34B,OAAS65B,cAAc75B,OAC9BykB,OACAxZ,QAAO,QACF,GAAI4uB,cAAe,CACxB,MAAMC,eAAiB51B,IACrBy0B,OAAO34B,OAASkE,EAAEkd,OAAO,GACzByY,cAAcvgC,oBAAoB,OAAQwgC,gBAC1CrV,OACAxZ,QAAO,GACP0tB,OAAO34B,OAAOiL,SACdjL,OAAOiL,QAAQ,EAEjB4uB,cAAcxgC,iBAAiB,OAAQygC,eACzC,CACA,OAAOD,aAAa,EAEhBE,uBAAyB,KAC7B,GAAI/5B,OAAOsH,UAAW,OACAsyB,2BAEpBx9B,sBAAsB29B,uBACxB,EAEF39B,sBAAsB29B,uBACxB,MACEtV,OACAxZ,QAAO,EACT,IAEFjE,GAAG,4CAA4C,KAC7CiE,QAAQ,IAEVjE,GAAG,iBAAiB,CAAComB,GAAI7sB,YACvB,MAAM24B,aAAel5B,OAAO24B,OAAO34B,OAC9Bk5B,eAAgBA,aAAa5xB,WAClC4xB,aAAaloB,cAAczQ,SAAS,IAEtCyG,GAAG,iBAAiB,KAClB,MAAMkyB,aAAel5B,OAAO24B,OAAO34B,OAC9Bk5B,eAAgBA,aAAa5xB,WAC9B0xB,eACFE,aAAa1N,SACf,IAEF7yB,OAAO8S,OAAOzL,OAAO24B,OAAQ,CAC3BlU,UACAxZ,eAEJ,CC7LA,SAAS+uB,YAAYnwB,QACnB,MAAM7J,OAASrE,MACT,OACJ6E,OAAM,SACNsL,UACE9L,OACAQ,OAAOuK,MACT/K,OAAOgc,cAET,MAAMie,cAAgBnxB,UACpB,GAAuB,iBAAZA,QAAsB,CAC/B,MAAMoxB,QAAUj/B,SAASlB,cAAc,OACvCmgC,QAAQhJ,UAAYpoB,QACpBgD,SAASyO,OAAO2f,QAAQlgC,SAAS,IACjCkgC,QAAQhJ,UAAY,EACtB,MACEplB,SAASyO,OAAOzR,QAClB,EAEF,GAAsB,iBAAXe,QAAuB,WAAYA,OAC5C,IAAK,IAAIjL,EAAI,EAAGA,EAAIiL,OAAO3Q,OAAQ0F,GAAK,EAClCiL,OAAOjL,IAAIq7B,cAAcpwB,OAAOjL,SAGtCq7B,cAAcpwB,QAEhB7J,OAAOya,eACHja,OAAOuK,MACT/K,OAAOia,aAEJzZ,OAAO25B,WAAYn6B,OAAOuJ,WAC7BvJ,OAAOiL,QAEX,CAEA,SAASmvB,aAAavwB,QACpB,MAAM7J,OAASrE,MACT,OACJ6E,OAAM,YACN6J,YAAW,SACXyB,UACE9L,OACAQ,OAAOuK,MACT/K,OAAOgc,cAET,IAAIpH,eAAiBvK,YAAc,EACnC,MAAMgwB,eAAiBvxB,UACrB,GAAuB,iBAAZA,QAAsB,CAC/B,MAAMoxB,QAAUj/B,SAASlB,cAAc,OACvCmgC,QAAQhJ,UAAYpoB,QACpBgD,SAASyP,QAAQ2e,QAAQlgC,SAAS,IAClCkgC,QAAQhJ,UAAY,EACtB,MACEplB,SAASyP,QAAQzS,QACnB,EAEF,GAAsB,iBAAXe,QAAuB,WAAYA,OAAQ,CACpD,IAAK,IAAIjL,EAAI,EAAGA,EAAIiL,OAAO3Q,OAAQ0F,GAAK,EAClCiL,OAAOjL,IAAIy7B,eAAexwB,OAAOjL,IAEvCgW,eAAiBvK,YAAcR,OAAO3Q,MACxC,MACEmhC,eAAexwB,QAEjB7J,OAAOya,eACHja,OAAOuK,MACT/K,OAAOia,aAEJzZ,OAAO25B,WAAYn6B,OAAOuJ,WAC7BvJ,OAAOiL,SAETjL,OAAOsX,QAAQ1C,eAAgB,GAAG,EACpC,CAEA,SAAS0lB,SAASlyB,MAAOyB,QACvB,MAAM7J,OAASrE,MACT,OACJ6E,OAAM,YACN6J,YAAW,SACXyB,UACE9L,OACJ,IAAIu6B,kBAAoBlwB,YACpB7J,OAAOuK,OACTwvB,mBAAqBv6B,OAAO+Z,aAC5B/Z,OAAOgc,cACPhc,OAAOya,gBAET,MAAM+f,WAAax6B,OAAO6J,OAAO3Q,OACjC,GAAIkP,OAAS,EAEX,YADApI,OAAOo6B,aAAavwB,QAGtB,GAAIzB,OAASoyB,WAEX,YADAx6B,OAAOg6B,YAAYnwB,QAGrB,IAAI+K,eAAiB2lB,kBAAoBnyB,MAAQmyB,kBAAoB,EAAIA,kBACzE,MAAME,aAAe,GACrB,IAAK,IAAI77B,EAAI47B,WAAa,EAAG57B,GAAKwJ,MAAOxJ,GAAK,EAAG,CAC/C,MAAM87B,aAAe16B,OAAO6J,OAAOjL,GACnC87B,aAAaxxB,SACbuxB,aAAa7xB,QAAQ8xB,aACvB,CACA,GAAsB,iBAAX7wB,QAAuB,WAAYA,OAAQ,CACpD,IAAK,IAAIjL,EAAI,EAAGA,EAAIiL,OAAO3Q,OAAQ0F,GAAK,EAClCiL,OAAOjL,IAAIkN,SAASyO,OAAO1Q,OAAOjL,IAExCgW,eAAiB2lB,kBAAoBnyB,MAAQmyB,kBAAoB1wB,OAAO3Q,OAASqhC,iBACnF,MACEzuB,SAASyO,OAAO1Q,QAElB,IAAK,IAAIjL,EAAI,EAAGA,EAAI67B,aAAavhC,OAAQ0F,GAAK,EAC5CkN,SAASyO,OAAOkgB,aAAa77B,IAE/BoB,OAAOya,eACHja,OAAOuK,MACT/K,OAAOia,aAEJzZ,OAAO25B,WAAYn6B,OAAOuJ,WAC7BvJ,OAAOiL,SAELzK,OAAOuK,KACT/K,OAAOsX,QAAQ1C,eAAiB5U,OAAO+Z,aAAc,GAAG,GAExD/Z,OAAOsX,QAAQ1C,eAAgB,GAAG,EAEtC,CAEA,SAAS+lB,YAAYC,eACnB,MAAM56B,OAASrE,MACT,OACJ6E,OAAM,YACN6J,aACErK,OACJ,IAAIu6B,kBAAoBlwB,YACpB7J,OAAOuK,OACTwvB,mBAAqBv6B,OAAO+Z,aAC5B/Z,OAAOgc,eAET,IACI6e,cADAjmB,eAAiB2lB,kBAErB,GAA6B,iBAAlBK,eAA8B,WAAYA,cAAe,CAClE,IAAK,IAAIh8B,EAAI,EAAGA,EAAIg8B,cAAc1hC,OAAQ0F,GAAK,EAC7Ci8B,cAAgBD,cAAch8B,GAC1BoB,OAAO6J,OAAOgxB,gBAAgB76B,OAAO6J,OAAOgxB,eAAe3xB,SAC3D2xB,cAAgBjmB,iBAAgBA,gBAAkB,GAExDA,eAAiBzT,KAAKC,IAAIwT,eAAgB,EAC5C,MACEimB,cAAgBD,cACZ56B,OAAO6J,OAAOgxB,gBAAgB76B,OAAO6J,OAAOgxB,eAAe3xB,SAC3D2xB,cAAgBjmB,iBAAgBA,gBAAkB,GACtDA,eAAiBzT,KAAKC,IAAIwT,eAAgB,GAE5C5U,OAAOya,eACHja,OAAOuK,MACT/K,OAAOia,aAEJzZ,OAAO25B,WAAYn6B,OAAOuJ,WAC7BvJ,OAAOiL,SAELzK,OAAOuK,KACT/K,OAAOsX,QAAQ1C,eAAiB5U,OAAO+Z,aAAc,GAAG,GAExD/Z,OAAOsX,QAAQ1C,eAAgB,GAAG,EAEtC,CAEA,SAASkmB,kBACP,MAAM96B,OAASrE,KACTi/B,cAAgB,GACtB,IAAK,IAAIh8B,EAAI,EAAGA,EAAIoB,OAAO6J,OAAO3Q,OAAQ0F,GAAK,EAC7Cg8B,cAAc/2B,KAAKjF,GAErBoB,OAAO26B,YAAYC,cACrB,CAEA,SAASG,aAAah7B,MACpB,IAAI,OACFC,QACED,KACJpH,OAAO8S,OAAOzL,OAAQ,CACpBg6B,YAAaA,YAAY9T,KAAKlmB,QAC9Bo6B,aAAcA,aAAalU,KAAKlmB,QAChCs6B,SAAUA,SAASpU,KAAKlmB,QACxB26B,YAAaA,YAAYzU,KAAKlmB,QAC9B86B,gBAAiBA,gBAAgB5U,KAAKlmB,SAE1C,CCxIe,SAASg7B,WAAWC,SACjC,MAAMC,uBAAyBjgC,SAASvB,cAAc,yBAEhDi/B,OAAS,IAAI5P,OAAOkS,QAAQE,aAAav5B,QAAS,CACtDsnB,QAAS,CAAC6R,cACV3jB,UAAW,WACXlN,cAAe,OACf2E,eAAgB,EAChB5B,aAAc,GACdsD,qBAAqB,EACrBF,eAAe,EACf+qB,eAAe,IAGXC,KAAO,IAAItS,OAAOkS,QAAQK,WAAW15B,QAAS,CAClDsnB,QAAS,CAAC6R,aAAc3O,WAAYuB,WAAY2D,KAAMoH,OACtDxuB,cAAe,EACf2E,eAAgB,EAChB5B,aAAc,EACdxM,MAAO,IACP8P,qBAAqB,EACrBF,eAAe,EACf+qB,eAAe,EACftY,WAAY,CACVC,OAAQ,yCACRC,OAAQ,0CAEVuK,WAAY,CACV1wB,GAAI,qCACJ2wB,WAAW,EACX7Q,KAAM,WAER3O,YAAa,CACX,IAAK,CACHoJ,UAAW,WACXlN,cAAe,IACf+C,aAAc,KAGlBskB,KAAM,CACJE,SAAU,IACVE,iBAAkB,WAEpB3qB,GAAI,CACFyd,KAAM,KACJhoB,OAAO8f,YAAc,KA9F7B,WACE,MAAMgf,oBAAsBtgC,SAASvB,cAAc,sBAC7C8hC,gBAAkBvgC,SAASvB,cAAc,wBAC/C,IAAK8hC,kBAAoBD,oBAAqB,OAE9C,MAAM5C,OAAS6C,gBAAgB7hC,iBAAiB,sCAEhD,GAAIg/B,OAAOz/B,OAAS,EAAG,CACrB,MAAMuiC,oBAAsBF,oBAAoBnqB,aAAe,EAE/DmqB,oBAAoBliC,iBAAiB,UAAU,WAC7C,MAAMqiC,cAAgBH,oBAAoB5hC,iBAAiB,gBACrDgiC,aAAeJ,oBAAoBv4B,UACnC44B,gBAAkBD,aAAeJ,oBAAoBnqB,aAE3DsqB,cAAc1iC,SAASu5B,QACrB,MAAMsJ,WAAatJ,MAAMhhB,UAAYkqB,oBAC/BK,cAAgBD,WAAatJ,MAAMnhB,aAEnC2qB,YAAcP,gBAAgB9hC,cAAc,sBAAsB64B,MAAMhd,aAAa,WAEvFumB,cAAgBH,cAAgBE,WAAaD,iBAAmBG,cAClEpD,OAAO3/B,SAAS6D,IAAOA,GAAGyF,UAAU4G,OAAO,aAC3C6yB,YAAYz5B,UAAUC,IAAI,WAC5B,GAEJ,IAEAo2B,OAAO3/B,SAASgjC,QACdA,MAAM3iC,iBAAiB,SAAS,KAC9B,MAAM4iC,cAAgBD,MAAMzmB,aAAa,oBACzC,GAAI0mB,cAAe,CACjB,MAAMC,gBAAkBX,oBAAoB7hC,cAAc,IAAIuiC,iBAE1DC,iBACFX,oBAAoBY,OAAO,CACzB/4B,IAAK84B,gBAAgB3qB,UACrBlO,KAAM,EACN4T,SAAU,UAGhB,IACA,IAGJ0hB,OAAO,GAAGr2B,UAAUC,IAAI,UAC1B,CACF,CA+CoC65B,EAAwB,EAEtDC,WAAY,CAACr8B,OAAQ8wB,MAAOznB,QAASP,WACnC7M,YAAW,KACL6M,QAAQxG,UAAU2G,SAAS,WAC7BiyB,uBAAuB54B,UAAUC,IAAI,WAErC24B,uBAAuB54B,UAAU4G,OAAO,UAC1C,GACC,IAAI,KAKb+xB,QAAQE,aAAan7B,OAAS24B,OAC9BsC,QAAQK,WAAWt7B,OAASq7B,IAC9B,CCzCO,SAASiB,kBAAkBC,UAChC,IAAIC,OAAS,GAEb,SAASC,OAAOzM,GACd,OAAO0M,mBAAmB1M,GAAGtyB,QAAQ,OAAQ,IAC/C,CAEA,IAAK,MAAMi/B,QAAQJ,SAAS/T,UACJ,iBAAXmU,KAAK,KACdH,SAAWA,OAAS,IAAM,IAAMC,OAAOE,KAAK,IAAM,IAAMF,OAAOE,KAAK,KAGxE,OAAOH,MACT,CA2KO,SAASI,YAAY5U,OAE1B,MACE,MACAA,MACG6U,QAAQ,GACRn/B,QAAQ,IAAK,KACbA,QAAQ,sBAAuB,MAEtC,CVkjHA/E,OAAOI,KAAK0sB,YAAYzsB,SAAQ8jC,iBAC9BnkC,OAAOI,KAAK0sB,WAAWqX,iBAAiB9jC,SAAQ+jC,cAC9ChU,OAAO1qB,UAAU0+B,aAAetX,WAAWqX,gBAAgBC,YAAY,GACvE,IAEJhU,OAAOiD,IAAI,CAvtHX,SAAgBjsB,MACd,IAAI,OACFC,OAAM,GACNgH,GAAE,KACFuB,MACExI,KACJ,MAAMtD,OAAS,2BACf,IAAI09B,SAAW,KACX6C,eAAiB,KACrB,MAAMC,cAAgB,KACfj9B,SAAUA,OAAOsH,WAActH,OAAOwV,cAC3CjN,KAAK,gBACLA,KAAK,UAAS,EAsCV20B,yBAA2B,KAC1Bl9B,SAAUA,OAAOsH,WAActH,OAAOwV,aAC3CjN,KAAK,oBAAoB,EAE3BvB,GAAG,QAAQ,KACLhH,OAAOQ,OAAOmkB,qBAAmD,IAA1BloB,OAAO0gC,eAxC7Cn9B,SAAUA,OAAOsH,WAActH,OAAOwV,cAC3C2kB,SAAW,IAAIgD,gBAAe3U,UAC5BwU,eAAiBvgC,OAAOL,uBAAsB,KAC5C,MAAM,MACJiJ,MAAK,OACLE,QACEvF,OACJ,IAAIo9B,SAAW/3B,MACX0L,UAAYxL,OAChBijB,QAAQxvB,SAAQqkC,QACd,IAAI,eACFC,eAAc,YACdC,YAAW,OACX1kC,QACEwkC,MACAxkC,QAAUA,SAAWmH,OAAOnD,KAChCugC,SAAWG,YAAcA,YAAYl4B,OAASi4B,eAAe,IAAMA,gBAAgBE,WACnFzsB,UAAYwsB,YAAcA,YAAYh4B,QAAU+3B,eAAe,IAAMA,gBAAgBG,UAAS,IAE5FL,WAAa/3B,OAAS0L,YAAcxL,QACtC03B,eACF,GACA,IAEJ9C,SAASuD,QAAQ19B,OAAOnD,MAoBxBJ,OAAOpD,iBAAiB,SAAU4jC,eAClCxgC,OAAOpD,iBAAiB,oBAAqB6jC,0BAAyB,IAExEl2B,GAAG,WAAW,KApBRg2B,gBACFvgC,OAAOH,qBAAqB0gC,gBAE1B7C,UAAYA,SAASwD,WAAa39B,OAAOnD,KAC3Cs9B,SAASwD,UAAU39B,OAAOnD,IAC1Bs9B,SAAW,MAiBb19B,OAAOnD,oBAAoB,SAAU2jC,eACrCxgC,OAAOnD,oBAAoB,oBAAqB4jC,yBAAyB,GAE7E,EAEA,SAAkBn9B,MAChB,IAAI,OACFC,OAAM,aACNqpB,aAAY,GACZriB,GAAE,KACFuB,MACExI,KACJ,MAAM69B,UAAY,GACZnhC,OAAS,2BACTohC,OAAS,SAAUhlC,OAAQilC,cACf,IAAZA,UACFA,QAAU,CAAC,GAEb,MACM3D,SAAW,IADI19B,OAAOshC,kBAAoBthC,OAAOuhC,yBACrBC,YAIhC,GAAIj+B,OAAOqb,oBAAqB,OAChC,GAAyB,IAArB4iB,UAAU/kC,OAEZ,YADAqP,KAAK,iBAAkB01B,UAAU,IAGnC,MAAMC,eAAiB,WACrB31B,KAAK,iBAAkB01B,UAAU,GACnC,EACIxhC,OAAOL,sBACTK,OAAOL,sBAAsB8hC,gBAE7BzhC,OAAOR,WAAWiiC,eAAgB,EACpC,IAEF/D,SAASuD,QAAQ7kC,OAAQ,CACvBslC,gBAA0C,IAAvBL,QAAQK,YAAoCL,QAAQK,WACvEC,eAAwC,IAAtBN,QAAQM,WAAmCN,QAAQM,UACrEC,mBAAgD,IAA1BP,QAAQO,eAAuCP,QAAQO,gBAE/ET,UAAU/5B,KAAKs2B,SACjB,EAyBA9Q,aAAa,CACX8Q,UAAU,EACVmE,gBAAgB,EAChBC,sBAAsB,IAExBv3B,GAAG,QA7BU,KACX,GAAKhH,OAAOQ,OAAO25B,SAAnB,CACA,GAAIn6B,OAAOQ,OAAO89B,eAAgB,CAChC,MAAME,iBAAmB,qBAAex+B,OAAOsrB,QAC/C,IAAK,IAAI1sB,EAAI,EAAGA,EAAI4/B,iBAAiBtlC,OAAQ0F,GAAK,EAChDi/B,OAAOW,iBAAiB5/B,GAE5B,CAEAi/B,OAAO79B,OAAOsrB,OAAQ,CACpB8S,UAAWp+B,OAAOQ,OAAO+9B,uBAI3BV,OAAO79B,OAAOU,UAAW,CACvBy9B,YAAY,GAdqB,CAejC,IAcJn3B,GAAG,WAZa,KACd42B,UAAU5kC,SAAQmhC,WAChBA,SAASsE,YAAY,IAEvBb,UAAUv1B,OAAO,EAAGu1B,UAAU1kC,OAAO,GASzC,IWrIA,aA7GiB,CACfwlC,eAAgBC,eAAgBC,MAC9B,MAAMC,IAAM5jC,SAASvB,cAAc,mCAAmCsuB,MAChE8W,SAAW7jC,SAASvB,cAAc,wCAAwCsuB,MAC1E+W,IAAMH,KAAKllC,cAAc,UAAUsuB,MAAMtqB,QAAQ,IAAK,IACtDshC,aAAeJ,KAAKllC,cAAc,WAExC,GAAkB,GAAdqlC,IAAI7lC,OACN0lC,KAAKt8B,UAAUC,IAAI,SACnBq8B,KAAKllC,cAAc,cAAc4I,UAAUC,IAAI,YAC/Cq8B,KAAKllC,cAAc,cAAcw3B,UAAY,8BACxC,CACL,MAAMqL,SAAW,IAAI0C,SAMrB,GAJA1C,SAASzG,IAAI,MAAO+I,KACpBtC,SAASzG,IAAI,WAAYgJ,UACzBvC,SAASzG,IAAI,MAAOiJ,MAEfH,KAAKt8B,UAAU2G,SAAS,YAAa,CACxC21B,KAAKt8B,UAAU4G,OAAO,UACtB01B,KAAKt8B,UAAUC,IAAI,YACnBy8B,aAAa18B,UAAUC,IAAI,YAE3B,IACE,MAAM28B,eAAiBC,MAAM,iBAAkB,CAC7C53B,OAAQ,OACR63B,QAAS,CACP,eAAgB,qCAElBhmC,KAAMkjC,kBAAkBC,YAGpB/zB,WAAa02B,SAASG,OAE5B,GAAI72B,KAAK82B,MACPr9B,QAAQq9B,MAAM,wCACdr9B,QAAQq9B,MAAM92B,KAAK82B,OAEnBV,KAAKt8B,UAAUC,IAAI,SACnBq8B,KAAKllC,cAAc,cAAc4I,UAAUC,IAAI,YAC/Cq8B,KAAKllC,cAAc,cAAcw3B,UAC/B,gEAEFj1B,YAAW,WACT2iC,KAAKt8B,UAAU4G,OAAO,UACtB01B,KAAKllC,cAAc,cAAc4I,UAAU4G,OAAO,YAClD81B,aAAa18B,UAAU4G,OAAO,WAChC,GAAG,UACE,CACL,MAAMq2B,QAAUC,KAAKC,MAAMj3B,KAAK+2B,SAC1BG,QAAUl3B,KAAKm3B,gBAErB,IAAIC,OAAS,iEAAiEF,QAAQG,gBAAgBH,QAAQI,kBAAkBJ,QAAQK,QAAQL,QAAQM,aAExJJ,QAAU,6BAEVL,QAAQvmC,SAASuO,SACf,IAAI04B,MAAQ14B,OAAO04B,MACnBA,MAAiB,GAATA,MAAa,SAAWrD,YAAYqD,OAE5CL,QAAU,kIAGcr4B,OAAO24B,iDACG,WAAVD,MAAqB,QAAU,OAAOA,8EAEpC14B,OAAO44B,2DAEhC,IAGHP,QAAU,QAEV3kC,SAASvB,cAAc,wBAAwBw3B,UAAY0O,MAC7D,CACF,CAAE,MAAON,OACPr9B,QAAQq9B,MAAM,+CACdr9B,QAAQq9B,MAAMA,OACdV,KAAKt8B,UAAUC,IAAI,SACnBq8B,KAAKllC,cAAc,cAAc4I,UAAUC,IAAI,YAC/Cq8B,KAAKllC,cAAc,cAAcw3B,UAAY,gEAC7C8N,aAAa18B,UAAU4G,OAAO,WAChC,CAEA01B,KAAKt8B,UAAU4G,OAAO,YACtB81B,aAAa18B,UAAU4G,OAAO,WAChC,CACF,CACF,EAEAub,KAAM,WACJ,MAAM2b,MAAQzkC,KAERijC,KAAO3jC,SAASvB,cAAc,0BACjBklC,KAAKllC,cAAc,UAE3BL,iBAAiB,SAAUmO,QACpC,MAAM8O,EAAI9O,MAAM3O,OAAOmvB,MAAMtqB,QAAQ,MAAO,IAAI8H,MAAM,sBACtDgC,MAAM3O,OAAOmvB,MAAS1R,EAAE,GAAYA,EAAE,GAAK,IAAMA,EAAE,GAAtBA,EAAE,EAAsB,IAGvDsoB,KAAKvlC,iBAAiB,UAAWmO,QAC/BA,MAAMgV,iBAEN4jB,MAAM1B,eAAeE,KAAK,GAE9B,GClDF,mBAxDuB,CAGrByB,uBAAwB,WACNplC,SAAStB,iBAAiB,wBAElCX,SAAQsnC,SACd,MAAMxC,QAAUwC,OAAO3mC,iBAAiB,wBAClC4mC,aAAeD,OAAO5mC,cAAc,gBACrC6mC,cAELzC,QAAQ9kC,SAAQwnC,SACdA,OAAOnnC,iBAAiB,UAAU,KAChC,MAAMsjB,KAAO6jB,OAAOjrB,aAAa,QAC3ByS,MAAQvhB,OAAO+5B,OAAOjrB,aAAa,6BAErCyS,MAAQ,EAGG,UAATrL,MAA6B,aAATA,KACtB6jB,OAAOC,QACLF,aAAaG,UAAY,KAAK9D,YAAY5U,SAC1CuY,aAAaG,UAAY,GAET,SAAT/jB,MAA4B,aAATA,OACZ,IAAhB6jB,OAAOxY,MACLuY,aAAaG,UAAY,KAAK9D,YAAY5U,SAC1CuY,aAAaG,UAAY,IAI7BH,aAAaG,UAAY,EAC3B,GACD,GACF,GAEL,EAGAC,gBAAiB,WACC1lC,SAAStB,iBAAiB,wBAClCX,SAAQsnC,SAEd,GADeA,OAAO3mC,iBAAiB,+CAC5BT,OAAS,EAAG,CACrB,MAAM0nC,eAAiBN,OAAO5mC,cAAc,qBACxCknC,gBAAgBA,eAAeC,OACrC,IAEJ,EAEApc,KAAM,WACJ9oB,KAAK0kC,yBACL1kC,KAAKglC,iBACP,GCrDa,SAASG,iBACO7lC,SAAStB,iBAAiB,+BAElCX,SAAS+nC,MAC5BA,IAAI1nC,iBAAiB,SAAS,KAC5B0nC,IAAIz+B,UAAUorB,OAAO,SACrB,MAAMsT,eAAiBD,IAAIn9B,cAAclK,cAAc,YACjDunC,QAAUD,eAAetnC,cAAc,UHiF5C,SAAqBsnC,eAAgBC,QAAS1gC,SAAW,KAGzC,OAFD9D,OAAOb,iBAAiBolC,gBAAgBz7B,OAoBvD,SAAmBy7B,eAAgBC,QAAS1gC,SAAW,KAC5D,IAAIonB,YAAcsZ,QAAQ71B,aAE1B41B,eAAe9mC,MAAMqL,OAAS,GAAGoiB,gBACjCqZ,eAAe9mC,MAAMwrB,WAAa,UAAUnlB,eAC9C,CAtBW2gC,CAAUF,eAAgBC,QAAS1gC,UASvC,SAAiBygC,eAAgBzgC,SAAW,KACjDygC,eAAe9mC,MAAMqL,OAAS,MAC9By7B,eAAe9mC,MAAMwrB,WAAa,UAAUnlB,eAC9C,CAVW4gC,CAAQH,eAAgBzgC,SAEnC,CGxFM6gC,CAAYJ,eAAgBC,QAAQ,GACpC,GAEN,CCDA,MAAMhG,QAAU,CACdK,WAAY,CACV15B,QAAS3G,SAASvB,cAAc,sBAChCsG,QAAQ,GAEVm7B,aAAc,CACZv5B,QAAS3G,SAASvB,cAAc,wBAChCsG,QAAQ,GAEVqhC,eAAgBpmC,SAASvB,cAAc,0BACvC4nC,kBAAmB,GACnBC,kBAAmB,GACnBC,eAAgB,CAAC,EACjBC,eAAgB,CAAC,EAEjBC,UAAW,WACT,MAAMC,WAAallC,OAAOmlC,YACpBC,SAAWplC,OAAOqlC,gBAAgBH,YACxC,IAAII,KAAO,GACPF,WAAUE,KAAOF,SAASrkC,KAAKwkC,SAAYA,QAAQnD,OAGvD5D,QAAQgH,kBAAkBF,MAC1B9G,QAAQiH,uBAGRjH,QAAQoG,eAAehoC,iBAAiB,mBAAoBmO,QAC1DyzB,QAAQkH,aAAa36B,MAAM4Z,OAAOyd,KAClCpiC,OAAO2lC,SAAS3d,MAAM,IAIxB,MAAMoa,IAAM5D,QAAQoG,eAAe3nC,cAAc,wCAAwCsuB,MACzFiT,QAAQkH,aAAatD,KACrBpiC,OAAO2lC,SAAS3d,MAClB,EAEAyd,qBAAsB,WACpB,MAAMrI,cAAgBoB,QAAQE,aAAav5B,QACrCygC,YAAcpH,QAAQK,WAAW15B,QAEnCi4B,gBAAeoB,QAAQsG,kBAAoB1H,cAAclgC,iBAAiB,uBAE1E0oC,cAAapH,QAAQqG,kBAAoBe,YAAY1oC,iBAAiB,sBAC5E,EAEAsoC,kBAAmB,SAAUF,MAC3B,MAAMlI,cAAgBoB,QAAQE,aAAav5B,QACrCygC,YAAcpH,QAAQK,WAAW15B,QAGjC0gC,OAAS,IACVzI,cAAclgC,iBAAiB,sBAC/B0oC,YAAY1oC,iBAAiB,oBAIlCooC,KAAK/oC,SAAS6lC,MACZ5D,QAAQuG,eAAe3C,KAAO,GAC9B5D,QAAQwG,eAAe5C,KAAO,GAE9ByD,OAAOtpC,SAASu5B,QACd,MAAMgQ,UAAYhQ,MAAMhd,aAAa,aAAahY,MAAM,KAExD,IAAIof,KAAO,OACmC,MAA1C4V,MAAMhd,aAAa,sBAA6BoH,KAAO,SAEvD4lB,UAAUl8B,SAASw4B,OACb,QAARliB,KAAiBse,QAAQuG,eAAe3C,KAAKh7B,KAAK0uB,OAAS0I,QAAQwG,eAAe5C,KAAKh7B,KAAK0uB,OAC9F,GACA,GAEN,EAEA4P,aAAc,SAAUtD,KACtB,MAAMlG,OAASsC,QAAQE,aAAan7B,OAC9Bq7B,KAAOJ,QAAQK,WAAWt7B,OAC1BwiC,UAAYvH,QAAQwG,eAAe5C,KACnC4D,UAAYxH,QAAQuG,eAAe3C,KAIzClG,OAAOmC,kBACPnC,OAAOqB,YAAYiB,QAAQsG,mBACvBiB,WAAW7J,OAAOqB,YAAYwI,WAIlCnH,KAAKP,kBACLO,KAAKrB,YAAYiB,QAAQqG,mBACrBmB,WAAWpH,KAAKrB,YAAYyI,WAGhC9J,OAAO1tB,SACPowB,KAAKpwB,SACLowB,KAAK1C,OAAO1tB,SAGZ0tB,OAAOrhB,QAAQ,GACf+jB,KAAK/jB,QAAQ,EACf,EAEAorB,QAAS,WACP,MAAMC,QAAU1H,QAAQK,WAAWt7B,OAGnC2iC,QAAQ37B,GAAG,cAAc,CAAChH,OAAQ8wB,MAAOznB,QAASP,WAChDmyB,QAAQ2H,uBAAuB95B,QAAQ,IAIrCrM,OAAO8f,WAAa,MAUtBomB,QAAQ37B,GAAG,4BAA4B,KACrC27B,QAAQpR,KAAKgF,MACboM,QAAQ94B,OAAO7Q,SAASiV,QACtBA,MAAM3L,UAAU4G,OAAO,UAAU,GACjC,IAGJy5B,QAAQ94B,OAAO7Q,SAASiV,QAElBxR,OAAO8f,WAAa,MACtBtO,MAAM5U,iBAAiB,aAAcmO,QACnC,GAAIyG,MAAM3L,UAAU2G,SAAS,WAAY,CACvC,MAAM45B,cAAgB50B,MAAMvU,cAAc,0BACpCopC,YAAc70B,MAAMvU,cAAc,uBAIlCqpC,QAAU90B,MAAM9C,YAAc,EAC9B63B,QAAU/0B,MAAM7C,aAAe,EAC/B63B,OAASz7B,MAAM07B,QAAUj1B,MAAMpL,wBAAwBQ,KAAO0/B,QAC9DI,OAAS37B,MAAM47B,QAAUn1B,MAAMpL,wBAAwBO,IAAM4/B,QAC7DK,SAAqB,IAATJ,OAAgBF,QAAU,EACtCO,SAAqB,IAATH,OAAgBH,QAAU,EAM5C,IAAIO,MAFkBT,YAAYjgC,wBAAwBwC,MAAQg+B,SAAY,IAG1EG,MAFkBV,YAAYjgC,wBAAwB0C,OAAS+9B,SAAY,IAK/E,MAAMG,QAAUX,YAAYjgC,wBAAwBwC,MAAQw9B,cAAc13B,aAAe,EACnFu4B,QAAUZ,YAAYjgC,wBAAwB0C,OAASs9B,cAAcz3B,cAAgB,EAEvFm4B,MAAQE,SAAQF,MAAQE,QACxBF,OAAkB,EAAVE,SAAaF,OAAkB,EAAVE,QAE7BD,MAAQE,SAAQF,MAAQE,QACxBF,OAAkB,EAAVE,SAAaF,OAAkB,EAAVE,QAI7BT,OAASF,UAASQ,QAAiB,GACnCJ,OAASH,UAASQ,QAAiB,GAEvCX,cAAc3oC,MAAMmD,UAAY,eAAekmC,YAAYC,eAC7D,KAImC,IAAjCb,QAAQniC,OAAO0J,gBACjB+wB,QAAQK,WAAW15B,QAAQU,UAAUC,IAAI,iBACzC0L,MAAM5U,iBAAiB,SAAS,KAC1B4U,MAAM3L,UAAU2G,SAAS,YAC3B05B,QAAQpR,KAAKgF,MACboM,QAAQ94B,OAAO7Q,SAASiV,QACtBA,MAAM3L,UAAU4G,OAAO,UAAU,KAGnCy5B,QAAQpR,KAAK+E,IACf,KAGN,IAGN,EAEAsM,uBAAwB,SAAU30B,OAChC,MAAMskB,MAAQtkB,MAAMvU,cAAc,OAClC,IAAK64B,MAAO,OAEZ,MAAMoR,QAAUpR,MAAMhd,aAAa,iBAC9BouB,SAED11B,MAAM3L,UAAU2G,SAAS,aAC3BspB,MAAMz5B,IAAM6qC,QACZpR,MAAMzoB,gBAAgB,UACtByoB,MAAMzoB,gBAAgB,eACtByoB,MAAMzoB,gBAAgB,iBAEtBmxB,QAAQK,WAAWt7B,OAAOiL,SAE9B,EAEAwZ,KAAM,WAGJuW,WAAWC,SAFGt/B,KAGR+lC,YAHQ/lC,KAIR+mC,UACN,eAAeje,OCjOJ,WACb,MAAMmf,MAAQ3oC,SAASvB,cAAc,qBAC/BmqC,SAAW5oC,SAAStB,iBAAiB,gCAEvCiqC,OAASC,SAAS3qC,OAAS,GAC7B2qC,SAAS7qC,SAASukB,SAChBA,OAAOlkB,iBAAiB,SAAS,KAC/BuqC,MAAMthC,UAAUorB,OAAO,QAAQ,GAC/B,GAGR,CDuNIoW,GACA,SAASrf,OJ1GN,WACL,MAAMsf,SAAW9oC,SAAStB,iBAAiB,qBAE3B,MAAZoqC,UAEJA,SAAS/qC,SAASgrC,UAChB,MAAMC,SAAWD,QAAQE,QAAQC,gBAEjCH,QAAQ1iB,cAAc,IAAI8iB,MAAM,WAGhB,KAAZH,UACFD,QAAQ9pC,MAAM2F,YAAY,aAAc,KAAKokC,aAC/C,GAEJ,CI4FII,GEhOuBppC,SAAStB,iBAAiB,4BAElCX,SAASsrC,UACxB,MAAMC,SAAWD,QAAQ5qC,cAAc,WAEjCua,MADaqwB,QAAQ5qC,cAAc,sBAC5B4qC,QAAQ5qC,cAAc,wBAC7B2a,KAAOiwB,QAAQ5qC,cAAc,uBAE/B6qC,UACa,IAAIxb,OAAOwb,SAAU,CAClCrb,QAAS,CAACkD,WAAYuB,YACtBzjB,cAAe,EACf+C,aAAc,GACdoD,eAAe,EACf5P,MAAO,IACPqiB,WAAY,CACVC,OAAQ9O,KACR+O,OAAQ3O,MAEVrG,YAAa,CACX,IAAK,CACH9D,cAAe,GAEjB,KAAM,CACJA,cAAe,KAIvB,IC7BW,WACb,MAAMs6B,OAASvpC,SAASvB,cAAc,kBACtC,IAAK8qC,OAAQ,OAEb,MAAMC,aAAe,IAAI1b,OAAOyb,OAAO9qC,cAAc,WAAY,CAC/DwvB,QAAS,CAACsN,UACVtsB,cAAe,EACf+C,aAAc,EACdoD,eAAe,EACftF,MAAM,EACNtK,MAAO,IACP2iB,SAAU,CACR1mB,MAAO,IACPm6B,sBAAsB,EACtBG,mBAAmB,KAKvByN,aAAarhB,SAAS+U,OACtB,MAAMuM,UAAYjoC,OAAOkoC,OAAS,SAAW,YAC7CloC,OAAOpD,iBAAiBqrC,UAAWD,aAAarhB,SAAS8U,QAAS,CAAEzwB,MAAM,GAC5E,CH8MIm9B,GAEA9D,gBAEF,GAGFrkC,OAAOpD,iBAAiB,oBAAoB,KAC1C4hC,QAAQxW,MAAM,G","sources":["webpack://build/../usuall/node_modules/swiper/shared/ssr-window.esm.mjs","webpack://build/../usuall/node_modules/swiper/shared/utils.mjs","webpack://build/../usuall/node_modules/swiper/shared/swiper-core.mjs","webpack://build/../usuall/node_modules/swiper/shared/create-element-if-not-defined.mjs","webpack://build/../usuall/node_modules/swiper/modules/navigation.mjs","webpack://build/../usuall/node_modules/swiper/shared/classes-to-selector.mjs","webpack://build/../usuall/node_modules/swiper/modules/pagination.mjs","webpack://build/../usuall/node_modules/swiper/modules/zoom.mjs","webpack://build/../usuall/node_modules/swiper/modules/autoplay.mjs","webpack://build/../usuall/node_modules/swiper/modules/thumbs.mjs","webpack://build/../usuall/node_modules/swiper/modules/manipulation.mjs","webpack://build/../usuall/assets/javascripts/pages/product/setGallery.js","webpack://build/../usuall/assets/javascripts/components/utilities.js","webpack://build/../usuall/assets/javascripts/components/shipping.js","webpack://build/../usuall/assets/javascripts/pages/product/customizations.js","webpack://build/../usuall/assets/javascripts/pages/product/setProductTabs.js","webpack://build/../usuall/assets/javascripts/pages/product.js","webpack://build/../usuall/assets/javascripts/pages/product/setSizeGuide.js","webpack://build/../usuall/assets/javascripts/components/carousel.js","webpack://build/../usuall/assets/javascripts/components/topBar.js"],"sourcesContent":["/**\n * SSR Window 4.0.2\n * Better handling for window object in SSR environment\n * https://github.com/nolimits4web/ssr-window\n *\n * Copyright 2021, Vladimir Kharlampidi\n *\n * Licensed under MIT\n *\n * Released on: December 13, 2021\n */\n/* eslint-disable no-param-reassign */\nfunction isObject(obj) {\n return obj !== null && typeof obj === 'object' && 'constructor' in obj && obj.constructor === Object;\n}\nfunction extend(target, src) {\n if (target === void 0) {\n target = {};\n }\n if (src === void 0) {\n src = {};\n }\n Object.keys(src).forEach(key => {\n if (typeof target[key] === 'undefined') target[key] = src[key];else if (isObject(src[key]) && isObject(target[key]) && Object.keys(src[key]).length > 0) {\n extend(target[key], src[key]);\n }\n });\n}\nconst ssrDocument = {\n body: {},\n addEventListener() {},\n removeEventListener() {},\n activeElement: {\n blur() {},\n nodeName: ''\n },\n querySelector() {\n return null;\n },\n querySelectorAll() {\n return [];\n },\n getElementById() {\n return null;\n },\n createEvent() {\n return {\n initEvent() {}\n };\n },\n createElement() {\n return {\n children: [],\n childNodes: [],\n style: {},\n setAttribute() {},\n getElementsByTagName() {\n return [];\n }\n };\n },\n createElementNS() {\n return {};\n },\n importNode() {\n return null;\n },\n location: {\n hash: '',\n host: '',\n hostname: '',\n href: '',\n origin: '',\n pathname: '',\n protocol: '',\n search: ''\n }\n};\nfunction getDocument() {\n const doc = typeof document !== 'undefined' ? document : {};\n extend(doc, ssrDocument);\n return doc;\n}\nconst ssrWindow = {\n document: ssrDocument,\n navigator: {\n userAgent: ''\n },\n location: {\n hash: '',\n host: '',\n hostname: '',\n href: '',\n origin: '',\n pathname: '',\n protocol: '',\n search: ''\n },\n history: {\n replaceState() {},\n pushState() {},\n go() {},\n back() {}\n },\n CustomEvent: function CustomEvent() {\n return this;\n },\n addEventListener() {},\n removeEventListener() {},\n getComputedStyle() {\n return {\n getPropertyValue() {\n return '';\n }\n };\n },\n Image() {},\n Date() {},\n screen: {},\n setTimeout() {},\n clearTimeout() {},\n matchMedia() {\n return {};\n },\n requestAnimationFrame(callback) {\n if (typeof setTimeout === 'undefined') {\n callback();\n return null;\n }\n return setTimeout(callback, 0);\n },\n cancelAnimationFrame(id) {\n if (typeof setTimeout === 'undefined') {\n return;\n }\n clearTimeout(id);\n }\n};\nfunction getWindow() {\n const win = typeof window !== 'undefined' ? window : {};\n extend(win, ssrWindow);\n return win;\n}\n\nexport { getWindow as a, getDocument as g };\n","import { a as getWindow, g as getDocument } from './ssr-window.esm.mjs';\n\nfunction classesToTokens(classes) {\n if (classes === void 0) {\n classes = '';\n }\n return classes.trim().split(' ').filter(c => !!c.trim());\n}\n\nfunction deleteProps(obj) {\n const object = obj;\n Object.keys(object).forEach(key => {\n try {\n object[key] = null;\n } catch (e) {\n // no getter for object\n }\n try {\n delete object[key];\n } catch (e) {\n // something got wrong\n }\n });\n}\nfunction nextTick(callback, delay) {\n if (delay === void 0) {\n delay = 0;\n }\n return setTimeout(callback, delay);\n}\nfunction now() {\n return Date.now();\n}\nfunction getComputedStyle(el) {\n const window = getWindow();\n let style;\n if (window.getComputedStyle) {\n style = window.getComputedStyle(el, null);\n }\n if (!style && el.currentStyle) {\n style = el.currentStyle;\n }\n if (!style) {\n style = el.style;\n }\n return style;\n}\nfunction getTranslate(el, axis) {\n if (axis === void 0) {\n axis = 'x';\n }\n const window = getWindow();\n let matrix;\n let curTransform;\n let transformMatrix;\n const curStyle = getComputedStyle(el);\n if (window.WebKitCSSMatrix) {\n curTransform = curStyle.transform || curStyle.webkitTransform;\n if (curTransform.split(',').length > 6) {\n curTransform = curTransform.split(', ').map(a => a.replace(',', '.')).join(', ');\n }\n // Some old versions of Webkit choke when 'none' is passed; pass\n // empty string instead in this case\n transformMatrix = new window.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform);\n } else {\n transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,');\n matrix = transformMatrix.toString().split(',');\n }\n if (axis === 'x') {\n // Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix) curTransform = transformMatrix.m41;\n // Crazy IE10 Matrix\n else if (matrix.length === 16) curTransform = parseFloat(matrix[12]);\n // Normal Browsers\n else curTransform = parseFloat(matrix[4]);\n }\n if (axis === 'y') {\n // Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix) curTransform = transformMatrix.m42;\n // Crazy IE10 Matrix\n else if (matrix.length === 16) curTransform = parseFloat(matrix[13]);\n // Normal Browsers\n else curTransform = parseFloat(matrix[5]);\n }\n return curTransform || 0;\n}\nfunction isObject(o) {\n return typeof o === 'object' && o !== null && o.constructor && Object.prototype.toString.call(o).slice(8, -1) === 'Object';\n}\nfunction isNode(node) {\n // eslint-disable-next-line\n if (typeof window !== 'undefined' && typeof window.HTMLElement !== 'undefined') {\n return node instanceof HTMLElement;\n }\n return node && (node.nodeType === 1 || node.nodeType === 11);\n}\nfunction extend() {\n const to = Object(arguments.length <= 0 ? undefined : arguments[0]);\n const noExtend = ['__proto__', 'constructor', 'prototype'];\n for (let i = 1; i < arguments.length; i += 1) {\n const nextSource = i < 0 || arguments.length <= i ? undefined : arguments[i];\n if (nextSource !== undefined && nextSource !== null && !isNode(nextSource)) {\n const keysArray = Object.keys(Object(nextSource)).filter(key => noExtend.indexOf(key) < 0);\n for (let nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) {\n const nextKey = keysArray[nextIndex];\n const desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);\n if (desc !== undefined && desc.enumerable) {\n if (isObject(to[nextKey]) && isObject(nextSource[nextKey])) {\n if (nextSource[nextKey].__swiper__) {\n to[nextKey] = nextSource[nextKey];\n } else {\n extend(to[nextKey], nextSource[nextKey]);\n }\n } else if (!isObject(to[nextKey]) && isObject(nextSource[nextKey])) {\n to[nextKey] = {};\n if (nextSource[nextKey].__swiper__) {\n to[nextKey] = nextSource[nextKey];\n } else {\n extend(to[nextKey], nextSource[nextKey]);\n }\n } else {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n }\n }\n return to;\n}\nfunction setCSSProperty(el, varName, varValue) {\n el.style.setProperty(varName, varValue);\n}\nfunction animateCSSModeScroll(_ref) {\n let {\n swiper,\n targetPosition,\n side\n } = _ref;\n const window = getWindow();\n const startPosition = -swiper.translate;\n let startTime = null;\n let time;\n const duration = swiper.params.speed;\n swiper.wrapperEl.style.scrollSnapType = 'none';\n window.cancelAnimationFrame(swiper.cssModeFrameID);\n const dir = targetPosition > startPosition ? 'next' : 'prev';\n const isOutOfBound = (current, target) => {\n return dir === 'next' && current >= target || dir === 'prev' && current <= target;\n };\n const animate = () => {\n time = new Date().getTime();\n if (startTime === null) {\n startTime = time;\n }\n const progress = Math.max(Math.min((time - startTime) / duration, 1), 0);\n const easeProgress = 0.5 - Math.cos(progress * Math.PI) / 2;\n let currentPosition = startPosition + easeProgress * (targetPosition - startPosition);\n if (isOutOfBound(currentPosition, targetPosition)) {\n currentPosition = targetPosition;\n }\n swiper.wrapperEl.scrollTo({\n [side]: currentPosition\n });\n if (isOutOfBound(currentPosition, targetPosition)) {\n swiper.wrapperEl.style.overflow = 'hidden';\n swiper.wrapperEl.style.scrollSnapType = '';\n setTimeout(() => {\n swiper.wrapperEl.style.overflow = '';\n swiper.wrapperEl.scrollTo({\n [side]: currentPosition\n });\n });\n window.cancelAnimationFrame(swiper.cssModeFrameID);\n return;\n }\n swiper.cssModeFrameID = window.requestAnimationFrame(animate);\n };\n animate();\n}\nfunction getSlideTransformEl(slideEl) {\n return slideEl.querySelector('.swiper-slide-transform') || slideEl.shadowRoot && slideEl.shadowRoot.querySelector('.swiper-slide-transform') || slideEl;\n}\nfunction elementChildren(element, selector) {\n if (selector === void 0) {\n selector = '';\n }\n return [...element.children].filter(el => el.matches(selector));\n}\nfunction showWarning(text) {\n try {\n console.warn(text);\n return;\n } catch (err) {\n // err\n }\n}\nfunction createElement(tag, classes) {\n if (classes === void 0) {\n classes = [];\n }\n const el = document.createElement(tag);\n el.classList.add(...(Array.isArray(classes) ? classes : classesToTokens(classes)));\n return el;\n}\nfunction elementOffset(el) {\n const window = getWindow();\n const document = getDocument();\n const box = el.getBoundingClientRect();\n const body = document.body;\n const clientTop = el.clientTop || body.clientTop || 0;\n const clientLeft = el.clientLeft || body.clientLeft || 0;\n const scrollTop = el === window ? window.scrollY : el.scrollTop;\n const scrollLeft = el === window ? window.scrollX : el.scrollLeft;\n return {\n top: box.top + scrollTop - clientTop,\n left: box.left + scrollLeft - clientLeft\n };\n}\nfunction elementPrevAll(el, selector) {\n const prevEls = [];\n while (el.previousElementSibling) {\n const prev = el.previousElementSibling; // eslint-disable-line\n if (selector) {\n if (prev.matches(selector)) prevEls.push(prev);\n } else prevEls.push(prev);\n el = prev;\n }\n return prevEls;\n}\nfunction elementNextAll(el, selector) {\n const nextEls = [];\n while (el.nextElementSibling) {\n const next = el.nextElementSibling; // eslint-disable-line\n if (selector) {\n if (next.matches(selector)) nextEls.push(next);\n } else nextEls.push(next);\n el = next;\n }\n return nextEls;\n}\nfunction elementStyle(el, prop) {\n const window = getWindow();\n return window.getComputedStyle(el, null).getPropertyValue(prop);\n}\nfunction elementIndex(el) {\n let child = el;\n let i;\n if (child) {\n i = 0;\n // eslint-disable-next-line\n while ((child = child.previousSibling) !== null) {\n if (child.nodeType === 1) i += 1;\n }\n return i;\n }\n return undefined;\n}\nfunction elementParents(el, selector) {\n const parents = []; // eslint-disable-line\n let parent = el.parentElement; // eslint-disable-line\n while (parent) {\n if (selector) {\n if (parent.matches(selector)) parents.push(parent);\n } else {\n parents.push(parent);\n }\n parent = parent.parentElement;\n }\n return parents;\n}\nfunction elementTransitionEnd(el, callback) {\n function fireCallBack(e) {\n if (e.target !== el) return;\n callback.call(el, e);\n el.removeEventListener('transitionend', fireCallBack);\n }\n if (callback) {\n el.addEventListener('transitionend', fireCallBack);\n }\n}\nfunction elementOuterSize(el, size, includeMargins) {\n const window = getWindow();\n if (includeMargins) {\n return el[size === 'width' ? 'offsetWidth' : 'offsetHeight'] + parseFloat(window.getComputedStyle(el, null).getPropertyValue(size === 'width' ? 'margin-right' : 'margin-top')) + parseFloat(window.getComputedStyle(el, null).getPropertyValue(size === 'width' ? 'margin-left' : 'margin-bottom'));\n }\n return el.offsetWidth;\n}\nfunction makeElementsArray(el) {\n return (Array.isArray(el) ? el : [el]).filter(e => !!e);\n}\n\nexport { elementParents as a, elementOffset as b, createElement as c, now as d, elementChildren as e, elementOuterSize as f, getSlideTransformEl as g, elementIndex as h, classesToTokens as i, getTranslate as j, elementTransitionEnd as k, isObject as l, makeElementsArray as m, nextTick as n, elementStyle as o, elementNextAll as p, elementPrevAll as q, animateCSSModeScroll as r, setCSSProperty as s, showWarning as t, extend as u, deleteProps as v };\n","import { a as getWindow, g as getDocument } from './ssr-window.esm.mjs';\nimport { a as elementParents, o as elementStyle, e as elementChildren, s as setCSSProperty, f as elementOuterSize, p as elementNextAll, q as elementPrevAll, j as getTranslate, r as animateCSSModeScroll, n as nextTick, t as showWarning, c as createElement, d as now, u as extend, h as elementIndex, v as deleteProps } from './utils.mjs';\n\nlet support;\nfunction calcSupport() {\n const window = getWindow();\n const document = getDocument();\n return {\n smoothScroll: document.documentElement && document.documentElement.style && 'scrollBehavior' in document.documentElement.style,\n touch: !!('ontouchstart' in window || window.DocumentTouch && document instanceof window.DocumentTouch)\n };\n}\nfunction getSupport() {\n if (!support) {\n support = calcSupport();\n }\n return support;\n}\n\nlet deviceCached;\nfunction calcDevice(_temp) {\n let {\n userAgent\n } = _temp === void 0 ? {} : _temp;\n const support = getSupport();\n const window = getWindow();\n const platform = window.navigator.platform;\n const ua = userAgent || window.navigator.userAgent;\n const device = {\n ios: false,\n android: false\n };\n const screenWidth = window.screen.width;\n const screenHeight = window.screen.height;\n const android = ua.match(/(Android);?[\\s\\/]+([\\d.]+)?/); // eslint-disable-line\n let ipad = ua.match(/(iPad).*OS\\s([\\d_]+)/);\n const ipod = ua.match(/(iPod)(.*OS\\s([\\d_]+))?/);\n const iphone = !ipad && ua.match(/(iPhone\\sOS|iOS)\\s([\\d_]+)/);\n const windows = platform === 'Win32';\n let macos = platform === 'MacIntel';\n\n // iPadOs 13 fix\n const iPadScreens = ['1024x1366', '1366x1024', '834x1194', '1194x834', '834x1112', '1112x834', '768x1024', '1024x768', '820x1180', '1180x820', '810x1080', '1080x810'];\n if (!ipad && macos && support.touch && iPadScreens.indexOf(`${screenWidth}x${screenHeight}`) >= 0) {\n ipad = ua.match(/(Version)\\/([\\d.]+)/);\n if (!ipad) ipad = [0, 1, '13_0_0'];\n macos = false;\n }\n\n // Android\n if (android && !windows) {\n device.os = 'android';\n device.android = true;\n }\n if (ipad || iphone || ipod) {\n device.os = 'ios';\n device.ios = true;\n }\n\n // Export object\n return device;\n}\nfunction getDevice(overrides) {\n if (overrides === void 0) {\n overrides = {};\n }\n if (!deviceCached) {\n deviceCached = calcDevice(overrides);\n }\n return deviceCached;\n}\n\nlet browser;\nfunction calcBrowser() {\n const window = getWindow();\n const device = getDevice();\n let needPerspectiveFix = false;\n function isSafari() {\n const ua = window.navigator.userAgent.toLowerCase();\n return ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0;\n }\n if (isSafari()) {\n const ua = String(window.navigator.userAgent);\n if (ua.includes('Version/')) {\n const [major, minor] = ua.split('Version/')[1].split(' ')[0].split('.').map(num => Number(num));\n needPerspectiveFix = major < 16 || major === 16 && minor < 2;\n }\n }\n const isWebView = /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(window.navigator.userAgent);\n const isSafariBrowser = isSafari();\n const need3dFix = isSafariBrowser || isWebView && device.ios;\n return {\n isSafari: needPerspectiveFix || isSafariBrowser,\n needPerspectiveFix,\n need3dFix,\n isWebView\n };\n}\nfunction getBrowser() {\n if (!browser) {\n browser = calcBrowser();\n }\n return browser;\n}\n\nfunction Resize(_ref) {\n let {\n swiper,\n on,\n emit\n } = _ref;\n const window = getWindow();\n let observer = null;\n let animationFrame = null;\n const resizeHandler = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n emit('beforeResize');\n emit('resize');\n };\n const createObserver = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n observer = new ResizeObserver(entries => {\n animationFrame = window.requestAnimationFrame(() => {\n const {\n width,\n height\n } = swiper;\n let newWidth = width;\n let newHeight = height;\n entries.forEach(_ref2 => {\n let {\n contentBoxSize,\n contentRect,\n target\n } = _ref2;\n if (target && target !== swiper.el) return;\n newWidth = contentRect ? contentRect.width : (contentBoxSize[0] || contentBoxSize).inlineSize;\n newHeight = contentRect ? contentRect.height : (contentBoxSize[0] || contentBoxSize).blockSize;\n });\n if (newWidth !== width || newHeight !== height) {\n resizeHandler();\n }\n });\n });\n observer.observe(swiper.el);\n };\n const removeObserver = () => {\n if (animationFrame) {\n window.cancelAnimationFrame(animationFrame);\n }\n if (observer && observer.unobserve && swiper.el) {\n observer.unobserve(swiper.el);\n observer = null;\n }\n };\n const orientationChangeHandler = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n emit('orientationchange');\n };\n on('init', () => {\n if (swiper.params.resizeObserver && typeof window.ResizeObserver !== 'undefined') {\n createObserver();\n return;\n }\n window.addEventListener('resize', resizeHandler);\n window.addEventListener('orientationchange', orientationChangeHandler);\n });\n on('destroy', () => {\n removeObserver();\n window.removeEventListener('resize', resizeHandler);\n window.removeEventListener('orientationchange', orientationChangeHandler);\n });\n}\n\nfunction Observer(_ref) {\n let {\n swiper,\n extendParams,\n on,\n emit\n } = _ref;\n const observers = [];\n const window = getWindow();\n const attach = function (target, options) {\n if (options === void 0) {\n options = {};\n }\n const ObserverFunc = window.MutationObserver || window.WebkitMutationObserver;\n const observer = new ObserverFunc(mutations => {\n // The observerUpdate event should only be triggered\n // once despite the number of mutations. Additional\n // triggers are redundant and are very costly\n if (swiper.__preventObserver__) return;\n if (mutations.length === 1) {\n emit('observerUpdate', mutations[0]);\n return;\n }\n const observerUpdate = function observerUpdate() {\n emit('observerUpdate', mutations[0]);\n };\n if (window.requestAnimationFrame) {\n window.requestAnimationFrame(observerUpdate);\n } else {\n window.setTimeout(observerUpdate, 0);\n }\n });\n observer.observe(target, {\n attributes: typeof options.attributes === 'undefined' ? true : options.attributes,\n childList: typeof options.childList === 'undefined' ? true : options.childList,\n characterData: typeof options.characterData === 'undefined' ? true : options.characterData\n });\n observers.push(observer);\n };\n const init = () => {\n if (!swiper.params.observer) return;\n if (swiper.params.observeParents) {\n const containerParents = elementParents(swiper.hostEl);\n for (let i = 0; i < containerParents.length; i += 1) {\n attach(containerParents[i]);\n }\n }\n // Observe container\n attach(swiper.hostEl, {\n childList: swiper.params.observeSlideChildren\n });\n\n // Observe wrapper\n attach(swiper.wrapperEl, {\n attributes: false\n });\n };\n const destroy = () => {\n observers.forEach(observer => {\n observer.disconnect();\n });\n observers.splice(0, observers.length);\n };\n extendParams({\n observer: false,\n observeParents: false,\n observeSlideChildren: false\n });\n on('init', init);\n on('destroy', destroy);\n}\n\n/* eslint-disable no-underscore-dangle */\n\nvar eventsEmitter = {\n on(events, handler, priority) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (typeof handler !== 'function') return self;\n const method = priority ? 'unshift' : 'push';\n events.split(' ').forEach(event => {\n if (!self.eventsListeners[event]) self.eventsListeners[event] = [];\n self.eventsListeners[event][method](handler);\n });\n return self;\n },\n once(events, handler, priority) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (typeof handler !== 'function') return self;\n function onceHandler() {\n self.off(events, onceHandler);\n if (onceHandler.__emitterProxy) {\n delete onceHandler.__emitterProxy;\n }\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n handler.apply(self, args);\n }\n onceHandler.__emitterProxy = handler;\n return self.on(events, onceHandler, priority);\n },\n onAny(handler, priority) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (typeof handler !== 'function') return self;\n const method = priority ? 'unshift' : 'push';\n if (self.eventsAnyListeners.indexOf(handler) < 0) {\n self.eventsAnyListeners[method](handler);\n }\n return self;\n },\n offAny(handler) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (!self.eventsAnyListeners) return self;\n const index = self.eventsAnyListeners.indexOf(handler);\n if (index >= 0) {\n self.eventsAnyListeners.splice(index, 1);\n }\n return self;\n },\n off(events, handler) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (!self.eventsListeners) return self;\n events.split(' ').forEach(event => {\n if (typeof handler === 'undefined') {\n self.eventsListeners[event] = [];\n } else if (self.eventsListeners[event]) {\n self.eventsListeners[event].forEach((eventHandler, index) => {\n if (eventHandler === handler || eventHandler.__emitterProxy && eventHandler.__emitterProxy === handler) {\n self.eventsListeners[event].splice(index, 1);\n }\n });\n }\n });\n return self;\n },\n emit() {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (!self.eventsListeners) return self;\n let events;\n let data;\n let context;\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n if (typeof args[0] === 'string' || Array.isArray(args[0])) {\n events = args[0];\n data = args.slice(1, args.length);\n context = self;\n } else {\n events = args[0].events;\n data = args[0].data;\n context = args[0].context || self;\n }\n data.unshift(context);\n const eventsArray = Array.isArray(events) ? events : events.split(' ');\n eventsArray.forEach(event => {\n if (self.eventsAnyListeners && self.eventsAnyListeners.length) {\n self.eventsAnyListeners.forEach(eventHandler => {\n eventHandler.apply(context, [event, ...data]);\n });\n }\n if (self.eventsListeners && self.eventsListeners[event]) {\n self.eventsListeners[event].forEach(eventHandler => {\n eventHandler.apply(context, data);\n });\n }\n });\n return self;\n }\n};\n\nfunction updateSize() {\n const swiper = this;\n let width;\n let height;\n const el = swiper.el;\n if (typeof swiper.params.width !== 'undefined' && swiper.params.width !== null) {\n width = swiper.params.width;\n } else {\n width = el.clientWidth;\n }\n if (typeof swiper.params.height !== 'undefined' && swiper.params.height !== null) {\n height = swiper.params.height;\n } else {\n height = el.clientHeight;\n }\n if (width === 0 && swiper.isHorizontal() || height === 0 && swiper.isVertical()) {\n return;\n }\n\n // Subtract paddings\n width = width - parseInt(elementStyle(el, 'padding-left') || 0, 10) - parseInt(elementStyle(el, 'padding-right') || 0, 10);\n height = height - parseInt(elementStyle(el, 'padding-top') || 0, 10) - parseInt(elementStyle(el, 'padding-bottom') || 0, 10);\n if (Number.isNaN(width)) width = 0;\n if (Number.isNaN(height)) height = 0;\n Object.assign(swiper, {\n width,\n height,\n size: swiper.isHorizontal() ? width : height\n });\n}\n\nfunction updateSlides() {\n const swiper = this;\n function getDirectionPropertyValue(node, label) {\n return parseFloat(node.getPropertyValue(swiper.getDirectionLabel(label)) || 0);\n }\n const params = swiper.params;\n const {\n wrapperEl,\n slidesEl,\n size: swiperSize,\n rtlTranslate: rtl,\n wrongRTL\n } = swiper;\n const isVirtual = swiper.virtual && params.virtual.enabled;\n const previousSlidesLength = isVirtual ? swiper.virtual.slides.length : swiper.slides.length;\n const slides = elementChildren(slidesEl, `.${swiper.params.slideClass}, swiper-slide`);\n const slidesLength = isVirtual ? swiper.virtual.slides.length : slides.length;\n let snapGrid = [];\n const slidesGrid = [];\n const slidesSizesGrid = [];\n let offsetBefore = params.slidesOffsetBefore;\n if (typeof offsetBefore === 'function') {\n offsetBefore = params.slidesOffsetBefore.call(swiper);\n }\n let offsetAfter = params.slidesOffsetAfter;\n if (typeof offsetAfter === 'function') {\n offsetAfter = params.slidesOffsetAfter.call(swiper);\n }\n const previousSnapGridLength = swiper.snapGrid.length;\n const previousSlidesGridLength = swiper.slidesGrid.length;\n let spaceBetween = params.spaceBetween;\n let slidePosition = -offsetBefore;\n let prevSlideSize = 0;\n let index = 0;\n if (typeof swiperSize === 'undefined') {\n return;\n }\n if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {\n spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * swiperSize;\n } else if (typeof spaceBetween === 'string') {\n spaceBetween = parseFloat(spaceBetween);\n }\n swiper.virtualSize = -spaceBetween;\n\n // reset margins\n slides.forEach(slideEl => {\n if (rtl) {\n slideEl.style.marginLeft = '';\n } else {\n slideEl.style.marginRight = '';\n }\n slideEl.style.marginBottom = '';\n slideEl.style.marginTop = '';\n });\n\n // reset cssMode offsets\n if (params.centeredSlides && params.cssMode) {\n setCSSProperty(wrapperEl, '--swiper-centered-offset-before', '');\n setCSSProperty(wrapperEl, '--swiper-centered-offset-after', '');\n }\n const gridEnabled = params.grid && params.grid.rows > 1 && swiper.grid;\n if (gridEnabled) {\n swiper.grid.initSlides(slides);\n } else if (swiper.grid) {\n swiper.grid.unsetSlides();\n }\n\n // Calc slides\n let slideSize;\n const shouldResetSlideSize = params.slidesPerView === 'auto' && params.breakpoints && Object.keys(params.breakpoints).filter(key => {\n return typeof params.breakpoints[key].slidesPerView !== 'undefined';\n }).length > 0;\n for (let i = 0; i < slidesLength; i += 1) {\n slideSize = 0;\n let slide;\n if (slides[i]) slide = slides[i];\n if (gridEnabled) {\n swiper.grid.updateSlide(i, slide, slides);\n }\n if (slides[i] && elementStyle(slide, 'display') === 'none') continue; // eslint-disable-line\n\n if (params.slidesPerView === 'auto') {\n if (shouldResetSlideSize) {\n slides[i].style[swiper.getDirectionLabel('width')] = ``;\n }\n const slideStyles = getComputedStyle(slide);\n const currentTransform = slide.style.transform;\n const currentWebKitTransform = slide.style.webkitTransform;\n if (currentTransform) {\n slide.style.transform = 'none';\n }\n if (currentWebKitTransform) {\n slide.style.webkitTransform = 'none';\n }\n if (params.roundLengths) {\n slideSize = swiper.isHorizontal() ? elementOuterSize(slide, 'width', true) : elementOuterSize(slide, 'height', true);\n } else {\n // eslint-disable-next-line\n const width = getDirectionPropertyValue(slideStyles, 'width');\n const paddingLeft = getDirectionPropertyValue(slideStyles, 'padding-left');\n const paddingRight = getDirectionPropertyValue(slideStyles, 'padding-right');\n const marginLeft = getDirectionPropertyValue(slideStyles, 'margin-left');\n const marginRight = getDirectionPropertyValue(slideStyles, 'margin-right');\n const boxSizing = slideStyles.getPropertyValue('box-sizing');\n if (boxSizing && boxSizing === 'border-box') {\n slideSize = width + marginLeft + marginRight;\n } else {\n const {\n clientWidth,\n offsetWidth\n } = slide;\n slideSize = width + paddingLeft + paddingRight + marginLeft + marginRight + (offsetWidth - clientWidth);\n }\n }\n if (currentTransform) {\n slide.style.transform = currentTransform;\n }\n if (currentWebKitTransform) {\n slide.style.webkitTransform = currentWebKitTransform;\n }\n if (params.roundLengths) slideSize = Math.floor(slideSize);\n } else {\n slideSize = (swiperSize - (params.slidesPerView - 1) * spaceBetween) / params.slidesPerView;\n if (params.roundLengths) slideSize = Math.floor(slideSize);\n if (slides[i]) {\n slides[i].style[swiper.getDirectionLabel('width')] = `${slideSize}px`;\n }\n }\n if (slides[i]) {\n slides[i].swiperSlideSize = slideSize;\n }\n slidesSizesGrid.push(slideSize);\n if (params.centeredSlides) {\n slidePosition = slidePosition + slideSize / 2 + prevSlideSize / 2 + spaceBetween;\n if (prevSlideSize === 0 && i !== 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;\n if (i === 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;\n if (Math.abs(slidePosition) < 1 / 1000) slidePosition = 0;\n if (params.roundLengths) slidePosition = Math.floor(slidePosition);\n if (index % params.slidesPerGroup === 0) snapGrid.push(slidePosition);\n slidesGrid.push(slidePosition);\n } else {\n if (params.roundLengths) slidePosition = Math.floor(slidePosition);\n if ((index - Math.min(swiper.params.slidesPerGroupSkip, index)) % swiper.params.slidesPerGroup === 0) snapGrid.push(slidePosition);\n slidesGrid.push(slidePosition);\n slidePosition = slidePosition + slideSize + spaceBetween;\n }\n swiper.virtualSize += slideSize + spaceBetween;\n prevSlideSize = slideSize;\n index += 1;\n }\n swiper.virtualSize = Math.max(swiper.virtualSize, swiperSize) + offsetAfter;\n if (rtl && wrongRTL && (params.effect === 'slide' || params.effect === 'coverflow')) {\n wrapperEl.style.width = `${swiper.virtualSize + spaceBetween}px`;\n }\n if (params.setWrapperSize) {\n wrapperEl.style[swiper.getDirectionLabel('width')] = `${swiper.virtualSize + spaceBetween}px`;\n }\n if (gridEnabled) {\n swiper.grid.updateWrapperSize(slideSize, snapGrid);\n }\n\n // Remove last grid elements depending on width\n if (!params.centeredSlides) {\n const newSlidesGrid = [];\n for (let i = 0; i < snapGrid.length; i += 1) {\n let slidesGridItem = snapGrid[i];\n if (params.roundLengths) slidesGridItem = Math.floor(slidesGridItem);\n if (snapGrid[i] <= swiper.virtualSize - swiperSize) {\n newSlidesGrid.push(slidesGridItem);\n }\n }\n snapGrid = newSlidesGrid;\n if (Math.floor(swiper.virtualSize - swiperSize) - Math.floor(snapGrid[snapGrid.length - 1]) > 1) {\n snapGrid.push(swiper.virtualSize - swiperSize);\n }\n }\n if (isVirtual && params.loop) {\n const size = slidesSizesGrid[0] + spaceBetween;\n if (params.slidesPerGroup > 1) {\n const groups = Math.ceil((swiper.virtual.slidesBefore + swiper.virtual.slidesAfter) / params.slidesPerGroup);\n const groupSize = size * params.slidesPerGroup;\n for (let i = 0; i < groups; i += 1) {\n snapGrid.push(snapGrid[snapGrid.length - 1] + groupSize);\n }\n }\n for (let i = 0; i < swiper.virtual.slidesBefore + swiper.virtual.slidesAfter; i += 1) {\n if (params.slidesPerGroup === 1) {\n snapGrid.push(snapGrid[snapGrid.length - 1] + size);\n }\n slidesGrid.push(slidesGrid[slidesGrid.length - 1] + size);\n swiper.virtualSize += size;\n }\n }\n if (snapGrid.length === 0) snapGrid = [0];\n if (spaceBetween !== 0) {\n const key = swiper.isHorizontal() && rtl ? 'marginLeft' : swiper.getDirectionLabel('marginRight');\n slides.filter((_, slideIndex) => {\n if (!params.cssMode || params.loop) return true;\n if (slideIndex === slides.length - 1) {\n return false;\n }\n return true;\n }).forEach(slideEl => {\n slideEl.style[key] = `${spaceBetween}px`;\n });\n }\n if (params.centeredSlides && params.centeredSlidesBounds) {\n let allSlidesSize = 0;\n slidesSizesGrid.forEach(slideSizeValue => {\n allSlidesSize += slideSizeValue + (spaceBetween || 0);\n });\n allSlidesSize -= spaceBetween;\n const maxSnap = allSlidesSize - swiperSize;\n snapGrid = snapGrid.map(snap => {\n if (snap <= 0) return -offsetBefore;\n if (snap > maxSnap) return maxSnap + offsetAfter;\n return snap;\n });\n }\n if (params.centerInsufficientSlides) {\n let allSlidesSize = 0;\n slidesSizesGrid.forEach(slideSizeValue => {\n allSlidesSize += slideSizeValue + (spaceBetween || 0);\n });\n allSlidesSize -= spaceBetween;\n const offsetSize = (params.slidesOffsetBefore || 0) + (params.slidesOffsetAfter || 0);\n if (allSlidesSize + offsetSize < swiperSize) {\n const allSlidesOffset = (swiperSize - allSlidesSize - offsetSize) / 2;\n snapGrid.forEach((snap, snapIndex) => {\n snapGrid[snapIndex] = snap - allSlidesOffset;\n });\n slidesGrid.forEach((snap, snapIndex) => {\n slidesGrid[snapIndex] = snap + allSlidesOffset;\n });\n }\n }\n Object.assign(swiper, {\n slides,\n snapGrid,\n slidesGrid,\n slidesSizesGrid\n });\n if (params.centeredSlides && params.cssMode && !params.centeredSlidesBounds) {\n setCSSProperty(wrapperEl, '--swiper-centered-offset-before', `${-snapGrid[0]}px`);\n setCSSProperty(wrapperEl, '--swiper-centered-offset-after', `${swiper.size / 2 - slidesSizesGrid[slidesSizesGrid.length - 1] / 2}px`);\n const addToSnapGrid = -swiper.snapGrid[0];\n const addToSlidesGrid = -swiper.slidesGrid[0];\n swiper.snapGrid = swiper.snapGrid.map(v => v + addToSnapGrid);\n swiper.slidesGrid = swiper.slidesGrid.map(v => v + addToSlidesGrid);\n }\n if (slidesLength !== previousSlidesLength) {\n swiper.emit('slidesLengthChange');\n }\n if (snapGrid.length !== previousSnapGridLength) {\n if (swiper.params.watchOverflow) swiper.checkOverflow();\n swiper.emit('snapGridLengthChange');\n }\n if (slidesGrid.length !== previousSlidesGridLength) {\n swiper.emit('slidesGridLengthChange');\n }\n if (params.watchSlidesProgress) {\n swiper.updateSlidesOffset();\n }\n swiper.emit('slidesUpdated');\n if (!isVirtual && !params.cssMode && (params.effect === 'slide' || params.effect === 'fade')) {\n const backFaceHiddenClass = `${params.containerModifierClass}backface-hidden`;\n const hasClassBackfaceClassAdded = swiper.el.classList.contains(backFaceHiddenClass);\n if (slidesLength <= params.maxBackfaceHiddenSlides) {\n if (!hasClassBackfaceClassAdded) swiper.el.classList.add(backFaceHiddenClass);\n } else if (hasClassBackfaceClassAdded) {\n swiper.el.classList.remove(backFaceHiddenClass);\n }\n }\n}\n\nfunction updateAutoHeight(speed) {\n const swiper = this;\n const activeSlides = [];\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n let newHeight = 0;\n let i;\n if (typeof speed === 'number') {\n swiper.setTransition(speed);\n } else if (speed === true) {\n swiper.setTransition(swiper.params.speed);\n }\n const getSlideByIndex = index => {\n if (isVirtual) {\n return swiper.slides[swiper.getSlideIndexByData(index)];\n }\n return swiper.slides[index];\n };\n // Find slides currently in view\n if (swiper.params.slidesPerView !== 'auto' && swiper.params.slidesPerView > 1) {\n if (swiper.params.centeredSlides) {\n (swiper.visibleSlides || []).forEach(slide => {\n activeSlides.push(slide);\n });\n } else {\n for (i = 0; i < Math.ceil(swiper.params.slidesPerView); i += 1) {\n const index = swiper.activeIndex + i;\n if (index > swiper.slides.length && !isVirtual) break;\n activeSlides.push(getSlideByIndex(index));\n }\n }\n } else {\n activeSlides.push(getSlideByIndex(swiper.activeIndex));\n }\n\n // Find new height from highest slide in view\n for (i = 0; i < activeSlides.length; i += 1) {\n if (typeof activeSlides[i] !== 'undefined') {\n const height = activeSlides[i].offsetHeight;\n newHeight = height > newHeight ? height : newHeight;\n }\n }\n\n // Update Height\n if (newHeight || newHeight === 0) swiper.wrapperEl.style.height = `${newHeight}px`;\n}\n\nfunction updateSlidesOffset() {\n const swiper = this;\n const slides = swiper.slides;\n // eslint-disable-next-line\n const minusOffset = swiper.isElement ? swiper.isHorizontal() ? swiper.wrapperEl.offsetLeft : swiper.wrapperEl.offsetTop : 0;\n for (let i = 0; i < slides.length; i += 1) {\n slides[i].swiperSlideOffset = (swiper.isHorizontal() ? slides[i].offsetLeft : slides[i].offsetTop) - minusOffset - swiper.cssOverflowAdjustment();\n }\n}\n\nconst toggleSlideClasses$1 = (slideEl, condition, className) => {\n if (condition && !slideEl.classList.contains(className)) {\n slideEl.classList.add(className);\n } else if (!condition && slideEl.classList.contains(className)) {\n slideEl.classList.remove(className);\n }\n};\nfunction updateSlidesProgress(translate) {\n if (translate === void 0) {\n translate = this && this.translate || 0;\n }\n const swiper = this;\n const params = swiper.params;\n const {\n slides,\n rtlTranslate: rtl,\n snapGrid\n } = swiper;\n if (slides.length === 0) return;\n if (typeof slides[0].swiperSlideOffset === 'undefined') swiper.updateSlidesOffset();\n let offsetCenter = -translate;\n if (rtl) offsetCenter = translate;\n swiper.visibleSlidesIndexes = [];\n swiper.visibleSlides = [];\n let spaceBetween = params.spaceBetween;\n if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {\n spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * swiper.size;\n } else if (typeof spaceBetween === 'string') {\n spaceBetween = parseFloat(spaceBetween);\n }\n for (let i = 0; i < slides.length; i += 1) {\n const slide = slides[i];\n let slideOffset = slide.swiperSlideOffset;\n if (params.cssMode && params.centeredSlides) {\n slideOffset -= slides[0].swiperSlideOffset;\n }\n const slideProgress = (offsetCenter + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + spaceBetween);\n const originalSlideProgress = (offsetCenter - snapGrid[0] + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + spaceBetween);\n const slideBefore = -(offsetCenter - slideOffset);\n const slideAfter = slideBefore + swiper.slidesSizesGrid[i];\n const isFullyVisible = slideBefore >= 0 && slideBefore <= swiper.size - swiper.slidesSizesGrid[i];\n const isVisible = slideBefore >= 0 && slideBefore < swiper.size - 1 || slideAfter > 1 && slideAfter <= swiper.size || slideBefore <= 0 && slideAfter >= swiper.size;\n if (isVisible) {\n swiper.visibleSlides.push(slide);\n swiper.visibleSlidesIndexes.push(i);\n }\n toggleSlideClasses$1(slide, isVisible, params.slideVisibleClass);\n toggleSlideClasses$1(slide, isFullyVisible, params.slideFullyVisibleClass);\n slide.progress = rtl ? -slideProgress : slideProgress;\n slide.originalProgress = rtl ? -originalSlideProgress : originalSlideProgress;\n }\n}\n\nfunction updateProgress(translate) {\n const swiper = this;\n if (typeof translate === 'undefined') {\n const multiplier = swiper.rtlTranslate ? -1 : 1;\n // eslint-disable-next-line\n translate = swiper && swiper.translate && swiper.translate * multiplier || 0;\n }\n const params = swiper.params;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n let {\n progress,\n isBeginning,\n isEnd,\n progressLoop\n } = swiper;\n const wasBeginning = isBeginning;\n const wasEnd = isEnd;\n if (translatesDiff === 0) {\n progress = 0;\n isBeginning = true;\n isEnd = true;\n } else {\n progress = (translate - swiper.minTranslate()) / translatesDiff;\n const isBeginningRounded = Math.abs(translate - swiper.minTranslate()) < 1;\n const isEndRounded = Math.abs(translate - swiper.maxTranslate()) < 1;\n isBeginning = isBeginningRounded || progress <= 0;\n isEnd = isEndRounded || progress >= 1;\n if (isBeginningRounded) progress = 0;\n if (isEndRounded) progress = 1;\n }\n if (params.loop) {\n const firstSlideIndex = swiper.getSlideIndexByData(0);\n const lastSlideIndex = swiper.getSlideIndexByData(swiper.slides.length - 1);\n const firstSlideTranslate = swiper.slidesGrid[firstSlideIndex];\n const lastSlideTranslate = swiper.slidesGrid[lastSlideIndex];\n const translateMax = swiper.slidesGrid[swiper.slidesGrid.length - 1];\n const translateAbs = Math.abs(translate);\n if (translateAbs >= firstSlideTranslate) {\n progressLoop = (translateAbs - firstSlideTranslate) / translateMax;\n } else {\n progressLoop = (translateAbs + translateMax - lastSlideTranslate) / translateMax;\n }\n if (progressLoop > 1) progressLoop -= 1;\n }\n Object.assign(swiper, {\n progress,\n progressLoop,\n isBeginning,\n isEnd\n });\n if (params.watchSlidesProgress || params.centeredSlides && params.autoHeight) swiper.updateSlidesProgress(translate);\n if (isBeginning && !wasBeginning) {\n swiper.emit('reachBeginning toEdge');\n }\n if (isEnd && !wasEnd) {\n swiper.emit('reachEnd toEdge');\n }\n if (wasBeginning && !isBeginning || wasEnd && !isEnd) {\n swiper.emit('fromEdge');\n }\n swiper.emit('progress', progress);\n}\n\nconst toggleSlideClasses = (slideEl, condition, className) => {\n if (condition && !slideEl.classList.contains(className)) {\n slideEl.classList.add(className);\n } else if (!condition && slideEl.classList.contains(className)) {\n slideEl.classList.remove(className);\n }\n};\nfunction updateSlidesClasses() {\n const swiper = this;\n const {\n slides,\n params,\n slidesEl,\n activeIndex\n } = swiper;\n const isVirtual = swiper.virtual && params.virtual.enabled;\n const gridEnabled = swiper.grid && params.grid && params.grid.rows > 1;\n const getFilteredSlide = selector => {\n return elementChildren(slidesEl, `.${params.slideClass}${selector}, swiper-slide${selector}`)[0];\n };\n let activeSlide;\n let prevSlide;\n let nextSlide;\n if (isVirtual) {\n if (params.loop) {\n let slideIndex = activeIndex - swiper.virtual.slidesBefore;\n if (slideIndex < 0) slideIndex = swiper.virtual.slides.length + slideIndex;\n if (slideIndex >= swiper.virtual.slides.length) slideIndex -= swiper.virtual.slides.length;\n activeSlide = getFilteredSlide(`[data-swiper-slide-index=\"${slideIndex}\"]`);\n } else {\n activeSlide = getFilteredSlide(`[data-swiper-slide-index=\"${activeIndex}\"]`);\n }\n } else {\n if (gridEnabled) {\n activeSlide = slides.filter(slideEl => slideEl.column === activeIndex)[0];\n nextSlide = slides.filter(slideEl => slideEl.column === activeIndex + 1)[0];\n prevSlide = slides.filter(slideEl => slideEl.column === activeIndex - 1)[0];\n } else {\n activeSlide = slides[activeIndex];\n }\n }\n if (activeSlide) {\n if (!gridEnabled) {\n // Next Slide\n nextSlide = elementNextAll(activeSlide, `.${params.slideClass}, swiper-slide`)[0];\n if (params.loop && !nextSlide) {\n nextSlide = slides[0];\n }\n\n // Prev Slide\n prevSlide = elementPrevAll(activeSlide, `.${params.slideClass}, swiper-slide`)[0];\n if (params.loop && !prevSlide === 0) {\n prevSlide = slides[slides.length - 1];\n }\n }\n }\n slides.forEach(slideEl => {\n toggleSlideClasses(slideEl, slideEl === activeSlide, params.slideActiveClass);\n toggleSlideClasses(slideEl, slideEl === nextSlide, params.slideNextClass);\n toggleSlideClasses(slideEl, slideEl === prevSlide, params.slidePrevClass);\n });\n swiper.emitSlidesClasses();\n}\n\nconst processLazyPreloader = (swiper, imageEl) => {\n if (!swiper || swiper.destroyed || !swiper.params) return;\n const slideSelector = () => swiper.isElement ? `swiper-slide` : `.${swiper.params.slideClass}`;\n const slideEl = imageEl.closest(slideSelector());\n if (slideEl) {\n let lazyEl = slideEl.querySelector(`.${swiper.params.lazyPreloaderClass}`);\n if (!lazyEl && swiper.isElement) {\n if (slideEl.shadowRoot) {\n lazyEl = slideEl.shadowRoot.querySelector(`.${swiper.params.lazyPreloaderClass}`);\n } else {\n // init later\n requestAnimationFrame(() => {\n if (slideEl.shadowRoot) {\n lazyEl = slideEl.shadowRoot.querySelector(`.${swiper.params.lazyPreloaderClass}`);\n if (lazyEl) lazyEl.remove();\n }\n });\n }\n }\n if (lazyEl) lazyEl.remove();\n }\n};\nconst unlazy = (swiper, index) => {\n if (!swiper.slides[index]) return;\n const imageEl = swiper.slides[index].querySelector('[loading=\"lazy\"]');\n if (imageEl) imageEl.removeAttribute('loading');\n};\nconst preload = swiper => {\n if (!swiper || swiper.destroyed || !swiper.params) return;\n let amount = swiper.params.lazyPreloadPrevNext;\n const len = swiper.slides.length;\n if (!len || !amount || amount < 0) return;\n amount = Math.min(amount, len);\n const slidesPerView = swiper.params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : Math.ceil(swiper.params.slidesPerView);\n const activeIndex = swiper.activeIndex;\n if (swiper.params.grid && swiper.params.grid.rows > 1) {\n const activeColumn = activeIndex;\n const preloadColumns = [activeColumn - amount];\n preloadColumns.push(...Array.from({\n length: amount\n }).map((_, i) => {\n return activeColumn + slidesPerView + i;\n }));\n swiper.slides.forEach((slideEl, i) => {\n if (preloadColumns.includes(slideEl.column)) unlazy(swiper, i);\n });\n return;\n }\n const slideIndexLastInView = activeIndex + slidesPerView - 1;\n if (swiper.params.rewind || swiper.params.loop) {\n for (let i = activeIndex - amount; i <= slideIndexLastInView + amount; i += 1) {\n const realIndex = (i % len + len) % len;\n if (realIndex < activeIndex || realIndex > slideIndexLastInView) unlazy(swiper, realIndex);\n }\n } else {\n for (let i = Math.max(activeIndex - amount, 0); i <= Math.min(slideIndexLastInView + amount, len - 1); i += 1) {\n if (i !== activeIndex && (i > slideIndexLastInView || i < activeIndex)) {\n unlazy(swiper, i);\n }\n }\n }\n};\n\nfunction getActiveIndexByTranslate(swiper) {\n const {\n slidesGrid,\n params\n } = swiper;\n const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n let activeIndex;\n for (let i = 0; i < slidesGrid.length; i += 1) {\n if (typeof slidesGrid[i + 1] !== 'undefined') {\n if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1] - (slidesGrid[i + 1] - slidesGrid[i]) / 2) {\n activeIndex = i;\n } else if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1]) {\n activeIndex = i + 1;\n }\n } else if (translate >= slidesGrid[i]) {\n activeIndex = i;\n }\n }\n // Normalize slideIndex\n if (params.normalizeSlideIndex) {\n if (activeIndex < 0 || typeof activeIndex === 'undefined') activeIndex = 0;\n }\n return activeIndex;\n}\nfunction updateActiveIndex(newActiveIndex) {\n const swiper = this;\n const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n const {\n snapGrid,\n params,\n activeIndex: previousIndex,\n realIndex: previousRealIndex,\n snapIndex: previousSnapIndex\n } = swiper;\n let activeIndex = newActiveIndex;\n let snapIndex;\n const getVirtualRealIndex = aIndex => {\n let realIndex = aIndex - swiper.virtual.slidesBefore;\n if (realIndex < 0) {\n realIndex = swiper.virtual.slides.length + realIndex;\n }\n if (realIndex >= swiper.virtual.slides.length) {\n realIndex -= swiper.virtual.slides.length;\n }\n return realIndex;\n };\n if (typeof activeIndex === 'undefined') {\n activeIndex = getActiveIndexByTranslate(swiper);\n }\n if (snapGrid.indexOf(translate) >= 0) {\n snapIndex = snapGrid.indexOf(translate);\n } else {\n const skip = Math.min(params.slidesPerGroupSkip, activeIndex);\n snapIndex = skip + Math.floor((activeIndex - skip) / params.slidesPerGroup);\n }\n if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n if (activeIndex === previousIndex && !swiper.params.loop) {\n if (snapIndex !== previousSnapIndex) {\n swiper.snapIndex = snapIndex;\n swiper.emit('snapIndexChange');\n }\n return;\n }\n if (activeIndex === previousIndex && swiper.params.loop && swiper.virtual && swiper.params.virtual.enabled) {\n swiper.realIndex = getVirtualRealIndex(activeIndex);\n return;\n }\n const gridEnabled = swiper.grid && params.grid && params.grid.rows > 1;\n\n // Get real index\n let realIndex;\n if (swiper.virtual && params.virtual.enabled && params.loop) {\n realIndex = getVirtualRealIndex(activeIndex);\n } else if (gridEnabled) {\n const firstSlideInColumn = swiper.slides.filter(slideEl => slideEl.column === activeIndex)[0];\n let activeSlideIndex = parseInt(firstSlideInColumn.getAttribute('data-swiper-slide-index'), 10);\n if (Number.isNaN(activeSlideIndex)) {\n activeSlideIndex = Math.max(swiper.slides.indexOf(firstSlideInColumn), 0);\n }\n realIndex = Math.floor(activeSlideIndex / params.grid.rows);\n } else if (swiper.slides[activeIndex]) {\n const slideIndex = swiper.slides[activeIndex].getAttribute('data-swiper-slide-index');\n if (slideIndex) {\n realIndex = parseInt(slideIndex, 10);\n } else {\n realIndex = activeIndex;\n }\n } else {\n realIndex = activeIndex;\n }\n Object.assign(swiper, {\n previousSnapIndex,\n snapIndex,\n previousRealIndex,\n realIndex,\n previousIndex,\n activeIndex\n });\n if (swiper.initialized) {\n preload(swiper);\n }\n swiper.emit('activeIndexChange');\n swiper.emit('snapIndexChange');\n if (swiper.initialized || swiper.params.runCallbacksOnInit) {\n if (previousRealIndex !== realIndex) {\n swiper.emit('realIndexChange');\n }\n swiper.emit('slideChange');\n }\n}\n\nfunction updateClickedSlide(el, path) {\n const swiper = this;\n const params = swiper.params;\n let slide = el.closest(`.${params.slideClass}, swiper-slide`);\n if (!slide && swiper.isElement && path && path.length > 1 && path.includes(el)) {\n [...path.slice(path.indexOf(el) + 1, path.length)].forEach(pathEl => {\n if (!slide && pathEl.matches && pathEl.matches(`.${params.slideClass}, swiper-slide`)) {\n slide = pathEl;\n }\n });\n }\n let slideFound = false;\n let slideIndex;\n if (slide) {\n for (let i = 0; i < swiper.slides.length; i += 1) {\n if (swiper.slides[i] === slide) {\n slideFound = true;\n slideIndex = i;\n break;\n }\n }\n }\n if (slide && slideFound) {\n swiper.clickedSlide = slide;\n if (swiper.virtual && swiper.params.virtual.enabled) {\n swiper.clickedIndex = parseInt(slide.getAttribute('data-swiper-slide-index'), 10);\n } else {\n swiper.clickedIndex = slideIndex;\n }\n } else {\n swiper.clickedSlide = undefined;\n swiper.clickedIndex = undefined;\n return;\n }\n if (params.slideToClickedSlide && swiper.clickedIndex !== undefined && swiper.clickedIndex !== swiper.activeIndex) {\n swiper.slideToClickedSlide();\n }\n}\n\nvar update = {\n updateSize,\n updateSlides,\n updateAutoHeight,\n updateSlidesOffset,\n updateSlidesProgress,\n updateProgress,\n updateSlidesClasses,\n updateActiveIndex,\n updateClickedSlide\n};\n\nfunction getSwiperTranslate(axis) {\n if (axis === void 0) {\n axis = this.isHorizontal() ? 'x' : 'y';\n }\n const swiper = this;\n const {\n params,\n rtlTranslate: rtl,\n translate,\n wrapperEl\n } = swiper;\n if (params.virtualTranslate) {\n return rtl ? -translate : translate;\n }\n if (params.cssMode) {\n return translate;\n }\n let currentTranslate = getTranslate(wrapperEl, axis);\n currentTranslate += swiper.cssOverflowAdjustment();\n if (rtl) currentTranslate = -currentTranslate;\n return currentTranslate || 0;\n}\n\nfunction setTranslate(translate, byController) {\n const swiper = this;\n const {\n rtlTranslate: rtl,\n params,\n wrapperEl,\n progress\n } = swiper;\n let x = 0;\n let y = 0;\n const z = 0;\n if (swiper.isHorizontal()) {\n x = rtl ? -translate : translate;\n } else {\n y = translate;\n }\n if (params.roundLengths) {\n x = Math.floor(x);\n y = Math.floor(y);\n }\n swiper.previousTranslate = swiper.translate;\n swiper.translate = swiper.isHorizontal() ? x : y;\n if (params.cssMode) {\n wrapperEl[swiper.isHorizontal() ? 'scrollLeft' : 'scrollTop'] = swiper.isHorizontal() ? -x : -y;\n } else if (!params.virtualTranslate) {\n if (swiper.isHorizontal()) {\n x -= swiper.cssOverflowAdjustment();\n } else {\n y -= swiper.cssOverflowAdjustment();\n }\n wrapperEl.style.transform = `translate3d(${x}px, ${y}px, ${z}px)`;\n }\n\n // Check if we need to update progress\n let newProgress;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n if (translatesDiff === 0) {\n newProgress = 0;\n } else {\n newProgress = (translate - swiper.minTranslate()) / translatesDiff;\n }\n if (newProgress !== progress) {\n swiper.updateProgress(translate);\n }\n swiper.emit('setTranslate', swiper.translate, byController);\n}\n\nfunction minTranslate() {\n return -this.snapGrid[0];\n}\n\nfunction maxTranslate() {\n return -this.snapGrid[this.snapGrid.length - 1];\n}\n\nfunction translateTo(translate, speed, runCallbacks, translateBounds, internal) {\n if (translate === void 0) {\n translate = 0;\n }\n if (speed === void 0) {\n speed = this.params.speed;\n }\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n if (translateBounds === void 0) {\n translateBounds = true;\n }\n const swiper = this;\n const {\n params,\n wrapperEl\n } = swiper;\n if (swiper.animating && params.preventInteractionOnTransition) {\n return false;\n }\n const minTranslate = swiper.minTranslate();\n const maxTranslate = swiper.maxTranslate();\n let newTranslate;\n if (translateBounds && translate > minTranslate) newTranslate = minTranslate;else if (translateBounds && translate < maxTranslate) newTranslate = maxTranslate;else newTranslate = translate;\n\n // Update progress\n swiper.updateProgress(newTranslate);\n if (params.cssMode) {\n const isH = swiper.isHorizontal();\n if (speed === 0) {\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate;\n } else {\n if (!swiper.support.smoothScroll) {\n animateCSSModeScroll({\n swiper,\n targetPosition: -newTranslate,\n side: isH ? 'left' : 'top'\n });\n return true;\n }\n wrapperEl.scrollTo({\n [isH ? 'left' : 'top']: -newTranslate,\n behavior: 'smooth'\n });\n }\n return true;\n }\n if (speed === 0) {\n swiper.setTransition(0);\n swiper.setTranslate(newTranslate);\n if (runCallbacks) {\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.emit('transitionEnd');\n }\n } else {\n swiper.setTransition(speed);\n swiper.setTranslate(newTranslate);\n if (runCallbacks) {\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.emit('transitionStart');\n }\n if (!swiper.animating) {\n swiper.animating = true;\n if (!swiper.onTranslateToWrapperTransitionEnd) {\n swiper.onTranslateToWrapperTransitionEnd = function transitionEnd(e) {\n if (!swiper || swiper.destroyed) return;\n if (e.target !== this) return;\n swiper.wrapperEl.removeEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n swiper.onTranslateToWrapperTransitionEnd = null;\n delete swiper.onTranslateToWrapperTransitionEnd;\n swiper.animating = false;\n if (runCallbacks) {\n swiper.emit('transitionEnd');\n }\n };\n }\n swiper.wrapperEl.addEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n }\n }\n return true;\n}\n\nvar translate = {\n getTranslate: getSwiperTranslate,\n setTranslate,\n minTranslate,\n maxTranslate,\n translateTo\n};\n\nfunction setTransition(duration, byController) {\n const swiper = this;\n if (!swiper.params.cssMode) {\n swiper.wrapperEl.style.transitionDuration = `${duration}ms`;\n swiper.wrapperEl.style.transitionDelay = duration === 0 ? `0ms` : '';\n }\n swiper.emit('setTransition', duration, byController);\n}\n\nfunction transitionEmit(_ref) {\n let {\n swiper,\n runCallbacks,\n direction,\n step\n } = _ref;\n const {\n activeIndex,\n previousIndex\n } = swiper;\n let dir = direction;\n if (!dir) {\n if (activeIndex > previousIndex) dir = 'next';else if (activeIndex < previousIndex) dir = 'prev';else dir = 'reset';\n }\n swiper.emit(`transition${step}`);\n if (runCallbacks && activeIndex !== previousIndex) {\n if (dir === 'reset') {\n swiper.emit(`slideResetTransition${step}`);\n return;\n }\n swiper.emit(`slideChangeTransition${step}`);\n if (dir === 'next') {\n swiper.emit(`slideNextTransition${step}`);\n } else {\n swiper.emit(`slidePrevTransition${step}`);\n }\n }\n}\n\nfunction transitionStart(runCallbacks, direction) {\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n const swiper = this;\n const {\n params\n } = swiper;\n if (params.cssMode) return;\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n transitionEmit({\n swiper,\n runCallbacks,\n direction,\n step: 'Start'\n });\n}\n\nfunction transitionEnd(runCallbacks, direction) {\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n const swiper = this;\n const {\n params\n } = swiper;\n swiper.animating = false;\n if (params.cssMode) return;\n swiper.setTransition(0);\n transitionEmit({\n swiper,\n runCallbacks,\n direction,\n step: 'End'\n });\n}\n\nvar transition = {\n setTransition,\n transitionStart,\n transitionEnd\n};\n\nfunction slideTo(index, speed, runCallbacks, internal, initial) {\n if (index === void 0) {\n index = 0;\n }\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n if (typeof index === 'string') {\n index = parseInt(index, 10);\n }\n const swiper = this;\n let slideIndex = index;\n if (slideIndex < 0) slideIndex = 0;\n const {\n params,\n snapGrid,\n slidesGrid,\n previousIndex,\n activeIndex,\n rtlTranslate: rtl,\n wrapperEl,\n enabled\n } = swiper;\n if (!enabled && !internal && !initial || swiper.destroyed || swiper.animating && params.preventInteractionOnTransition) {\n return false;\n }\n if (typeof speed === 'undefined') {\n speed = swiper.params.speed;\n }\n const skip = Math.min(swiper.params.slidesPerGroupSkip, slideIndex);\n let snapIndex = skip + Math.floor((slideIndex - skip) / swiper.params.slidesPerGroup);\n if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n const translate = -snapGrid[snapIndex];\n // Normalize slideIndex\n if (params.normalizeSlideIndex) {\n for (let i = 0; i < slidesGrid.length; i += 1) {\n const normalizedTranslate = -Math.floor(translate * 100);\n const normalizedGrid = Math.floor(slidesGrid[i] * 100);\n const normalizedGridNext = Math.floor(slidesGrid[i + 1] * 100);\n if (typeof slidesGrid[i + 1] !== 'undefined') {\n if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext - (normalizedGridNext - normalizedGrid) / 2) {\n slideIndex = i;\n } else if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext) {\n slideIndex = i + 1;\n }\n } else if (normalizedTranslate >= normalizedGrid) {\n slideIndex = i;\n }\n }\n }\n // Directions locks\n if (swiper.initialized && slideIndex !== activeIndex) {\n if (!swiper.allowSlideNext && (rtl ? translate > swiper.translate && translate > swiper.minTranslate() : translate < swiper.translate && translate < swiper.minTranslate())) {\n return false;\n }\n if (!swiper.allowSlidePrev && translate > swiper.translate && translate > swiper.maxTranslate()) {\n if ((activeIndex || 0) !== slideIndex) {\n return false;\n }\n }\n }\n if (slideIndex !== (previousIndex || 0) && runCallbacks) {\n swiper.emit('beforeSlideChangeStart');\n }\n\n // Update progress\n swiper.updateProgress(translate);\n let direction;\n if (slideIndex > activeIndex) direction = 'next';else if (slideIndex < activeIndex) direction = 'prev';else direction = 'reset';\n\n // Update Index\n if (rtl && -translate === swiper.translate || !rtl && translate === swiper.translate) {\n swiper.updateActiveIndex(slideIndex);\n // Update Height\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n swiper.updateSlidesClasses();\n if (params.effect !== 'slide') {\n swiper.setTranslate(translate);\n }\n if (direction !== 'reset') {\n swiper.transitionStart(runCallbacks, direction);\n swiper.transitionEnd(runCallbacks, direction);\n }\n return false;\n }\n if (params.cssMode) {\n const isH = swiper.isHorizontal();\n const t = rtl ? translate : -translate;\n if (speed === 0) {\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n if (isVirtual) {\n swiper.wrapperEl.style.scrollSnapType = 'none';\n swiper._immediateVirtual = true;\n }\n if (isVirtual && !swiper._cssModeVirtualInitialSet && swiper.params.initialSlide > 0) {\n swiper._cssModeVirtualInitialSet = true;\n requestAnimationFrame(() => {\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;\n });\n } else {\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;\n }\n if (isVirtual) {\n requestAnimationFrame(() => {\n swiper.wrapperEl.style.scrollSnapType = '';\n swiper._immediateVirtual = false;\n });\n }\n } else {\n if (!swiper.support.smoothScroll) {\n animateCSSModeScroll({\n swiper,\n targetPosition: t,\n side: isH ? 'left' : 'top'\n });\n return true;\n }\n wrapperEl.scrollTo({\n [isH ? 'left' : 'top']: t,\n behavior: 'smooth'\n });\n }\n return true;\n }\n swiper.setTransition(speed);\n swiper.setTranslate(translate);\n swiper.updateActiveIndex(slideIndex);\n swiper.updateSlidesClasses();\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.transitionStart(runCallbacks, direction);\n if (speed === 0) {\n swiper.transitionEnd(runCallbacks, direction);\n } else if (!swiper.animating) {\n swiper.animating = true;\n if (!swiper.onSlideToWrapperTransitionEnd) {\n swiper.onSlideToWrapperTransitionEnd = function transitionEnd(e) {\n if (!swiper || swiper.destroyed) return;\n if (e.target !== this) return;\n swiper.wrapperEl.removeEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n swiper.onSlideToWrapperTransitionEnd = null;\n delete swiper.onSlideToWrapperTransitionEnd;\n swiper.transitionEnd(runCallbacks, direction);\n };\n }\n swiper.wrapperEl.addEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n }\n return true;\n}\n\nfunction slideToLoop(index, speed, runCallbacks, internal) {\n if (index === void 0) {\n index = 0;\n }\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n if (typeof index === 'string') {\n const indexAsNumber = parseInt(index, 10);\n index = indexAsNumber;\n }\n const swiper = this;\n if (swiper.destroyed) return;\n if (typeof speed === 'undefined') {\n speed = swiper.params.speed;\n }\n const gridEnabled = swiper.grid && swiper.params.grid && swiper.params.grid.rows > 1;\n let newIndex = index;\n if (swiper.params.loop) {\n if (swiper.virtual && swiper.params.virtual.enabled) {\n // eslint-disable-next-line\n newIndex = newIndex + swiper.virtual.slidesBefore;\n } else {\n let targetSlideIndex;\n if (gridEnabled) {\n const slideIndex = newIndex * swiper.params.grid.rows;\n targetSlideIndex = swiper.slides.filter(slideEl => slideEl.getAttribute('data-swiper-slide-index') * 1 === slideIndex)[0].column;\n } else {\n targetSlideIndex = swiper.getSlideIndexByData(newIndex);\n }\n const cols = gridEnabled ? Math.ceil(swiper.slides.length / swiper.params.grid.rows) : swiper.slides.length;\n const {\n centeredSlides\n } = swiper.params;\n let slidesPerView = swiper.params.slidesPerView;\n if (slidesPerView === 'auto') {\n slidesPerView = swiper.slidesPerViewDynamic();\n } else {\n slidesPerView = Math.ceil(parseFloat(swiper.params.slidesPerView, 10));\n if (centeredSlides && slidesPerView % 2 === 0) {\n slidesPerView = slidesPerView + 1;\n }\n }\n let needLoopFix = cols - targetSlideIndex < slidesPerView;\n if (centeredSlides) {\n needLoopFix = needLoopFix || targetSlideIndex < Math.ceil(slidesPerView / 2);\n }\n if (internal && centeredSlides && swiper.params.slidesPerView !== 'auto' && !gridEnabled) {\n needLoopFix = false;\n }\n if (needLoopFix) {\n const direction = centeredSlides ? targetSlideIndex < swiper.activeIndex ? 'prev' : 'next' : targetSlideIndex - swiper.activeIndex - 1 < swiper.params.slidesPerView ? 'next' : 'prev';\n swiper.loopFix({\n direction,\n slideTo: true,\n activeSlideIndex: direction === 'next' ? targetSlideIndex + 1 : targetSlideIndex - cols + 1,\n slideRealIndex: direction === 'next' ? swiper.realIndex : undefined\n });\n }\n if (gridEnabled) {\n const slideIndex = newIndex * swiper.params.grid.rows;\n newIndex = swiper.slides.filter(slideEl => slideEl.getAttribute('data-swiper-slide-index') * 1 === slideIndex)[0].column;\n } else {\n newIndex = swiper.getSlideIndexByData(newIndex);\n }\n }\n }\n requestAnimationFrame(() => {\n swiper.slideTo(newIndex, speed, runCallbacks, internal);\n });\n return swiper;\n}\n\n/* eslint no-unused-vars: \"off\" */\nfunction slideNext(speed, runCallbacks, internal) {\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n const swiper = this;\n const {\n enabled,\n params,\n animating\n } = swiper;\n if (!enabled || swiper.destroyed) return swiper;\n if (typeof speed === 'undefined') {\n speed = swiper.params.speed;\n }\n let perGroup = params.slidesPerGroup;\n if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) {\n perGroup = Math.max(swiper.slidesPerViewDynamic('current', true), 1);\n }\n const increment = swiper.activeIndex < params.slidesPerGroupSkip ? 1 : perGroup;\n const isVirtual = swiper.virtual && params.virtual.enabled;\n if (params.loop) {\n if (animating && !isVirtual && params.loopPreventsSliding) return false;\n swiper.loopFix({\n direction: 'next'\n });\n // eslint-disable-next-line\n swiper._clientLeft = swiper.wrapperEl.clientLeft;\n if (swiper.activeIndex === swiper.slides.length - 1 && params.cssMode) {\n requestAnimationFrame(() => {\n swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal);\n });\n return true;\n }\n }\n if (params.rewind && swiper.isEnd) {\n return swiper.slideTo(0, speed, runCallbacks, internal);\n }\n return swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal);\n}\n\n/* eslint no-unused-vars: \"off\" */\nfunction slidePrev(speed, runCallbacks, internal) {\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n const swiper = this;\n const {\n params,\n snapGrid,\n slidesGrid,\n rtlTranslate,\n enabled,\n animating\n } = swiper;\n if (!enabled || swiper.destroyed) return swiper;\n if (typeof speed === 'undefined') {\n speed = swiper.params.speed;\n }\n const isVirtual = swiper.virtual && params.virtual.enabled;\n if (params.loop) {\n if (animating && !isVirtual && params.loopPreventsSliding) return false;\n swiper.loopFix({\n direction: 'prev'\n });\n // eslint-disable-next-line\n swiper._clientLeft = swiper.wrapperEl.clientLeft;\n }\n const translate = rtlTranslate ? swiper.translate : -swiper.translate;\n function normalize(val) {\n if (val < 0) return -Math.floor(Math.abs(val));\n return Math.floor(val);\n }\n const normalizedTranslate = normalize(translate);\n const normalizedSnapGrid = snapGrid.map(val => normalize(val));\n let prevSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate) - 1];\n if (typeof prevSnap === 'undefined' && params.cssMode) {\n let prevSnapIndex;\n snapGrid.forEach((snap, snapIndex) => {\n if (normalizedTranslate >= snap) {\n // prevSnap = snap;\n prevSnapIndex = snapIndex;\n }\n });\n if (typeof prevSnapIndex !== 'undefined') {\n prevSnap = snapGrid[prevSnapIndex > 0 ? prevSnapIndex - 1 : prevSnapIndex];\n }\n }\n let prevIndex = 0;\n if (typeof prevSnap !== 'undefined') {\n prevIndex = slidesGrid.indexOf(prevSnap);\n if (prevIndex < 0) prevIndex = swiper.activeIndex - 1;\n if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) {\n prevIndex = prevIndex - swiper.slidesPerViewDynamic('previous', true) + 1;\n prevIndex = Math.max(prevIndex, 0);\n }\n }\n if (params.rewind && swiper.isBeginning) {\n const lastIndex = swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual ? swiper.virtual.slides.length - 1 : swiper.slides.length - 1;\n return swiper.slideTo(lastIndex, speed, runCallbacks, internal);\n } else if (params.loop && swiper.activeIndex === 0 && params.cssMode) {\n requestAnimationFrame(() => {\n swiper.slideTo(prevIndex, speed, runCallbacks, internal);\n });\n return true;\n }\n return swiper.slideTo(prevIndex, speed, runCallbacks, internal);\n}\n\n/* eslint no-unused-vars: \"off\" */\nfunction slideReset(speed, runCallbacks, internal) {\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n const swiper = this;\n if (swiper.destroyed) return;\n if (typeof speed === 'undefined') {\n speed = swiper.params.speed;\n }\n return swiper.slideTo(swiper.activeIndex, speed, runCallbacks, internal);\n}\n\n/* eslint no-unused-vars: \"off\" */\nfunction slideToClosest(speed, runCallbacks, internal, threshold) {\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n if (threshold === void 0) {\n threshold = 0.5;\n }\n const swiper = this;\n if (swiper.destroyed) return;\n if (typeof speed === 'undefined') {\n speed = swiper.params.speed;\n }\n let index = swiper.activeIndex;\n const skip = Math.min(swiper.params.slidesPerGroupSkip, index);\n const snapIndex = skip + Math.floor((index - skip) / swiper.params.slidesPerGroup);\n const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n if (translate >= swiper.snapGrid[snapIndex]) {\n // The current translate is on or after the current snap index, so the choice\n // is between the current index and the one after it.\n const currentSnap = swiper.snapGrid[snapIndex];\n const nextSnap = swiper.snapGrid[snapIndex + 1];\n if (translate - currentSnap > (nextSnap - currentSnap) * threshold) {\n index += swiper.params.slidesPerGroup;\n }\n } else {\n // The current translate is before the current snap index, so the choice\n // is between the current index and the one before it.\n const prevSnap = swiper.snapGrid[snapIndex - 1];\n const currentSnap = swiper.snapGrid[snapIndex];\n if (translate - prevSnap <= (currentSnap - prevSnap) * threshold) {\n index -= swiper.params.slidesPerGroup;\n }\n }\n index = Math.max(index, 0);\n index = Math.min(index, swiper.slidesGrid.length - 1);\n return swiper.slideTo(index, speed, runCallbacks, internal);\n}\n\nfunction slideToClickedSlide() {\n const swiper = this;\n if (swiper.destroyed) return;\n const {\n params,\n slidesEl\n } = swiper;\n const slidesPerView = params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : params.slidesPerView;\n let slideToIndex = swiper.clickedIndex;\n let realIndex;\n const slideSelector = swiper.isElement ? `swiper-slide` : `.${params.slideClass}`;\n if (params.loop) {\n if (swiper.animating) return;\n realIndex = parseInt(swiper.clickedSlide.getAttribute('data-swiper-slide-index'), 10);\n if (params.centeredSlides) {\n if (slideToIndex < swiper.loopedSlides - slidesPerView / 2 || slideToIndex > swiper.slides.length - swiper.loopedSlides + slidesPerView / 2) {\n swiper.loopFix();\n slideToIndex = swiper.getSlideIndex(elementChildren(slidesEl, `${slideSelector}[data-swiper-slide-index=\"${realIndex}\"]`)[0]);\n nextTick(() => {\n swiper.slideTo(slideToIndex);\n });\n } else {\n swiper.slideTo(slideToIndex);\n }\n } else if (slideToIndex > swiper.slides.length - slidesPerView) {\n swiper.loopFix();\n slideToIndex = swiper.getSlideIndex(elementChildren(slidesEl, `${slideSelector}[data-swiper-slide-index=\"${realIndex}\"]`)[0]);\n nextTick(() => {\n swiper.slideTo(slideToIndex);\n });\n } else {\n swiper.slideTo(slideToIndex);\n }\n } else {\n swiper.slideTo(slideToIndex);\n }\n}\n\nvar slide = {\n slideTo,\n slideToLoop,\n slideNext,\n slidePrev,\n slideReset,\n slideToClosest,\n slideToClickedSlide\n};\n\nfunction loopCreate(slideRealIndex) {\n const swiper = this;\n const {\n params,\n slidesEl\n } = swiper;\n if (!params.loop || swiper.virtual && swiper.params.virtual.enabled) return;\n const initSlides = () => {\n const slides = elementChildren(slidesEl, `.${params.slideClass}, swiper-slide`);\n slides.forEach((el, index) => {\n el.setAttribute('data-swiper-slide-index', index);\n });\n };\n const gridEnabled = swiper.grid && params.grid && params.grid.rows > 1;\n const slidesPerGroup = params.slidesPerGroup * (gridEnabled ? params.grid.rows : 1);\n const shouldFillGroup = swiper.slides.length % slidesPerGroup !== 0;\n const shouldFillGrid = gridEnabled && swiper.slides.length % params.grid.rows !== 0;\n const addBlankSlides = amountOfSlides => {\n for (let i = 0; i < amountOfSlides; i += 1) {\n const slideEl = swiper.isElement ? createElement('swiper-slide', [params.slideBlankClass]) : createElement('div', [params.slideClass, params.slideBlankClass]);\n swiper.slidesEl.append(slideEl);\n }\n };\n if (shouldFillGroup) {\n if (params.loopAddBlankSlides) {\n const slidesToAdd = slidesPerGroup - swiper.slides.length % slidesPerGroup;\n addBlankSlides(slidesToAdd);\n swiper.recalcSlides();\n swiper.updateSlides();\n } else {\n showWarning('Swiper Loop Warning: The number of slides is not even to slidesPerGroup, loop mode may not function properly. You need to add more slides (or make duplicates, or empty slides)');\n }\n initSlides();\n } else if (shouldFillGrid) {\n if (params.loopAddBlankSlides) {\n const slidesToAdd = params.grid.rows - swiper.slides.length % params.grid.rows;\n addBlankSlides(slidesToAdd);\n swiper.recalcSlides();\n swiper.updateSlides();\n } else {\n showWarning('Swiper Loop Warning: The number of slides is not even to grid.rows, loop mode may not function properly. You need to add more slides (or make duplicates, or empty slides)');\n }\n initSlides();\n } else {\n initSlides();\n }\n swiper.loopFix({\n slideRealIndex,\n direction: params.centeredSlides ? undefined : 'next'\n });\n}\n\nfunction loopFix(_temp) {\n let {\n slideRealIndex,\n slideTo = true,\n direction,\n setTranslate,\n activeSlideIndex,\n byController,\n byMousewheel\n } = _temp === void 0 ? {} : _temp;\n const swiper = this;\n if (!swiper.params.loop) return;\n swiper.emit('beforeLoopFix');\n const {\n slides,\n allowSlidePrev,\n allowSlideNext,\n slidesEl,\n params\n } = swiper;\n const {\n centeredSlides\n } = params;\n swiper.allowSlidePrev = true;\n swiper.allowSlideNext = true;\n if (swiper.virtual && params.virtual.enabled) {\n if (slideTo) {\n if (!params.centeredSlides && swiper.snapIndex === 0) {\n swiper.slideTo(swiper.virtual.slides.length, 0, false, true);\n } else if (params.centeredSlides && swiper.snapIndex < params.slidesPerView) {\n swiper.slideTo(swiper.virtual.slides.length + swiper.snapIndex, 0, false, true);\n } else if (swiper.snapIndex === swiper.snapGrid.length - 1) {\n swiper.slideTo(swiper.virtual.slidesBefore, 0, false, true);\n }\n }\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n swiper.emit('loopFix');\n return;\n }\n let slidesPerView = params.slidesPerView;\n if (slidesPerView === 'auto') {\n slidesPerView = swiper.slidesPerViewDynamic();\n } else {\n slidesPerView = Math.ceil(parseFloat(params.slidesPerView, 10));\n if (centeredSlides && slidesPerView % 2 === 0) {\n slidesPerView = slidesPerView + 1;\n }\n }\n const slidesPerGroup = params.slidesPerGroupAuto ? slidesPerView : params.slidesPerGroup;\n let loopedSlides = slidesPerGroup;\n if (loopedSlides % slidesPerGroup !== 0) {\n loopedSlides += slidesPerGroup - loopedSlides % slidesPerGroup;\n }\n loopedSlides += params.loopAdditionalSlides;\n swiper.loopedSlides = loopedSlides;\n const gridEnabled = swiper.grid && params.grid && params.grid.rows > 1;\n if (slides.length < slidesPerView + loopedSlides) {\n showWarning('Swiper Loop Warning: The number of slides is not enough for loop mode, it will be disabled and not function properly. You need to add more slides (or make duplicates) or lower the values of slidesPerView and slidesPerGroup parameters');\n } else if (gridEnabled && params.grid.fill === 'row') {\n showWarning('Swiper Loop Warning: Loop mode is not compatible with grid.fill = `row`');\n }\n const prependSlidesIndexes = [];\n const appendSlidesIndexes = [];\n let activeIndex = swiper.activeIndex;\n if (typeof activeSlideIndex === 'undefined') {\n activeSlideIndex = swiper.getSlideIndex(slides.filter(el => el.classList.contains(params.slideActiveClass))[0]);\n } else {\n activeIndex = activeSlideIndex;\n }\n const isNext = direction === 'next' || !direction;\n const isPrev = direction === 'prev' || !direction;\n let slidesPrepended = 0;\n let slidesAppended = 0;\n const cols = gridEnabled ? Math.ceil(slides.length / params.grid.rows) : slides.length;\n const activeColIndex = gridEnabled ? slides[activeSlideIndex].column : activeSlideIndex;\n const activeColIndexWithShift = activeColIndex + (centeredSlides && typeof setTranslate === 'undefined' ? -slidesPerView / 2 + 0.5 : 0);\n // prepend last slides before start\n if (activeColIndexWithShift < loopedSlides) {\n slidesPrepended = Math.max(loopedSlides - activeColIndexWithShift, slidesPerGroup);\n for (let i = 0; i < loopedSlides - activeColIndexWithShift; i += 1) {\n const index = i - Math.floor(i / cols) * cols;\n if (gridEnabled) {\n const colIndexToPrepend = cols - index - 1;\n for (let i = slides.length - 1; i >= 0; i -= 1) {\n if (slides[i].column === colIndexToPrepend) prependSlidesIndexes.push(i);\n }\n // slides.forEach((slide, slideIndex) => {\n // if (slide.column === colIndexToPrepend) prependSlidesIndexes.push(slideIndex);\n // });\n } else {\n prependSlidesIndexes.push(cols - index - 1);\n }\n }\n } else if (activeColIndexWithShift + slidesPerView > cols - loopedSlides) {\n slidesAppended = Math.max(activeColIndexWithShift - (cols - loopedSlides * 2), slidesPerGroup);\n for (let i = 0; i < slidesAppended; i += 1) {\n const index = i - Math.floor(i / cols) * cols;\n if (gridEnabled) {\n slides.forEach((slide, slideIndex) => {\n if (slide.column === index) appendSlidesIndexes.push(slideIndex);\n });\n } else {\n appendSlidesIndexes.push(index);\n }\n }\n }\n swiper.__preventObserver__ = true;\n requestAnimationFrame(() => {\n swiper.__preventObserver__ = false;\n });\n if (isPrev) {\n prependSlidesIndexes.forEach(index => {\n slides[index].swiperLoopMoveDOM = true;\n slidesEl.prepend(slides[index]);\n slides[index].swiperLoopMoveDOM = false;\n });\n }\n if (isNext) {\n appendSlidesIndexes.forEach(index => {\n slides[index].swiperLoopMoveDOM = true;\n slidesEl.append(slides[index]);\n slides[index].swiperLoopMoveDOM = false;\n });\n }\n swiper.recalcSlides();\n if (params.slidesPerView === 'auto') {\n swiper.updateSlides();\n } else if (gridEnabled && (prependSlidesIndexes.length > 0 && isPrev || appendSlidesIndexes.length > 0 && isNext)) {\n swiper.slides.forEach((slide, slideIndex) => {\n swiper.grid.updateSlide(slideIndex, slide, swiper.slides);\n });\n }\n if (params.watchSlidesProgress) {\n swiper.updateSlidesOffset();\n }\n if (slideTo) {\n if (prependSlidesIndexes.length > 0 && isPrev) {\n if (typeof slideRealIndex === 'undefined') {\n const currentSlideTranslate = swiper.slidesGrid[activeIndex];\n const newSlideTranslate = swiper.slidesGrid[activeIndex + slidesPrepended];\n const diff = newSlideTranslate - currentSlideTranslate;\n if (byMousewheel) {\n swiper.setTranslate(swiper.translate - diff);\n } else {\n swiper.slideTo(activeIndex + Math.ceil(slidesPrepended), 0, false, true);\n if (setTranslate) {\n swiper.touchEventsData.startTranslate = swiper.touchEventsData.startTranslate - diff;\n swiper.touchEventsData.currentTranslate = swiper.touchEventsData.currentTranslate - diff;\n }\n }\n } else {\n if (setTranslate) {\n const shift = gridEnabled ? prependSlidesIndexes.length / params.grid.rows : prependSlidesIndexes.length;\n swiper.slideTo(swiper.activeIndex + shift, 0, false, true);\n swiper.touchEventsData.currentTranslate = swiper.translate;\n }\n }\n } else if (appendSlidesIndexes.length > 0 && isNext) {\n if (typeof slideRealIndex === 'undefined') {\n const currentSlideTranslate = swiper.slidesGrid[activeIndex];\n const newSlideTranslate = swiper.slidesGrid[activeIndex - slidesAppended];\n const diff = newSlideTranslate - currentSlideTranslate;\n if (byMousewheel) {\n swiper.setTranslate(swiper.translate - diff);\n } else {\n swiper.slideTo(activeIndex - slidesAppended, 0, false, true);\n if (setTranslate) {\n swiper.touchEventsData.startTranslate = swiper.touchEventsData.startTranslate - diff;\n swiper.touchEventsData.currentTranslate = swiper.touchEventsData.currentTranslate - diff;\n }\n }\n } else {\n const shift = gridEnabled ? appendSlidesIndexes.length / params.grid.rows : appendSlidesIndexes.length;\n swiper.slideTo(swiper.activeIndex - shift, 0, false, true);\n }\n }\n }\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n if (swiper.controller && swiper.controller.control && !byController) {\n const loopParams = {\n slideRealIndex,\n direction,\n setTranslate,\n activeSlideIndex,\n byController: true\n };\n if (Array.isArray(swiper.controller.control)) {\n swiper.controller.control.forEach(c => {\n if (!c.destroyed && c.params.loop) c.loopFix({\n ...loopParams,\n slideTo: c.params.slidesPerView === params.slidesPerView ? slideTo : false\n });\n });\n } else if (swiper.controller.control instanceof swiper.constructor && swiper.controller.control.params.loop) {\n swiper.controller.control.loopFix({\n ...loopParams,\n slideTo: swiper.controller.control.params.slidesPerView === params.slidesPerView ? slideTo : false\n });\n }\n }\n swiper.emit('loopFix');\n}\n\nfunction loopDestroy() {\n const swiper = this;\n const {\n params,\n slidesEl\n } = swiper;\n if (!params.loop || swiper.virtual && swiper.params.virtual.enabled) return;\n swiper.recalcSlides();\n const newSlidesOrder = [];\n swiper.slides.forEach(slideEl => {\n const index = typeof slideEl.swiperSlideIndex === 'undefined' ? slideEl.getAttribute('data-swiper-slide-index') * 1 : slideEl.swiperSlideIndex;\n newSlidesOrder[index] = slideEl;\n });\n swiper.slides.forEach(slideEl => {\n slideEl.removeAttribute('data-swiper-slide-index');\n });\n newSlidesOrder.forEach(slideEl => {\n slidesEl.append(slideEl);\n });\n swiper.recalcSlides();\n swiper.slideTo(swiper.realIndex, 0);\n}\n\nvar loop = {\n loopCreate,\n loopFix,\n loopDestroy\n};\n\nfunction setGrabCursor(moving) {\n const swiper = this;\n if (!swiper.params.simulateTouch || swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) return;\n const el = swiper.params.touchEventsTarget === 'container' ? swiper.el : swiper.wrapperEl;\n if (swiper.isElement) {\n swiper.__preventObserver__ = true;\n }\n el.style.cursor = 'move';\n el.style.cursor = moving ? 'grabbing' : 'grab';\n if (swiper.isElement) {\n requestAnimationFrame(() => {\n swiper.__preventObserver__ = false;\n });\n }\n}\n\nfunction unsetGrabCursor() {\n const swiper = this;\n if (swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) {\n return;\n }\n if (swiper.isElement) {\n swiper.__preventObserver__ = true;\n }\n swiper[swiper.params.touchEventsTarget === 'container' ? 'el' : 'wrapperEl'].style.cursor = '';\n if (swiper.isElement) {\n requestAnimationFrame(() => {\n swiper.__preventObserver__ = false;\n });\n }\n}\n\nvar grabCursor = {\n setGrabCursor,\n unsetGrabCursor\n};\n\n// Modified from https://stackoverflow.com/questions/54520554/custom-element-getrootnode-closest-function-crossing-multiple-parent-shadowd\nfunction closestElement(selector, base) {\n if (base === void 0) {\n base = this;\n }\n function __closestFrom(el) {\n if (!el || el === getDocument() || el === getWindow()) return null;\n if (el.assignedSlot) el = el.assignedSlot;\n const found = el.closest(selector);\n if (!found && !el.getRootNode) {\n return null;\n }\n return found || __closestFrom(el.getRootNode().host);\n }\n return __closestFrom(base);\n}\nfunction preventEdgeSwipe(swiper, event, startX) {\n const window = getWindow();\n const {\n params\n } = swiper;\n const edgeSwipeDetection = params.edgeSwipeDetection;\n const edgeSwipeThreshold = params.edgeSwipeThreshold;\n if (edgeSwipeDetection && (startX <= edgeSwipeThreshold || startX >= window.innerWidth - edgeSwipeThreshold)) {\n if (edgeSwipeDetection === 'prevent') {\n event.preventDefault();\n return true;\n }\n return false;\n }\n return true;\n}\nfunction onTouchStart(event) {\n const swiper = this;\n const document = getDocument();\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n const data = swiper.touchEventsData;\n if (e.type === 'pointerdown') {\n if (data.pointerId !== null && data.pointerId !== e.pointerId) {\n return;\n }\n data.pointerId = e.pointerId;\n } else if (e.type === 'touchstart' && e.targetTouches.length === 1) {\n data.touchId = e.targetTouches[0].identifier;\n }\n if (e.type === 'touchstart') {\n // don't proceed touch event\n preventEdgeSwipe(swiper, e, e.targetTouches[0].pageX);\n return;\n }\n const {\n params,\n touches,\n enabled\n } = swiper;\n if (!enabled) return;\n if (!params.simulateTouch && e.pointerType === 'mouse') return;\n if (swiper.animating && params.preventInteractionOnTransition) {\n return;\n }\n if (!swiper.animating && params.cssMode && params.loop) {\n swiper.loopFix();\n }\n let targetEl = e.target;\n if (params.touchEventsTarget === 'wrapper') {\n if (!swiper.wrapperEl.contains(targetEl)) return;\n }\n if ('which' in e && e.which === 3) return;\n if ('button' in e && e.button > 0) return;\n if (data.isTouched && data.isMoved) return;\n\n // change target el for shadow root component\n const swipingClassHasValue = !!params.noSwipingClass && params.noSwipingClass !== '';\n // eslint-disable-next-line\n const eventPath = e.composedPath ? e.composedPath() : e.path;\n if (swipingClassHasValue && e.target && e.target.shadowRoot && eventPath) {\n targetEl = eventPath[0];\n }\n const noSwipingSelector = params.noSwipingSelector ? params.noSwipingSelector : `.${params.noSwipingClass}`;\n const isTargetShadow = !!(e.target && e.target.shadowRoot);\n\n // use closestElement for shadow root element to get the actual closest for nested shadow root element\n if (params.noSwiping && (isTargetShadow ? closestElement(noSwipingSelector, targetEl) : targetEl.closest(noSwipingSelector))) {\n swiper.allowClick = true;\n return;\n }\n if (params.swipeHandler) {\n if (!targetEl.closest(params.swipeHandler)) return;\n }\n touches.currentX = e.pageX;\n touches.currentY = e.pageY;\n const startX = touches.currentX;\n const startY = touches.currentY;\n\n // Do NOT start if iOS edge swipe is detected. Otherwise iOS app cannot swipe-to-go-back anymore\n\n if (!preventEdgeSwipe(swiper, e, startX)) {\n return;\n }\n Object.assign(data, {\n isTouched: true,\n isMoved: false,\n allowTouchCallbacks: true,\n isScrolling: undefined,\n startMoving: undefined\n });\n touches.startX = startX;\n touches.startY = startY;\n data.touchStartTime = now();\n swiper.allowClick = true;\n swiper.updateSize();\n swiper.swipeDirection = undefined;\n if (params.threshold > 0) data.allowThresholdMove = false;\n let preventDefault = true;\n if (targetEl.matches(data.focusableElements)) {\n preventDefault = false;\n if (targetEl.nodeName === 'SELECT') {\n data.isTouched = false;\n }\n }\n if (document.activeElement && document.activeElement.matches(data.focusableElements) && document.activeElement !== targetEl) {\n document.activeElement.blur();\n }\n const shouldPreventDefault = preventDefault && swiper.allowTouchMove && params.touchStartPreventDefault;\n if ((params.touchStartForcePreventDefault || shouldPreventDefault) && !targetEl.isContentEditable) {\n e.preventDefault();\n }\n if (params.freeMode && params.freeMode.enabled && swiper.freeMode && swiper.animating && !params.cssMode) {\n swiper.freeMode.onTouchStart();\n }\n swiper.emit('touchStart', e);\n}\n\nfunction onTouchMove(event) {\n const document = getDocument();\n const swiper = this;\n const data = swiper.touchEventsData;\n const {\n params,\n touches,\n rtlTranslate: rtl,\n enabled\n } = swiper;\n if (!enabled) return;\n if (!params.simulateTouch && event.pointerType === 'mouse') return;\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n if (e.type === 'pointermove') {\n if (data.touchId !== null) return; // return from pointer if we use touch\n const id = e.pointerId;\n if (id !== data.pointerId) return;\n }\n let targetTouch;\n if (e.type === 'touchmove') {\n targetTouch = [...e.changedTouches].filter(t => t.identifier === data.touchId)[0];\n if (!targetTouch || targetTouch.identifier !== data.touchId) return;\n } else {\n targetTouch = e;\n }\n if (!data.isTouched) {\n if (data.startMoving && data.isScrolling) {\n swiper.emit('touchMoveOpposite', e);\n }\n return;\n }\n const pageX = targetTouch.pageX;\n const pageY = targetTouch.pageY;\n if (e.preventedByNestedSwiper) {\n touches.startX = pageX;\n touches.startY = pageY;\n return;\n }\n if (!swiper.allowTouchMove) {\n if (!e.target.matches(data.focusableElements)) {\n swiper.allowClick = false;\n }\n if (data.isTouched) {\n Object.assign(touches, {\n startX: pageX,\n startY: pageY,\n currentX: pageX,\n currentY: pageY\n });\n data.touchStartTime = now();\n }\n return;\n }\n if (params.touchReleaseOnEdges && !params.loop) {\n if (swiper.isVertical()) {\n // Vertical\n if (pageY < touches.startY && swiper.translate <= swiper.maxTranslate() || pageY > touches.startY && swiper.translate >= swiper.minTranslate()) {\n data.isTouched = false;\n data.isMoved = false;\n return;\n }\n } else if (pageX < touches.startX && swiper.translate <= swiper.maxTranslate() || pageX > touches.startX && swiper.translate >= swiper.minTranslate()) {\n return;\n }\n }\n if (document.activeElement) {\n if (e.target === document.activeElement && e.target.matches(data.focusableElements)) {\n data.isMoved = true;\n swiper.allowClick = false;\n return;\n }\n }\n if (data.allowTouchCallbacks) {\n swiper.emit('touchMove', e);\n }\n touches.previousX = touches.currentX;\n touches.previousY = touches.currentY;\n touches.currentX = pageX;\n touches.currentY = pageY;\n const diffX = touches.currentX - touches.startX;\n const diffY = touches.currentY - touches.startY;\n if (swiper.params.threshold && Math.sqrt(diffX ** 2 + diffY ** 2) < swiper.params.threshold) return;\n if (typeof data.isScrolling === 'undefined') {\n let touchAngle;\n if (swiper.isHorizontal() && touches.currentY === touches.startY || swiper.isVertical() && touches.currentX === touches.startX) {\n data.isScrolling = false;\n } else {\n // eslint-disable-next-line\n if (diffX * diffX + diffY * diffY >= 25) {\n touchAngle = Math.atan2(Math.abs(diffY), Math.abs(diffX)) * 180 / Math.PI;\n data.isScrolling = swiper.isHorizontal() ? touchAngle > params.touchAngle : 90 - touchAngle > params.touchAngle;\n }\n }\n }\n if (data.isScrolling) {\n swiper.emit('touchMoveOpposite', e);\n }\n if (typeof data.startMoving === 'undefined') {\n if (touches.currentX !== touches.startX || touches.currentY !== touches.startY) {\n data.startMoving = true;\n }\n }\n if (data.isScrolling || e.type === 'touchmove' && data.preventTouchMoveFromPointerMove) {\n data.isTouched = false;\n return;\n }\n if (!data.startMoving) {\n return;\n }\n swiper.allowClick = false;\n if (!params.cssMode && e.cancelable) {\n e.preventDefault();\n }\n if (params.touchMoveStopPropagation && !params.nested) {\n e.stopPropagation();\n }\n let diff = swiper.isHorizontal() ? diffX : diffY;\n let touchesDiff = swiper.isHorizontal() ? touches.currentX - touches.previousX : touches.currentY - touches.previousY;\n if (params.oneWayMovement) {\n diff = Math.abs(diff) * (rtl ? 1 : -1);\n touchesDiff = Math.abs(touchesDiff) * (rtl ? 1 : -1);\n }\n touches.diff = diff;\n diff *= params.touchRatio;\n if (rtl) {\n diff = -diff;\n touchesDiff = -touchesDiff;\n }\n const prevTouchesDirection = swiper.touchesDirection;\n swiper.swipeDirection = diff > 0 ? 'prev' : 'next';\n swiper.touchesDirection = touchesDiff > 0 ? 'prev' : 'next';\n const isLoop = swiper.params.loop && !params.cssMode;\n const allowLoopFix = swiper.touchesDirection === 'next' && swiper.allowSlideNext || swiper.touchesDirection === 'prev' && swiper.allowSlidePrev;\n if (!data.isMoved) {\n if (isLoop && allowLoopFix) {\n swiper.loopFix({\n direction: swiper.swipeDirection\n });\n }\n data.startTranslate = swiper.getTranslate();\n swiper.setTransition(0);\n if (swiper.animating) {\n const evt = new window.CustomEvent('transitionend', {\n bubbles: true,\n cancelable: true,\n detail: {\n bySwiperTouchMove: true\n }\n });\n swiper.wrapperEl.dispatchEvent(evt);\n }\n data.allowMomentumBounce = false;\n // Grab Cursor\n if (params.grabCursor && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n swiper.setGrabCursor(true);\n }\n swiper.emit('sliderFirstMove', e);\n }\n let loopFixed;\n new Date().getTime();\n if (data.isMoved && data.allowThresholdMove && prevTouchesDirection !== swiper.touchesDirection && isLoop && allowLoopFix && Math.abs(diff) >= 1) {\n Object.assign(touches, {\n startX: pageX,\n startY: pageY,\n currentX: pageX,\n currentY: pageY,\n startTranslate: data.currentTranslate\n });\n data.loopSwapReset = true;\n data.startTranslate = data.currentTranslate;\n return;\n }\n swiper.emit('sliderMove', e);\n data.isMoved = true;\n data.currentTranslate = diff + data.startTranslate;\n let disableParentSwiper = true;\n let resistanceRatio = params.resistanceRatio;\n if (params.touchReleaseOnEdges) {\n resistanceRatio = 0;\n }\n if (diff > 0) {\n if (isLoop && allowLoopFix && !loopFixed && data.allowThresholdMove && data.currentTranslate > (params.centeredSlides ? swiper.minTranslate() - swiper.slidesSizesGrid[swiper.activeIndex + 1] : swiper.minTranslate())) {\n swiper.loopFix({\n direction: 'prev',\n setTranslate: true,\n activeSlideIndex: 0\n });\n }\n if (data.currentTranslate > swiper.minTranslate()) {\n disableParentSwiper = false;\n if (params.resistance) {\n data.currentTranslate = swiper.minTranslate() - 1 + (-swiper.minTranslate() + data.startTranslate + diff) ** resistanceRatio;\n }\n }\n } else if (diff < 0) {\n if (isLoop && allowLoopFix && !loopFixed && data.allowThresholdMove && data.currentTranslate < (params.centeredSlides ? swiper.maxTranslate() + swiper.slidesSizesGrid[swiper.slidesSizesGrid.length - 1] : swiper.maxTranslate())) {\n swiper.loopFix({\n direction: 'next',\n setTranslate: true,\n activeSlideIndex: swiper.slides.length - (params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : Math.ceil(parseFloat(params.slidesPerView, 10)))\n });\n }\n if (data.currentTranslate < swiper.maxTranslate()) {\n disableParentSwiper = false;\n if (params.resistance) {\n data.currentTranslate = swiper.maxTranslate() + 1 - (swiper.maxTranslate() - data.startTranslate - diff) ** resistanceRatio;\n }\n }\n }\n if (disableParentSwiper) {\n e.preventedByNestedSwiper = true;\n }\n\n // Directions locks\n if (!swiper.allowSlideNext && swiper.swipeDirection === 'next' && data.currentTranslate < data.startTranslate) {\n data.currentTranslate = data.startTranslate;\n }\n if (!swiper.allowSlidePrev && swiper.swipeDirection === 'prev' && data.currentTranslate > data.startTranslate) {\n data.currentTranslate = data.startTranslate;\n }\n if (!swiper.allowSlidePrev && !swiper.allowSlideNext) {\n data.currentTranslate = data.startTranslate;\n }\n\n // Threshold\n if (params.threshold > 0) {\n if (Math.abs(diff) > params.threshold || data.allowThresholdMove) {\n if (!data.allowThresholdMove) {\n data.allowThresholdMove = true;\n touches.startX = touches.currentX;\n touches.startY = touches.currentY;\n data.currentTranslate = data.startTranslate;\n touches.diff = swiper.isHorizontal() ? touches.currentX - touches.startX : touches.currentY - touches.startY;\n return;\n }\n } else {\n data.currentTranslate = data.startTranslate;\n return;\n }\n }\n if (!params.followFinger || params.cssMode) return;\n\n // Update active index in free mode\n if (params.freeMode && params.freeMode.enabled && swiper.freeMode || params.watchSlidesProgress) {\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n if (params.freeMode && params.freeMode.enabled && swiper.freeMode) {\n swiper.freeMode.onTouchMove();\n }\n // Update progress\n swiper.updateProgress(data.currentTranslate);\n // Update translate\n swiper.setTranslate(data.currentTranslate);\n}\n\nfunction onTouchEnd(event) {\n const swiper = this;\n const data = swiper.touchEventsData;\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n let targetTouch;\n const isTouchEvent = e.type === 'touchend' || e.type === 'touchcancel';\n if (!isTouchEvent) {\n if (data.touchId !== null) return; // return from pointer if we use touch\n if (e.pointerId !== data.pointerId) return;\n targetTouch = e;\n } else {\n targetTouch = [...e.changedTouches].filter(t => t.identifier === data.touchId)[0];\n if (!targetTouch || targetTouch.identifier !== data.touchId) return;\n }\n if (['pointercancel', 'pointerout', 'pointerleave', 'contextmenu'].includes(e.type)) {\n const proceed = ['pointercancel', 'contextmenu'].includes(e.type) && (swiper.browser.isSafari || swiper.browser.isWebView);\n if (!proceed) {\n return;\n }\n }\n data.pointerId = null;\n data.touchId = null;\n const {\n params,\n touches,\n rtlTranslate: rtl,\n slidesGrid,\n enabled\n } = swiper;\n if (!enabled) return;\n if (!params.simulateTouch && e.pointerType === 'mouse') return;\n if (data.allowTouchCallbacks) {\n swiper.emit('touchEnd', e);\n }\n data.allowTouchCallbacks = false;\n if (!data.isTouched) {\n if (data.isMoved && params.grabCursor) {\n swiper.setGrabCursor(false);\n }\n data.isMoved = false;\n data.startMoving = false;\n return;\n }\n\n // Return Grab Cursor\n if (params.grabCursor && data.isMoved && data.isTouched && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n swiper.setGrabCursor(false);\n }\n\n // Time diff\n const touchEndTime = now();\n const timeDiff = touchEndTime - data.touchStartTime;\n\n // Tap, doubleTap, Click\n if (swiper.allowClick) {\n const pathTree = e.path || e.composedPath && e.composedPath();\n swiper.updateClickedSlide(pathTree && pathTree[0] || e.target, pathTree);\n swiper.emit('tap click', e);\n if (timeDiff < 300 && touchEndTime - data.lastClickTime < 300) {\n swiper.emit('doubleTap doubleClick', e);\n }\n }\n data.lastClickTime = now();\n nextTick(() => {\n if (!swiper.destroyed) swiper.allowClick = true;\n });\n if (!data.isTouched || !data.isMoved || !swiper.swipeDirection || touches.diff === 0 && !data.loopSwapReset || data.currentTranslate === data.startTranslate && !data.loopSwapReset) {\n data.isTouched = false;\n data.isMoved = false;\n data.startMoving = false;\n return;\n }\n data.isTouched = false;\n data.isMoved = false;\n data.startMoving = false;\n let currentPos;\n if (params.followFinger) {\n currentPos = rtl ? swiper.translate : -swiper.translate;\n } else {\n currentPos = -data.currentTranslate;\n }\n if (params.cssMode) {\n return;\n }\n if (params.freeMode && params.freeMode.enabled) {\n swiper.freeMode.onTouchEnd({\n currentPos\n });\n return;\n }\n\n // Find current slide\n const swipeToLast = currentPos >= -swiper.maxTranslate() && !swiper.params.loop;\n let stopIndex = 0;\n let groupSize = swiper.slidesSizesGrid[0];\n for (let i = 0; i < slidesGrid.length; i += i < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup) {\n const increment = i < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;\n if (typeof slidesGrid[i + increment] !== 'undefined') {\n if (swipeToLast || currentPos >= slidesGrid[i] && currentPos < slidesGrid[i + increment]) {\n stopIndex = i;\n groupSize = slidesGrid[i + increment] - slidesGrid[i];\n }\n } else if (swipeToLast || currentPos >= slidesGrid[i]) {\n stopIndex = i;\n groupSize = slidesGrid[slidesGrid.length - 1] - slidesGrid[slidesGrid.length - 2];\n }\n }\n let rewindFirstIndex = null;\n let rewindLastIndex = null;\n if (params.rewind) {\n if (swiper.isBeginning) {\n rewindLastIndex = params.virtual && params.virtual.enabled && swiper.virtual ? swiper.virtual.slides.length - 1 : swiper.slides.length - 1;\n } else if (swiper.isEnd) {\n rewindFirstIndex = 0;\n }\n }\n // Find current slide size\n const ratio = (currentPos - slidesGrid[stopIndex]) / groupSize;\n const increment = stopIndex < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;\n if (timeDiff > params.longSwipesMs) {\n // Long touches\n if (!params.longSwipes) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n if (swiper.swipeDirection === 'next') {\n if (ratio >= params.longSwipesRatio) swiper.slideTo(params.rewind && swiper.isEnd ? rewindFirstIndex : stopIndex + increment);else swiper.slideTo(stopIndex);\n }\n if (swiper.swipeDirection === 'prev') {\n if (ratio > 1 - params.longSwipesRatio) {\n swiper.slideTo(stopIndex + increment);\n } else if (rewindLastIndex !== null && ratio < 0 && Math.abs(ratio) > params.longSwipesRatio) {\n swiper.slideTo(rewindLastIndex);\n } else {\n swiper.slideTo(stopIndex);\n }\n }\n } else {\n // Short swipes\n if (!params.shortSwipes) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n const isNavButtonTarget = swiper.navigation && (e.target === swiper.navigation.nextEl || e.target === swiper.navigation.prevEl);\n if (!isNavButtonTarget) {\n if (swiper.swipeDirection === 'next') {\n swiper.slideTo(rewindFirstIndex !== null ? rewindFirstIndex : stopIndex + increment);\n }\n if (swiper.swipeDirection === 'prev') {\n swiper.slideTo(rewindLastIndex !== null ? rewindLastIndex : stopIndex);\n }\n } else if (e.target === swiper.navigation.nextEl) {\n swiper.slideTo(stopIndex + increment);\n } else {\n swiper.slideTo(stopIndex);\n }\n }\n}\n\nfunction onResize() {\n const swiper = this;\n const {\n params,\n el\n } = swiper;\n if (el && el.offsetWidth === 0) return;\n\n // Breakpoints\n if (params.breakpoints) {\n swiper.setBreakpoint();\n }\n\n // Save locks\n const {\n allowSlideNext,\n allowSlidePrev,\n snapGrid\n } = swiper;\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n\n // Disable locks on resize\n swiper.allowSlideNext = true;\n swiper.allowSlidePrev = true;\n swiper.updateSize();\n swiper.updateSlides();\n swiper.updateSlidesClasses();\n const isVirtualLoop = isVirtual && params.loop;\n if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !swiper.isBeginning && !swiper.params.centeredSlides && !isVirtualLoop) {\n swiper.slideTo(swiper.slides.length - 1, 0, false, true);\n } else {\n if (swiper.params.loop && !isVirtual) {\n swiper.slideToLoop(swiper.realIndex, 0, false, true);\n } else {\n swiper.slideTo(swiper.activeIndex, 0, false, true);\n }\n }\n if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) {\n clearTimeout(swiper.autoplay.resizeTimeout);\n swiper.autoplay.resizeTimeout = setTimeout(() => {\n if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) {\n swiper.autoplay.resume();\n }\n }, 500);\n }\n // Return locks after resize\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n if (swiper.params.watchOverflow && snapGrid !== swiper.snapGrid) {\n swiper.checkOverflow();\n }\n}\n\nfunction onClick(e) {\n const swiper = this;\n if (!swiper.enabled) return;\n if (!swiper.allowClick) {\n if (swiper.params.preventClicks) e.preventDefault();\n if (swiper.params.preventClicksPropagation && swiper.animating) {\n e.stopPropagation();\n e.stopImmediatePropagation();\n }\n }\n}\n\nfunction onScroll() {\n const swiper = this;\n const {\n wrapperEl,\n rtlTranslate,\n enabled\n } = swiper;\n if (!enabled) return;\n swiper.previousTranslate = swiper.translate;\n if (swiper.isHorizontal()) {\n swiper.translate = -wrapperEl.scrollLeft;\n } else {\n swiper.translate = -wrapperEl.scrollTop;\n }\n // eslint-disable-next-line\n if (swiper.translate === 0) swiper.translate = 0;\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n let newProgress;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n if (translatesDiff === 0) {\n newProgress = 0;\n } else {\n newProgress = (swiper.translate - swiper.minTranslate()) / translatesDiff;\n }\n if (newProgress !== swiper.progress) {\n swiper.updateProgress(rtlTranslate ? -swiper.translate : swiper.translate);\n }\n swiper.emit('setTranslate', swiper.translate, false);\n}\n\nfunction onLoad(e) {\n const swiper = this;\n processLazyPreloader(swiper, e.target);\n if (swiper.params.cssMode || swiper.params.slidesPerView !== 'auto' && !swiper.params.autoHeight) {\n return;\n }\n swiper.update();\n}\n\nfunction onDocumentTouchStart() {\n const swiper = this;\n if (swiper.documentTouchHandlerProceeded) return;\n swiper.documentTouchHandlerProceeded = true;\n if (swiper.params.touchReleaseOnEdges) {\n swiper.el.style.touchAction = 'auto';\n }\n}\n\nconst events = (swiper, method) => {\n const document = getDocument();\n const {\n params,\n el,\n wrapperEl,\n device\n } = swiper;\n const capture = !!params.nested;\n const domMethod = method === 'on' ? 'addEventListener' : 'removeEventListener';\n const swiperMethod = method;\n if (!el || typeof el === 'string') return;\n\n // Touch Events\n document[domMethod]('touchstart', swiper.onDocumentTouchStart, {\n passive: false,\n capture\n });\n el[domMethod]('touchstart', swiper.onTouchStart, {\n passive: false\n });\n el[domMethod]('pointerdown', swiper.onTouchStart, {\n passive: false\n });\n document[domMethod]('touchmove', swiper.onTouchMove, {\n passive: false,\n capture\n });\n document[domMethod]('pointermove', swiper.onTouchMove, {\n passive: false,\n capture\n });\n document[domMethod]('touchend', swiper.onTouchEnd, {\n passive: true\n });\n document[domMethod]('pointerup', swiper.onTouchEnd, {\n passive: true\n });\n document[domMethod]('pointercancel', swiper.onTouchEnd, {\n passive: true\n });\n document[domMethod]('touchcancel', swiper.onTouchEnd, {\n passive: true\n });\n document[domMethod]('pointerout', swiper.onTouchEnd, {\n passive: true\n });\n document[domMethod]('pointerleave', swiper.onTouchEnd, {\n passive: true\n });\n document[domMethod]('contextmenu', swiper.onTouchEnd, {\n passive: true\n });\n\n // Prevent Links Clicks\n if (params.preventClicks || params.preventClicksPropagation) {\n el[domMethod]('click', swiper.onClick, true);\n }\n if (params.cssMode) {\n wrapperEl[domMethod]('scroll', swiper.onScroll);\n }\n\n // Resize handler\n if (params.updateOnWindowResize) {\n swiper[swiperMethod](device.ios || device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate', onResize, true);\n } else {\n swiper[swiperMethod]('observerUpdate', onResize, true);\n }\n\n // Images loader\n el[domMethod]('load', swiper.onLoad, {\n capture: true\n });\n};\nfunction attachEvents() {\n const swiper = this;\n const {\n params\n } = swiper;\n swiper.onTouchStart = onTouchStart.bind(swiper);\n swiper.onTouchMove = onTouchMove.bind(swiper);\n swiper.onTouchEnd = onTouchEnd.bind(swiper);\n swiper.onDocumentTouchStart = onDocumentTouchStart.bind(swiper);\n if (params.cssMode) {\n swiper.onScroll = onScroll.bind(swiper);\n }\n swiper.onClick = onClick.bind(swiper);\n swiper.onLoad = onLoad.bind(swiper);\n events(swiper, 'on');\n}\nfunction detachEvents() {\n const swiper = this;\n events(swiper, 'off');\n}\nvar events$1 = {\n attachEvents,\n detachEvents\n};\n\nconst isGridEnabled = (swiper, params) => {\n return swiper.grid && params.grid && params.grid.rows > 1;\n};\nfunction setBreakpoint() {\n const swiper = this;\n const {\n realIndex,\n initialized,\n params,\n el\n } = swiper;\n const breakpoints = params.breakpoints;\n if (!breakpoints || breakpoints && Object.keys(breakpoints).length === 0) return;\n\n // Get breakpoint for window width and update parameters\n const breakpoint = swiper.getBreakpoint(breakpoints, swiper.params.breakpointsBase, swiper.el);\n if (!breakpoint || swiper.currentBreakpoint === breakpoint) return;\n const breakpointOnlyParams = breakpoint in breakpoints ? breakpoints[breakpoint] : undefined;\n const breakpointParams = breakpointOnlyParams || swiper.originalParams;\n const wasMultiRow = isGridEnabled(swiper, params);\n const isMultiRow = isGridEnabled(swiper, breakpointParams);\n const wasGrabCursor = swiper.params.grabCursor;\n const isGrabCursor = breakpointParams.grabCursor;\n const wasEnabled = params.enabled;\n if (wasMultiRow && !isMultiRow) {\n el.classList.remove(`${params.containerModifierClass}grid`, `${params.containerModifierClass}grid-column`);\n swiper.emitContainerClasses();\n } else if (!wasMultiRow && isMultiRow) {\n el.classList.add(`${params.containerModifierClass}grid`);\n if (breakpointParams.grid.fill && breakpointParams.grid.fill === 'column' || !breakpointParams.grid.fill && params.grid.fill === 'column') {\n el.classList.add(`${params.containerModifierClass}grid-column`);\n }\n swiper.emitContainerClasses();\n }\n if (wasGrabCursor && !isGrabCursor) {\n swiper.unsetGrabCursor();\n } else if (!wasGrabCursor && isGrabCursor) {\n swiper.setGrabCursor();\n }\n\n // Toggle navigation, pagination, scrollbar\n ['navigation', 'pagination', 'scrollbar'].forEach(prop => {\n if (typeof breakpointParams[prop] === 'undefined') return;\n const wasModuleEnabled = params[prop] && params[prop].enabled;\n const isModuleEnabled = breakpointParams[prop] && breakpointParams[prop].enabled;\n if (wasModuleEnabled && !isModuleEnabled) {\n swiper[prop].disable();\n }\n if (!wasModuleEnabled && isModuleEnabled) {\n swiper[prop].enable();\n }\n });\n const directionChanged = breakpointParams.direction && breakpointParams.direction !== params.direction;\n const needsReLoop = params.loop && (breakpointParams.slidesPerView !== params.slidesPerView || directionChanged);\n const wasLoop = params.loop;\n if (directionChanged && initialized) {\n swiper.changeDirection();\n }\n extend(swiper.params, breakpointParams);\n const isEnabled = swiper.params.enabled;\n const hasLoop = swiper.params.loop;\n Object.assign(swiper, {\n allowTouchMove: swiper.params.allowTouchMove,\n allowSlideNext: swiper.params.allowSlideNext,\n allowSlidePrev: swiper.params.allowSlidePrev\n });\n if (wasEnabled && !isEnabled) {\n swiper.disable();\n } else if (!wasEnabled && isEnabled) {\n swiper.enable();\n }\n swiper.currentBreakpoint = breakpoint;\n swiper.emit('_beforeBreakpoint', breakpointParams);\n if (initialized) {\n if (needsReLoop) {\n swiper.loopDestroy();\n swiper.loopCreate(realIndex);\n swiper.updateSlides();\n } else if (!wasLoop && hasLoop) {\n swiper.loopCreate(realIndex);\n swiper.updateSlides();\n } else if (wasLoop && !hasLoop) {\n swiper.loopDestroy();\n }\n }\n swiper.emit('breakpoint', breakpointParams);\n}\n\nfunction getBreakpoint(breakpoints, base, containerEl) {\n if (base === void 0) {\n base = 'window';\n }\n if (!breakpoints || base === 'container' && !containerEl) return undefined;\n let breakpoint = false;\n const window = getWindow();\n const currentHeight = base === 'window' ? window.innerHeight : containerEl.clientHeight;\n const points = Object.keys(breakpoints).map(point => {\n if (typeof point === 'string' && point.indexOf('@') === 0) {\n const minRatio = parseFloat(point.substr(1));\n const value = currentHeight * minRatio;\n return {\n value,\n point\n };\n }\n return {\n value: point,\n point\n };\n });\n points.sort((a, b) => parseInt(a.value, 10) - parseInt(b.value, 10));\n for (let i = 0; i < points.length; i += 1) {\n const {\n point,\n value\n } = points[i];\n if (base === 'window') {\n if (window.matchMedia(`(min-width: ${value}px)`).matches) {\n breakpoint = point;\n }\n } else if (value <= containerEl.clientWidth) {\n breakpoint = point;\n }\n }\n return breakpoint || 'max';\n}\n\nvar breakpoints = {\n setBreakpoint,\n getBreakpoint\n};\n\nfunction prepareClasses(entries, prefix) {\n const resultClasses = [];\n entries.forEach(item => {\n if (typeof item === 'object') {\n Object.keys(item).forEach(classNames => {\n if (item[classNames]) {\n resultClasses.push(prefix + classNames);\n }\n });\n } else if (typeof item === 'string') {\n resultClasses.push(prefix + item);\n }\n });\n return resultClasses;\n}\nfunction addClasses() {\n const swiper = this;\n const {\n classNames,\n params,\n rtl,\n el,\n device\n } = swiper;\n // prettier-ignore\n const suffixes = prepareClasses(['initialized', params.direction, {\n 'free-mode': swiper.params.freeMode && params.freeMode.enabled\n }, {\n 'autoheight': params.autoHeight\n }, {\n 'rtl': rtl\n }, {\n 'grid': params.grid && params.grid.rows > 1\n }, {\n 'grid-column': params.grid && params.grid.rows > 1 && params.grid.fill === 'column'\n }, {\n 'android': device.android\n }, {\n 'ios': device.ios\n }, {\n 'css-mode': params.cssMode\n }, {\n 'centered': params.cssMode && params.centeredSlides\n }, {\n 'watch-progress': params.watchSlidesProgress\n }], params.containerModifierClass);\n classNames.push(...suffixes);\n el.classList.add(...classNames);\n swiper.emitContainerClasses();\n}\n\nfunction removeClasses() {\n const swiper = this;\n const {\n el,\n classNames\n } = swiper;\n if (!el || typeof el === 'string') return;\n el.classList.remove(...classNames);\n swiper.emitContainerClasses();\n}\n\nvar classes = {\n addClasses,\n removeClasses\n};\n\nfunction checkOverflow() {\n const swiper = this;\n const {\n isLocked: wasLocked,\n params\n } = swiper;\n const {\n slidesOffsetBefore\n } = params;\n if (slidesOffsetBefore) {\n const lastSlideIndex = swiper.slides.length - 1;\n const lastSlideRightEdge = swiper.slidesGrid[lastSlideIndex] + swiper.slidesSizesGrid[lastSlideIndex] + slidesOffsetBefore * 2;\n swiper.isLocked = swiper.size > lastSlideRightEdge;\n } else {\n swiper.isLocked = swiper.snapGrid.length === 1;\n }\n if (params.allowSlideNext === true) {\n swiper.allowSlideNext = !swiper.isLocked;\n }\n if (params.allowSlidePrev === true) {\n swiper.allowSlidePrev = !swiper.isLocked;\n }\n if (wasLocked && wasLocked !== swiper.isLocked) {\n swiper.isEnd = false;\n }\n if (wasLocked !== swiper.isLocked) {\n swiper.emit(swiper.isLocked ? 'lock' : 'unlock');\n }\n}\nvar checkOverflow$1 = {\n checkOverflow\n};\n\nvar defaults = {\n init: true,\n direction: 'horizontal',\n oneWayMovement: false,\n swiperElementNodeName: 'SWIPER-CONTAINER',\n touchEventsTarget: 'wrapper',\n initialSlide: 0,\n speed: 300,\n cssMode: false,\n updateOnWindowResize: true,\n resizeObserver: true,\n nested: false,\n createElements: false,\n eventsPrefix: 'swiper',\n enabled: true,\n focusableElements: 'input, select, option, textarea, button, video, label',\n // Overrides\n width: null,\n height: null,\n //\n preventInteractionOnTransition: false,\n // ssr\n userAgent: null,\n url: null,\n // To support iOS's swipe-to-go-back gesture (when being used in-app).\n edgeSwipeDetection: false,\n edgeSwipeThreshold: 20,\n // Autoheight\n autoHeight: false,\n // Set wrapper width\n setWrapperSize: false,\n // Virtual Translate\n virtualTranslate: false,\n // Effects\n effect: 'slide',\n // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip'\n\n // Breakpoints\n breakpoints: undefined,\n breakpointsBase: 'window',\n // Slides grid\n spaceBetween: 0,\n slidesPerView: 1,\n slidesPerGroup: 1,\n slidesPerGroupSkip: 0,\n slidesPerGroupAuto: false,\n centeredSlides: false,\n centeredSlidesBounds: false,\n slidesOffsetBefore: 0,\n // in px\n slidesOffsetAfter: 0,\n // in px\n normalizeSlideIndex: true,\n centerInsufficientSlides: false,\n // Disable swiper and hide navigation when container not overflow\n watchOverflow: true,\n // Round length\n roundLengths: false,\n // Touches\n touchRatio: 1,\n touchAngle: 45,\n simulateTouch: true,\n shortSwipes: true,\n longSwipes: true,\n longSwipesRatio: 0.5,\n longSwipesMs: 300,\n followFinger: true,\n allowTouchMove: true,\n threshold: 5,\n touchMoveStopPropagation: false,\n touchStartPreventDefault: true,\n touchStartForcePreventDefault: false,\n touchReleaseOnEdges: false,\n // Unique Navigation Elements\n uniqueNavElements: true,\n // Resistance\n resistance: true,\n resistanceRatio: 0.85,\n // Progress\n watchSlidesProgress: false,\n // Cursor\n grabCursor: false,\n // Clicks\n preventClicks: true,\n preventClicksPropagation: true,\n slideToClickedSlide: false,\n // loop\n loop: false,\n loopAddBlankSlides: true,\n loopAdditionalSlides: 0,\n loopPreventsSliding: true,\n // rewind\n rewind: false,\n // Swiping/no swiping\n allowSlidePrev: true,\n allowSlideNext: true,\n swipeHandler: null,\n // '.swipe-handler',\n noSwiping: true,\n noSwipingClass: 'swiper-no-swiping',\n noSwipingSelector: null,\n // Passive Listeners\n passiveListeners: true,\n maxBackfaceHiddenSlides: 10,\n // NS\n containerModifierClass: 'swiper-',\n // NEW\n slideClass: 'swiper-slide',\n slideBlankClass: 'swiper-slide-blank',\n slideActiveClass: 'swiper-slide-active',\n slideVisibleClass: 'swiper-slide-visible',\n slideFullyVisibleClass: 'swiper-slide-fully-visible',\n slideNextClass: 'swiper-slide-next',\n slidePrevClass: 'swiper-slide-prev',\n wrapperClass: 'swiper-wrapper',\n lazyPreloaderClass: 'swiper-lazy-preloader',\n lazyPreloadPrevNext: 0,\n // Callbacks\n runCallbacksOnInit: true,\n // Internals\n _emitClasses: false\n};\n\nfunction moduleExtendParams(params, allModulesParams) {\n return function extendParams(obj) {\n if (obj === void 0) {\n obj = {};\n }\n const moduleParamName = Object.keys(obj)[0];\n const moduleParams = obj[moduleParamName];\n if (typeof moduleParams !== 'object' || moduleParams === null) {\n extend(allModulesParams, obj);\n return;\n }\n if (params[moduleParamName] === true) {\n params[moduleParamName] = {\n enabled: true\n };\n }\n if (moduleParamName === 'navigation' && params[moduleParamName] && params[moduleParamName].enabled && !params[moduleParamName].prevEl && !params[moduleParamName].nextEl) {\n params[moduleParamName].auto = true;\n }\n if (['pagination', 'scrollbar'].indexOf(moduleParamName) >= 0 && params[moduleParamName] && params[moduleParamName].enabled && !params[moduleParamName].el) {\n params[moduleParamName].auto = true;\n }\n if (!(moduleParamName in params && 'enabled' in moduleParams)) {\n extend(allModulesParams, obj);\n return;\n }\n if (typeof params[moduleParamName] === 'object' && !('enabled' in params[moduleParamName])) {\n params[moduleParamName].enabled = true;\n }\n if (!params[moduleParamName]) params[moduleParamName] = {\n enabled: false\n };\n extend(allModulesParams, obj);\n };\n}\n\n/* eslint no-param-reassign: \"off\" */\nconst prototypes = {\n eventsEmitter,\n update,\n translate,\n transition,\n slide,\n loop,\n grabCursor,\n events: events$1,\n breakpoints,\n checkOverflow: checkOverflow$1,\n classes\n};\nconst extendedDefaults = {};\nclass Swiper {\n constructor() {\n let el;\n let params;\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n if (args.length === 1 && args[0].constructor && Object.prototype.toString.call(args[0]).slice(8, -1) === 'Object') {\n params = args[0];\n } else {\n [el, params] = args;\n }\n if (!params) params = {};\n params = extend({}, params);\n if (el && !params.el) params.el = el;\n const document = getDocument();\n if (params.el && typeof params.el === 'string' && document.querySelectorAll(params.el).length > 1) {\n const swipers = [];\n document.querySelectorAll(params.el).forEach(containerEl => {\n const newParams = extend({}, params, {\n el: containerEl\n });\n swipers.push(new Swiper(newParams));\n });\n // eslint-disable-next-line no-constructor-return\n return swipers;\n }\n\n // Swiper Instance\n const swiper = this;\n swiper.__swiper__ = true;\n swiper.support = getSupport();\n swiper.device = getDevice({\n userAgent: params.userAgent\n });\n swiper.browser = getBrowser();\n swiper.eventsListeners = {};\n swiper.eventsAnyListeners = [];\n swiper.modules = [...swiper.__modules__];\n if (params.modules && Array.isArray(params.modules)) {\n swiper.modules.push(...params.modules);\n }\n const allModulesParams = {};\n swiper.modules.forEach(mod => {\n mod({\n params,\n swiper,\n extendParams: moduleExtendParams(params, allModulesParams),\n on: swiper.on.bind(swiper),\n once: swiper.once.bind(swiper),\n off: swiper.off.bind(swiper),\n emit: swiper.emit.bind(swiper)\n });\n });\n\n // Extend defaults with modules params\n const swiperParams = extend({}, defaults, allModulesParams);\n\n // Extend defaults with passed params\n swiper.params = extend({}, swiperParams, extendedDefaults, params);\n swiper.originalParams = extend({}, swiper.params);\n swiper.passedParams = extend({}, params);\n\n // add event listeners\n if (swiper.params && swiper.params.on) {\n Object.keys(swiper.params.on).forEach(eventName => {\n swiper.on(eventName, swiper.params.on[eventName]);\n });\n }\n if (swiper.params && swiper.params.onAny) {\n swiper.onAny(swiper.params.onAny);\n }\n\n // Extend Swiper\n Object.assign(swiper, {\n enabled: swiper.params.enabled,\n el,\n // Classes\n classNames: [],\n // Slides\n slides: [],\n slidesGrid: [],\n snapGrid: [],\n slidesSizesGrid: [],\n // isDirection\n isHorizontal() {\n return swiper.params.direction === 'horizontal';\n },\n isVertical() {\n return swiper.params.direction === 'vertical';\n },\n // Indexes\n activeIndex: 0,\n realIndex: 0,\n //\n isBeginning: true,\n isEnd: false,\n // Props\n translate: 0,\n previousTranslate: 0,\n progress: 0,\n velocity: 0,\n animating: false,\n cssOverflowAdjustment() {\n // Returns 0 unless `translate` is > 2**23\n // Should be subtracted from css values to prevent overflow\n return Math.trunc(this.translate / 2 ** 23) * 2 ** 23;\n },\n // Locks\n allowSlideNext: swiper.params.allowSlideNext,\n allowSlidePrev: swiper.params.allowSlidePrev,\n // Touch Events\n touchEventsData: {\n isTouched: undefined,\n isMoved: undefined,\n allowTouchCallbacks: undefined,\n touchStartTime: undefined,\n isScrolling: undefined,\n currentTranslate: undefined,\n startTranslate: undefined,\n allowThresholdMove: undefined,\n // Form elements to match\n focusableElements: swiper.params.focusableElements,\n // Last click time\n lastClickTime: 0,\n clickTimeout: undefined,\n // Velocities\n velocities: [],\n allowMomentumBounce: undefined,\n startMoving: undefined,\n pointerId: null,\n touchId: null\n },\n // Clicks\n allowClick: true,\n // Touches\n allowTouchMove: swiper.params.allowTouchMove,\n touches: {\n startX: 0,\n startY: 0,\n currentX: 0,\n currentY: 0,\n diff: 0\n },\n // Images\n imagesToLoad: [],\n imagesLoaded: 0\n });\n swiper.emit('_swiper');\n\n // Init\n if (swiper.params.init) {\n swiper.init();\n }\n\n // Return app instance\n // eslint-disable-next-line no-constructor-return\n return swiper;\n }\n getDirectionLabel(property) {\n if (this.isHorizontal()) {\n return property;\n }\n // prettier-ignore\n return {\n 'width': 'height',\n 'margin-top': 'margin-left',\n 'margin-bottom ': 'margin-right',\n 'margin-left': 'margin-top',\n 'margin-right': 'margin-bottom',\n 'padding-left': 'padding-top',\n 'padding-right': 'padding-bottom',\n 'marginRight': 'marginBottom'\n }[property];\n }\n getSlideIndex(slideEl) {\n const {\n slidesEl,\n params\n } = this;\n const slides = elementChildren(slidesEl, `.${params.slideClass}, swiper-slide`);\n const firstSlideIndex = elementIndex(slides[0]);\n return elementIndex(slideEl) - firstSlideIndex;\n }\n getSlideIndexByData(index) {\n return this.getSlideIndex(this.slides.filter(slideEl => slideEl.getAttribute('data-swiper-slide-index') * 1 === index)[0]);\n }\n recalcSlides() {\n const swiper = this;\n const {\n slidesEl,\n params\n } = swiper;\n swiper.slides = elementChildren(slidesEl, `.${params.slideClass}, swiper-slide`);\n }\n enable() {\n const swiper = this;\n if (swiper.enabled) return;\n swiper.enabled = true;\n if (swiper.params.grabCursor) {\n swiper.setGrabCursor();\n }\n swiper.emit('enable');\n }\n disable() {\n const swiper = this;\n if (!swiper.enabled) return;\n swiper.enabled = false;\n if (swiper.params.grabCursor) {\n swiper.unsetGrabCursor();\n }\n swiper.emit('disable');\n }\n setProgress(progress, speed) {\n const swiper = this;\n progress = Math.min(Math.max(progress, 0), 1);\n const min = swiper.minTranslate();\n const max = swiper.maxTranslate();\n const current = (max - min) * progress + min;\n swiper.translateTo(current, typeof speed === 'undefined' ? 0 : speed);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n emitContainerClasses() {\n const swiper = this;\n if (!swiper.params._emitClasses || !swiper.el) return;\n const cls = swiper.el.className.split(' ').filter(className => {\n return className.indexOf('swiper') === 0 || className.indexOf(swiper.params.containerModifierClass) === 0;\n });\n swiper.emit('_containerClasses', cls.join(' '));\n }\n getSlideClasses(slideEl) {\n const swiper = this;\n if (swiper.destroyed) return '';\n return slideEl.className.split(' ').filter(className => {\n return className.indexOf('swiper-slide') === 0 || className.indexOf(swiper.params.slideClass) === 0;\n }).join(' ');\n }\n emitSlidesClasses() {\n const swiper = this;\n if (!swiper.params._emitClasses || !swiper.el) return;\n const updates = [];\n swiper.slides.forEach(slideEl => {\n const classNames = swiper.getSlideClasses(slideEl);\n updates.push({\n slideEl,\n classNames\n });\n swiper.emit('_slideClass', slideEl, classNames);\n });\n swiper.emit('_slideClasses', updates);\n }\n slidesPerViewDynamic(view, exact) {\n if (view === void 0) {\n view = 'current';\n }\n if (exact === void 0) {\n exact = false;\n }\n const swiper = this;\n const {\n params,\n slides,\n slidesGrid,\n slidesSizesGrid,\n size: swiperSize,\n activeIndex\n } = swiper;\n let spv = 1;\n if (typeof params.slidesPerView === 'number') return params.slidesPerView;\n if (params.centeredSlides) {\n let slideSize = slides[activeIndex] ? Math.ceil(slides[activeIndex].swiperSlideSize) : 0;\n let breakLoop;\n for (let i = activeIndex + 1; i < slides.length; i += 1) {\n if (slides[i] && !breakLoop) {\n slideSize += Math.ceil(slides[i].swiperSlideSize);\n spv += 1;\n if (slideSize > swiperSize) breakLoop = true;\n }\n }\n for (let i = activeIndex - 1; i >= 0; i -= 1) {\n if (slides[i] && !breakLoop) {\n slideSize += slides[i].swiperSlideSize;\n spv += 1;\n if (slideSize > swiperSize) breakLoop = true;\n }\n }\n } else {\n // eslint-disable-next-line\n if (view === 'current') {\n for (let i = activeIndex + 1; i < slides.length; i += 1) {\n const slideInView = exact ? slidesGrid[i] + slidesSizesGrid[i] - slidesGrid[activeIndex] < swiperSize : slidesGrid[i] - slidesGrid[activeIndex] < swiperSize;\n if (slideInView) {\n spv += 1;\n }\n }\n } else {\n // previous\n for (let i = activeIndex - 1; i >= 0; i -= 1) {\n const slideInView = slidesGrid[activeIndex] - slidesGrid[i] < swiperSize;\n if (slideInView) {\n spv += 1;\n }\n }\n }\n }\n return spv;\n }\n update() {\n const swiper = this;\n if (!swiper || swiper.destroyed) return;\n const {\n snapGrid,\n params\n } = swiper;\n // Breakpoints\n if (params.breakpoints) {\n swiper.setBreakpoint();\n }\n [...swiper.el.querySelectorAll('[loading=\"lazy\"]')].forEach(imageEl => {\n if (imageEl.complete) {\n processLazyPreloader(swiper, imageEl);\n }\n });\n swiper.updateSize();\n swiper.updateSlides();\n swiper.updateProgress();\n swiper.updateSlidesClasses();\n function setTranslate() {\n const translateValue = swiper.rtlTranslate ? swiper.translate * -1 : swiper.translate;\n const newTranslate = Math.min(Math.max(translateValue, swiper.maxTranslate()), swiper.minTranslate());\n swiper.setTranslate(newTranslate);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n let translated;\n if (params.freeMode && params.freeMode.enabled && !params.cssMode) {\n setTranslate();\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n } else {\n if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !params.centeredSlides) {\n const slides = swiper.virtual && params.virtual.enabled ? swiper.virtual.slides : swiper.slides;\n translated = swiper.slideTo(slides.length - 1, 0, false, true);\n } else {\n translated = swiper.slideTo(swiper.activeIndex, 0, false, true);\n }\n if (!translated) {\n setTranslate();\n }\n }\n if (params.watchOverflow && snapGrid !== swiper.snapGrid) {\n swiper.checkOverflow();\n }\n swiper.emit('update');\n }\n changeDirection(newDirection, needUpdate) {\n if (needUpdate === void 0) {\n needUpdate = true;\n }\n const swiper = this;\n const currentDirection = swiper.params.direction;\n if (!newDirection) {\n // eslint-disable-next-line\n newDirection = currentDirection === 'horizontal' ? 'vertical' : 'horizontal';\n }\n if (newDirection === currentDirection || newDirection !== 'horizontal' && newDirection !== 'vertical') {\n return swiper;\n }\n swiper.el.classList.remove(`${swiper.params.containerModifierClass}${currentDirection}`);\n swiper.el.classList.add(`${swiper.params.containerModifierClass}${newDirection}`);\n swiper.emitContainerClasses();\n swiper.params.direction = newDirection;\n swiper.slides.forEach(slideEl => {\n if (newDirection === 'vertical') {\n slideEl.style.width = '';\n } else {\n slideEl.style.height = '';\n }\n });\n swiper.emit('changeDirection');\n if (needUpdate) swiper.update();\n return swiper;\n }\n changeLanguageDirection(direction) {\n const swiper = this;\n if (swiper.rtl && direction === 'rtl' || !swiper.rtl && direction === 'ltr') return;\n swiper.rtl = direction === 'rtl';\n swiper.rtlTranslate = swiper.params.direction === 'horizontal' && swiper.rtl;\n if (swiper.rtl) {\n swiper.el.classList.add(`${swiper.params.containerModifierClass}rtl`);\n swiper.el.dir = 'rtl';\n } else {\n swiper.el.classList.remove(`${swiper.params.containerModifierClass}rtl`);\n swiper.el.dir = 'ltr';\n }\n swiper.update();\n }\n mount(element) {\n const swiper = this;\n if (swiper.mounted) return true;\n\n // Find el\n let el = element || swiper.params.el;\n if (typeof el === 'string') {\n el = document.querySelector(el);\n }\n if (!el) {\n return false;\n }\n el.swiper = swiper;\n if (el.parentNode && el.parentNode.host && el.parentNode.host.nodeName === swiper.params.swiperElementNodeName.toUpperCase()) {\n swiper.isElement = true;\n }\n const getWrapperSelector = () => {\n return `.${(swiper.params.wrapperClass || '').trim().split(' ').join('.')}`;\n };\n const getWrapper = () => {\n if (el && el.shadowRoot && el.shadowRoot.querySelector) {\n const res = el.shadowRoot.querySelector(getWrapperSelector());\n // Children needs to return slot items\n return res;\n }\n return elementChildren(el, getWrapperSelector())[0];\n };\n // Find Wrapper\n let wrapperEl = getWrapper();\n if (!wrapperEl && swiper.params.createElements) {\n wrapperEl = createElement('div', swiper.params.wrapperClass);\n el.append(wrapperEl);\n elementChildren(el, `.${swiper.params.slideClass}`).forEach(slideEl => {\n wrapperEl.append(slideEl);\n });\n }\n Object.assign(swiper, {\n el,\n wrapperEl,\n slidesEl: swiper.isElement && !el.parentNode.host.slideSlots ? el.parentNode.host : wrapperEl,\n hostEl: swiper.isElement ? el.parentNode.host : el,\n mounted: true,\n // RTL\n rtl: el.dir.toLowerCase() === 'rtl' || elementStyle(el, 'direction') === 'rtl',\n rtlTranslate: swiper.params.direction === 'horizontal' && (el.dir.toLowerCase() === 'rtl' || elementStyle(el, 'direction') === 'rtl'),\n wrongRTL: elementStyle(wrapperEl, 'display') === '-webkit-box'\n });\n return true;\n }\n init(el) {\n const swiper = this;\n if (swiper.initialized) return swiper;\n const mounted = swiper.mount(el);\n if (mounted === false) return swiper;\n swiper.emit('beforeInit');\n\n // Set breakpoint\n if (swiper.params.breakpoints) {\n swiper.setBreakpoint();\n }\n\n // Add Classes\n swiper.addClasses();\n\n // Update size\n swiper.updateSize();\n\n // Update slides\n swiper.updateSlides();\n if (swiper.params.watchOverflow) {\n swiper.checkOverflow();\n }\n\n // Set Grab Cursor\n if (swiper.params.grabCursor && swiper.enabled) {\n swiper.setGrabCursor();\n }\n\n // Slide To Initial Slide\n if (swiper.params.loop && swiper.virtual && swiper.params.virtual.enabled) {\n swiper.slideTo(swiper.params.initialSlide + swiper.virtual.slidesBefore, 0, swiper.params.runCallbacksOnInit, false, true);\n } else {\n swiper.slideTo(swiper.params.initialSlide, 0, swiper.params.runCallbacksOnInit, false, true);\n }\n\n // Create loop\n if (swiper.params.loop) {\n swiper.loopCreate();\n }\n\n // Attach events\n swiper.attachEvents();\n const lazyElements = [...swiper.el.querySelectorAll('[loading=\"lazy\"]')];\n if (swiper.isElement) {\n lazyElements.push(...swiper.hostEl.querySelectorAll('[loading=\"lazy\"]'));\n }\n lazyElements.forEach(imageEl => {\n if (imageEl.complete) {\n processLazyPreloader(swiper, imageEl);\n } else {\n imageEl.addEventListener('load', e => {\n processLazyPreloader(swiper, e.target);\n });\n }\n });\n preload(swiper);\n\n // Init Flag\n swiper.initialized = true;\n preload(swiper);\n\n // Emit\n swiper.emit('init');\n swiper.emit('afterInit');\n return swiper;\n }\n destroy(deleteInstance, cleanStyles) {\n if (deleteInstance === void 0) {\n deleteInstance = true;\n }\n if (cleanStyles === void 0) {\n cleanStyles = true;\n }\n const swiper = this;\n const {\n params,\n el,\n wrapperEl,\n slides\n } = swiper;\n if (typeof swiper.params === 'undefined' || swiper.destroyed) {\n return null;\n }\n swiper.emit('beforeDestroy');\n\n // Init Flag\n swiper.initialized = false;\n\n // Detach events\n swiper.detachEvents();\n\n // Destroy loop\n if (params.loop) {\n swiper.loopDestroy();\n }\n\n // Cleanup styles\n if (cleanStyles) {\n swiper.removeClasses();\n if (el && typeof el !== 'string') {\n el.removeAttribute('style');\n }\n if (wrapperEl) {\n wrapperEl.removeAttribute('style');\n }\n if (slides && slides.length) {\n slides.forEach(slideEl => {\n slideEl.classList.remove(params.slideVisibleClass, params.slideFullyVisibleClass, params.slideActiveClass, params.slideNextClass, params.slidePrevClass);\n slideEl.removeAttribute('style');\n slideEl.removeAttribute('data-swiper-slide-index');\n });\n }\n }\n swiper.emit('destroy');\n\n // Detach emitter events\n Object.keys(swiper.eventsListeners).forEach(eventName => {\n swiper.off(eventName);\n });\n if (deleteInstance !== false) {\n if (swiper.el && typeof swiper.el !== 'string') {\n swiper.el.swiper = null;\n }\n deleteProps(swiper);\n }\n swiper.destroyed = true;\n return null;\n }\n static extendDefaults(newDefaults) {\n extend(extendedDefaults, newDefaults);\n }\n static get extendedDefaults() {\n return extendedDefaults;\n }\n static get defaults() {\n return defaults;\n }\n static installModule(mod) {\n if (!Swiper.prototype.__modules__) Swiper.prototype.__modules__ = [];\n const modules = Swiper.prototype.__modules__;\n if (typeof mod === 'function' && modules.indexOf(mod) < 0) {\n modules.push(mod);\n }\n }\n static use(module) {\n if (Array.isArray(module)) {\n module.forEach(m => Swiper.installModule(m));\n return Swiper;\n }\n Swiper.installModule(module);\n return Swiper;\n }\n}\nObject.keys(prototypes).forEach(prototypeGroup => {\n Object.keys(prototypes[prototypeGroup]).forEach(protoMethod => {\n Swiper.prototype[protoMethod] = prototypes[prototypeGroup][protoMethod];\n });\n});\nSwiper.use([Resize, Observer]);\n\nexport { Swiper as S, defaults as d };\n","import { e as elementChildren, c as createElement } from './utils.mjs';\n\nfunction createElementIfNotDefined(swiper, originalParams, params, checkProps) {\n if (swiper.params.createElements) {\n Object.keys(checkProps).forEach(key => {\n if (!params[key] && params.auto === true) {\n let element = elementChildren(swiper.el, `.${checkProps[key]}`)[0];\n if (!element) {\n element = createElement('div', checkProps[key]);\n element.className = checkProps[key];\n swiper.el.append(element);\n }\n params[key] = element;\n originalParams[key] = element;\n }\n });\n }\n return params;\n}\n\nexport { createElementIfNotDefined as c };\n","import { c as createElementIfNotDefined } from '../shared/create-element-if-not-defined.mjs';\nimport { m as makeElementsArray } from '../shared/utils.mjs';\n\nfunction Navigation(_ref) {\n let {\n swiper,\n extendParams,\n on,\n emit\n } = _ref;\n extendParams({\n navigation: {\n nextEl: null,\n prevEl: null,\n hideOnClick: false,\n disabledClass: 'swiper-button-disabled',\n hiddenClass: 'swiper-button-hidden',\n lockClass: 'swiper-button-lock',\n navigationDisabledClass: 'swiper-navigation-disabled'\n }\n });\n swiper.navigation = {\n nextEl: null,\n prevEl: null\n };\n function getEl(el) {\n let res;\n if (el && typeof el === 'string' && swiper.isElement) {\n res = swiper.el.querySelector(el);\n if (res) return res;\n }\n if (el) {\n if (typeof el === 'string') res = [...document.querySelectorAll(el)];\n if (swiper.params.uniqueNavElements && typeof el === 'string' && res && res.length > 1 && swiper.el.querySelectorAll(el).length === 1) {\n res = swiper.el.querySelector(el);\n } else if (res && res.length === 1) {\n res = res[0];\n }\n }\n if (el && !res) return el;\n // if (Array.isArray(res) && res.length === 1) res = res[0];\n return res;\n }\n function toggleEl(el, disabled) {\n const params = swiper.params.navigation;\n el = makeElementsArray(el);\n el.forEach(subEl => {\n if (subEl) {\n subEl.classList[disabled ? 'add' : 'remove'](...params.disabledClass.split(' '));\n if (subEl.tagName === 'BUTTON') subEl.disabled = disabled;\n if (swiper.params.watchOverflow && swiper.enabled) {\n subEl.classList[swiper.isLocked ? 'add' : 'remove'](params.lockClass);\n }\n }\n });\n }\n function update() {\n // Update Navigation Buttons\n const {\n nextEl,\n prevEl\n } = swiper.navigation;\n if (swiper.params.loop) {\n toggleEl(prevEl, false);\n toggleEl(nextEl, false);\n return;\n }\n toggleEl(prevEl, swiper.isBeginning && !swiper.params.rewind);\n toggleEl(nextEl, swiper.isEnd && !swiper.params.rewind);\n }\n function onPrevClick(e) {\n e.preventDefault();\n if (swiper.isBeginning && !swiper.params.loop && !swiper.params.rewind) return;\n swiper.slidePrev();\n emit('navigationPrev');\n }\n function onNextClick(e) {\n e.preventDefault();\n if (swiper.isEnd && !swiper.params.loop && !swiper.params.rewind) return;\n swiper.slideNext();\n emit('navigationNext');\n }\n function init() {\n const params = swiper.params.navigation;\n swiper.params.navigation = createElementIfNotDefined(swiper, swiper.originalParams.navigation, swiper.params.navigation, {\n nextEl: 'swiper-button-next',\n prevEl: 'swiper-button-prev'\n });\n if (!(params.nextEl || params.prevEl)) return;\n let nextEl = getEl(params.nextEl);\n let prevEl = getEl(params.prevEl);\n Object.assign(swiper.navigation, {\n nextEl,\n prevEl\n });\n nextEl = makeElementsArray(nextEl);\n prevEl = makeElementsArray(prevEl);\n const initButton = (el, dir) => {\n if (el) {\n el.addEventListener('click', dir === 'next' ? onNextClick : onPrevClick);\n }\n if (!swiper.enabled && el) {\n el.classList.add(...params.lockClass.split(' '));\n }\n };\n nextEl.forEach(el => initButton(el, 'next'));\n prevEl.forEach(el => initButton(el, 'prev'));\n }\n function destroy() {\n let {\n nextEl,\n prevEl\n } = swiper.navigation;\n nextEl = makeElementsArray(nextEl);\n prevEl = makeElementsArray(prevEl);\n const destroyButton = (el, dir) => {\n el.removeEventListener('click', dir === 'next' ? onNextClick : onPrevClick);\n el.classList.remove(...swiper.params.navigation.disabledClass.split(' '));\n };\n nextEl.forEach(el => destroyButton(el, 'next'));\n prevEl.forEach(el => destroyButton(el, 'prev'));\n }\n on('init', () => {\n if (swiper.params.navigation.enabled === false) {\n // eslint-disable-next-line\n disable();\n } else {\n init();\n update();\n }\n });\n on('toEdge fromEdge lock unlock', () => {\n update();\n });\n on('destroy', () => {\n destroy();\n });\n on('enable disable', () => {\n let {\n nextEl,\n prevEl\n } = swiper.navigation;\n nextEl = makeElementsArray(nextEl);\n prevEl = makeElementsArray(prevEl);\n if (swiper.enabled) {\n update();\n return;\n }\n [...nextEl, ...prevEl].filter(el => !!el).forEach(el => el.classList.add(swiper.params.navigation.lockClass));\n });\n on('click', (_s, e) => {\n let {\n nextEl,\n prevEl\n } = swiper.navigation;\n nextEl = makeElementsArray(nextEl);\n prevEl = makeElementsArray(prevEl);\n const targetEl = e.target;\n let targetIsButton = prevEl.includes(targetEl) || nextEl.includes(targetEl);\n if (swiper.isElement && !targetIsButton) {\n const path = e.path || e.composedPath && e.composedPath();\n if (path) {\n targetIsButton = path.find(pathEl => nextEl.includes(pathEl) || prevEl.includes(pathEl));\n }\n }\n if (swiper.params.navigation.hideOnClick && !targetIsButton) {\n if (swiper.pagination && swiper.params.pagination && swiper.params.pagination.clickable && (swiper.pagination.el === targetEl || swiper.pagination.el.contains(targetEl))) return;\n let isHidden;\n if (nextEl.length) {\n isHidden = nextEl[0].classList.contains(swiper.params.navigation.hiddenClass);\n } else if (prevEl.length) {\n isHidden = prevEl[0].classList.contains(swiper.params.navigation.hiddenClass);\n }\n if (isHidden === true) {\n emit('navigationShow');\n } else {\n emit('navigationHide');\n }\n [...nextEl, ...prevEl].filter(el => !!el).forEach(el => el.classList.toggle(swiper.params.navigation.hiddenClass));\n }\n });\n const enable = () => {\n swiper.el.classList.remove(...swiper.params.navigation.navigationDisabledClass.split(' '));\n init();\n update();\n };\n const disable = () => {\n swiper.el.classList.add(...swiper.params.navigation.navigationDisabledClass.split(' '));\n destroy();\n };\n Object.assign(swiper.navigation, {\n enable,\n disable,\n update,\n init,\n destroy\n });\n}\n\nexport { Navigation as default };\n","function classesToSelector(classes) {\n if (classes === void 0) {\n classes = '';\n }\n return `.${classes.trim().replace(/([\\.:!+\\/])/g, '\\\\$1') // eslint-disable-line\n .replace(/ /g, '.')}`;\n}\n\nexport { classesToSelector as c };\n","import { c as classesToSelector } from '../shared/classes-to-selector.mjs';\nimport { c as createElementIfNotDefined } from '../shared/create-element-if-not-defined.mjs';\nimport { m as makeElementsArray, f as elementOuterSize, h as elementIndex, a as elementParents } from '../shared/utils.mjs';\n\nfunction Pagination(_ref) {\n let {\n swiper,\n extendParams,\n on,\n emit\n } = _ref;\n const pfx = 'swiper-pagination';\n extendParams({\n pagination: {\n el: null,\n bulletElement: 'span',\n clickable: false,\n hideOnClick: false,\n renderBullet: null,\n renderProgressbar: null,\n renderFraction: null,\n renderCustom: null,\n progressbarOpposite: false,\n type: 'bullets',\n // 'bullets' or 'progressbar' or 'fraction' or 'custom'\n dynamicBullets: false,\n dynamicMainBullets: 1,\n formatFractionCurrent: number => number,\n formatFractionTotal: number => number,\n bulletClass: `${pfx}-bullet`,\n bulletActiveClass: `${pfx}-bullet-active`,\n modifierClass: `${pfx}-`,\n currentClass: `${pfx}-current`,\n totalClass: `${pfx}-total`,\n hiddenClass: `${pfx}-hidden`,\n progressbarFillClass: `${pfx}-progressbar-fill`,\n progressbarOppositeClass: `${pfx}-progressbar-opposite`,\n clickableClass: `${pfx}-clickable`,\n lockClass: `${pfx}-lock`,\n horizontalClass: `${pfx}-horizontal`,\n verticalClass: `${pfx}-vertical`,\n paginationDisabledClass: `${pfx}-disabled`\n }\n });\n swiper.pagination = {\n el: null,\n bullets: []\n };\n let bulletSize;\n let dynamicBulletIndex = 0;\n function isPaginationDisabled() {\n return !swiper.params.pagination.el || !swiper.pagination.el || Array.isArray(swiper.pagination.el) && swiper.pagination.el.length === 0;\n }\n function setSideBullets(bulletEl, position) {\n const {\n bulletActiveClass\n } = swiper.params.pagination;\n if (!bulletEl) return;\n bulletEl = bulletEl[`${position === 'prev' ? 'previous' : 'next'}ElementSibling`];\n if (bulletEl) {\n bulletEl.classList.add(`${bulletActiveClass}-${position}`);\n bulletEl = bulletEl[`${position === 'prev' ? 'previous' : 'next'}ElementSibling`];\n if (bulletEl) {\n bulletEl.classList.add(`${bulletActiveClass}-${position}-${position}`);\n }\n }\n }\n function onBulletClick(e) {\n const bulletEl = e.target.closest(classesToSelector(swiper.params.pagination.bulletClass));\n if (!bulletEl) {\n return;\n }\n e.preventDefault();\n const index = elementIndex(bulletEl) * swiper.params.slidesPerGroup;\n if (swiper.params.loop) {\n if (swiper.realIndex === index) return;\n swiper.slideToLoop(index);\n } else {\n swiper.slideTo(index);\n }\n }\n function update() {\n // Render || Update Pagination bullets/items\n const rtl = swiper.rtl;\n const params = swiper.params.pagination;\n if (isPaginationDisabled()) return;\n let el = swiper.pagination.el;\n el = makeElementsArray(el);\n // Current/Total\n let current;\n let previousIndex;\n const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;\n const total = swiper.params.loop ? Math.ceil(slidesLength / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\n if (swiper.params.loop) {\n previousIndex = swiper.previousRealIndex || 0;\n current = swiper.params.slidesPerGroup > 1 ? Math.floor(swiper.realIndex / swiper.params.slidesPerGroup) : swiper.realIndex;\n } else if (typeof swiper.snapIndex !== 'undefined') {\n current = swiper.snapIndex;\n previousIndex = swiper.previousSnapIndex;\n } else {\n previousIndex = swiper.previousIndex || 0;\n current = swiper.activeIndex || 0;\n }\n // Types\n if (params.type === 'bullets' && swiper.pagination.bullets && swiper.pagination.bullets.length > 0) {\n const bullets = swiper.pagination.bullets;\n let firstIndex;\n let lastIndex;\n let midIndex;\n if (params.dynamicBullets) {\n bulletSize = elementOuterSize(bullets[0], swiper.isHorizontal() ? 'width' : 'height', true);\n el.forEach(subEl => {\n subEl.style[swiper.isHorizontal() ? 'width' : 'height'] = `${bulletSize * (params.dynamicMainBullets + 4)}px`;\n });\n if (params.dynamicMainBullets > 1 && previousIndex !== undefined) {\n dynamicBulletIndex += current - (previousIndex || 0);\n if (dynamicBulletIndex > params.dynamicMainBullets - 1) {\n dynamicBulletIndex = params.dynamicMainBullets - 1;\n } else if (dynamicBulletIndex < 0) {\n dynamicBulletIndex = 0;\n }\n }\n firstIndex = Math.max(current - dynamicBulletIndex, 0);\n lastIndex = firstIndex + (Math.min(bullets.length, params.dynamicMainBullets) - 1);\n midIndex = (lastIndex + firstIndex) / 2;\n }\n bullets.forEach(bulletEl => {\n const classesToRemove = [...['', '-next', '-next-next', '-prev', '-prev-prev', '-main'].map(suffix => `${params.bulletActiveClass}${suffix}`)].map(s => typeof s === 'string' && s.includes(' ') ? s.split(' ') : s).flat();\n bulletEl.classList.remove(...classesToRemove);\n });\n if (el.length > 1) {\n bullets.forEach(bullet => {\n const bulletIndex = elementIndex(bullet);\n if (bulletIndex === current) {\n bullet.classList.add(...params.bulletActiveClass.split(' '));\n } else if (swiper.isElement) {\n bullet.setAttribute('part', 'bullet');\n }\n if (params.dynamicBullets) {\n if (bulletIndex >= firstIndex && bulletIndex <= lastIndex) {\n bullet.classList.add(...`${params.bulletActiveClass}-main`.split(' '));\n }\n if (bulletIndex === firstIndex) {\n setSideBullets(bullet, 'prev');\n }\n if (bulletIndex === lastIndex) {\n setSideBullets(bullet, 'next');\n }\n }\n });\n } else {\n const bullet = bullets[current];\n if (bullet) {\n bullet.classList.add(...params.bulletActiveClass.split(' '));\n }\n if (swiper.isElement) {\n bullets.forEach((bulletEl, bulletIndex) => {\n bulletEl.setAttribute('part', bulletIndex === current ? 'bullet-active' : 'bullet');\n });\n }\n if (params.dynamicBullets) {\n const firstDisplayedBullet = bullets[firstIndex];\n const lastDisplayedBullet = bullets[lastIndex];\n for (let i = firstIndex; i <= lastIndex; i += 1) {\n if (bullets[i]) {\n bullets[i].classList.add(...`${params.bulletActiveClass}-main`.split(' '));\n }\n }\n setSideBullets(firstDisplayedBullet, 'prev');\n setSideBullets(lastDisplayedBullet, 'next');\n }\n }\n if (params.dynamicBullets) {\n const dynamicBulletsLength = Math.min(bullets.length, params.dynamicMainBullets + 4);\n const bulletsOffset = (bulletSize * dynamicBulletsLength - bulletSize) / 2 - midIndex * bulletSize;\n const offsetProp = rtl ? 'right' : 'left';\n bullets.forEach(bullet => {\n bullet.style[swiper.isHorizontal() ? offsetProp : 'top'] = `${bulletsOffset}px`;\n });\n }\n }\n el.forEach((subEl, subElIndex) => {\n if (params.type === 'fraction') {\n subEl.querySelectorAll(classesToSelector(params.currentClass)).forEach(fractionEl => {\n fractionEl.textContent = params.formatFractionCurrent(current + 1);\n });\n subEl.querySelectorAll(classesToSelector(params.totalClass)).forEach(totalEl => {\n totalEl.textContent = params.formatFractionTotal(total);\n });\n }\n if (params.type === 'progressbar') {\n let progressbarDirection;\n if (params.progressbarOpposite) {\n progressbarDirection = swiper.isHorizontal() ? 'vertical' : 'horizontal';\n } else {\n progressbarDirection = swiper.isHorizontal() ? 'horizontal' : 'vertical';\n }\n const scale = (current + 1) / total;\n let scaleX = 1;\n let scaleY = 1;\n if (progressbarDirection === 'horizontal') {\n scaleX = scale;\n } else {\n scaleY = scale;\n }\n subEl.querySelectorAll(classesToSelector(params.progressbarFillClass)).forEach(progressEl => {\n progressEl.style.transform = `translate3d(0,0,0) scaleX(${scaleX}) scaleY(${scaleY})`;\n progressEl.style.transitionDuration = `${swiper.params.speed}ms`;\n });\n }\n if (params.type === 'custom' && params.renderCustom) {\n subEl.innerHTML = params.renderCustom(swiper, current + 1, total);\n if (subElIndex === 0) emit('paginationRender', subEl);\n } else {\n if (subElIndex === 0) emit('paginationRender', subEl);\n emit('paginationUpdate', subEl);\n }\n if (swiper.params.watchOverflow && swiper.enabled) {\n subEl.classList[swiper.isLocked ? 'add' : 'remove'](params.lockClass);\n }\n });\n }\n function render() {\n // Render Container\n const params = swiper.params.pagination;\n if (isPaginationDisabled()) return;\n const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.grid && swiper.params.grid.rows > 1 ? swiper.slides.length / Math.ceil(swiper.params.grid.rows) : swiper.slides.length;\n let el = swiper.pagination.el;\n el = makeElementsArray(el);\n let paginationHTML = '';\n if (params.type === 'bullets') {\n let numberOfBullets = swiper.params.loop ? Math.ceil(slidesLength / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\n if (swiper.params.freeMode && swiper.params.freeMode.enabled && numberOfBullets > slidesLength) {\n numberOfBullets = slidesLength;\n }\n for (let i = 0; i < numberOfBullets; i += 1) {\n if (params.renderBullet) {\n paginationHTML += params.renderBullet.call(swiper, i, params.bulletClass);\n } else {\n // prettier-ignore\n paginationHTML += `<${params.bulletElement} ${swiper.isElement ? 'part=\"bullet\"' : ''} class=\"${params.bulletClass}\">`;\n }\n }\n }\n if (params.type === 'fraction') {\n if (params.renderFraction) {\n paginationHTML = params.renderFraction.call(swiper, params.currentClass, params.totalClass);\n } else {\n paginationHTML = `` + ' / ' + ``;\n }\n }\n if (params.type === 'progressbar') {\n if (params.renderProgressbar) {\n paginationHTML = params.renderProgressbar.call(swiper, params.progressbarFillClass);\n } else {\n paginationHTML = ``;\n }\n }\n swiper.pagination.bullets = [];\n el.forEach(subEl => {\n if (params.type !== 'custom') {\n subEl.innerHTML = paginationHTML || '';\n }\n if (params.type === 'bullets') {\n swiper.pagination.bullets.push(...subEl.querySelectorAll(classesToSelector(params.bulletClass)));\n }\n });\n if (params.type !== 'custom') {\n emit('paginationRender', el[0]);\n }\n }\n function init() {\n swiper.params.pagination = createElementIfNotDefined(swiper, swiper.originalParams.pagination, swiper.params.pagination, {\n el: 'swiper-pagination'\n });\n const params = swiper.params.pagination;\n if (!params.el) return;\n let el;\n if (typeof params.el === 'string' && swiper.isElement) {\n el = swiper.el.querySelector(params.el);\n }\n if (!el && typeof params.el === 'string') {\n el = [...document.querySelectorAll(params.el)];\n }\n if (!el) {\n el = params.el;\n }\n if (!el || el.length === 0) return;\n if (swiper.params.uniqueNavElements && typeof params.el === 'string' && Array.isArray(el) && el.length > 1) {\n el = [...swiper.el.querySelectorAll(params.el)];\n // check if it belongs to another nested Swiper\n if (el.length > 1) {\n el = el.filter(subEl => {\n if (elementParents(subEl, '.swiper')[0] !== swiper.el) return false;\n return true;\n })[0];\n }\n }\n if (Array.isArray(el) && el.length === 1) el = el[0];\n Object.assign(swiper.pagination, {\n el\n });\n el = makeElementsArray(el);\n el.forEach(subEl => {\n if (params.type === 'bullets' && params.clickable) {\n subEl.classList.add(...(params.clickableClass || '').split(' '));\n }\n subEl.classList.add(params.modifierClass + params.type);\n subEl.classList.add(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n if (params.type === 'bullets' && params.dynamicBullets) {\n subEl.classList.add(`${params.modifierClass}${params.type}-dynamic`);\n dynamicBulletIndex = 0;\n if (params.dynamicMainBullets < 1) {\n params.dynamicMainBullets = 1;\n }\n }\n if (params.type === 'progressbar' && params.progressbarOpposite) {\n subEl.classList.add(params.progressbarOppositeClass);\n }\n if (params.clickable) {\n subEl.addEventListener('click', onBulletClick);\n }\n if (!swiper.enabled) {\n subEl.classList.add(params.lockClass);\n }\n });\n }\n function destroy() {\n const params = swiper.params.pagination;\n if (isPaginationDisabled()) return;\n let el = swiper.pagination.el;\n if (el) {\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.classList.remove(params.hiddenClass);\n subEl.classList.remove(params.modifierClass + params.type);\n subEl.classList.remove(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n if (params.clickable) {\n subEl.classList.remove(...(params.clickableClass || '').split(' '));\n subEl.removeEventListener('click', onBulletClick);\n }\n });\n }\n if (swiper.pagination.bullets) swiper.pagination.bullets.forEach(subEl => subEl.classList.remove(...params.bulletActiveClass.split(' ')));\n }\n on('changeDirection', () => {\n if (!swiper.pagination || !swiper.pagination.el) return;\n const params = swiper.params.pagination;\n let {\n el\n } = swiper.pagination;\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.classList.remove(params.horizontalClass, params.verticalClass);\n subEl.classList.add(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n });\n });\n on('init', () => {\n if (swiper.params.pagination.enabled === false) {\n // eslint-disable-next-line\n disable();\n } else {\n init();\n render();\n update();\n }\n });\n on('activeIndexChange', () => {\n if (typeof swiper.snapIndex === 'undefined') {\n update();\n }\n });\n on('snapIndexChange', () => {\n update();\n });\n on('snapGridLengthChange', () => {\n render();\n update();\n });\n on('destroy', () => {\n destroy();\n });\n on('enable disable', () => {\n let {\n el\n } = swiper.pagination;\n if (el) {\n el = makeElementsArray(el);\n el.forEach(subEl => subEl.classList[swiper.enabled ? 'remove' : 'add'](swiper.params.pagination.lockClass));\n }\n });\n on('lock unlock', () => {\n update();\n });\n on('click', (_s, e) => {\n const targetEl = e.target;\n const el = makeElementsArray(swiper.pagination.el);\n if (swiper.params.pagination.el && swiper.params.pagination.hideOnClick && el && el.length > 0 && !targetEl.classList.contains(swiper.params.pagination.bulletClass)) {\n if (swiper.navigation && (swiper.navigation.nextEl && targetEl === swiper.navigation.nextEl || swiper.navigation.prevEl && targetEl === swiper.navigation.prevEl)) return;\n const isHidden = el[0].classList.contains(swiper.params.pagination.hiddenClass);\n if (isHidden === true) {\n emit('paginationShow');\n } else {\n emit('paginationHide');\n }\n el.forEach(subEl => subEl.classList.toggle(swiper.params.pagination.hiddenClass));\n }\n });\n const enable = () => {\n swiper.el.classList.remove(swiper.params.pagination.paginationDisabledClass);\n let {\n el\n } = swiper.pagination;\n if (el) {\n el = makeElementsArray(el);\n el.forEach(subEl => subEl.classList.remove(swiper.params.pagination.paginationDisabledClass));\n }\n init();\n render();\n update();\n };\n const disable = () => {\n swiper.el.classList.add(swiper.params.pagination.paginationDisabledClass);\n let {\n el\n } = swiper.pagination;\n if (el) {\n el = makeElementsArray(el);\n el.forEach(subEl => subEl.classList.add(swiper.params.pagination.paginationDisabledClass));\n }\n destroy();\n };\n Object.assign(swiper.pagination, {\n enable,\n disable,\n render,\n update,\n init,\n destroy\n });\n}\n\nexport { Pagination as default };\n","import { a as getWindow } from '../shared/ssr-window.esm.mjs';\nimport { e as elementChildren, a as elementParents, b as elementOffset, j as getTranslate } from '../shared/utils.mjs';\n\nfunction Zoom(_ref) {\n let {\n swiper,\n extendParams,\n on,\n emit\n } = _ref;\n const window = getWindow();\n extendParams({\n zoom: {\n enabled: false,\n limitToOriginalSize: false,\n maxRatio: 3,\n minRatio: 1,\n toggle: true,\n containerClass: 'swiper-zoom-container',\n zoomedSlideClass: 'swiper-slide-zoomed'\n }\n });\n swiper.zoom = {\n enabled: false\n };\n let currentScale = 1;\n let isScaling = false;\n let fakeGestureTouched;\n let fakeGestureMoved;\n const evCache = [];\n const gesture = {\n originX: 0,\n originY: 0,\n slideEl: undefined,\n slideWidth: undefined,\n slideHeight: undefined,\n imageEl: undefined,\n imageWrapEl: undefined,\n maxRatio: 3\n };\n const image = {\n isTouched: undefined,\n isMoved: undefined,\n currentX: undefined,\n currentY: undefined,\n minX: undefined,\n minY: undefined,\n maxX: undefined,\n maxY: undefined,\n width: undefined,\n height: undefined,\n startX: undefined,\n startY: undefined,\n touchesStart: {},\n touchesCurrent: {}\n };\n const velocity = {\n x: undefined,\n y: undefined,\n prevPositionX: undefined,\n prevPositionY: undefined,\n prevTime: undefined\n };\n let scale = 1;\n Object.defineProperty(swiper.zoom, 'scale', {\n get() {\n return scale;\n },\n set(value) {\n if (scale !== value) {\n const imageEl = gesture.imageEl;\n const slideEl = gesture.slideEl;\n emit('zoomChange', value, imageEl, slideEl);\n }\n scale = value;\n }\n });\n function getDistanceBetweenTouches() {\n if (evCache.length < 2) return 1;\n const x1 = evCache[0].pageX;\n const y1 = evCache[0].pageY;\n const x2 = evCache[1].pageX;\n const y2 = evCache[1].pageY;\n const distance = Math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2);\n return distance;\n }\n function getMaxRatio() {\n const params = swiper.params.zoom;\n const maxRatio = gesture.imageWrapEl.getAttribute('data-swiper-zoom') || params.maxRatio;\n if (params.limitToOriginalSize && gesture.imageEl && gesture.imageEl.naturalWidth) {\n const imageMaxRatio = gesture.imageEl.naturalWidth / gesture.imageEl.offsetWidth;\n return Math.min(imageMaxRatio, maxRatio);\n }\n return maxRatio;\n }\n function getScaleOrigin() {\n if (evCache.length < 2) return {\n x: null,\n y: null\n };\n const box = gesture.imageEl.getBoundingClientRect();\n return [(evCache[0].pageX + (evCache[1].pageX - evCache[0].pageX) / 2 - box.x - window.scrollX) / currentScale, (evCache[0].pageY + (evCache[1].pageY - evCache[0].pageY) / 2 - box.y - window.scrollY) / currentScale];\n }\n function getSlideSelector() {\n return swiper.isElement ? `swiper-slide` : `.${swiper.params.slideClass}`;\n }\n function eventWithinSlide(e) {\n const slideSelector = getSlideSelector();\n if (e.target.matches(slideSelector)) return true;\n if (swiper.slides.filter(slideEl => slideEl.contains(e.target)).length > 0) return true;\n return false;\n }\n function eventWithinZoomContainer(e) {\n const selector = `.${swiper.params.zoom.containerClass}`;\n if (e.target.matches(selector)) return true;\n if ([...swiper.hostEl.querySelectorAll(selector)].filter(containerEl => containerEl.contains(e.target)).length > 0) return true;\n return false;\n }\n\n // Events\n function onGestureStart(e) {\n if (e.pointerType === 'mouse') {\n evCache.splice(0, evCache.length);\n }\n if (!eventWithinSlide(e)) return;\n const params = swiper.params.zoom;\n fakeGestureTouched = false;\n fakeGestureMoved = false;\n evCache.push(e);\n if (evCache.length < 2) {\n return;\n }\n fakeGestureTouched = true;\n gesture.scaleStart = getDistanceBetweenTouches();\n if (!gesture.slideEl) {\n gesture.slideEl = e.target.closest(`.${swiper.params.slideClass}, swiper-slide`);\n if (!gesture.slideEl) gesture.slideEl = swiper.slides[swiper.activeIndex];\n let imageEl = gesture.slideEl.querySelector(`.${params.containerClass}`);\n if (imageEl) {\n imageEl = imageEl.querySelectorAll('picture, img, svg, canvas, .swiper-zoom-target')[0];\n }\n gesture.imageEl = imageEl;\n if (imageEl) {\n gesture.imageWrapEl = elementParents(gesture.imageEl, `.${params.containerClass}`)[0];\n } else {\n gesture.imageWrapEl = undefined;\n }\n if (!gesture.imageWrapEl) {\n gesture.imageEl = undefined;\n return;\n }\n gesture.maxRatio = getMaxRatio();\n }\n if (gesture.imageEl) {\n const [originX, originY] = getScaleOrigin();\n gesture.originX = originX;\n gesture.originY = originY;\n gesture.imageEl.style.transitionDuration = '0ms';\n }\n isScaling = true;\n }\n function onGestureChange(e) {\n if (!eventWithinSlide(e)) return;\n const params = swiper.params.zoom;\n const zoom = swiper.zoom;\n const pointerIndex = evCache.findIndex(cachedEv => cachedEv.pointerId === e.pointerId);\n if (pointerIndex >= 0) evCache[pointerIndex] = e;\n if (evCache.length < 2) {\n return;\n }\n fakeGestureMoved = true;\n gesture.scaleMove = getDistanceBetweenTouches();\n if (!gesture.imageEl) {\n return;\n }\n zoom.scale = gesture.scaleMove / gesture.scaleStart * currentScale;\n if (zoom.scale > gesture.maxRatio) {\n zoom.scale = gesture.maxRatio - 1 + (zoom.scale - gesture.maxRatio + 1) ** 0.5;\n }\n if (zoom.scale < params.minRatio) {\n zoom.scale = params.minRatio + 1 - (params.minRatio - zoom.scale + 1) ** 0.5;\n }\n gesture.imageEl.style.transform = `translate3d(0,0,0) scale(${zoom.scale})`;\n }\n function onGestureEnd(e) {\n if (!eventWithinSlide(e)) return;\n if (e.pointerType === 'mouse' && e.type === 'pointerout') return;\n const params = swiper.params.zoom;\n const zoom = swiper.zoom;\n const pointerIndex = evCache.findIndex(cachedEv => cachedEv.pointerId === e.pointerId);\n if (pointerIndex >= 0) evCache.splice(pointerIndex, 1);\n if (!fakeGestureTouched || !fakeGestureMoved) {\n return;\n }\n fakeGestureTouched = false;\n fakeGestureMoved = false;\n if (!gesture.imageEl) return;\n zoom.scale = Math.max(Math.min(zoom.scale, gesture.maxRatio), params.minRatio);\n gesture.imageEl.style.transitionDuration = `${swiper.params.speed}ms`;\n gesture.imageEl.style.transform = `translate3d(0,0,0) scale(${zoom.scale})`;\n currentScale = zoom.scale;\n isScaling = false;\n if (zoom.scale > 1 && gesture.slideEl) {\n gesture.slideEl.classList.add(`${params.zoomedSlideClass}`);\n } else if (zoom.scale <= 1 && gesture.slideEl) {\n gesture.slideEl.classList.remove(`${params.zoomedSlideClass}`);\n }\n if (zoom.scale === 1) {\n gesture.originX = 0;\n gesture.originY = 0;\n gesture.slideEl = undefined;\n }\n }\n let allowTouchMoveTimeout;\n function allowTouchMove() {\n swiper.touchEventsData.preventTouchMoveFromPointerMove = false;\n }\n function preventTouchMove() {\n clearTimeout(allowTouchMoveTimeout);\n swiper.touchEventsData.preventTouchMoveFromPointerMove = true;\n allowTouchMoveTimeout = setTimeout(() => {\n allowTouchMove();\n });\n }\n function onTouchStart(e) {\n const device = swiper.device;\n if (!gesture.imageEl) return;\n if (image.isTouched) return;\n if (device.android && e.cancelable) e.preventDefault();\n image.isTouched = true;\n const event = evCache.length > 0 ? evCache[0] : e;\n image.touchesStart.x = event.pageX;\n image.touchesStart.y = event.pageY;\n }\n function onTouchMove(e) {\n if (!eventWithinSlide(e) || !eventWithinZoomContainer(e)) {\n return;\n }\n const zoom = swiper.zoom;\n if (!gesture.imageEl) {\n return;\n }\n if (!image.isTouched || !gesture.slideEl) {\n return;\n }\n if (!image.isMoved) {\n image.width = gesture.imageEl.offsetWidth || gesture.imageEl.clientWidth;\n image.height = gesture.imageEl.offsetHeight || gesture.imageEl.clientHeight;\n image.startX = getTranslate(gesture.imageWrapEl, 'x') || 0;\n image.startY = getTranslate(gesture.imageWrapEl, 'y') || 0;\n gesture.slideWidth = gesture.slideEl.offsetWidth;\n gesture.slideHeight = gesture.slideEl.offsetHeight;\n gesture.imageWrapEl.style.transitionDuration = '0ms';\n }\n // Define if we need image drag\n const scaledWidth = image.width * zoom.scale;\n const scaledHeight = image.height * zoom.scale;\n image.minX = Math.min(gesture.slideWidth / 2 - scaledWidth / 2, 0);\n image.maxX = -image.minX;\n image.minY = Math.min(gesture.slideHeight / 2 - scaledHeight / 2, 0);\n image.maxY = -image.minY;\n image.touchesCurrent.x = evCache.length > 0 ? evCache[0].pageX : e.pageX;\n image.touchesCurrent.y = evCache.length > 0 ? evCache[0].pageY : e.pageY;\n const touchesDiff = Math.max(Math.abs(image.touchesCurrent.x - image.touchesStart.x), Math.abs(image.touchesCurrent.y - image.touchesStart.y));\n if (touchesDiff > 5) {\n swiper.allowClick = false;\n }\n if (!image.isMoved && !isScaling) {\n if (swiper.isHorizontal() && (Math.floor(image.minX) === Math.floor(image.startX) && image.touchesCurrent.x < image.touchesStart.x || Math.floor(image.maxX) === Math.floor(image.startX) && image.touchesCurrent.x > image.touchesStart.x)) {\n image.isTouched = false;\n allowTouchMove();\n return;\n }\n if (!swiper.isHorizontal() && (Math.floor(image.minY) === Math.floor(image.startY) && image.touchesCurrent.y < image.touchesStart.y || Math.floor(image.maxY) === Math.floor(image.startY) && image.touchesCurrent.y > image.touchesStart.y)) {\n image.isTouched = false;\n allowTouchMove();\n return;\n }\n }\n if (e.cancelable) {\n e.preventDefault();\n }\n e.stopPropagation();\n preventTouchMove();\n image.isMoved = true;\n const scaleRatio = (zoom.scale - currentScale) / (gesture.maxRatio - swiper.params.zoom.minRatio);\n const {\n originX,\n originY\n } = gesture;\n image.currentX = image.touchesCurrent.x - image.touchesStart.x + image.startX + scaleRatio * (image.width - originX * 2);\n image.currentY = image.touchesCurrent.y - image.touchesStart.y + image.startY + scaleRatio * (image.height - originY * 2);\n if (image.currentX < image.minX) {\n image.currentX = image.minX + 1 - (image.minX - image.currentX + 1) ** 0.8;\n }\n if (image.currentX > image.maxX) {\n image.currentX = image.maxX - 1 + (image.currentX - image.maxX + 1) ** 0.8;\n }\n if (image.currentY < image.minY) {\n image.currentY = image.minY + 1 - (image.minY - image.currentY + 1) ** 0.8;\n }\n if (image.currentY > image.maxY) {\n image.currentY = image.maxY - 1 + (image.currentY - image.maxY + 1) ** 0.8;\n }\n\n // Velocity\n if (!velocity.prevPositionX) velocity.prevPositionX = image.touchesCurrent.x;\n if (!velocity.prevPositionY) velocity.prevPositionY = image.touchesCurrent.y;\n if (!velocity.prevTime) velocity.prevTime = Date.now();\n velocity.x = (image.touchesCurrent.x - velocity.prevPositionX) / (Date.now() - velocity.prevTime) / 2;\n velocity.y = (image.touchesCurrent.y - velocity.prevPositionY) / (Date.now() - velocity.prevTime) / 2;\n if (Math.abs(image.touchesCurrent.x - velocity.prevPositionX) < 2) velocity.x = 0;\n if (Math.abs(image.touchesCurrent.y - velocity.prevPositionY) < 2) velocity.y = 0;\n velocity.prevPositionX = image.touchesCurrent.x;\n velocity.prevPositionY = image.touchesCurrent.y;\n velocity.prevTime = Date.now();\n gesture.imageWrapEl.style.transform = `translate3d(${image.currentX}px, ${image.currentY}px,0)`;\n }\n function onTouchEnd() {\n const zoom = swiper.zoom;\n if (!gesture.imageEl) return;\n if (!image.isTouched || !image.isMoved) {\n image.isTouched = false;\n image.isMoved = false;\n return;\n }\n image.isTouched = false;\n image.isMoved = false;\n let momentumDurationX = 300;\n let momentumDurationY = 300;\n const momentumDistanceX = velocity.x * momentumDurationX;\n const newPositionX = image.currentX + momentumDistanceX;\n const momentumDistanceY = velocity.y * momentumDurationY;\n const newPositionY = image.currentY + momentumDistanceY;\n\n // Fix duration\n if (velocity.x !== 0) momentumDurationX = Math.abs((newPositionX - image.currentX) / velocity.x);\n if (velocity.y !== 0) momentumDurationY = Math.abs((newPositionY - image.currentY) / velocity.y);\n const momentumDuration = Math.max(momentumDurationX, momentumDurationY);\n image.currentX = newPositionX;\n image.currentY = newPositionY;\n // Define if we need image drag\n const scaledWidth = image.width * zoom.scale;\n const scaledHeight = image.height * zoom.scale;\n image.minX = Math.min(gesture.slideWidth / 2 - scaledWidth / 2, 0);\n image.maxX = -image.minX;\n image.minY = Math.min(gesture.slideHeight / 2 - scaledHeight / 2, 0);\n image.maxY = -image.minY;\n image.currentX = Math.max(Math.min(image.currentX, image.maxX), image.minX);\n image.currentY = Math.max(Math.min(image.currentY, image.maxY), image.minY);\n gesture.imageWrapEl.style.transitionDuration = `${momentumDuration}ms`;\n gesture.imageWrapEl.style.transform = `translate3d(${image.currentX}px, ${image.currentY}px,0)`;\n }\n function onTransitionEnd() {\n const zoom = swiper.zoom;\n if (gesture.slideEl && swiper.activeIndex !== swiper.slides.indexOf(gesture.slideEl)) {\n if (gesture.imageEl) {\n gesture.imageEl.style.transform = 'translate3d(0,0,0) scale(1)';\n }\n if (gesture.imageWrapEl) {\n gesture.imageWrapEl.style.transform = 'translate3d(0,0,0)';\n }\n gesture.slideEl.classList.remove(`${swiper.params.zoom.zoomedSlideClass}`);\n zoom.scale = 1;\n currentScale = 1;\n gesture.slideEl = undefined;\n gesture.imageEl = undefined;\n gesture.imageWrapEl = undefined;\n gesture.originX = 0;\n gesture.originY = 0;\n }\n }\n function zoomIn(e) {\n const zoom = swiper.zoom;\n const params = swiper.params.zoom;\n if (!gesture.slideEl) {\n if (e && e.target) {\n gesture.slideEl = e.target.closest(`.${swiper.params.slideClass}, swiper-slide`);\n }\n if (!gesture.slideEl) {\n if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) {\n gesture.slideEl = elementChildren(swiper.slidesEl, `.${swiper.params.slideActiveClass}`)[0];\n } else {\n gesture.slideEl = swiper.slides[swiper.activeIndex];\n }\n }\n let imageEl = gesture.slideEl.querySelector(`.${params.containerClass}`);\n if (imageEl) {\n imageEl = imageEl.querySelectorAll('picture, img, svg, canvas, .swiper-zoom-target')[0];\n }\n gesture.imageEl = imageEl;\n if (imageEl) {\n gesture.imageWrapEl = elementParents(gesture.imageEl, `.${params.containerClass}`)[0];\n } else {\n gesture.imageWrapEl = undefined;\n }\n }\n if (!gesture.imageEl || !gesture.imageWrapEl) return;\n if (swiper.params.cssMode) {\n swiper.wrapperEl.style.overflow = 'hidden';\n swiper.wrapperEl.style.touchAction = 'none';\n }\n gesture.slideEl.classList.add(`${params.zoomedSlideClass}`);\n let touchX;\n let touchY;\n let offsetX;\n let offsetY;\n let diffX;\n let diffY;\n let translateX;\n let translateY;\n let imageWidth;\n let imageHeight;\n let scaledWidth;\n let scaledHeight;\n let translateMinX;\n let translateMinY;\n let translateMaxX;\n let translateMaxY;\n let slideWidth;\n let slideHeight;\n if (typeof image.touchesStart.x === 'undefined' && e) {\n touchX = e.pageX;\n touchY = e.pageY;\n } else {\n touchX = image.touchesStart.x;\n touchY = image.touchesStart.y;\n }\n const forceZoomRatio = typeof e === 'number' ? e : null;\n if (currentScale === 1 && forceZoomRatio) {\n touchX = undefined;\n touchY = undefined;\n }\n const maxRatio = getMaxRatio();\n zoom.scale = forceZoomRatio || maxRatio;\n currentScale = forceZoomRatio || maxRatio;\n if (e && !(currentScale === 1 && forceZoomRatio)) {\n slideWidth = gesture.slideEl.offsetWidth;\n slideHeight = gesture.slideEl.offsetHeight;\n offsetX = elementOffset(gesture.slideEl).left + window.scrollX;\n offsetY = elementOffset(gesture.slideEl).top + window.scrollY;\n diffX = offsetX + slideWidth / 2 - touchX;\n diffY = offsetY + slideHeight / 2 - touchY;\n imageWidth = gesture.imageEl.offsetWidth || gesture.imageEl.clientWidth;\n imageHeight = gesture.imageEl.offsetHeight || gesture.imageEl.clientHeight;\n scaledWidth = imageWidth * zoom.scale;\n scaledHeight = imageHeight * zoom.scale;\n translateMinX = Math.min(slideWidth / 2 - scaledWidth / 2, 0);\n translateMinY = Math.min(slideHeight / 2 - scaledHeight / 2, 0);\n translateMaxX = -translateMinX;\n translateMaxY = -translateMinY;\n translateX = diffX * zoom.scale;\n translateY = diffY * zoom.scale;\n if (translateX < translateMinX) {\n translateX = translateMinX;\n }\n if (translateX > translateMaxX) {\n translateX = translateMaxX;\n }\n if (translateY < translateMinY) {\n translateY = translateMinY;\n }\n if (translateY > translateMaxY) {\n translateY = translateMaxY;\n }\n } else {\n translateX = 0;\n translateY = 0;\n }\n if (forceZoomRatio && zoom.scale === 1) {\n gesture.originX = 0;\n gesture.originY = 0;\n }\n gesture.imageWrapEl.style.transitionDuration = '300ms';\n gesture.imageWrapEl.style.transform = `translate3d(${translateX}px, ${translateY}px,0)`;\n gesture.imageEl.style.transitionDuration = '300ms';\n gesture.imageEl.style.transform = `translate3d(0,0,0) scale(${zoom.scale})`;\n }\n function zoomOut() {\n const zoom = swiper.zoom;\n const params = swiper.params.zoom;\n if (!gesture.slideEl) {\n if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) {\n gesture.slideEl = elementChildren(swiper.slidesEl, `.${swiper.params.slideActiveClass}`)[0];\n } else {\n gesture.slideEl = swiper.slides[swiper.activeIndex];\n }\n let imageEl = gesture.slideEl.querySelector(`.${params.containerClass}`);\n if (imageEl) {\n imageEl = imageEl.querySelectorAll('picture, img, svg, canvas, .swiper-zoom-target')[0];\n }\n gesture.imageEl = imageEl;\n if (imageEl) {\n gesture.imageWrapEl = elementParents(gesture.imageEl, `.${params.containerClass}`)[0];\n } else {\n gesture.imageWrapEl = undefined;\n }\n }\n if (!gesture.imageEl || !gesture.imageWrapEl) return;\n if (swiper.params.cssMode) {\n swiper.wrapperEl.style.overflow = '';\n swiper.wrapperEl.style.touchAction = '';\n }\n zoom.scale = 1;\n currentScale = 1;\n gesture.imageWrapEl.style.transitionDuration = '300ms';\n gesture.imageWrapEl.style.transform = 'translate3d(0,0,0)';\n gesture.imageEl.style.transitionDuration = '300ms';\n gesture.imageEl.style.transform = 'translate3d(0,0,0) scale(1)';\n gesture.slideEl.classList.remove(`${params.zoomedSlideClass}`);\n gesture.slideEl = undefined;\n gesture.originX = 0;\n gesture.originY = 0;\n }\n\n // Toggle Zoom\n function zoomToggle(e) {\n const zoom = swiper.zoom;\n if (zoom.scale && zoom.scale !== 1) {\n // Zoom Out\n zoomOut();\n } else {\n // Zoom In\n zoomIn(e);\n }\n }\n function getListeners() {\n const passiveListener = swiper.params.passiveListeners ? {\n passive: true,\n capture: false\n } : false;\n const activeListenerWithCapture = swiper.params.passiveListeners ? {\n passive: false,\n capture: true\n } : true;\n return {\n passiveListener,\n activeListenerWithCapture\n };\n }\n\n // Attach/Detach Events\n function enable() {\n const zoom = swiper.zoom;\n if (zoom.enabled) return;\n zoom.enabled = true;\n const {\n passiveListener,\n activeListenerWithCapture\n } = getListeners();\n\n // Scale image\n swiper.wrapperEl.addEventListener('pointerdown', onGestureStart, passiveListener);\n swiper.wrapperEl.addEventListener('pointermove', onGestureChange, activeListenerWithCapture);\n ['pointerup', 'pointercancel', 'pointerout'].forEach(eventName => {\n swiper.wrapperEl.addEventListener(eventName, onGestureEnd, passiveListener);\n });\n\n // Move image\n swiper.wrapperEl.addEventListener('pointermove', onTouchMove, activeListenerWithCapture);\n }\n function disable() {\n const zoom = swiper.zoom;\n if (!zoom.enabled) return;\n zoom.enabled = false;\n const {\n passiveListener,\n activeListenerWithCapture\n } = getListeners();\n\n // Scale image\n swiper.wrapperEl.removeEventListener('pointerdown', onGestureStart, passiveListener);\n swiper.wrapperEl.removeEventListener('pointermove', onGestureChange, activeListenerWithCapture);\n ['pointerup', 'pointercancel', 'pointerout'].forEach(eventName => {\n swiper.wrapperEl.removeEventListener(eventName, onGestureEnd, passiveListener);\n });\n\n // Move image\n swiper.wrapperEl.removeEventListener('pointermove', onTouchMove, activeListenerWithCapture);\n }\n on('init', () => {\n if (swiper.params.zoom.enabled) {\n enable();\n }\n });\n on('destroy', () => {\n disable();\n });\n on('touchStart', (_s, e) => {\n if (!swiper.zoom.enabled) return;\n onTouchStart(e);\n });\n on('touchEnd', (_s, e) => {\n if (!swiper.zoom.enabled) return;\n onTouchEnd();\n });\n on('doubleTap', (_s, e) => {\n if (!swiper.animating && swiper.params.zoom.enabled && swiper.zoom.enabled && swiper.params.zoom.toggle) {\n zoomToggle(e);\n }\n });\n on('transitionEnd', () => {\n if (swiper.zoom.enabled && swiper.params.zoom.enabled) {\n onTransitionEnd();\n }\n });\n on('slideChange', () => {\n if (swiper.zoom.enabled && swiper.params.zoom.enabled && swiper.params.cssMode) {\n onTransitionEnd();\n }\n });\n Object.assign(swiper.zoom, {\n enable,\n disable,\n in: zoomIn,\n out: zoomOut,\n toggle: zoomToggle\n });\n}\n\nexport { Zoom as default };\n","import { g as getDocument } from '../shared/ssr-window.esm.mjs';\n\n/* eslint no-underscore-dangle: \"off\" */\n/* eslint no-use-before-define: \"off\" */\nfunction Autoplay(_ref) {\n let {\n swiper,\n extendParams,\n on,\n emit,\n params\n } = _ref;\n swiper.autoplay = {\n running: false,\n paused: false,\n timeLeft: 0\n };\n extendParams({\n autoplay: {\n enabled: false,\n delay: 3000,\n waitForTransition: true,\n disableOnInteraction: false,\n stopOnLastSlide: false,\n reverseDirection: false,\n pauseOnMouseEnter: false\n }\n });\n let timeout;\n let raf;\n let autoplayDelayTotal = params && params.autoplay ? params.autoplay.delay : 3000;\n let autoplayDelayCurrent = params && params.autoplay ? params.autoplay.delay : 3000;\n let autoplayTimeLeft;\n let autoplayStartTime = new Date().getTime();\n let wasPaused;\n let isTouched;\n let pausedByTouch;\n let touchStartTimeout;\n let slideChanged;\n let pausedByInteraction;\n let pausedByPointerEnter;\n function onTransitionEnd(e) {\n if (!swiper || swiper.destroyed || !swiper.wrapperEl) return;\n if (e.target !== swiper.wrapperEl) return;\n swiper.wrapperEl.removeEventListener('transitionend', onTransitionEnd);\n if (pausedByPointerEnter || e.detail && e.detail.bySwiperTouchMove) {\n return;\n }\n resume();\n }\n const calcTimeLeft = () => {\n if (swiper.destroyed || !swiper.autoplay.running) return;\n if (swiper.autoplay.paused) {\n wasPaused = true;\n } else if (wasPaused) {\n autoplayDelayCurrent = autoplayTimeLeft;\n wasPaused = false;\n }\n const timeLeft = swiper.autoplay.paused ? autoplayTimeLeft : autoplayStartTime + autoplayDelayCurrent - new Date().getTime();\n swiper.autoplay.timeLeft = timeLeft;\n emit('autoplayTimeLeft', timeLeft, timeLeft / autoplayDelayTotal);\n raf = requestAnimationFrame(() => {\n calcTimeLeft();\n });\n };\n const getSlideDelay = () => {\n let activeSlideEl;\n if (swiper.virtual && swiper.params.virtual.enabled) {\n activeSlideEl = swiper.slides.filter(slideEl => slideEl.classList.contains('swiper-slide-active'))[0];\n } else {\n activeSlideEl = swiper.slides[swiper.activeIndex];\n }\n if (!activeSlideEl) return undefined;\n const currentSlideDelay = parseInt(activeSlideEl.getAttribute('data-swiper-autoplay'), 10);\n return currentSlideDelay;\n };\n const run = delayForce => {\n if (swiper.destroyed || !swiper.autoplay.running) return;\n cancelAnimationFrame(raf);\n calcTimeLeft();\n let delay = typeof delayForce === 'undefined' ? swiper.params.autoplay.delay : delayForce;\n autoplayDelayTotal = swiper.params.autoplay.delay;\n autoplayDelayCurrent = swiper.params.autoplay.delay;\n const currentSlideDelay = getSlideDelay();\n if (!Number.isNaN(currentSlideDelay) && currentSlideDelay > 0 && typeof delayForce === 'undefined') {\n delay = currentSlideDelay;\n autoplayDelayTotal = currentSlideDelay;\n autoplayDelayCurrent = currentSlideDelay;\n }\n autoplayTimeLeft = delay;\n const speed = swiper.params.speed;\n const proceed = () => {\n if (!swiper || swiper.destroyed) return;\n if (swiper.params.autoplay.reverseDirection) {\n if (!swiper.isBeginning || swiper.params.loop || swiper.params.rewind) {\n swiper.slidePrev(speed, true, true);\n emit('autoplay');\n } else if (!swiper.params.autoplay.stopOnLastSlide) {\n swiper.slideTo(swiper.slides.length - 1, speed, true, true);\n emit('autoplay');\n }\n } else {\n if (!swiper.isEnd || swiper.params.loop || swiper.params.rewind) {\n swiper.slideNext(speed, true, true);\n emit('autoplay');\n } else if (!swiper.params.autoplay.stopOnLastSlide) {\n swiper.slideTo(0, speed, true, true);\n emit('autoplay');\n }\n }\n if (swiper.params.cssMode) {\n autoplayStartTime = new Date().getTime();\n requestAnimationFrame(() => {\n run();\n });\n }\n };\n if (delay > 0) {\n clearTimeout(timeout);\n timeout = setTimeout(() => {\n proceed();\n }, delay);\n } else {\n requestAnimationFrame(() => {\n proceed();\n });\n }\n\n // eslint-disable-next-line\n return delay;\n };\n const start = () => {\n autoplayStartTime = new Date().getTime();\n swiper.autoplay.running = true;\n run();\n emit('autoplayStart');\n };\n const stop = () => {\n swiper.autoplay.running = false;\n clearTimeout(timeout);\n cancelAnimationFrame(raf);\n emit('autoplayStop');\n };\n const pause = (internal, reset) => {\n if (swiper.destroyed || !swiper.autoplay.running) return;\n clearTimeout(timeout);\n if (!internal) {\n pausedByInteraction = true;\n }\n const proceed = () => {\n emit('autoplayPause');\n if (swiper.params.autoplay.waitForTransition) {\n swiper.wrapperEl.addEventListener('transitionend', onTransitionEnd);\n } else {\n resume();\n }\n };\n swiper.autoplay.paused = true;\n if (reset) {\n if (slideChanged) {\n autoplayTimeLeft = swiper.params.autoplay.delay;\n }\n slideChanged = false;\n proceed();\n return;\n }\n const delay = autoplayTimeLeft || swiper.params.autoplay.delay;\n autoplayTimeLeft = delay - (new Date().getTime() - autoplayStartTime);\n if (swiper.isEnd && autoplayTimeLeft < 0 && !swiper.params.loop) return;\n if (autoplayTimeLeft < 0) autoplayTimeLeft = 0;\n proceed();\n };\n const resume = () => {\n if (swiper.isEnd && autoplayTimeLeft < 0 && !swiper.params.loop || swiper.destroyed || !swiper.autoplay.running) return;\n autoplayStartTime = new Date().getTime();\n if (pausedByInteraction) {\n pausedByInteraction = false;\n run(autoplayTimeLeft);\n } else {\n run();\n }\n swiper.autoplay.paused = false;\n emit('autoplayResume');\n };\n const onVisibilityChange = () => {\n if (swiper.destroyed || !swiper.autoplay.running) return;\n const document = getDocument();\n if (document.visibilityState === 'hidden') {\n pausedByInteraction = true;\n pause(true);\n }\n if (document.visibilityState === 'visible') {\n resume();\n }\n };\n const onPointerEnter = e => {\n if (e.pointerType !== 'mouse') return;\n pausedByInteraction = true;\n pausedByPointerEnter = true;\n if (swiper.animating || swiper.autoplay.paused) return;\n pause(true);\n };\n const onPointerLeave = e => {\n if (e.pointerType !== 'mouse') return;\n pausedByPointerEnter = false;\n if (swiper.autoplay.paused) {\n resume();\n }\n };\n const attachMouseEvents = () => {\n if (swiper.params.autoplay.pauseOnMouseEnter) {\n swiper.el.addEventListener('pointerenter', onPointerEnter);\n swiper.el.addEventListener('pointerleave', onPointerLeave);\n }\n };\n const detachMouseEvents = () => {\n if (swiper.el && typeof swiper.el !== 'string') {\n swiper.el.removeEventListener('pointerenter', onPointerEnter);\n swiper.el.removeEventListener('pointerleave', onPointerLeave);\n }\n };\n const attachDocumentEvents = () => {\n const document = getDocument();\n document.addEventListener('visibilitychange', onVisibilityChange);\n };\n const detachDocumentEvents = () => {\n const document = getDocument();\n document.removeEventListener('visibilitychange', onVisibilityChange);\n };\n on('init', () => {\n if (swiper.params.autoplay.enabled) {\n attachMouseEvents();\n attachDocumentEvents();\n start();\n }\n });\n on('destroy', () => {\n detachMouseEvents();\n detachDocumentEvents();\n if (swiper.autoplay.running) {\n stop();\n }\n });\n on('_freeModeStaticRelease', () => {\n if (pausedByTouch || pausedByInteraction) {\n resume();\n }\n });\n on('_freeModeNoMomentumRelease', () => {\n if (!swiper.params.autoplay.disableOnInteraction) {\n pause(true, true);\n } else {\n stop();\n }\n });\n on('beforeTransitionStart', (_s, speed, internal) => {\n if (swiper.destroyed || !swiper.autoplay.running) return;\n if (internal || !swiper.params.autoplay.disableOnInteraction) {\n pause(true, true);\n } else {\n stop();\n }\n });\n on('sliderFirstMove', () => {\n if (swiper.destroyed || !swiper.autoplay.running) return;\n if (swiper.params.autoplay.disableOnInteraction) {\n stop();\n return;\n }\n isTouched = true;\n pausedByTouch = false;\n pausedByInteraction = false;\n touchStartTimeout = setTimeout(() => {\n pausedByInteraction = true;\n pausedByTouch = true;\n pause(true);\n }, 200);\n });\n on('touchEnd', () => {\n if (swiper.destroyed || !swiper.autoplay.running || !isTouched) return;\n clearTimeout(touchStartTimeout);\n clearTimeout(timeout);\n if (swiper.params.autoplay.disableOnInteraction) {\n pausedByTouch = false;\n isTouched = false;\n return;\n }\n if (pausedByTouch && swiper.params.cssMode) resume();\n pausedByTouch = false;\n isTouched = false;\n });\n on('slideChange', () => {\n if (swiper.destroyed || !swiper.autoplay.running) return;\n slideChanged = true;\n });\n Object.assign(swiper.autoplay, {\n start,\n stop,\n pause,\n resume\n });\n}\n\nexport { Autoplay as default };\n","import { g as getDocument } from '../shared/ssr-window.esm.mjs';\nimport { l as isObject, e as elementChildren } from '../shared/utils.mjs';\n\nfunction Thumb(_ref) {\n let {\n swiper,\n extendParams,\n on\n } = _ref;\n extendParams({\n thumbs: {\n swiper: null,\n multipleActiveThumbs: true,\n autoScrollOffset: 0,\n slideThumbActiveClass: 'swiper-slide-thumb-active',\n thumbsContainerClass: 'swiper-thumbs'\n }\n });\n let initialized = false;\n let swiperCreated = false;\n swiper.thumbs = {\n swiper: null\n };\n function onThumbClick() {\n const thumbsSwiper = swiper.thumbs.swiper;\n if (!thumbsSwiper || thumbsSwiper.destroyed) return;\n const clickedIndex = thumbsSwiper.clickedIndex;\n const clickedSlide = thumbsSwiper.clickedSlide;\n if (clickedSlide && clickedSlide.classList.contains(swiper.params.thumbs.slideThumbActiveClass)) return;\n if (typeof clickedIndex === 'undefined' || clickedIndex === null) return;\n let slideToIndex;\n if (thumbsSwiper.params.loop) {\n slideToIndex = parseInt(thumbsSwiper.clickedSlide.getAttribute('data-swiper-slide-index'), 10);\n } else {\n slideToIndex = clickedIndex;\n }\n if (swiper.params.loop) {\n swiper.slideToLoop(slideToIndex);\n } else {\n swiper.slideTo(slideToIndex);\n }\n }\n function init() {\n const {\n thumbs: thumbsParams\n } = swiper.params;\n if (initialized) return false;\n initialized = true;\n const SwiperClass = swiper.constructor;\n if (thumbsParams.swiper instanceof SwiperClass) {\n swiper.thumbs.swiper = thumbsParams.swiper;\n Object.assign(swiper.thumbs.swiper.originalParams, {\n watchSlidesProgress: true,\n slideToClickedSlide: false\n });\n Object.assign(swiper.thumbs.swiper.params, {\n watchSlidesProgress: true,\n slideToClickedSlide: false\n });\n swiper.thumbs.swiper.update();\n } else if (isObject(thumbsParams.swiper)) {\n const thumbsSwiperParams = Object.assign({}, thumbsParams.swiper);\n Object.assign(thumbsSwiperParams, {\n watchSlidesProgress: true,\n slideToClickedSlide: false\n });\n swiper.thumbs.swiper = new SwiperClass(thumbsSwiperParams);\n swiperCreated = true;\n }\n swiper.thumbs.swiper.el.classList.add(swiper.params.thumbs.thumbsContainerClass);\n swiper.thumbs.swiper.on('tap', onThumbClick);\n return true;\n }\n function update(initial) {\n const thumbsSwiper = swiper.thumbs.swiper;\n if (!thumbsSwiper || thumbsSwiper.destroyed) return;\n const slidesPerView = thumbsSwiper.params.slidesPerView === 'auto' ? thumbsSwiper.slidesPerViewDynamic() : thumbsSwiper.params.slidesPerView;\n\n // Activate thumbs\n let thumbsToActivate = 1;\n const thumbActiveClass = swiper.params.thumbs.slideThumbActiveClass;\n if (swiper.params.slidesPerView > 1 && !swiper.params.centeredSlides) {\n thumbsToActivate = swiper.params.slidesPerView;\n }\n if (!swiper.params.thumbs.multipleActiveThumbs) {\n thumbsToActivate = 1;\n }\n thumbsToActivate = Math.floor(thumbsToActivate);\n thumbsSwiper.slides.forEach(slideEl => slideEl.classList.remove(thumbActiveClass));\n if (thumbsSwiper.params.loop || thumbsSwiper.params.virtual && thumbsSwiper.params.virtual.enabled) {\n for (let i = 0; i < thumbsToActivate; i += 1) {\n elementChildren(thumbsSwiper.slidesEl, `[data-swiper-slide-index=\"${swiper.realIndex + i}\"]`).forEach(slideEl => {\n slideEl.classList.add(thumbActiveClass);\n });\n }\n } else {\n for (let i = 0; i < thumbsToActivate; i += 1) {\n if (thumbsSwiper.slides[swiper.realIndex + i]) {\n thumbsSwiper.slides[swiper.realIndex + i].classList.add(thumbActiveClass);\n }\n }\n }\n const autoScrollOffset = swiper.params.thumbs.autoScrollOffset;\n const useOffset = autoScrollOffset && !thumbsSwiper.params.loop;\n if (swiper.realIndex !== thumbsSwiper.realIndex || useOffset) {\n const currentThumbsIndex = thumbsSwiper.activeIndex;\n let newThumbsIndex;\n let direction;\n if (thumbsSwiper.params.loop) {\n const newThumbsSlide = thumbsSwiper.slides.filter(slideEl => slideEl.getAttribute('data-swiper-slide-index') === `${swiper.realIndex}`)[0];\n newThumbsIndex = thumbsSwiper.slides.indexOf(newThumbsSlide);\n direction = swiper.activeIndex > swiper.previousIndex ? 'next' : 'prev';\n } else {\n newThumbsIndex = swiper.realIndex;\n direction = newThumbsIndex > swiper.previousIndex ? 'next' : 'prev';\n }\n if (useOffset) {\n newThumbsIndex += direction === 'next' ? autoScrollOffset : -1 * autoScrollOffset;\n }\n if (thumbsSwiper.visibleSlidesIndexes && thumbsSwiper.visibleSlidesIndexes.indexOf(newThumbsIndex) < 0) {\n if (thumbsSwiper.params.centeredSlides) {\n if (newThumbsIndex > currentThumbsIndex) {\n newThumbsIndex = newThumbsIndex - Math.floor(slidesPerView / 2) + 1;\n } else {\n newThumbsIndex = newThumbsIndex + Math.floor(slidesPerView / 2) - 1;\n }\n } else if (newThumbsIndex > currentThumbsIndex && thumbsSwiper.params.slidesPerGroup === 1) ;\n thumbsSwiper.slideTo(newThumbsIndex, initial ? 0 : undefined);\n }\n }\n }\n on('beforeInit', () => {\n const {\n thumbs\n } = swiper.params;\n if (!thumbs || !thumbs.swiper) return;\n if (typeof thumbs.swiper === 'string' || thumbs.swiper instanceof HTMLElement) {\n const document = getDocument();\n const getThumbsElementAndInit = () => {\n const thumbsElement = typeof thumbs.swiper === 'string' ? document.querySelector(thumbs.swiper) : thumbs.swiper;\n if (thumbsElement && thumbsElement.swiper) {\n thumbs.swiper = thumbsElement.swiper;\n init();\n update(true);\n } else if (thumbsElement) {\n const onThumbsSwiper = e => {\n thumbs.swiper = e.detail[0];\n thumbsElement.removeEventListener('init', onThumbsSwiper);\n init();\n update(true);\n thumbs.swiper.update();\n swiper.update();\n };\n thumbsElement.addEventListener('init', onThumbsSwiper);\n }\n return thumbsElement;\n };\n const watchForThumbsToAppear = () => {\n if (swiper.destroyed) return;\n const thumbsElement = getThumbsElementAndInit();\n if (!thumbsElement) {\n requestAnimationFrame(watchForThumbsToAppear);\n }\n };\n requestAnimationFrame(watchForThumbsToAppear);\n } else {\n init();\n update(true);\n }\n });\n on('slideChange update resize observerUpdate', () => {\n update();\n });\n on('setTransition', (_s, duration) => {\n const thumbsSwiper = swiper.thumbs.swiper;\n if (!thumbsSwiper || thumbsSwiper.destroyed) return;\n thumbsSwiper.setTransition(duration);\n });\n on('beforeDestroy', () => {\n const thumbsSwiper = swiper.thumbs.swiper;\n if (!thumbsSwiper || thumbsSwiper.destroyed) return;\n if (swiperCreated) {\n thumbsSwiper.destroy();\n }\n });\n Object.assign(swiper.thumbs, {\n init,\n update\n });\n}\n\nexport { Thumb as default };\n","function appendSlide(slides) {\n const swiper = this;\n const {\n params,\n slidesEl\n } = swiper;\n if (params.loop) {\n swiper.loopDestroy();\n }\n const appendElement = slideEl => {\n if (typeof slideEl === 'string') {\n const tempDOM = document.createElement('div');\n tempDOM.innerHTML = slideEl;\n slidesEl.append(tempDOM.children[0]);\n tempDOM.innerHTML = '';\n } else {\n slidesEl.append(slideEl);\n }\n };\n if (typeof slides === 'object' && 'length' in slides) {\n for (let i = 0; i < slides.length; i += 1) {\n if (slides[i]) appendElement(slides[i]);\n }\n } else {\n appendElement(slides);\n }\n swiper.recalcSlides();\n if (params.loop) {\n swiper.loopCreate();\n }\n if (!params.observer || swiper.isElement) {\n swiper.update();\n }\n}\n\nfunction prependSlide(slides) {\n const swiper = this;\n const {\n params,\n activeIndex,\n slidesEl\n } = swiper;\n if (params.loop) {\n swiper.loopDestroy();\n }\n let newActiveIndex = activeIndex + 1;\n const prependElement = slideEl => {\n if (typeof slideEl === 'string') {\n const tempDOM = document.createElement('div');\n tempDOM.innerHTML = slideEl;\n slidesEl.prepend(tempDOM.children[0]);\n tempDOM.innerHTML = '';\n } else {\n slidesEl.prepend(slideEl);\n }\n };\n if (typeof slides === 'object' && 'length' in slides) {\n for (let i = 0; i < slides.length; i += 1) {\n if (slides[i]) prependElement(slides[i]);\n }\n newActiveIndex = activeIndex + slides.length;\n } else {\n prependElement(slides);\n }\n swiper.recalcSlides();\n if (params.loop) {\n swiper.loopCreate();\n }\n if (!params.observer || swiper.isElement) {\n swiper.update();\n }\n swiper.slideTo(newActiveIndex, 0, false);\n}\n\nfunction addSlide(index, slides) {\n const swiper = this;\n const {\n params,\n activeIndex,\n slidesEl\n } = swiper;\n let activeIndexBuffer = activeIndex;\n if (params.loop) {\n activeIndexBuffer -= swiper.loopedSlides;\n swiper.loopDestroy();\n swiper.recalcSlides();\n }\n const baseLength = swiper.slides.length;\n if (index <= 0) {\n swiper.prependSlide(slides);\n return;\n }\n if (index >= baseLength) {\n swiper.appendSlide(slides);\n return;\n }\n let newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + 1 : activeIndexBuffer;\n const slidesBuffer = [];\n for (let i = baseLength - 1; i >= index; i -= 1) {\n const currentSlide = swiper.slides[i];\n currentSlide.remove();\n slidesBuffer.unshift(currentSlide);\n }\n if (typeof slides === 'object' && 'length' in slides) {\n for (let i = 0; i < slides.length; i += 1) {\n if (slides[i]) slidesEl.append(slides[i]);\n }\n newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + slides.length : activeIndexBuffer;\n } else {\n slidesEl.append(slides);\n }\n for (let i = 0; i < slidesBuffer.length; i += 1) {\n slidesEl.append(slidesBuffer[i]);\n }\n swiper.recalcSlides();\n if (params.loop) {\n swiper.loopCreate();\n }\n if (!params.observer || swiper.isElement) {\n swiper.update();\n }\n if (params.loop) {\n swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false);\n } else {\n swiper.slideTo(newActiveIndex, 0, false);\n }\n}\n\nfunction removeSlide(slidesIndexes) {\n const swiper = this;\n const {\n params,\n activeIndex\n } = swiper;\n let activeIndexBuffer = activeIndex;\n if (params.loop) {\n activeIndexBuffer -= swiper.loopedSlides;\n swiper.loopDestroy();\n }\n let newActiveIndex = activeIndexBuffer;\n let indexToRemove;\n if (typeof slidesIndexes === 'object' && 'length' in slidesIndexes) {\n for (let i = 0; i < slidesIndexes.length; i += 1) {\n indexToRemove = slidesIndexes[i];\n if (swiper.slides[indexToRemove]) swiper.slides[indexToRemove].remove();\n if (indexToRemove < newActiveIndex) newActiveIndex -= 1;\n }\n newActiveIndex = Math.max(newActiveIndex, 0);\n } else {\n indexToRemove = slidesIndexes;\n if (swiper.slides[indexToRemove]) swiper.slides[indexToRemove].remove();\n if (indexToRemove < newActiveIndex) newActiveIndex -= 1;\n newActiveIndex = Math.max(newActiveIndex, 0);\n }\n swiper.recalcSlides();\n if (params.loop) {\n swiper.loopCreate();\n }\n if (!params.observer || swiper.isElement) {\n swiper.update();\n }\n if (params.loop) {\n swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false);\n } else {\n swiper.slideTo(newActiveIndex, 0, false);\n }\n}\n\nfunction removeAllSlides() {\n const swiper = this;\n const slidesIndexes = [];\n for (let i = 0; i < swiper.slides.length; i += 1) {\n slidesIndexes.push(i);\n }\n swiper.removeSlide(slidesIndexes);\n}\n\nfunction Manipulation(_ref) {\n let {\n swiper\n } = _ref;\n Object.assign(swiper, {\n appendSlide: appendSlide.bind(swiper),\n prependSlide: prependSlide.bind(swiper),\n addSlide: addSlide.bind(swiper),\n removeSlide: removeSlide.bind(swiper),\n removeAllSlides: removeAllSlides.bind(swiper)\n });\n}\n\nexport { Manipulation as default };\n","import Swiper from 'swiper';\nimport { Manipulation, Navigation, Pagination, Zoom, Thumbs } from 'swiper/modules';\n\nfunction handleCustomPagination() {\n const mainImagesContainer = document.querySelector('[data-main-slider]');\n const thumbsContainer = document.querySelector('[data-slider-thumbs]');\n if (!thumbsContainer || !mainImagesContainer) return;\n\n const thumbs = thumbsContainer.querySelectorAll('[data-slider-thumbs] .swiper-slide');\n\n if (thumbs.length > 0) {\n const halfContainerHeight = mainImagesContainer.offsetHeight / 2;\n\n mainImagesContainer.addEventListener('scroll', function () {\n const productImages = mainImagesContainer.querySelectorAll('[data-image]');\n const containerTop = mainImagesContainer.scrollTop;\n const containerBottom = containerTop + mainImagesContainer.offsetHeight;\n\n productImages.forEach((image) => {\n const elementTop = image.offsetTop + halfContainerHeight;\n const elementBottom = elementTop + image.offsetHeight;\n\n const activeThumb = thumbsContainer.querySelector(`[data-image-index=\"${image.getAttribute('id')}\"]`);\n\n if (elementBottom > containerTop && elementTop < containerBottom && activeThumb) {\n thumbs.forEach((el) => el.classList.remove('-active'));\n activeThumb.classList.add('-active');\n }\n });\n });\n\n thumbs.forEach((thumb) => {\n thumb.addEventListener('click', () => {\n const relativeSlide = thumb.getAttribute('data-image-index');\n if (relativeSlide) {\n const elementToScroll = mainImagesContainer.querySelector(`#${relativeSlide}`);\n\n if (elementToScroll) {\n mainImagesContainer.scroll({\n top: elementToScroll.offsetTop,\n left: 0,\n behavior: 'smooth',\n });\n }\n }\n });\n });\n\n thumbs[0].classList.add('-active');\n }\n}\n\nexport default function setGallery(Product) {\n const productImagesContainer = document.querySelector('[data-product-images]');\n\n const thumbs = new Swiper(Product.thumbsSlider.element, {\n modules: [Manipulation],\n direction: 'vertical',\n slidesPerView: 'auto',\n slidesPerGroup: 1,\n spaceBetween: 16,\n watchSlidesProgress: true,\n watchOverflow: true,\n preloadImages: false,\n });\n\n const main = new Swiper(Product.mainSlider.element, {\n modules: [Manipulation, Navigation, Pagination, Zoom, Thumbs],\n slidesPerView: 1,\n slidesPerGroup: 1,\n spaceBetween: 8,\n speed: 1000,\n watchSlidesProgress: true,\n watchOverflow: true,\n preloadImages: false,\n navigation: {\n nextEl: '[data-main-slider] .swiper-button-next',\n prevEl: '[data-main-slider] .swiper-button-prev',\n },\n pagination: {\n el: '.product-images .swiper-pagination',\n clickable: true,\n type: 'bullets',\n },\n breakpoints: {\n 992: {\n direction: 'vertical',\n slidesPerView: 1.2,\n spaceBetween: 10,\n },\n },\n zoom: {\n maxRatio: 1.5,\n zoomedSlideClass: '-zoomed',\n },\n on: {\n init: () => {\n window.innerWidth >= 992 && handleCustomPagination();\n },\n zoomChange: (swiper, scale, imageEl, slideEl) => {\n setTimeout(() => {\n if (slideEl.classList.contains('-zoomed')) {\n productImagesContainer.classList.add('-zoomed');\n } else {\n productImagesContainer.classList.remove('-zoomed');\n }\n }, 500);\n },\n },\n });\n\n Product.thumbsSlider.swiper = thumbs;\n Product.mainSlider.swiper = main;\n}\n","// ===============================================================\n// ADIÇÃO MANUAL DE ASSET\n// ===============================================================\n// Usado para incluir assets no código de forma manual, conforme a necessidade\nexport function addAsset(source, onloadCallback) {\n if (!source || source === '') return console.error(`addAsset: caminho não definido.`);\n\n if (source.includes('.js')) {\n const scriptTag = document.createElement('script');\n scriptTag.setAttribute('src', source);\n\n if (onloadCallback && typeof onloadCallback === 'function') {\n scriptTag.onload = onloadCallback;\n }\n\n return document.body.appendChild(scriptTag);\n } else if (source.includes('.css')) {\n const linkTag = document.createElement('link');\n linkTag.setAttribute('rel', 'stylesheet');\n linkTag.setAttribute('type', 'text/css');\n linkTag.setAttribute('href', source);\n return document.head.appendChild(linkTag);\n } else {\n const error = `addAsset: Erro ao criar o asset. Tipo de script não definido, ou não possui tratamento para este tipo de asset.`;\n return console.error(error, source);\n }\n}\n\n// ===============================================================\n// BUSCA O CARRINHO ATIVO\n// ===============================================================\nexport async function getCart() {\n try {\n const response = await fetch('/carrinho', {\n headers: {\n Accept: 'application/json',\n },\n });\n\n return await response.json();\n } catch (error) {\n console.error('Erro ao buscar os dados do carrinho');\n console.error(error);\n return false;\n }\n}\n\n// ===============================================================\n// SERIALIZE ARRAY\n// ===============================================================\nexport function serializeArray(form) {\n const formData = new FormData(form);\n const data = {};\n\n for (const [name, value] of formData) {\n data[name] = value;\n }\n\n const formBody = [];\n\n for (const key in data) {\n const encodeKey = encodeURIComponent(key);\n const encodeValue = encodeURIComponent(data[key]);\n formBody.push(`${encodeKey}=${encodeValue}`);\n }\n\n return formBody.join('&');\n}\n\n// ===============================================================\n// URL ENCODE FORM DATA\n// ===============================================================\nexport function urlencodeFormData(formData) {\n let string = '';\n\n function encode(s) {\n return encodeURIComponent(s).replace(/%20/g, '+');\n }\n\n for (const pair of formData.entries()) {\n if (typeof pair[1] == 'string') {\n string += (string ? '&' : '') + encode(pair[0]) + '=' + encode(pair[1]);\n }\n }\n return string;\n}\n\n// ===============================================================\n// SLIDE TOGGLE\n// ===============================================================\nexport function slideToggle(contentWrapper, content, duration = 500) {\n let initialHeight = window.getComputedStyle(contentWrapper).height;\n\n if (initialHeight == '0px') {\n return slideDown(contentWrapper, content, duration);\n } else {\n return slideUp(contentWrapper, duration);\n }\n}\n\n// ===============================================================\n// SLIDE UP\n// ===============================================================\nexport function slideUp(contentWrapper, duration = 500) {\n contentWrapper.style.height = '0px';\n contentWrapper.style.transition = `height ${duration} ease`;\n}\n\n// ===============================================================\n// SLIDE DOWN\n// ===============================================================\nexport function slideDown(contentWrapper, content, duration = 500) {\n let innerHeight = content.clientHeight;\n\n contentWrapper.style.height = `${innerHeight}px`;\n contentWrapper.style.transition = `height ${duration} ease`;\n}\n\n// ===============================================================\n// UPDATE DISCOUNT IN PRODUCT BLOCK\n// ===============================================================\nexport function updatePriceBlock() {\n const priceEls = document.querySelectorAll('[data-init-price]');\n\n if (priceEls == null) return;\n\n priceEls.forEach((priceEl) => {\n const discount = priceEl.dataset.discountPercent;\n\n priceEl.dispatchEvent(new Event('change'));\n\n // discount\n if (discount != '0') {\n priceEl.style.setProperty('--discount', `'-${discount}%'`);\n }\n });\n}\n\n// ===============================================================\n// PREÇO POR AJAX\n// ===============================================================\nexport function getPriceProd() {\n const selectors = document.querySelectorAll('[data-update-price]');\n const attr = 'data-update-price';\n\n if (selectors.length > 0) {\n selectors.forEach((selector) => {\n const prodId = selector.getAttribute(attr);\n const url = `/produto/preco/${prodId}`;\n\n if (prodId !== '' && prodId !== null) {\n fetch(url, {\n method: 'GET',\n })\n .then((response) => response.text())\n .then((resp) => {\n selector.innerHTML = resp;\n })\n .catch((error) => {\n console.error(error);\n });\n }\n });\n }\n}\n\n// ===============================================================\n// DEBOUNCE\n// ===============================================================\n/*\n Debounce retorna uma função que enquanto continuar sendo chamada não é executada\n A função só será executada quando para de ser chamada por N milisegundos\n Útil para melhorar a performance de códigos que são executados muitas vezes por segundo, como o $(window).resize()\n\n Ex:\n \n $(window).resize(debounce(function() {\n // código a ser executado\n }, 500))\n \n No exemplo acima a função só será executada 500ms depois do último resize\n Abra o link abaixo e redimensione a janela branca e acompanhe o output do console\n Exemplo codepen: https://codepen.io/valkervieira/pen/oNgqyWY\n\n Um caso comum de uso é em lojas onde a seleção de um filtro na página de tag recarrega automáticamente a página\n Com o debounce o usuário pode escolher vários filtros rapidamente e a página só recarrega quando parar de escolher\n*/\n\nexport function debounce(func, wait, immediate) {\n var timeout;\n immediate || (immediate = true);\n\n return function () {\n var context = this,\n args = arguments;\n\n var later = function () {\n timeout = null;\n if (!immediate) func.apply(context, args);\n };\n\n var callNow = immediate && !timeout;\n\n clearTimeout(timeout);\n\n timeout = setTimeout(later, wait);\n\n if (callNow) func.apply(context, args);\n };\n}\n\n// ===============================================================\n// THROTTLE\n// ===============================================================\n/*\n Throttle diminui a frequencia que uma função é executada\n Enquanto no debounce a função só é executada quando para de ser chamada, no throttle ela\n continua sendo executada só que em um intervalo mínimo de N milisegundos (default = 250)\n\n Ex:\n\n $(window).resize(throttle() {\n // código a ser executado\n }, 500)\n\n No exemplo acima a função resize é chamada várias vezes por segundo mas só é executada 1 vez a cada 500ms\n Abra o link abaixo, redimensione a janela branca e acompanhe o console\n Exemplo codepen: https://codepen.io/valkervieira/pen/yLyKEPW\n\n Um caso comum de uso é checar se o scroll passou de um determinado ponto, para fixar um header ou alterar algum elemento do DOM\n*/\nexport function throttle(fn, threshhold, scope) {\n threshhold || (threshhold = 250);\n var last, deferTimer;\n return function () {\n var context = scope || this;\n\n var now = +new Date(),\n args = arguments;\n if (last && now < last + threshhold) {\n // hold on to it\n clearTimeout(deferTimer);\n deferTimer = setTimeout(function () {\n last = now;\n fn.apply(context, args);\n }, threshhold);\n } else {\n last = now;\n fn.apply(context, args);\n }\n };\n}\n\n// ===============================================================\n// FORMAT MONEY\n// ===============================================================\nexport function formatMoney(value) {\n // FORMATA UM VALOR\n return (\n 'R$ ' +\n value\n .toFixed(2)\n .replace('.', ',')\n .replace(/(\\d)(?=(\\d{3})+\\,)/g, '$1.')\n );\n}\n\n// ===============================================================\n// FORMAT VALUE\n// ===============================================================\n\nexport const formatValue = function (value = '') {\n let parsedValue = value;\n if (typeof value === 'number') {\n parsedValue = value.toFixed(2).toString();\n }\n return parsedValue.replace('.', ',');\n};\n\n// ===============================================================\n// VALIDA QUANTIDADE\n// ===============================================================\nexport function validateQuantity(_val) {\n // VALIDA SE A QUANTIDADE INFORMADA É UM NÚMERO\n if (!isNaN(_val)) {\n if (parseInt(_val) > 0) {\n return true;\n }\n }\n\n return false;\n}\n\n// ===============================================================\n// CLEAR NUMBER\n// ===============================================================\nexport function getClearNumber(_val) {\n // RETORNA UM NÚMERO LIMPO COMO INT\n if (!isNaN(_val)) {\n var clearNumber = parseInt(_val);\n\n return clearNumber;\n }\n\n return false;\n}\n\n// ===============================================================\n// BUSCA\n// ===============================================================\nexport function setSearch() {\n const toggleButton = document.querySelectorAll('[data-toggle-search]');\n const search = document.querySelector('[data-search-container]');\n const input = document.querySelector('[data-search-input]');\n\n toggleButton.length > 0 &&\n toggleButton.forEach((button) => {\n button.addEventListener('click', () => {\n if (search.classList.contains('open')) {\n search.classList.remove('open');\n } else {\n search.classList.add('open');\n setTimeout(() => {\n input.focus();\n }, 400);\n }\n });\n });\n}\n\n// ===============================================================\n// BUSCA OS DADOS DO CLIENTE\n// ===============================================================\nexport async function getClient() {\n try {\n const response = await fetch('/conta/cliente', {\n headers: {\n accept: 'application/json',\n 'Content-Type': 'application/json',\n cache: 'no-store',\n },\n });\n const client = await response.json();\n const access = Object.keys(client).length > 0;\n\n if (access) {\n window.client = client;\n\n return client;\n } else {\n return null;\n }\n } catch (error) {\n console.error(`getClient error`, error);\n }\n}\n\n// ===============================================================\n// MÁSCARA PARA INPUTS\n// ===============================================================\nexport function formMasks() {\n const inputPhones = document.querySelectorAll('[data-phone-mask]'),\n inputCEPs = document.querySelectorAll('[data-cep-mask]'),\n inputCPFs = document.querySelectorAll('[data-cpf-mask]'),\n inputCNPJs = document.querySelectorAll('[data-cnpj-mask]'),\n inputDatesOfBirth = document.querySelectorAll('[data-birth-mask]');\n\n inputPhones.length > 0 &&\n inputPhones.forEach((input) => {\n input.addEventListener('input', (e) => {\n //(XX) XXXXX-XXXX\n var phoneValue = e.target.value.replace(/\\D/g, '').match(/(\\d{0,2})(\\d{0,5})(\\d{0,4})/);\n e.target.value = !phoneValue[2]\n ? phoneValue[1]\n : '(' + phoneValue[1] + ') ' + phoneValue[2] + (phoneValue[3] ? '-' + phoneValue[3] : '');\n });\n });\n\n inputCEPs.length > 0 &&\n inputCEPs.forEach((input) => {\n input.addEventListener('input', (e) => {\n //XXXXX-XX\n var cepValue = e.target.value.replace(/\\D/g, '').match(/(\\d{0,5})(\\d{0,3})/);\n e.target.value = !cepValue[2] ? cepValue[1] : cepValue[1] + '-' + cepValue[2];\n });\n });\n\n inputCPFs.length > 0 &&\n inputCPFs.forEach((input) => {\n input.addEventListener('input', (e) => {\n //XXX.XXX.XXX-XX\n var cpfValue = e.target.value.replace(/\\D/g, '').match(/(\\d{0,3})(\\d{0,3})(\\d{0,3})(\\d{0,2})/);\n e.target.value = !cpfValue[2]\n ? cpfValue[1]\n : cpfValue[1] +\n '.' +\n cpfValue[2] +\n (cpfValue[3] ? '.' + cpfValue[3] : '') +\n (cpfValue[4] ? '-' + cpfValue[4] : '');\n });\n });\n\n inputCNPJs.length > 0 &&\n inputCNPJs.forEach((input) => {\n input.addEventListener('input', (e) => {\n //XX.XXX.XXX/XXXX-XX\n var cnpjValue = e.target.value.replace(/\\D/g, '').match(/(\\d{0,2})(\\d{0,3})(\\d{0,3})(\\d{0,4})(\\d{0,2})/);\n e.target.value = !cnpjValue[2]\n ? cnpjValue[1]\n : cnpjValue[1] +\n '.' +\n cnpjValue[2] +\n (cnpjValue[3] ? '.' + cnpjValue[3] : '') +\n (cnpjValue[4] ? '/' + cnpjValue[4] : '') +\n (cnpjValue[5] ? '-' + cnpjValue[5] : '');\n });\n });\n\n inputDatesOfBirth.length > 0 &&\n inputDatesOfBirth.forEach((input) => {\n input.addEventListener('input', (e) => {\n // XXXX-XX-XX\n var dateOfBirthValue = e.target.value.replace(/\\D/g, '').match(/(\\d{0,2})(\\d{0,2})(\\d{0,4})/);\n e.target.value = !dateOfBirthValue[2]\n ? dateOfBirthValue[1]\n : dateOfBirthValue[1] + '/' + dateOfBirthValue[2] + (dateOfBirthValue[3] ? '/' + dateOfBirthValue[3] : '');\n });\n });\n}\n\n// ===============================================================\n// REALIZA OS CÁLCULOS DA BARRA E CHAMA A FUNÇÃO DE EXIBIÇÃO\n// ===============================================================\nexport async function handleCashback(cartDrawer) {\n const cart = await getCart();\n if (!cart) return;\n\n const cartTotal = cart.total;\n\n if (cartTotal < 0) return;\n\n const extraBar = document.querySelector('[data-cashback-bar]');\n if (!extraBar) return;\n\n const cashback = extraBar.getAttribute('data-total');\n const percentageCashback = extraBar.getAttribute('data-percentage');\n let cashbackAmount = 0;\n\n let amountLeft = cashback - cartTotal;\n let widthProgress = (cartTotal * 100) / cashback;\n widthProgress = widthProgress > 100 ? 100 : widthProgress;\n amountLeft = amountLeft < 0 ? 0 : amountLeft;\n\n extraBar.setAttribute('data-remaining', amountLeft);\n extraBar.style.setProperty('--progress', `${widthProgress}%`);\n\n cashbackAmount = cartTotal * (percentageCashback / 100);\n amountLeft = formatMoney(amountLeft);\n\n //Controla a exibição da barra\n if (cartDrawer) {\n handleCashbackBar(cart, cartDrawer, amountLeft, cashbackAmount, widthProgress, extraBar);\n }\n}\n\n// ===============================================================\n// GERÊNCIA A EXIBIÇÃO E OS TEXTOS/VALORES DA BARRA DE CASHBACK\n// ===============================================================\nexport function handleCashbackBar(cart, cartDrawer, amountLeft, cashbackAmount, widthProgress, extraBar) {\n let newBarElement = null;\n\n //Ponto de inserção\n const cartDrawerInserPoint = cartDrawer.querySelector(\n '.cart-drawer-content > .cart-drawer-relative > .cart-drawer-flex.cart-drawer-overscroll-contain'\n );\n\n //Elemento a ser inserido\n const cartDrawerExtraBar = cartDrawer.querySelector('.cart-drawer-cashback-bar');\n\n //Se a barra já existe no carrinho\n if (cartDrawerExtraBar) {\n if (cart.items.length > 0) {\n const cartDrawerExtraBarText = cartDrawerExtraBar.querySelector('p');\n cartDrawerExtraBarText.setAttribute('data-ignore-mutation', 'true');\n\n if (widthProgress < 100) {\n cartDrawerExtraBarText.innerHTML = `Faltam ${amountLeft} para você ganhar cashback`;\n } else {\n cartDrawerExtraBarText.innerHTML = `Você ganhou ${formatMoney(cashbackAmount)} de cashback!`;\n }\n } else {\n // Carrinho vazio - Remove a barra\n cartDrawerInserPoint.removeChild(cartDrawerExtraBar);\n }\n\n //Se a barra ainda não foi inserida, o ponto de inserção está correto e o carrinho não está vazio\n } else if (cartDrawerInserPoint && cart.items.length > 0) {\n newBarElement = extraBar.cloneNode(true);\n insertExtraBar(cartDrawerInserPoint, newBarElement, amountLeft);\n }\n}\n\n// ===============================================================\n// INSERE A BARRA EXTRA NO CARRINHO\n// ===============================================================\nexport function insertExtraBar(cartDrawerInserPoint, newBarElement, amountLeft) {\n if (newBarElement != null) {\n newBarElement.setAttribute('data-ignore-mutation', 'true');\n\n const newBarElementText = newBarElement.querySelector('p');\n newBarElementText.setAttribute('data-ignore-mutation', 'true');\n newBarElementText.innerHTML = `Faltam ${amountLeft} para você ganhar frete grátis`;\n cartDrawerInserPoint.appendChild(newBarElement);\n }\n}\n\n// ===============================================================\n// VALIDA ABERTURA/FECHAMENTO DO CARRINHO E SEUS EVENTOS\n// ===============================================================\nexport function watchCartOppening() {\n const root = document.getElementById('component-cart-drawer-root');\n\n var observer = new MutationObserver(function (mutations) {\n const targetElement = mutations[0].target;\n if (targetElement.getAttribute('data-ignore-mutation') == 'true') return;\n\n // Carrinho aberto\n if (document.querySelector('#cart-drawer-el')) {\n handleCashback(root);\n }\n });\n\n observer.observe(root, {\n childList: true,\n subtree: true,\n });\n}\n","import { formatMoney, urlencodeFormData } from '../components/utilities';\n\nconst Shipping = {\n handleShipping: async function (form) {\n const sku = document.querySelector('[data-product-box] [name=\"sku\"]').value;\n const quantity = document.querySelector('[data-product-box] [name=\"quantity\"]').value;\n const zip = form.querySelector('.input').value.replace('-', '');\n const buttonSubmit = form.querySelector('.action');\n\n if (zip.length != 8) {\n form.classList.add('error');\n form.querySelector('.msg-error').classList.add('-visible');\n form.querySelector('.msg-error').innerHTML = 'Formato de CEP inválido';\n } else {\n const formData = new FormData();\n\n formData.set('sku', sku);\n formData.set('quantity', quantity);\n formData.set('zip', zip);\n\n if (!form.classList.contains('-sending')) {\n form.classList.remove('-error');\n form.classList.add('-sending');\n buttonSubmit.classList.add('-sending');\n\n try {\n const response = await fetch('/frete_produto', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded',\n },\n body: urlencodeFormData(formData),\n });\n\n const data = await response.json();\n\n if (data.error) {\n console.error('Ocorreu um erro ao consultar o frete');\n console.error(data.error);\n\n form.classList.add('error');\n form.querySelector('.msg-error').classList.add('-visible');\n form.querySelector('.msg-error').innerHTML =\n 'Ocorreu um erro ao calcular o frete, favor verifique seu cep.';\n\n setTimeout(function () {\n form.classList.remove('-error');\n form.querySelector('.msg-error').classList.remove('-visible');\n buttonSubmit.classList.remove('-sending');\n }, 3500);\n } else {\n const methods = JSON.parse(data.methods);\n const address = data.address_details;\n\n let result = `

Enviando para

${address.street_name}, ${address.neighborhood} - ${address.city}/${address.state}

`;\n\n result += '';\n\n document.querySelector('[data-list-shipping]').innerHTML = result;\n }\n } catch (error) {\n console.error('Erro ao enviar dados para consulta de frete');\n console.error(error);\n form.classList.add('error');\n form.querySelector('.msg-error').classList.add('-visible');\n form.querySelector('.msg-error').innerHTML = 'Ocorreu um erro ao calcular o frete, favor verifique seu cep.';\n buttonSubmit.classList.remove('-sending');\n }\n\n form.classList.remove('-sending');\n buttonSubmit.classList.remove('-sending');\n }\n }\n },\n\n init: function () {\n const _this = this;\n\n const form = document.querySelector('[name=\"shipping-form\"]');\n const inputValue = form.querySelector('.input');\n\n inputValue.addEventListener('input', (event) => {\n const x = event.target.value.replace(/\\D/g, '').match(/(\\d{0,5})(\\d{0,3})/);\n event.target.value = !x[2] ? x[1] : x[1] + '-' + x[2];\n });\n\n form.addEventListener('submit', (event) => {\n event.preventDefault();\n\n _this.handleShipping(form);\n });\n },\n};\n\nexport default Shipping;\n","import { formatMoney } from '../../components/utilities'\n\nconst Customizations = {\n\n // Configura exibição do valor individual de cada personalização\n handleIndividualPrices: function() {\n const customs = document.querySelectorAll('[data-custom-option]')\n\n customs.forEach(custom => {\n const options = custom.querySelectorAll('[data-customization]')\n const displayValue = custom.querySelector('[data-value]')\n if (!displayValue) return\n\n options.forEach(option => {\n option.addEventListener('change', () => {\n const type = option.getAttribute('type')\n const value = Number(option.getAttribute('data-customization-price'))\n\n if (value > 0) {\n \n // Separa validação por input de seleção e input de texto\n if (type === 'radio' || type === 'checkbox') {\n option.checked ?\n displayValue.innerText = `+ ${formatMoney(value)}` :\n displayValue.innerText = ''\n\n } else if (type === 'text' || type === 'textarea') {\n option.value != '' ?\n displayValue.innerText = `+ ${formatMoney(value)}` :\n displayValue.innerText = ''\n }\n\n } else {\n displayValue.innerText = ''\n }\n })\n })\n })\n },\n\n // Marca a primeira opção das customizações que possuem mais de uma opção\n markFirstOption: function() {\n const customs = document.querySelectorAll('[data-custom-option]')\n customs.forEach(custom => {\n const inputs = custom.querySelectorAll('input[type=\"radio\"], input[type=\"checkbox\"]')\n if (inputs.length > 0) {\n const firstAvailable = custom.querySelector('.label.-available')\n if (firstAvailable) firstAvailable.click()\n }\n })\n },\n\n init: function() {\n this.handleIndividualPrices()\n this.markFirstOption()\n }\n}\n\nexport default Customizations\n","import { slideToggle } from '../../components/utilities';\n\nexport default function setProductTabs() {\n const descriptionDropdowns = document.querySelectorAll('[data-description-dropdown]');\n\n descriptionDropdowns.forEach((tab) => {\n tab.addEventListener('click', () => {\n tab.classList.toggle('-open');\n const contentWrapper = tab.parentElement.querySelector('.content');\n const content = contentWrapper.querySelector('.text');\n slideToggle(contentWrapper, content);\n });\n });\n}\n","import setGallery from './product/setGallery';\nimport Shipping from '../components/shipping';\nimport Customizations from './product/customizations';\nimport setPopupSizes from './product/setSizeGuide';\nimport setCarousel from '../components/carousel';\n\nimport setProductTabs from './product/setProductTabs';\n//addImports\n\nimport { updatePriceBlock } from '../components/utilities';\nimport setTopBar from '../components/topBar';\n\nconst Product = {\n mainSlider: {\n element: document.querySelector('[data-main-slider]'),\n swiper: false,\n },\n thumbsSlider: {\n element: document.querySelector('[data-slider-thumbs]'),\n swiper: false,\n },\n sectionProduct: document.querySelector('[data-section-product]'),\n imagesWithoutSkus: [],\n thumbsWithoutSkus: [],\n imagesWithSkus: {},\n thumbsWithSkus: {},\n\n setImages: function () {\n const mainProdId = window.mainProduct;\n const variants = window.productVariants[mainProdId];\n let skus = [];\n if (variants) skus = variants.map((variant) => variant.sku);\n\n // Armazena os slides de imagens com e sem SKU\n Product.setImagesWithSkus(skus);\n Product.setImagesWithoutSkus();\n\n // Altera as imagens conforme troca de SKU selecionado\n Product.sectionProduct.addEventListener('vnda:sku-change', (event) => {\n Product.updateImages(event.detail.sku);\n window.lazyLoad.init();\n });\n\n // Exibe as imagens do SKU da primeira variante\n const sku = Product.sectionProduct.querySelector('[data-product-purchase] [name=\"sku\"]').value;\n Product.updateImages(sku);\n window.lazyLoad.init();\n },\n\n setImagesWithoutSkus: function () {\n const thumbsElement = Product.thumbsSlider.element;\n const mainElement = Product.mainSlider.element;\n\n if (thumbsElement) Product.thumbsWithoutSkus = thumbsElement.querySelectorAll('[data-without-sku]');\n\n if (mainElement) Product.imagesWithoutSkus = mainElement.querySelectorAll('[data-without-sku]');\n },\n\n setImagesWithSkus: function (skus) {\n const thumbsElement = Product.thumbsSlider.element;\n const mainElement = Product.mainSlider.element;\n\n // Busca todas as imagens marcadas com SKU\n const images = [\n ...thumbsElement.querySelectorAll('[data-with-sku]'),\n ...mainElement.querySelectorAll('[data-with-sku]'),\n ];\n\n // Separa as imagens dentro por SKU, dentro de Thumbs e Main\n skus.forEach((sku) => {\n Product.imagesWithSkus[sku] = [];\n Product.thumbsWithSkus[sku] = [];\n\n images.forEach((image) => {\n const imageSkus = image.getAttribute('data-skus').split(',');\n\n let type = 'main';\n if (image.getAttribute('data-image-thumb') != null) type = 'thumb';\n\n if (imageSkus.includes(sku)) {\n type == 'main' ? Product.imagesWithSkus[sku].push(image) : Product.thumbsWithSkus[sku].push(image);\n }\n });\n });\n },\n\n updateImages: function (sku) {\n const thumbs = Product.thumbsSlider.swiper;\n const main = Product.mainSlider.swiper;\n const skuThumbs = Product.thumbsWithSkus[sku];\n const skuImages = Product.imagesWithSkus[sku];\n\n // Adiciona/Remove imagens do swiper thumbs\n // de acordo com sku selecionado\n thumbs.removeAllSlides();\n thumbs.appendSlide(Product.thumbsWithoutSkus);\n if (skuThumbs) thumbs.appendSlide(skuThumbs);\n\n // Adiciona/Remove imagens do swiper principal\n // de acordo com sku selecionado\n main.removeAllSlides();\n main.appendSlide(Product.imagesWithoutSkus);\n if (skuImages) main.appendSlide(skuImages);\n\n // Atualiza o swiper após a remoção/adicão de slides\n thumbs.update();\n main.update();\n main.thumbs.update();\n\n // Muda para o primeiro slide\n thumbs.slideTo(0);\n main.slideTo(0);\n },\n\n setZoom: function () {\n const gallery = Product.mainSlider.swiper;\n\n // Altera qualidade da imagem na hora do zoom\n gallery.on('zoomChange', (swiper, scale, imageEl, slideEl) => {\n Product.handleZoomImageSources(slideEl);\n });\n\n // Adiciona acompanhamento do mouse ao zoom do Swiper, no Desktop\n if (window.innerWidth > 991) {\n // Zoom sem clique - descomentar caso precise de zoom no hover, e não no clique\n // IMPORTANTE: precisa ser 1 slidePerView\n // if (gallery.params.slidesPerView === 1) {\n // Product.mainSlider.element.classList.add('-hover-zoom');\n // Product.mainSlider.element.addEventListener('mouseenter', () => { gallery.zoom.in() })\n // Product.mainSlider.element.addEventListener('mouseleave', () => { gallery.zoom.out() })\n // }\n\n // Ao trocar de slide, remove o zoom de qualquer slide que possa ter ele\n gallery.on('slideChangeTransitionEnd', () => {\n gallery.zoom.out();\n gallery.slides.forEach((slide) => {\n slide.classList.remove('-zoomed');\n });\n });\n\n gallery.slides.forEach((slide) => {\n // Ação que acompanha o movimento do mouse por cima do slide - Desktop\n if (window.innerWidth > 991) {\n slide.addEventListener('mousemove', (event) => {\n if (slide.classList.contains('-zoomed')) {\n const zoomContainer = slide.querySelector('.swiper-zoom-container');\n const zoomedImage = slide.querySelector('.swiper-zoom-target');\n\n // Utiliza o container pra calcular o percentual de moviento do mouse na superfície do swiper\n // z=0 y=0 é o centro, o máximo que cada eixo movimenta é até 50%\n const middleX = slide.clientWidth / 2;\n const middleY = slide.clientHeight / 2;\n const mouseX = event.clientX - slide.getBoundingClientRect().left - middleX;\n const mouseY = event.clientY - slide.getBoundingClientRect().top - middleY;\n const percentX = (mouseX * 100) / middleX / 2;\n const percentY = (mouseY * 100) / middleY / 2;\n\n // Com o percentual, calcula qual é o valor dele em pixels, com base na imagem ampliada.\n // Este valor é usado, inicialmente, para mover a imagem conforme o mouse move\n const imagePixelsX = (zoomedImage.getBoundingClientRect().width * percentX) / 100;\n const imagePixelsY = (zoomedImage.getBoundingClientRect().height * percentY) / 100;\n let moveX = imagePixelsX;\n let moveY = imagePixelsY;\n\n // Limitador, não deixa a imagem passar da área máxima dela fora do container\n const limitX = (zoomedImage.getBoundingClientRect().width - zoomContainer.clientWidth) / 2;\n const limitY = (zoomedImage.getBoundingClientRect().height - zoomContainer.clientHeight) / 2;\n\n if (moveX > limitX) moveX = limitX;\n if (moveX < limitX * -1) moveX = limitX * -1;\n\n if (moveY > limitY) moveY = limitY;\n if (moveY < limitY * -1) moveY = limitY * -1;\n\n // Modifica a direção do trajeto, com base na posição do mouse\n //direção esquerda/topo == negativo || direção direita/baixo = positivo\n if (mouseX < middleX) moveX = moveX * -1;\n if (mouseY < middleY) moveY = moveY * -1;\n\n zoomContainer.style.transform = `translate3d(${moveX}px, ${moveY}px, 0px)`;\n }\n });\n\n // Adiciona zoom com 1 clique nos swipers que tem somente 1 slidePerView\n if (gallery.params.slidesPerView === 1) {\n Product.mainSlider.element.classList.add('-single-click');\n slide.addEventListener('click', () => {\n if (slide.classList.contains('-zoomed')) {\n gallery.zoom.out();\n gallery.slides.forEach((slide) => {\n slide.classList.remove('-zoomed');\n });\n } else {\n gallery.zoom.in();\n }\n });\n }\n }\n });\n }\n },\n\n handleZoomImageSources: function (slide) {\n const image = slide.querySelector('img');\n if (!image) return;\n\n const zoomUrl = image.getAttribute('data-zoom-src');\n if (!zoomUrl) return;\n\n if (slide.classList.contains('-zoomed')) {\n image.src = zoomUrl;\n image.removeAttribute('srcset');\n image.removeAttribute('data-srcset');\n image.removeAttribute('data-zoom-src');\n\n Product.mainSlider.swiper.update();\n }\n },\n\n init: function () {\n const _this = this;\n\n setGallery(Product);\n _this.setImages();\n _this.setZoom();\n Customizations.init();\n setPopupSizes();\n Shipping.init();\n updatePriceBlock();\n setCarousel();\n\n setTopBar();\n\n setProductTabs();\n //calls\n },\n};\n\nwindow.addEventListener('DOMContentLoaded', () => {\n Product.init();\n});\n","export default function setPopupSizes() {\n const popup = document.querySelector('[data-size-popup]');\n const togglers = document.querySelectorAll('[data-action=\"toggle-popup\"]');\n\n if (popup && togglers.length > 0) {\n togglers.forEach((button) => {\n button.addEventListener('click', () => {\n popup.classList.toggle('-open');\n });\n });\n }\n}\n","import Swiper from 'swiper';\nimport { Navigation, Pagination } from 'swiper/modules';\n\nexport default function setCarousel() {\n const productsCarousel = document.querySelectorAll('[data-products-carousel]');\n\n productsCarousel.forEach((section) => {\n const carousel = section.querySelector('.swiper');\n const pagination = section.querySelector('.swiper-pagination');\n const next = section.querySelector('.swiper-button-next');\n const prev = section.querySelector('.swiper-button-prev');\n\n if (carousel) {\n const swiper = new Swiper(carousel, {\n modules: [Navigation, Pagination],\n slidesPerView: 2,\n spaceBetween: 16,\n watchOverflow: true,\n speed: 1000,\n navigation: {\n nextEl: next,\n prevEl: prev,\n },\n breakpoints: {\n 768: {\n slidesPerView: 3,\n },\n 1440: {\n slidesPerView: 4,\n },\n },\n });\n }\n });\n}\n","import Swiper from 'swiper';\nimport { Autoplay } from 'swiper/modules';\n\nexport default function setTopBar() {\n const topBar = document.querySelector(\"[data-top-bar]\");\n if (!topBar) return\n\n const topBarSwiper = new Swiper(topBar.querySelector('.swiper'), {\n modules: [Autoplay],\n slidesPerView: 1,\n spaceBetween: 0,\n watchOverflow: true,\n loop: true,\n speed: 1000,\n autoplay: {\n delay: 5000,\n disableOnInteraction: false,\n pauseOnMouseEnter: true,\n },\n });\n\n // Autoplay\n topBarSwiper.autoplay.stop();\n const eventType = window.mobile ? 'scroll' : 'mousemove';\n window.addEventListener(eventType, topBarSwiper.autoplay.start(), { once: true });\n}\n\n\n"],"names":["isObject","obj","constructor","Object","extend","target","src","keys","forEach","key","length","ssrDocument","body","addEventListener","removeEventListener","activeElement","blur","nodeName","querySelector","querySelectorAll","getElementById","createEvent","initEvent","createElement","children","childNodes","style","setAttribute","getElementsByTagName","createElementNS","importNode","location","hash","host","hostname","href","origin","pathname","protocol","search","doc","document","ssrWindow","navigator","userAgent","history","replaceState","pushState","go","back","CustomEvent","this","getComputedStyle","getPropertyValue","Image","Date","screen","setTimeout","clearTimeout","matchMedia","requestAnimationFrame","callback","cancelAnimationFrame","id","win","window","delay","now","getTranslate","el","axis","matrix","curTransform","transformMatrix","curStyle","currentStyle","WebKitCSSMatrix","transform","webkitTransform","split","map","a","replace","join","MozTransform","OTransform","MsTransform","msTransform","toString","m41","parseFloat","m42","o","prototype","call","slice","to","arguments","undefined","noExtend","i","nextSource","node","HTMLElement","nodeType","keysArray","filter","indexOf","nextIndex","len","nextKey","desc","getOwnPropertyDescriptor","enumerable","__swiper__","varName","varValue","setProperty","animateCSSModeScroll","_ref","swiper","targetPosition","side","startPosition","translate","time","startTime","duration","params","speed","wrapperEl","scrollSnapType","cssModeFrameID","dir","isOutOfBound","current","animate","getTime","progress","Math","max","min","easeProgress","cos","PI","currentPosition","scrollTo","overflow","element","selector","matches","showWarning","text","console","warn","err","tag","classes","classList","add","Array","isArray","trim","c","box","getBoundingClientRect","clientTop","clientLeft","scrollTop","scrollY","scrollLeft","scrollX","top","left","elementStyle","prop","child","previousSibling","parents","parent","parentElement","push","elementOuterSize","size","includeMargins","offsetWidth","e","support","deviceCached","browser","getSupport","smoothScroll","documentElement","touch","DocumentTouch","calcSupport","getDevice","overrides","_temp","platform","ua","device","ios","android","screenWidth","width","screenHeight","height","match","ipad","ipod","iphone","windows","macos","os","calcDevice","getBrowser","needPerspectiveFix","isSafari","toLowerCase","String","includes","major","minor","num","Number","isWebView","test","isSafariBrowser","need3dFix","calcBrowser","eventsEmitter","on","events","handler","priority","self","eventsListeners","destroyed","method","event","once","onceHandler","off","__emitterProxy","_len","args","_key","apply","onAny","eventsAnyListeners","offAny","index","splice","eventHandler","emit","data","context","_len2","_key2","unshift","toggleSlideClasses$1","slideEl","condition","className","contains","remove","toggleSlideClasses","processLazyPreloader","imageEl","closest","isElement","slideClass","lazyEl","lazyPreloaderClass","shadowRoot","unlazy","slides","removeAttribute","preload","amount","lazyPreloadPrevNext","slidesPerView","slidesPerViewDynamic","ceil","activeIndex","grid","rows","activeColumn","preloadColumns","from","_","column","slideIndexLastInView","rewind","loop","realIndex","update","updateSize","clientWidth","clientHeight","isHorizontal","isVertical","parseInt","isNaN","assign","updateSlides","getDirectionPropertyValue","label","getDirectionLabel","slidesEl","swiperSize","rtlTranslate","rtl","wrongRTL","isVirtual","virtual","enabled","previousSlidesLength","slidesLength","snapGrid","slidesGrid","slidesSizesGrid","offsetBefore","slidesOffsetBefore","offsetAfter","slidesOffsetAfter","previousSnapGridLength","previousSlidesGridLength","spaceBetween","slidePosition","prevSlideSize","virtualSize","marginLeft","marginRight","marginBottom","marginTop","centeredSlides","cssMode","gridEnabled","slideSize","initSlides","unsetSlides","shouldResetSlideSize","breakpoints","slide","updateSlide","slideStyles","currentTransform","currentWebKitTransform","roundLengths","paddingLeft","paddingRight","boxSizing","floor","swiperSlideSize","abs","slidesPerGroup","slidesPerGroupSkip","effect","setWrapperSize","updateWrapperSize","newSlidesGrid","slidesGridItem","groups","slidesBefore","slidesAfter","groupSize","slideIndex","centeredSlidesBounds","allSlidesSize","slideSizeValue","maxSnap","snap","centerInsufficientSlides","offsetSize","allSlidesOffset","snapIndex","addToSnapGrid","addToSlidesGrid","v","watchOverflow","checkOverflow","watchSlidesProgress","updateSlidesOffset","backFaceHiddenClass","containerModifierClass","hasClassBackfaceClassAdded","maxBackfaceHiddenSlides","updateAutoHeight","activeSlides","newHeight","setTransition","getSlideByIndex","getSlideIndexByData","visibleSlides","offsetHeight","minusOffset","offsetLeft","offsetTop","swiperSlideOffset","cssOverflowAdjustment","updateSlidesProgress","offsetCenter","visibleSlidesIndexes","slideOffset","slideProgress","minTranslate","originalSlideProgress","slideBefore","slideAfter","isFullyVisible","isVisible","slideVisibleClass","slideFullyVisibleClass","originalProgress","updateProgress","multiplier","translatesDiff","maxTranslate","isBeginning","isEnd","progressLoop","wasBeginning","wasEnd","isBeginningRounded","isEndRounded","firstSlideIndex","lastSlideIndex","firstSlideTranslate","lastSlideTranslate","translateMax","translateAbs","autoHeight","updateSlidesClasses","getFilteredSlide","activeSlide","prevSlide","nextSlide","nextEls","nextElementSibling","next","elementNextAll","prevEls","previousElementSibling","prev","elementPrevAll","slideActiveClass","slideNextClass","slidePrevClass","emitSlidesClasses","updateActiveIndex","newActiveIndex","previousIndex","previousRealIndex","previousSnapIndex","getVirtualRealIndex","aIndex","normalizeSlideIndex","getActiveIndexByTranslate","skip","firstSlideInColumn","activeSlideIndex","getAttribute","initialized","runCallbacksOnInit","updateClickedSlide","path","pathEl","slideFound","clickedSlide","clickedIndex","slideToClickedSlide","virtualTranslate","currentTranslate","setTranslate","byController","newProgress","x","y","previousTranslate","translateTo","runCallbacks","translateBounds","internal","animating","preventInteractionOnTransition","newTranslate","isH","behavior","onTranslateToWrapperTransitionEnd","transitionEmit","direction","step","slideTo","initial","normalizedTranslate","normalizedGrid","normalizedGridNext","allowSlideNext","allowSlidePrev","transitionStart","transitionEnd","t","_immediateVirtual","_cssModeVirtualInitialSet","initialSlide","onSlideToWrapperTransitionEnd","slideToLoop","newIndex","targetSlideIndex","cols","needLoopFix","loopFix","slideRealIndex","slideNext","perGroup","slidesPerGroupAuto","increment","loopPreventsSliding","_clientLeft","slidePrev","normalize","val","normalizedSnapGrid","prevSnap","prevSnapIndex","prevIndex","lastIndex","slideReset","slideToClosest","threshold","currentSnap","slideToIndex","slideSelector","loopedSlides","getSlideIndex","loopCreate","shouldFillGroup","shouldFillGrid","addBlankSlides","amountOfSlides","slideBlankClass","append","loopAddBlankSlides","recalcSlides","byMousewheel","loopAdditionalSlides","fill","prependSlidesIndexes","appendSlidesIndexes","isNext","isPrev","slidesPrepended","slidesAppended","activeColIndexWithShift","colIndexToPrepend","__preventObserver__","swiperLoopMoveDOM","prepend","currentSlideTranslate","diff","touchEventsData","startTranslate","shift","controller","control","loopParams","loopDestroy","newSlidesOrder","swiperSlideIndex","preventEdgeSwipe","startX","edgeSwipeDetection","edgeSwipeThreshold","innerWidth","preventDefault","onTouchStart","originalEvent","type","pointerId","targetTouches","touchId","identifier","pageX","touches","simulateTouch","pointerType","targetEl","touchEventsTarget","which","button","isTouched","isMoved","swipingClassHasValue","noSwipingClass","eventPath","composedPath","noSwipingSelector","isTargetShadow","noSwiping","base","__closestFrom","assignedSlot","found","getRootNode","closestElement","allowClick","swipeHandler","currentX","currentY","pageY","startY","allowTouchCallbacks","isScrolling","startMoving","touchStartTime","swipeDirection","allowThresholdMove","focusableElements","shouldPreventDefault","allowTouchMove","touchStartPreventDefault","touchStartForcePreventDefault","isContentEditable","freeMode","onTouchMove","targetTouch","changedTouches","preventedByNestedSwiper","touchReleaseOnEdges","previousX","previousY","diffX","diffY","sqrt","touchAngle","atan2","preventTouchMoveFromPointerMove","cancelable","touchMoveStopPropagation","nested","stopPropagation","touchesDiff","oneWayMovement","touchRatio","prevTouchesDirection","touchesDirection","isLoop","allowLoopFix","evt","bubbles","detail","bySwiperTouchMove","dispatchEvent","allowMomentumBounce","grabCursor","setGrabCursor","loopSwapReset","disableParentSwiper","resistanceRatio","resistance","followFinger","onTouchEnd","touchEndTime","timeDiff","pathTree","lastClickTime","currentPos","swipeToLast","stopIndex","rewindFirstIndex","rewindLastIndex","ratio","longSwipesMs","longSwipes","longSwipesRatio","shortSwipes","navigation","nextEl","prevEl","onResize","setBreakpoint","isVirtualLoop","autoplay","running","paused","resizeTimeout","resume","onClick","preventClicks","preventClicksPropagation","stopImmediatePropagation","onScroll","onLoad","onDocumentTouchStart","documentTouchHandlerProceeded","touchAction","capture","domMethod","swiperMethod","passive","updateOnWindowResize","isGridEnabled","defaults","init","swiperElementNodeName","resizeObserver","createElements","eventsPrefix","url","breakpointsBase","uniqueNavElements","passiveListeners","wrapperClass","_emitClasses","moduleExtendParams","allModulesParams","moduleParamName","moduleParams","auto","prototypes","transition","transitionDuration","transitionDelay","moving","isLocked","cursor","unsetGrabCursor","attachEvents","bind","detachEvents","breakpoint","getBreakpoint","currentBreakpoint","breakpointParams","originalParams","wasMultiRow","isMultiRow","wasGrabCursor","isGrabCursor","wasEnabled","emitContainerClasses","wasModuleEnabled","isModuleEnabled","disable","enable","directionChanged","needsReLoop","wasLoop","changeDirection","isEnabled","hasLoop","containerEl","currentHeight","innerHeight","points","point","minRatio","substr","value","sort","b","wasLocked","lastSlideRightEdge","addClasses","classNames","suffixes","entries","prefix","resultClasses","item","prepareClasses","removeClasses","extendedDefaults","Swiper","swipers","newParams","modules","__modules__","mod","extendParams","swiperParams","passedParams","eventName","velocity","trunc","clickTimeout","velocities","imagesToLoad","imagesLoaded","property","setProgress","cls","getSlideClasses","updates","view","exact","spv","breakLoop","translateValue","translated","complete","newDirection","needUpdate","currentDirection","changeLanguageDirection","mount","mounted","parentNode","toUpperCase","getWrapperSelector","getWrapper","slideSlots","hostEl","lazyElements","destroy","deleteInstance","cleanStyles","object","deleteProps","extendDefaults","newDefaults","installModule","use","module","m","checkProps","Navigation","getEl","res","toggleEl","disabled","subEl","disabledClass","tagName","lockClass","onPrevClick","onNextClick","initButton","destroyButton","hideOnClick","hiddenClass","navigationDisabledClass","_s","targetIsButton","find","pagination","clickable","isHidden","toggle","Pagination","pfx","bulletSize","bulletElement","renderBullet","renderProgressbar","renderFraction","renderCustom","progressbarOpposite","dynamicBullets","dynamicMainBullets","formatFractionCurrent","number","formatFractionTotal","bulletClass","bulletActiveClass","modifierClass","currentClass","totalClass","progressbarFillClass","progressbarOppositeClass","clickableClass","horizontalClass","verticalClass","paginationDisabledClass","bullets","dynamicBulletIndex","isPaginationDisabled","setSideBullets","bulletEl","position","onBulletClick","total","firstIndex","midIndex","classesToRemove","suffix","s","flat","bullet","bulletIndex","firstDisplayedBullet","lastDisplayedBullet","dynamicBulletsLength","bulletsOffset","offsetProp","subElIndex","fractionEl","textContent","totalEl","progressbarDirection","scale","scaleX","scaleY","progressEl","innerHTML","render","paginationHTML","numberOfBullets","Zoom","zoom","limitToOriginalSize","maxRatio","containerClass","zoomedSlideClass","fakeGestureTouched","fakeGestureMoved","currentScale","isScaling","evCache","gesture","originX","originY","slideWidth","slideHeight","imageWrapEl","image","minX","minY","maxX","maxY","touchesStart","touchesCurrent","prevPositionX","prevPositionY","prevTime","allowTouchMoveTimeout","getDistanceBetweenTouches","x1","y1","x2","y2","getMaxRatio","naturalWidth","imageMaxRatio","eventWithinSlide","onGestureStart","scaleStart","getScaleOrigin","onGestureChange","pointerIndex","findIndex","cachedEv","scaleMove","onGestureEnd","eventWithinZoomContainer","scaledWidth","scaledHeight","scaleRatio","onTransitionEnd","zoomIn","touchX","touchY","offsetX","offsetY","translateX","translateY","imageWidth","imageHeight","translateMinX","translateMinY","translateMaxX","translateMaxY","forceZoomRatio","zoomOut","zoomToggle","getListeners","passiveListener","activeListenerWithCapture","defineProperty","get","set","momentumDurationX","momentumDurationY","momentumDistanceX","newPositionX","momentumDistanceY","newPositionY","momentumDuration","in","out","Autoplay","timeout","raf","timeLeft","waitForTransition","disableOnInteraction","stopOnLastSlide","reverseDirection","pauseOnMouseEnter","autoplayTimeLeft","wasPaused","pausedByTouch","touchStartTimeout","slideChanged","pausedByInteraction","pausedByPointerEnter","autoplayDelayTotal","autoplayDelayCurrent","autoplayStartTime","calcTimeLeft","run","delayForce","currentSlideDelay","activeSlideEl","getSlideDelay","proceed","start","stop","pause","reset","onVisibilityChange","visibilityState","onPointerEnter","onPointerLeave","Thumb","thumbs","multipleActiveThumbs","autoScrollOffset","slideThumbActiveClass","thumbsContainerClass","swiperCreated","onThumbClick","thumbsSwiper","thumbsParams","SwiperClass","thumbsSwiperParams","thumbsToActivate","thumbActiveClass","useOffset","currentThumbsIndex","newThumbsIndex","newThumbsSlide","getThumbsElementAndInit","thumbsElement","onThumbsSwiper","watchForThumbsToAppear","appendSlide","appendElement","tempDOM","observer","prependSlide","prependElement","addSlide","activeIndexBuffer","baseLength","slidesBuffer","currentSlide","removeSlide","slidesIndexes","indexToRemove","removeAllSlides","Manipulation","setGallery","Product","productImagesContainer","thumbsSlider","preloadImages","main","mainSlider","mainImagesContainer","thumbsContainer","halfContainerHeight","productImages","containerTop","containerBottom","elementTop","elementBottom","activeThumb","thumb","relativeSlide","elementToScroll","scroll","handleCustomPagination","zoomChange","urlencodeFormData","formData","string","encode","encodeURIComponent","pair","formatMoney","toFixed","prototypeGroup","protoMethod","animationFrame","resizeHandler","orientationChangeHandler","ResizeObserver","newWidth","_ref2","contentBoxSize","contentRect","inlineSize","blockSize","observe","unobserve","observers","attach","options","MutationObserver","WebkitMutationObserver","mutations","observerUpdate","attributes","childList","characterData","observeParents","observeSlideChildren","containerParents","disconnect","handleShipping","async","form","sku","quantity","zip","buttonSubmit","FormData","response","fetch","headers","json","error","methods","JSON","parse","address","address_details","result","street_name","neighborhood","city","state","price","name","description","_this","handleIndividualPrices","custom","displayValue","option","checked","innerText","markFirstOption","firstAvailable","click","setProductTabs","tab","contentWrapper","content","slideDown","slideUp","slideToggle","sectionProduct","imagesWithoutSkus","thumbsWithoutSkus","imagesWithSkus","thumbsWithSkus","setImages","mainProdId","mainProduct","variants","productVariants","skus","variant","setImagesWithSkus","setImagesWithoutSkus","updateImages","lazyLoad","mainElement","images","imageSkus","skuThumbs","skuImages","setZoom","gallery","handleZoomImageSources","zoomContainer","zoomedImage","middleX","middleY","mouseX","clientX","mouseY","clientY","percentX","percentY","moveX","moveY","limitX","limitY","zoomUrl","popup","togglers","setPopupSizes","priceEls","priceEl","discount","dataset","discountPercent","Event","updatePriceBlock","section","carousel","topBar","topBarSwiper","eventType","mobile","setTopBar"],"sourceRoot":""}