{"version":3,"file":"6294-6343d1a11e700bd69576.js","mappings":";8FAAA,OAOC,WACA,aAEA,IAAIA,EAAS,CAAC,EAAEC,eAEhB,SAASC,IAGR,IAFA,IAAIC,EAAU,GAELC,EAAI,EAAGA,EAAIC,UAAUC,OAAQF,IAAK,CAC1C,IAAIG,EAAMF,UAAUD,GAChBG,IACHJ,EAAUK,EAAYL,EAASM,EAAWF,IAE5C,CAEA,OAAOJ,CACR,CAEA,SAASM,EAAYF,GACpB,GAAmB,iBAARA,GAAmC,iBAARA,EACrC,OAAOA,EAGR,GAAmB,iBAARA,EACV,MAAO,GAGR,GAAIG,MAAMC,QAAQJ,GACjB,OAAOL,EAAWU,MAAM,KAAML,GAG/B,GAAIA,EAAIM,WAAaC,OAAOC,UAAUF,WAAaN,EAAIM,SAASA,WAAWG,SAAS,iBACnF,OAAOT,EAAIM,WAGZ,IAAIV,EAAU,GAEd,IAAK,IAAIc,KAAOV,EACXP,EAAOkB,KAAKX,EAAKU,IAAQV,EAAIU,KAChCd,EAAUK,EAAYL,EAASc,IAIjC,OAAOd,CACR,CAEA,SAASK,EAAaW,EAAOC,GAC5B,OAAKA,EAIDD,EACIA,EAAQ,IAAMC,EAGfD,EAAQC,EAPPD,CAQT,CAEqCE,EAAOC,SAC3CpB,EAAWqB,QAAUrB,EACrBmB,EAAOC,QAAUpB,QAKhB,KAFwB,EAAF,WACtB,OAAOA,CACP,UAFoB,OAEpB,YAIH,CArEA,8DCaA,MAAMsB,EAAa,CAACC,EAAGC,EAAIC,OAAU,EAAM,EAAMA,EAAK,EAAMD,GAAMD,GAAK,EAAME,EAAK,EAAMD,IAAOD,EAAI,EAAMC,GACrGD,EAoBJ,SAASG,EAAYC,EAAKC,EAAKC,EAAKC,GAEhC,GAAIH,IAAQC,GAAOC,IAAQC,EACvB,OAAOC,EAAA,EACX,MAAMC,EAAYC,GArBtB,SAAyBC,EAAGC,EAAYC,EAAYT,EAAKE,GACrD,IAAIQ,EACAC,EACApC,EAAI,EACR,GACIoC,EAAWH,GAAcC,EAAaD,GAAc,EACpDE,EAAWf,EAAWgB,EAAUX,EAAKE,GAAOK,EACxCG,EAAW,EACXD,EAAaE,EAGbH,EAAaG,QAEZC,KAAKC,IAAIH,GAfO,QAgBnBnC,EAfuB,IAgB7B,OAAOoC,CACX,CAK6BG,CAAgBR,EAAI,EAAG,EAAGN,EAAKE,GAExD,OAAQN,GAAY,IAANA,GAAiB,IAANA,EAAUA,EAAID,EAAWU,EAAST,GAAIK,EAAKE,EACxE,CC9CA,MAAMY,EAAShB,EAAY,IAAM,EAAG,EAAG,GACjCiB,EAAUjB,EAAY,EAAG,EAAG,IAAM,GAClCkB,EAAYlB,EAAY,IAAM,EAAG,IAAM,8DCA7C,MAAMmB,EAAUnB,EAAY,IAAM,KAAM,IAAM,KACxCoB,GAAS,EAAAC,EAAA,GAAcF,GACvBG,GAAY,EAAAC,EAAA,GAAaH,GCEzBI,EAAe,CACjBC,OAAQpB,EAAA,EACRW,OAAM,EACNE,UAAS,EACTD,QAAO,EACPS,OAAM,KACNC,UAAS,KACTC,QAAO,KACPR,OAAM,EACNE,UAAS,EACTH,QAAO,EACPU,WCjBgBC,IAAOA,GAAK,GAAK,EAAI,GAAMV,EAAOU,GAAK,IAAO,EAAIjB,KAAKkB,IAAI,GAAI,IAAMD,EAAI,MDmBvFE,EAA8BC,IAChC,GAAInD,MAAMC,QAAQkD,GAAa,EAE3B,OAAgC,IAAtBA,EAAWvD,OAAc,2DACnC,MAAOwD,EAAIC,EAAIC,EAAIC,GAAMJ,EACzB,OAAOjC,EAAYkC,EAAIC,EAAIC,EAAIC,EACnC,CACK,MAA0B,iBAAfJ,IAEZ,YAAuCK,IAA7Bd,EAAaS,GAA2B,wBAAwBA,MACnET,EAAaS,IAEjBA,CAAU,4BEvBrB,SAASM,GAAU,SAAEC,EAAW,IAAKD,UAAWE,EAAc,MAAEC,EAAK,KAAEC,EAAO,cAK1E,MAAMC,GAAkB,OAAcD,GAChCA,EAAKE,IAAIb,GACTA,EAA2BW,GAK3BG,EAAQ,CACVC,MAAM,EACNxD,MAAOkD,EAAe,IAKpBO,EC7BV,SAA8BC,EAAQT,GAClC,OAAOS,EAAOJ,KAAKK,GAAMA,EAAIV,GACjC,CD2B0BW,CAGtBT,GAASA,EAAMhE,SAAW+D,EAAe/D,OACnCgE,GACA,OAAcD,GAAiBD,GAC/BY,GAAoB,EAAAC,EAAA,GAAYL,EAAeP,EAAgB,CACjEE,KAAM7D,MAAMC,QAAQ6D,GACdA,GA9BSU,EA+BKb,EA/BGc,EA+BaX,EA9BjCU,EAAOT,KAAI,IAAMU,GAAUrC,IAAWsC,OAAO,EAAGF,EAAO5E,OAAS,MAD3E,IAAuB4E,EAAQC,EAiC3B,MAAO,CACHE,mBAAoBjB,EACpBkB,KAAO7D,IACHiD,EAAMvD,MAAQ6D,EAAkBvD,GAChCiD,EAAMC,KAAOlD,GAAK2C,EACXM,GAGnB,0BE7CA,SAASa,GAAQ,UAAEpB,EAAS,SAAEqB,EAAW,EAAG,MAAEC,EAAQ,GAAG,aAAEC,EAAe,IAAG,cAAEC,EAAgB,GAAE,gBAAEC,EAAkB,IAAG,aAAEC,EAAY,IAAEC,EAAG,IAAEC,EAAG,UAAEC,EAAY,GAAG,UAAEC,IAC/J,MAAMC,EAAS/B,EAAU,GACnBO,EAAQ,CACVC,MAAM,EACNxD,MAAO+E,GAGLC,EAAmBC,QACTlC,IAAR4B,EACOC,OACC7B,IAAR6B,GAEGtD,KAAKC,IAAIoD,EAAMM,GAAK3D,KAAKC,IAAIqD,EAAMK,GAD/BN,EAC0CC,EAEzD,IAAIM,EAAYZ,EAAQD,EACxB,MAAMc,EAAQJ,EAASG,EACjBE,OAA0BrC,IAAjB2B,EAA6BS,EAAQT,EAAaS,GAK7DC,IAAWD,IACXD,EAAYE,EAASL,GACzB,MAAMM,EAAa/E,IAAO4E,EAAY5D,KAAKgE,KAAKhF,EAAIiE,GAC9CgB,EAAcjF,GAAM8E,EAASC,EAAU/E,GACvCkF,EAAiBlF,IACnB,MAAMmF,EAAQJ,EAAU/E,GAClBoF,EAASH,EAAWjF,GAC1BiD,EAAMC,KAAOlC,KAAKC,IAAIkE,IAAUZ,EAChCtB,EAAMvD,MAAQuD,EAAMC,KAAO4B,EAASM,CAAM,EAQ9C,IAAIC,EACAC,EACJ,MAAMC,EAAsBvF,IAjCN,IAAC2E,KAkCA1B,EAAMvD,WAlCS+C,IAAR4B,GAAqBM,EAAIN,QAAiB5B,IAAR6B,GAAqBK,EAAIL,KAoCrFe,EAAsBrF,EACtBsF,GAAW,EAAAE,EAAA,GAAO,CACd9C,UAAW,CAACO,EAAMvD,MAAOgF,EAAgBzB,EAAMvD,QAC/CqE,UAAU,OAAsBkB,EAAYjF,EAAGiD,EAAMvD,OACrD+F,QAASvB,EACTwB,UAAWvB,EACXI,YACAC,cACF,EAGN,OADAe,EAAmB,GACZ,CACH3B,mBAAoB,KACpBC,KAAO7D,IAOH,IAAI2F,GAAkB,EAUtB,OATKL,QAAoC7C,IAAxB4C,IACbM,GAAkB,EAClBT,EAAclF,GACduF,EAAmBvF,SAMKyC,IAAxB4C,GAAqCrF,EAAIqF,EAClCC,EAASzB,KAAK7D,EAAIqF,KAGxBM,GAAmBT,EAAclF,GAC3BiD,EACX,EAGZ,gBClFA,MAAM2C,EAAmBC,IACrB,MAAMC,EAAgB,EAAGC,eAAgBF,EAAOE,GAChD,MAAO,CACHC,MAAO,IAAM,KAAMH,OAAOC,GAAe,GACzCG,KAAM,KAAM,QAAYH,GAKxBI,IAAK,IAAM,KAAUC,aAAe,KAAUJ,UAAYK,YAAYF,MACzE,qCCFL,MAAMG,EAAQ,CACVC,MAAOxC,EACPA,QAAO,EACPyC,MAAO7D,EACPA,UAAWA,EACX8C,OAAM,KASV,SAASgB,GAAa,SAAEC,GAAW,EAAI,MAAEC,EAAQ,EAAC,OAAEC,EAASf,EAAiBlD,UAAWkE,EAAW,KAAEC,EAAO,YAAW,OAAEC,EAAS,EAAC,YAAEC,EAAc,EAAC,WAAEC,EAAa,OAAM,OAAEC,EAAM,OAAEC,EAAM,WAAEC,EAAU,SAAEC,KAAaC,IACjN,IAEIC,EACAC,EAHAC,EAAQ,EACRC,GAAa,EAOjB,MAAMC,EAAwB,KAC1BH,EAAyB,IAAII,SAASC,IAClCN,EAAyBM,CAAO,GAClC,EAIN,IAAIC,EADJH,IAEA,MAAMI,EAAmBzB,EAAMQ,IAASnE,EAKxC,IAAIqF,EACAD,IAAqBpF,GACK,iBAAnBkE,EAAY,KAInBmB,GAAwB,EAAAvE,EAAA,GAAY,CAAC,EAAG,KAAMoD,EAAa,CACvDoB,OAAO,IAEXpB,EAAc,CAAC,EAAG,MAEtB,MAAMqB,EAAYH,EAAiB,IAAKT,EAAS3E,UAAWkE,IAC5D,IAAIsB,EACe,WAAflB,IACAkB,EAAoBJ,EAAiB,IAC9BT,EACH3E,UAAW,IAAIkE,GAAapF,UAC5BuC,WAAYsD,EAAQtD,UAAY,MAGxC,IAAIoE,EAAY,OACZC,EAAW,KACXC,EAAY,KACZC,EAAa,KASoB,OAAjCL,EAAUrE,oBAA+BkD,IACzCmB,EAAUrE,oBAAqB,OAAsBqE,IAEzD,MAAM,mBAAErE,GAAuBqE,EAC/B,IAAIM,EAAmBC,IACnBC,EAAgBD,IACO,OAAvB5E,IACA2E,EAAmB3E,EAAqBmD,EACxC0B,EAAgBF,GAAoBzB,EAAS,GAAKC,GAEtD,IAAI2B,EAAc,EAClB,MAAMC,EAAQ5C,IACV,GAAkB,OAAdsC,EACA,OAOAb,EAAQ,IACRa,EAAYrH,KAAKqD,IAAIgE,EAAWtC,IAChCyB,EAAQ,IACRa,EAAYrH,KAAKqD,IAAI0B,EAAY0C,EAAgBjB,EAAOa,IAExDK,EADa,OAAbN,EACcA,EAMApH,KAAK4H,MAAM7C,EAAYsC,GAAab,EAGtD,MAAMqB,EAAmBH,EAAchC,GAASc,GAAS,EAAI,GAAK,GAC5DsB,EAAiBtB,GAAS,EAAIqB,EAAmB,EAAIA,EAAmBJ,EAC9EC,EAAc1H,KAAKsD,IAAIuE,EAAkB,GAKvB,aAAdV,GAAyC,OAAbC,IAC5BM,EAAcD,GAElB,IAAIM,EAAUL,EACVM,EAAiBf,EACrB,GAAInB,EAAQ,CAMR,MAAMmC,EAAWjI,KAAKqD,IAAIqE,EAAaD,GAAiBF,EAKxD,IAAIW,EAAmBlI,KAAKmI,MAAMF,GAK9BG,EAAoBH,EAAW,GAK9BG,GAAqBH,GAAY,IAClCG,EAAoB,GAEF,IAAtBA,GAA2BF,IAC3BA,EAAmBlI,KAAKqD,IAAI6E,EAAkBpC,EAAS,GAIhCuC,QAAQH,EAAmB,KAE3B,YAAflC,GACAoC,EAAoB,EAAIA,EACpBrC,IACAqC,GAAqBrC,EAAcwB,IAGnB,WAAfvB,IACLgC,EAAiBd,IAGzBa,GAAU,EAAAf,EAAA,GAAM,EAAG,EAAGoB,GAAqBb,CAC/C,CAMA,MAAMtF,EAAQ6F,EACR,CAAE5F,MAAM,EAAOxD,MAAOkH,EAAY,IAClCoC,EAAenF,KAAKkF,GACtBhB,IACA9E,EAAMvD,MAAQqI,EAAsB9E,EAAMvD,QAE9C,IAAI,KAAEwD,GAASD,EACV6F,GAAyC,OAAvBlF,IACnBV,EAAOsE,GAAS,EAAIkB,GAAeD,EAAgBC,GAAe,GAEtE,MAAMY,EAAmC,OAAblB,IACT,aAAdD,GAA2C,YAAdA,GAA2BjF,GAO7D,OANIkE,GACAA,EAASnE,EAAMvD,OAEf4J,GACAC,IAEGtG,CAAK,EAEVuG,EAAsB,KACxB3B,GAAmBA,EAAgB5B,OACnC4B,OAAkBpF,CAAS,EAEzBgH,EAAS,KACXtB,EAAY,OACZqB,IACAlC,IACAI,IACAW,EAAYC,EAAa,IAAI,EAE3BiB,EAAS,KACXpB,EAAY,WACZhB,GAAcA,IACdqC,IACAlC,GAAwB,EAEtBoC,EAAO,KACT,GAAIjC,EACA,OACCI,IACDA,EAAkBlB,EAAOgC,IAC7B,MAAMzC,EAAM2B,EAAgB3B,MAC5Be,GAAUA,IACO,OAAbmB,EACAC,EAAYnC,EAAMkC,EAEZC,GAA2B,aAAdF,IACnBE,EAAYnC,GAEE,aAAdiC,GACAT,IAEJY,EAAaD,EACbD,EAAW,KAKXD,EAAY,UACZN,EAAgB7B,OAAO,EAEvBS,GACAiD,IAEJ,MAAMC,EAAW,CACbC,KAAI,CAAChC,EAASiC,IACHtC,EAAuBqC,KAAKhC,EAASiC,GAEhD,QAAIC,GACA,OAAO,OAAsBpB,EACjC,EACA,QAAIoB,CAAKC,GACLA,GAAU,OAAsBA,GAChCrB,EAAcqB,EACG,OAAb3B,GAAsBP,GAA6B,IAAVL,EAIzCa,EAAYR,EAAgB3B,MAAQ6D,EAAUvC,EAH9CY,EAAW2B,CAKnB,EACA,YAAIpH,GACA,MAAMA,EAA4C,OAAjCsF,EAAUrE,oBACrB,OAAsBqE,GACtBA,EAAUrE,mBAChB,OAAO,OAAsBjB,EACjC,EACA,SAAI6E,GACA,OAAOA,CACX,EACA,SAAIA,CAAMwC,GACFA,IAAaxC,GAAUK,IAE3BL,EAAQwC,EACRL,EAASG,MAAO,OAAsBpB,GAC1C,EACA,SAAIzF,GACA,OAAOkF,CACX,EACAuB,OACAO,MAAO,KACH9B,EAAY,SACZC,EAAWM,CAAW,EAE1BzC,KAAM,KACFwB,GAAa,EACK,SAAdU,IAEJA,EAAY,OACZjB,GAAUA,IACVuC,IAAQ,EAEZA,OAAQ,KACe,OAAfnB,GACAK,EAAKL,GACTmB,GAAQ,EAEZS,SAAU,KACN/B,EAAY,UAAU,EAE1BgC,OAASpB,IACLV,EAAY,EACLM,EAAKI,KAGpB,OAAOY,CACX,+FCvSA,MAAMS,EAAU,KACVC,EAAc,IACdC,EAAc,GACdC,EAAa,IACbC,EAAa,EACnB,SAASC,GAAW,SAAE9H,EAAW,IAAG,OAAE+H,EAAS,IAAI,SAAE3G,EAAW,EAAC,KAAE4G,EAAO,IACtE,IAAIC,EACAC,GACJ,OAAQlI,IAAY,OAAsB2H,GAAc,8CACxD,IAAIQ,EAAe,EAAIJ,EAIvBI,GAAe,EAAA9C,EAAA,GAAMuC,EAAYC,EAAYM,GAC7CnI,GAAW,EAAAqF,EAAA,GAAMqC,EAAaC,GAAa,OAAsB3H,IAC7DmI,EAAe,GAIfF,EAAYG,IACR,MAAMC,EAAmBD,EAAeD,EAClC3F,EAAQ6F,EAAmBrI,EAC3BsI,EAAID,EAAmBjH,EACvBmH,EAAIC,EAAgBJ,EAAcD,GAClCM,EAAIpK,KAAKgE,KAAKG,GACpB,OAAOiF,EAAWa,EAAIC,EAAKE,CAAC,EAEhCP,EAAcE,IACV,MACM5F,EADmB4F,EAAeD,EACPnI,EAC3B0I,EAAIlG,EAAQpB,EAAWA,EACvBuH,EAAItK,KAAKkB,IAAI4I,EAAc,GAAK9J,KAAKkB,IAAI6I,EAAc,GAAKpI,EAC5D4I,EAAIvK,KAAKgE,KAAKG,GACdqG,EAAIL,EAAgBnK,KAAKkB,IAAI6I,EAAc,GAAID,GAErD,QADgBF,EAASG,GAAgBX,EAAU,GAAK,EAAI,KACzCiB,EAAIC,GAAKC,GAAMC,CAAC,IAOvCZ,EAAYG,GACE/J,KAAKgE,KAAK+F,EAAepI,KACxBoI,EAAehH,GAAYpB,EAAW,GACzCyH,EAEZS,EAAcE,GACA/J,KAAKgE,KAAK+F,EAAepI,IACIA,EAAWA,GAAvCoB,EAAWgH,KAI9B,MACMA,EAmBV,SAAyBH,EAAUC,EAAYY,GAC3C,IAAIC,EAASD,EACb,IAAK,IAAI9M,EAAI,EAAGA,EAAIgN,EAAgBhN,IAChC+M,GAAkBd,EAASc,GAAUb,EAAWa,GAEpD,OAAOA,CACX,CAzByBE,CAAgBhB,EAAUC,EAD1B,EAAIlI,GAGzB,GADAA,GAAW,OAAsBA,GAC7BkJ,MAAMd,GACN,MAAO,CACHrF,UAAW,IACXD,QAAS,GACT9C,YAGH,CACD,MAAM+C,EAAY1E,KAAKkB,IAAI6I,EAAc,GAAKJ,EAC9C,MAAO,CACHjF,YACAD,QAAwB,EAAfqF,EAAmB9J,KAAK8K,KAAKnB,EAAOjF,GAC7C/C,WAER,CACJ,CACA,MAAMgJ,EAAiB,GAQvB,SAASR,EAAgBJ,EAAcD,GACnC,OAAOC,EAAe/J,KAAK8K,KAAK,EAAIhB,EAAeA,EACvD,CClFA,MAAMiB,EAAe,CAAC,WAAY,UAC5BC,EAAc,CAAC,YAAa,UAAW,QAC7C,SAASC,EAAa5E,EAAS6E,GAC3B,OAAOA,EAAKC,MAAM3M,QAAyBiD,IAAjB4E,EAAQ7H,IACtC,CAuBA,SAASgG,GAAO,UAAE9C,EAAS,UAAE6B,EAAS,UAAEC,KAAc6C,IAClD,MAAM5C,EAAS/B,EAAU,GACnBoC,EAASpC,EAAUA,EAAU7D,OAAS,GAKtCoE,EAAQ,CAAEC,MAAM,EAAOxD,MAAO+E,IAC9B,UAAEiB,EAAS,QAAED,EAAO,KAAEkF,EAAI,SAAEhI,EAAQ,SAAEoB,EAAQ,uBAAEqI,GA9B1D,SAA0B/E,GACtB,IAAIgF,EAAgB,CAChBtI,SAAU,EACV2B,UAAW,IACXD,QAAS,GACTkF,KAAM,EACNyB,wBAAwB,KACrB/E,GAGP,IAAK4E,EAAa5E,EAAS2E,IACvBC,EAAa5E,EAAS0E,GAAe,CACrC,MAAMO,EAAU7B,EAAWpD,GAC3BgF,EAAgB,IACTA,KACAC,EACH3B,KAAM,GAEV0B,EAAcD,wBAAyB,CAC3C,CACA,OAAOC,CACX,CASsFE,CAAiB,IAC5FlF,EACHtD,WAAW,OAAsBsD,EAAQtD,UAAY,KAEnDyI,EAAkBzI,GAAY,EAC9B+G,EAAerF,GAAW,EAAIzE,KAAK8K,KAAKpG,EAAYiF,IACpD8B,EAAe3H,EAASL,EACxBiI,GAAsB,OAAsB1L,KAAK8K,KAAKpG,EAAYiF,IAQlEgC,EAAkB3L,KAAKC,IAAIwL,GAAgB,EAGjD,IAAIG,EACJ,GAHApI,IAAcA,EAAYmI,EAAkB,IAAO,GACnDpI,IAAcA,EAAYoI,EAAkB,KAAQ,IAEhD7B,EAAe,EAAG,CAClB,MAAM+B,EAAc1B,EAAgBuB,EAAqB5B,GAEzD8B,EAAiB5M,IACb,MAAM4K,EAAW5J,KAAKgE,KAAK8F,EAAe4B,EAAsB1M,GAChE,OAAQ8E,EACJ8F,IACO4B,EACC1B,EAAe4B,EAAsBD,GACrCI,EACA7L,KAAK8L,IAAID,EAAc7M,GACvByM,EAAezL,KAAK+L,IAAIF,EAAc7M,GAAI,CAE9D,MACK,GAAqB,IAAjB8K,EAEL8B,EAAiB5M,GAAM8E,EACnB9D,KAAKgE,KAAK0H,EAAsB1M,IAC3ByM,GACID,EAAkBE,EAAsBD,GAAgBzM,OAEpE,CAED,MAAMgN,EAAoBN,EAAsB1L,KAAK8K,KAAKhB,EAAeA,EAAe,GACxF8B,EAAiB5M,IACb,MAAM4K,EAAW5J,KAAKgE,KAAK8F,EAAe4B,EAAsB1M,GAE1DiN,EAAWjM,KAAKqD,IAAI2I,EAAoBhN,EAAG,KACjD,OAAQ8E,EACH8F,IACK4B,EACE1B,EAAe4B,EAAsBD,GACrCzL,KAAKkM,KAAKD,GACVD,EACIP,EACAzL,KAAKmM,KAAKF,IAClBD,CAAkB,CAElC,CACA,MAAO,CACHpJ,mBAAoBwI,GAAyBzJ,GAAmB,KAChEkB,KAAO7D,IACH,MAAMoN,EAAUR,EAAc5M,GAC9B,GAAKoM,EAqBDnJ,EAAMC,KAAOlD,GAAK2C,MArBO,CACzB,IAAI0K,EAAkBb,EACZ,IAANxM,IAOIqN,EADAvC,EAAe,GACG,OAAsB8B,EAAe5M,EAAGoN,GAGxC,GAG1B,MAAME,EAA2BtM,KAAKC,IAAIoM,IAAoB7I,EACxD+I,EAA+BvM,KAAKC,IAAI6D,EAASsI,IAAY7I,EACnEtB,EAAMC,KACFoK,GAA4BC,CACpC,CAKA,OADAtK,EAAMvD,MAAQuD,EAAMC,KAAO4B,EAASsI,EAC7BnK,CAAK,EAGxB,wDC5HA,MAAMuK,EAAuB,IAC7B,SAASC,EAAsBxF,GAC3B,IAAItF,EAAW,EAEf,IAAIM,EAAQgF,EAAUpE,KAAKlB,GAC3B,MAAQM,EAAMC,MAAQP,EAAW6K,GAC7B7K,GAHa,GAIbM,EAAQgF,EAAUpE,KAAKlB,GAE3B,OAAOA,GAAY6K,EAAuBhF,IAAW7F,CACzD,gECZA,MAAM+K,EAAyB,EAC/B,SAASC,EAAsBC,EAAc5N,EAAGoN,GAC5C,MAAMS,EAAQ7M,KAAKsD,IAAItE,EAAI0N,EAAwB,GACnD,OAAO,OAAkBN,EAAUQ,EAAaC,GAAQ7N,EAAI6N,EAChE,2ECNA,MAAMC,GACO,ECDPC,EAAsBrK,GAAWzE,MAAMC,QAAQwE,IAAgC,iBAAdA,EAAO,GCE9E,SAASsK,EAAuBtK,GAC5B,OAAO2F,SAAS3F,GACO,iBAAXA,GAAuBuK,EAAqBvK,IACpDqK,EAAmBrK,IAClBzE,MAAMC,QAAQwE,IAAWA,EAAOwK,MAAMF,GAC/C,CACA,MAAMG,EAAsB,EAAElD,EAAGC,EAAGE,EAAGC,KAAO,gBAAgBJ,MAAMC,MAAME,MAAMC,KAC1E4C,EAAuB,CACzBrM,OAAQ,SACRkB,KAAM,OACN3B,OAAQ,UACRC,QAAS,WACTC,UAAW,cACXQ,OAAQsM,EAAoB,CAAC,EAAG,IAAM,IAAM,IAC5CpM,QAASoM,EAAoB,CAAC,IAAM,EAAG,EAAG,MAC1C5M,OAAQ4M,EAAoB,CAAC,IAAM,IAAM,KAAO,MAChD7M,QAAS6M,EAAoB,CAAC,IAAM,KAAM,IAAM,OAEpD,SAASC,EAAwB1K,GAC7B,GAAKA,EAEL,OAAOqK,EAAmBrK,GACpByK,EAAoBzK,GACpBzE,MAAMC,QAAQwE,GACVA,EAAOV,IAAIoL,GACXH,EAAqBvK,EACnC,8CCnBA,MAAM2K,GAAgB,EAAAC,EAAA,IAAK,IAAMjP,OAAOb,eAAeiB,KAAK8O,QAAQjP,UAAW,aAIzEkP,EAAoB,IAAIC,IAAI,CAC9B,UACA,WACA,SACA,YACA,oBAgBJ,SAASC,EAA2BhP,EAAOiP,GAAW,SAAEvH,EAAQ,WAAED,KAAeE,IAO7E,KAN+BgH,KAC3BG,EAAkBI,IAAID,KACrBtH,EAAQN,aACc,WAAvBM,EAAQL,YACY,IAApBK,EAAQ5B,SACS,YAAjB4B,EAAQR,MAER,OAAO,EAIX,IACIS,EACAC,EAFAE,GAAa,EAQboH,GAAgB,EAKpB,MAAMnH,EAAwB,KAC1BH,EAAyB,IAAII,SAASC,IAClCN,EAAyBM,CAAO,GAClC,EAGNF,IACA,IAAI,UAAEhF,EAAS,SAAEC,EAAW,IAAG,KAAEG,EAAI,MAAED,GAAUwE,EAIjD,GAvCkC,EAACsH,EAAWtH,IAA6B,WAAjBA,EAAQR,MACpD,oBAAd8H,IACCX,EAAuB3G,EAAQvE,MAqC5BgM,CAA8BH,EAAWtH,GAAU,CACnD,MAAM0H,GAAkB,OAAa,IAC9B1H,EACHP,OAAQ,EACRJ,MAAO,IAEX,IAAIzD,EAAQ,CAAEC,MAAM,EAAOxD,MAAOgD,EAAU,IAC5C,MAAMsM,EAAwB,GAK9B,IAAIhP,EAAI,EACR,MAAQiD,EAAMC,MAAQlD,EArDV,KAsDRiD,EAAQ8L,EAAgB5E,OAAOnK,GAC/BgP,EAAsBC,KAAKhM,EAAMvD,OACjCM,GA7DQ,GA+DZ6C,OAAQJ,EACRC,EAAYsM,EACZrM,EAAW3C,EAjEC,GAkEZ8C,EAAO,QACX,CACA,MAAMoM,EC3FV,SAAsBC,EAASR,EAAWjM,GAAW,MAAEgE,EAAQ,EAAC,SAAE/D,EAAQ,OAAEmE,EAAS,EAAC,WAAEE,EAAa,OAAM,KAAElE,EAAI,MAAED,GAAW,CAAC,GAC3H,MAAMuM,EAAkB,CAAE,CAACT,GAAYjM,GACnCG,IACAuM,EAAgBhM,OAASP,GAC7B,MAAMa,EAAS0K,EAAwBtL,GAMvC,OAFI7D,MAAMC,QAAQwE,KACd0L,EAAgB1L,OAASA,GACtByL,EAAQE,QAAQD,EAAiB,CACpC1I,QACA/D,WACAe,OAASzE,MAAMC,QAAQwE,GAAmB,SAATA,EACjC4L,KAAM,OACNC,WAAYzI,EAAS,EACrB0I,UAA0B,YAAfxI,EAA2B,YAAc,UAE5D,CDyEsByI,CAAa/P,EAAMgQ,MAAMtC,QAASuB,EAAWjM,EAAW,IACnE2E,EACH1E,WASAG,KAAMA,EACND,UAEE8M,EAAkB,KACpBd,GAAgB,EAChBK,EAAUzF,QAAQ,EAEhBmG,EAAa,KACff,GAAgB,EAChB,KAAMhJ,OAAO8J,GACbrI,IACAI,GAAuB,EAU3BwH,EAAUW,SAAW,KACbhB,IAEJnP,EAAMoQ,IEhId,SAA0BpN,GAAW,OAAEoE,EAAM,WAAEE,EAAa,SAIxD,OAAOtE,EAHOoE,GAAyB,SAAfE,GAAyBF,EAAS,GAAM,EAC1D,EACApE,EAAU7D,OAAS,EAE7B,CF2HkBkR,CAAiBrN,EAAW2E,IACtCF,GAAcA,IACdyI,IAAY,EAoEhB,MA/DiB,CACbhG,KAAI,CAAChC,EAASiC,IACHtC,EAAuBqC,KAAKhC,EAASiC,GAEhDmG,eAAeC,IACXf,EAAUe,SAAWA,EACrBf,EAAUW,SAAW,KACdrP,EAAA,GAEX,QAAIsJ,GACA,OAAO,OAAsBoF,EAAUxG,aAAe,EAC1D,EACA,QAAIoB,CAAKC,GACLmF,EAAUxG,aAAc,OAAsBqB,EAClD,EACA,SAAIvC,GACA,OAAO0H,EAAUgB,YACrB,EACA,SAAI1I,CAAMwC,GACNkF,EAAUgB,aAAelG,CAC7B,EACA,YAAIrH,GACA,OAAO,OAAsBA,EACjC,EACA+G,KAAM,KACEjC,IAEJyH,EAAUxF,QAIV,QAAYiG,GAAgB,EAEhC1F,MAAO,IAAMiF,EAAUjF,QACvBhE,KAAM,KAEF,GADAwB,GAAa,EACe,SAAxByH,EAAU/G,UACV,OASJ,MAAM,YAAEO,GAAgBwG,EACxB,GAAIxG,EAAa,CACb,MAAMqG,GAAkB,OAAa,IAC9B1H,EACHZ,UAAU,IAEd/G,EAAMyQ,gBAAgBpB,EAAgB5E,OAAOzB,EAlKzC,IAkKoEhJ,MAAOqP,EAAgB5E,OAAOzB,GAAahJ,MAlK/G,GAmKR,CACAkQ,GAAY,EAEhB1F,SAAU,KACF2E,GAEJK,EAAU3F,QAAQ,EAEtBE,OAAQmG,EAGhB,gBGrMA,MAAMQ,EAAoB,CACtBvJ,KAAM,SACNnB,UAAW,IACXD,QAAS,GACTjB,UAAW,IAQT6L,EAAsB,CACxBxJ,KAAM,YACNlE,SAAU,IAMRG,EAAO,CACT+D,KAAM,YACN/D,KAAM,CAAC,IAAM,GAAK,IAAM,GACxBH,SAAU,IAER2N,EAAuB,CAACC,GAAY7N,eAClCA,EAAU7D,OAAS,EACZwR,EAEFG,EAAA,EAAe5B,IAAI2B,GACjBA,EAASE,WAAW,SAxBQ,CACvC5J,KAAM,SACNnB,UAAW,IACXD,QAAoB,IAsBa/C,EAAU,GAtBnB,EAAI1B,KAAK8K,KAAK,KAAO,GAC7CtH,UAAW,IAsBD4L,EAEHtN,iBCzBX,MAAM4N,EAAe,CAAClR,EAAKE,IAEX,WAARF,MAKiB,iBAAVE,IAAsBT,MAAMC,QAAQQ,OAE1B,iBAAVA,IACNiR,EAAA,EAAQC,KAAKlR,IAAoB,MAAVA,GACvBA,EAAM+Q,WAAW,oCCpB1B,SAASI,EAAOnR,GACZ,MAAqB,iBAAVA,EACU,IAAVA,EAEQ,OAAVA,EACY,SAAVA,GAA8B,MAAVA,IAAiB,OAAkBA,QAD7D,CAGT,gBCTA,MAAMoR,GACc,ECWdC,EAAqB,CAACpC,EAAWjP,EAAOoF,EAAQkM,EAAa,CAAC,IACxD7J,IACJ,MAAM8J,GAAkB,OAAmBD,EAAYrC,IAAc,CAAC,EAMhEjI,EAAQuK,EAAgBvK,OAASsK,EAAWtK,OAAS,EAK3D,IAAI,QAAEqC,EAAU,GAAMiI,EACtBjI,IAAoB,OAAsBrC,GAC1C,MAAMhE,ECvBd,SAAsBhD,EAAOiP,EAAW7J,EAAQkM,GAC5C,MAAME,EAAqBR,EAAa/B,EAAW7J,GACnD,IAAIpC,EAEAA,EADAzD,MAAMC,QAAQ4F,GACF,IAAIA,GAGJ,CAAC,KAAMA,GAEvB,MAAMqM,OAAoC1O,IAApBuO,EAAWI,KAAqBJ,EAAWI,KAAO1R,EAAM2R,MAC9E,IAAIC,EACJ,MAAMC,EAAsB,GAC5B,IAAK,IAAI5S,EAAI,EAAGA,EAAI+D,EAAU7D,OAAQF,IAIb,OAAjB+D,EAAU/D,KACV+D,EAAU/D,GAAW,IAANA,EAAUwS,EAAgBzO,EAAU/D,EAAI,IAEvDkS,EAAOnO,EAAU/D,KACjB4S,EAAoBtC,KAAKtQ,GAGD,iBAAjB+D,EAAU/D,IACA,SAAjB+D,EAAU/D,IACO,MAAjB+D,EAAU/D,KACV2S,EAA0B5O,EAAU/D,IAG5C,GAAIuS,GACAK,EAAoB1S,QACpByS,EACA,IAAK,IAAI3S,EAAI,EAAGA,EAAI4S,EAAoB1S,OAAQF,IAE5C+D,EADc6O,EAAoB5S,KACf,OAAkBgQ,EAAW2C,GAGxD,OAAO5O,CACX,CDf0B8O,CAAa9R,EAAOiP,EAAW7J,EAAQmM,GAMnDQ,EAAiB/O,EAAU,GAC3BgP,EAAiBhP,EAAUA,EAAU7D,OAAS,GAC9C8S,EAAqBjB,EAAa/B,EAAW8C,GAC7CP,EAAqBR,EAAa/B,EAAW+C,IACnD,OAAQC,IAAuBT,EAAoB,6BAA6BvC,WAAmB8C,UAAuBC,OAAoBD,+DAA4EA,8BAA2CC,iCACrQ,IAAIrK,EAAU,CACV3E,YACAqB,SAAUrE,EAAMkS,cAChB9O,KAAM,aACHmO,EACHvK,OAAQqC,EACR3B,SAAWzC,IACPjF,EAAMoQ,IAAInL,GACVsM,EAAgB7J,UAAY6J,EAAgB7J,SAASzC,EAAE,EAE3DwC,WAAY,KACRA,IACA8J,EAAgB9J,YAAc8J,EAAgB9J,YAAY,GAwBlE,IAjBK,OAAoB8J,KACrB5J,EAAU,IACHA,KACAiJ,EAAqB3B,EAAWtH,KAQvCA,EAAQ1E,WACR0E,EAAQ1E,UAAW,OAAsB0E,EAAQ1E,WAEjD0E,EAAQN,cACRM,EAAQN,aAAc,OAAsBM,EAAQN,eAEnD4K,IACAT,GACDpD,IACyB,IAAzBmD,EAAgBpK,MAChBiK,EAKA,OEhFZ,UAAgC,UAAEpO,EAAS,MAAEgE,EAAK,SAAEU,EAAQ,WAAED,IAC1D,MAAM0K,EAAW,KACbzK,GAAYA,EAAS1E,EAAUA,EAAU7D,OAAS,IAClDsI,GAAcA,IAQP,CACH2C,KAAM,EACNtC,MAAO,EACP7E,SAAU,EACV+G,KAAOlJ,EAAI,EACXyJ,MAAQzJ,EAAI,EACZyF,KAAOzF,EAAI,EACXoJ,KAAOhC,IACHA,IACOD,QAAQC,WAEnB6B,OAASjJ,EAAI,EACb0J,SAAW1J,EAAI,IAGvB,OAAOkG,GACD,OAAa,CACXhE,UAAW,CAAC,EAAG,GACfC,SAAU,EACV+D,QACAS,WAAY0K,IAEdA,GACV,CF8CmBC,CAAuBhE,EACxB,IAAKzG,EAASX,MAAO,GACrBW,GAKV,IAMC2J,EAAWe,WACRrS,EAAMgQ,OACNhQ,EAAMgQ,MAAMtC,mBAAmB4E,cAK9BtS,EAAMgQ,MAAMuC,WAAW7K,SAAU,CAClC,MAAM8K,EAAuBxD,EAA2BhP,EAAOiP,EAAWtH,GAC1E,GAAI6K,EACA,OAAOA,CACf,CAIA,OAAO,OAAa7K,EAAQ,sFG3GpC,SAAS8K,EAAmBzS,EAAOgD,EAAW2E,GAC1C,MAAM+K,GAAgB,OAAc1S,GAASA,GAAQ,QAAYA,GAEjE,OADA0S,EAAcpM,OAAM,OAAmB,GAAIoM,EAAe1P,EAAW2E,IAC9D+K,EAAclD,SACzB,iICMA,SAASmD,GAAqB,cAAEC,EAAa,eAAEC,GAAkB/S,GAC7D,MAAMgT,EAAcF,EAAc9T,eAAegB,KAAgC,IAAxB+S,EAAe/S,GAExE,OADA+S,EAAe/S,IAAO,EACfgT,CACX,CACA,SAASC,EAAoB/S,EAAOoF,GAChC,MAAMsI,EAAU1N,EAAM2R,MACtB,IAAIpS,MAAMC,QAAQ4F,GAOd,OAAOsI,IAAYtI,EANnB,IAAK,IAAInG,EAAI,EAAGA,EAAImG,EAAOjG,OAAQF,IAC/B,GAAImG,EAAOnG,KAAOyO,EACd,OAAO,CAMvB,CACA,SAASsF,EAAcC,EAAevQ,GAAY,MAAEsE,EAAQ,EAAC,mBAAEkM,EAAkB,KAAE/L,GAAS,CAAC,GACzF,IAAI,WAAEmK,EAAa2B,EAAcrC,uBAAsB,cAAEuC,KAAkB/N,GAAW6N,EAAcG,qBAAqB1Q,GACzH,MAAM2Q,EAAaJ,EAAcK,SAAS,cACtCJ,IACA5B,EAAa4B,GACjB,MAAMK,EAAa,GACbC,EAAqBrM,GACvB8L,EAAcQ,gBACdR,EAAcQ,eAAeC,WAAWvM,GAC5C,IAAK,MAAMrH,KAAOsF,EAAQ,CACtB,MAAMpF,EAAQiT,EAAcK,SAASxT,GAC/B6T,EAAcvO,EAAOtF,GAC3B,IAAKE,QACe+C,IAAhB4Q,GACCH,GACGb,EAAqBa,EAAoB1T,GAC7C,SAEJ,MAAMyR,EAAkB,CACpBvK,QACAqC,QAAS,MACN,OAAmBiI,GAAc,CAAC,EAAGxR,IAM5C,GAAI8T,OAAOC,wBAAyB,CAChC,MAAMC,EAAWb,EAAcV,WAAW,KAC1C,GAAIuB,EAAU,CACV,MAAMzK,EAAUuK,OAAOC,wBAAwBC,EAAUhU,EAAKE,EAAO,MACrD,OAAZqJ,IACAkI,EAAgBlI,QAAUA,EAC1BkI,EAAgBc,WAAY,EAEpC,CACJ,CACA,IAAI0B,GAAWxC,EAAgBc,YAC1BU,EAAoB/S,EAAO2T,GAahC,GAZ6B,WAAzBpC,EAAgBpK,OACfnH,EAAMkS,eAAiBX,EAAgBlN,YACxC0P,GAAU,GAOV/T,EAAMwP,YACNuE,GAAU,GAEVA,EACA,SACJ/T,EAAMsG,OAAM,OAAmBxG,EAAKE,EAAO2T,EAAaV,EAAce,oBAAsB,IAAe9E,IAAIpP,GACzG,CAAEqH,MAAM,GACRoK,IACN,MAAM/B,EAAYxP,EAAMwP,WACpB,OAAwB6D,KACxBA,EAAWY,IAAInU,GACf0P,EAAUtF,MAAK,IAAMmJ,EAAWa,OAAOpU,MAE3CyT,EAAWhE,KAAKC,EACpB,CAMA,OALI2D,GACAlL,QAAQkM,IAAIZ,GAAYrJ,MAAK,KACzBiJ,IAAiB,QAAUF,EAAeE,EAAc,IAGzDI,CACX,iDClGA,MACMa,EAA+B,SAAU,cADjB,gDCF9B,SAASC,EAAoBpP,GACzB,OAAc,OAANA,GACS,iBAANA,GACY,mBAAZA,EAAEqB,KACjB,iECJA,MAAMgO,EAAqBrP,GAChB1F,MAAMC,QAAQyF,iCCIzB,SAASsP,GAAoB,KAAEC,EAAMxN,MAAOyN,EAAM,cAAEC,EAAa,gBAAEC,EAAe,iBAAEC,EAAgB,OAAExN,EAAM,WAAEE,EAAU,YAAED,EAAW,KAAEqK,EAAI,QAAErI,KAAYiI,IACrJ,QAAS3R,OAAO6M,KAAK8E,GAAYnS,MACrC,CACA,SAAS0V,EAAmBvD,EAAYxR,GACpC,OAAOwR,EAAWxR,IAAQwR,EAAoB,SAAKA,CACvD,yECRA,MAAMwD,GAAqB,WAAAC,eAAc,CAAC,iDCG1C,MAAMC,GAAsB,WAAAD,eAAc,CACtCE,mBAAqB1S,GAAMA,EAC3B2S,UAAU,EACVC,cAAe,yDCHnB,MAAMC,GAAkB,WAAAL,eAAc,kGCFtC,MAAM5S,EAAUI,GAAM,EAAIjB,KAAK8L,IAAI9L,KAAK+T,KAAK9S,IACvCF,GAAU,OAAcF,GACxBC,GAAY,OAAaD,kDCH/B,MAAMmT,EAAgBtR,GAAYzB,GAAMA,GAAK,GAAMyB,EAAO,EAAIzB,GAAK,GAAK,EAAIyB,EAAO,GAAK,EAAIzB,KAAO,iDCAnG,MAAMgT,EAAiBvR,GAAYzB,GAAM,EAAIyB,EAAO,EAAIzB,kDCFxD,MAAMiT,EAAiBpS,GACZ7D,MAAMC,QAAQ4D,IAA4B,iBAAZA,EAAK,2FCD9C,MAAMqS,EACF,WAAAC,GACIC,KAAKC,MAAQ,GACbD,KAAKE,UAAY,IAAI9G,GACzB,CACA,GAAAkF,CAAI6B,GACA,IAAKH,KAAKE,UAAU3G,IAAI4G,GAGpB,OAFAH,KAAKE,UAAU5B,IAAI6B,GACnBH,KAAKC,MAAMrG,KAAKuG,IACT,CAEf,CACA,MAAA5B,CAAO4B,GACH,MAAMC,EAAQJ,KAAKC,MAAMI,QAAQF,IAClB,IAAXC,IACAJ,KAAKC,MAAM3R,OAAO8R,EAAO,GACzBJ,KAAKE,UAAUI,OAAOH,GAE9B,CACA,KAAAI,GACIP,KAAKC,MAAMzW,OAAS,EACpBwW,KAAKE,UAAUK,OACnB,ECpBJ,MAAMC,EAAa,CACf,UACA,OACA,SACA,YACA,SACA,cCLJ,MAAQC,SAAU,EAAOrM,OAAQsM,EAAa9S,MAAO+S,EAAS,MAAEC,GDQhE,SAA6BC,EAAmBC,GAC5C,IAAIC,GAAe,EACfC,GAAoB,EACxB,MAAMpT,EAAQ,CACVkC,MAAO,EACPY,UAAW,EACXI,cAAc,GAEZ8P,EAAQJ,EAAWS,QAAO,CAACC,EAAK/W,KAClC+W,EAAI/W,GDIZ,SAA0B4W,GAKtB,IAAII,EAAY,IAAIrB,EAChBsB,EAAY,IAAItB,EAChBuB,EAAW,EAKXvQ,GAAe,EACfwQ,GAAiB,EAIrB,MAAMC,EAAc,IAAIC,QAClBC,EAAO,CAIThB,SAAU,CAACiB,EAAUC,GAAY,EAAOC,GAAY,KAChD,MAAMC,EAAoBD,GAAa9Q,EACjCgR,EAAQD,EAAoBV,EAAYC,EAO9C,OANIO,GACAJ,EAAYjD,IAAIoD,GAChBI,EAAMxD,IAAIoD,IAAaG,GAAqB/Q,IAE5CuQ,EAAWF,EAAUlB,MAAMzW,QAExBkY,CAAQ,EAKnBtN,OAASsN,IACLN,EAAU7C,OAAOmD,GACjBH,EAAYjB,OAAOoB,EAAS,EAKhCvB,QAAUQ,IAMN,GAAI7P,EACAwQ,GAAiB,MADrB,CAUA,GANAxQ,GAAe,GACdqQ,EAAWC,GAAa,CAACA,EAAWD,GAErCC,EAAUb,QAEVc,EAAWF,EAAUlB,MAAMzW,OACvB6X,EACA,IAAK,IAAI/X,EAAI,EAAGA,EAAI+X,EAAU/X,IAAK,CAC/B,MAAMoY,EAAWP,EAAUlB,MAAM3W,GACjCoY,EAASf,GACLY,EAAYhI,IAAImI,KAChBD,EAAKhB,SAASiB,GACdX,IAER,CAEJjQ,GAAe,EACXwQ,IACAA,GAAiB,EACjBG,EAAKtB,QAAQQ,GApBjB,CAqBA,GAGR,OAAOc,CACX,CCjFmBM,EAAiB,IAAOhB,GAAe,IAC3CG,IACR,CAAC,GACEc,EAAeC,GAAWrB,EAAMqB,GAAQ9B,QAAQvS,GAChDsU,EAAe,KACjB,MAAMxR,EAAYK,YAAYF,MAC9BkQ,GAAe,EACfnT,EAAMkC,MAAQkR,EACR,IAAO,GACPrV,KAAKsD,IAAItD,KAAKqD,IAAI0B,EAAY9C,EAAM8C,UAnB/B,IAmBuD,GAClE9C,EAAM8C,UAAYA,EAClB9C,EAAMkD,cAAe,EACrB0P,EAAW2B,QAAQH,GACnBpU,EAAMkD,cAAe,EACjBiQ,GAAgBD,IAChBE,GAAoB,EACpBH,EAAkBqB,GACtB,EAmBJ,MAAO,CAAEzB,SAVQD,EAAWS,QAAO,CAACC,EAAK/W,KACrC,MAAMsX,EAAOb,EAAMzW,GAMnB,OALA+W,EAAI/W,GAAO,CAACgW,EAASwB,GAAY,EAAOC,GAAY,KAC3Cb,IATTA,GAAe,EACfC,GAAoB,EACfpT,EAAMkD,cACP+P,EAAkBqB,IAQXT,EAAKhB,SAASN,EAASwB,EAAWC,IAEtCV,CAAG,GACX,CAAC,GAEe9M,OADH+L,GAAYK,EAAW2B,SAAShY,GAAQyW,EAAMzW,GAAKiK,OAAO+L,KAC/CvS,QAAOgT,QACtC,CCtD2EwB,CAAqD,oBAA1BC,sBAAwCA,sBAAwBlX,EAAA,GAAM,kDCH5K,MAAMmX,EAAe,CACjBzI,UAAW,CACP,UACA,WACA,aACA,WACA,OACA,cACA,aACA,aAEJ0I,KAAM,CAAC,QACPC,KAAM,CAAC,OAAQ,gBACfC,MAAO,CAAC,cACRC,MAAO,CAAC,aAAc,eAAgB,cACtCC,IAAK,CAAC,WAAY,QAAS,aAAc,eACzCC,IAAK,CAAC,QAAS,aAAc,oBAAqB,YAClDC,OAAQ,CAAC,cAAe,kBAAmB,mBAC3CC,OAAQ,CAAC,SAAU,aAEjBC,EAAqB,CAAC,EAC5B,IAAK,MAAM5Y,KAAOmY,EACdS,EAAmB5Y,GAAO,CACtB6Y,UAAYC,GAAUX,EAAanY,GAAK2M,MAAMoM,KAAWD,EAAMC,6ECpBvE,SAASC,EAAoBhZ,GAAK,OAAE2Y,EAAM,SAAEM,IACxC,OAAQ,IAAe7J,IAAIpP,IACvBA,EAAIiR,WAAW,YACb0H,QAAuB1V,IAAbgW,OACL,IAAgBjZ,IAAgB,YAARA,EACvC,gCCHA,SAASkZ,GAAwB,IAAEC,EAAG,KAAEC,EAAI,MAAEC,EAAK,OAAEC,IACjD,MAAO,CACHnY,EAAG,CAAE0D,IAAKuU,EAAMtU,IAAKuU,GACrBE,EAAG,CAAE1U,IAAKsU,EAAKrU,IAAKwU,GAE5B,CACA,SAASE,GAAwB,EAAErY,EAAC,EAAEoY,IAClC,MAAO,CAAEJ,IAAKI,EAAE1U,IAAKwU,MAAOlY,EAAE2D,IAAKwU,OAAQC,EAAEzU,IAAKsU,KAAMjY,EAAE0D,IAC9D,CAMA,SAAS4U,EAAmBC,EAAOC,GAC/B,IAAKA,EACD,OAAOD,EACX,MAAME,EAAUD,EAAe,CAAExY,EAAGuY,EAAMN,KAAMG,EAAGG,EAAMP,MACnDU,EAAcF,EAAe,CAAExY,EAAGuY,EAAML,MAAOE,EAAGG,EAAMJ,SAC9D,MAAO,CACHH,IAAKS,EAAQL,EACbH,KAAMQ,EAAQzY,EACdmY,OAAQO,EAAYN,EACpBF,MAAOQ,EAAY1Y,EAE3B,mJCxBA,SAAS2Y,EAAWJ,EAAOK,EAAOC,GAG9B,OAAOA,EADQD,GADYL,EAAQM,EAGvC,CAIA,SAASC,EAAgBP,EAAOQ,EAAWH,EAAOC,EAAaG,GAI3D,YAHiBlX,IAAbkX,IACAT,EAAQI,EAAWJ,EAAOS,EAAUH,IAEjCF,EAAWJ,EAAOK,EAAOC,GAAeE,CACnD,CAIA,SAASE,EAAeC,EAAMH,EAAY,EAAGH,EAAQ,EAAGC,EAAaG,GACjEE,EAAKxV,IAAMoV,EAAgBI,EAAKxV,IAAKqV,EAAWH,EAAOC,EAAaG,GACpEE,EAAKvV,IAAMmV,EAAgBI,EAAKvV,IAAKoV,EAAWH,EAAOC,EAAaG,EACxE,CAIA,SAASG,EAAcC,GAAK,EAAEpZ,EAAC,EAAEoY,IAC7Ba,EAAeG,EAAIpZ,EAAGA,EAAE+Y,UAAW/Y,EAAE4Y,MAAO5Y,EAAE6Y,aAC9CI,EAAeG,EAAIhB,EAAGA,EAAEW,UAAWX,EAAEQ,MAAOR,EAAES,YAClD,CAOA,SAASQ,EAAgBD,EAAKE,EAAWC,EAAUC,GAAqB,GACpE,MAAMC,EAAaF,EAASrb,OAC5B,IAAKub,EACD,OAGJ,IAAIC,EACAlV,EAFJ8U,EAAUtZ,EAAIsZ,EAAUlB,EAAI,EAG5B,IAAK,IAAIpa,EAAI,EAAGA,EAAIyb,EAAYzb,IAAK,CACjC0b,EAAOH,EAASvb,GAChBwG,EAAQkV,EAAKC,gBAKb,MAAMC,EAAWF,EAAKE,SAClBA,GACAA,EAASC,OACkB,aAA3BD,EAASC,MAAMC,UAGfN,GACAE,EAAKhT,QAAQqT,cACbL,EAAKM,QACLN,IAASA,EAAKO,MACdC,EAAad,EAAK,CACdpZ,GAAI0Z,EAAKM,OAAOvX,OAAOzC,EACvBoY,GAAIsB,EAAKM,OAAOvX,OAAO2V,IAG3B5T,IAEA8U,EAAUtZ,GAAKwE,EAAMxE,EAAE4Y,MACvBU,EAAUlB,GAAK5T,EAAM4T,EAAEQ,MAEvBO,EAAcC,EAAK5U,IAEnBgV,IAAsB,QAAaE,EAAKS,eACxCD,EAAad,EAAKM,EAAKS,cAE/B,CAKAb,EAAUtZ,EAAIoa,EAAcd,EAAUtZ,GACtCsZ,EAAUlB,EAAIgC,EAAcd,EAAUlB,EAC1C,CACA,SAASgC,EAAcxB,GACnB,OAAIyB,OAAOC,UAAU1B,IAEdA,EAAQ,iBAAmBA,EAAQ,cAD/BA,EACwD,CACvE,CACA,SAAS2B,EAAcrB,EAAMsB,GACzBtB,EAAKxV,IAAMwV,EAAKxV,IAAM8W,EACtBtB,EAAKvV,IAAMuV,EAAKvV,IAAM6W,CAC1B,CAMA,SAASC,EAAcvB,EAAMwB,GAAa7b,EAAK8b,EAAUC,IACrD,MAAMC,OAAuC/Y,IAA1B4Y,EAAWE,GAA2BF,EAAWE,GAAa,GAC3E/B,GAAc,OAAIK,EAAKxV,IAAKwV,EAAKvV,IAAKkX,GAE5C5B,EAAeC,EAAMwB,EAAW7b,GAAM6b,EAAWC,GAAW9B,EAAa6B,EAAW9B,MACxF,CAIA,MAAMkC,EAAQ,CAAC,IAAK,SAAU,WACxBC,EAAQ,CAAC,IAAK,SAAU,WAI9B,SAASb,EAAad,EAAKvJ,GACvB4K,EAAcrB,EAAIpZ,EAAG6P,EAAWiL,GAChCL,EAAcrB,EAAIhB,EAAGvI,EAAWkL,EACpC,2DCvHA,MAMMC,EAAc,KAAM,CACtBhb,EAP0B,CAC1B+Y,UAAW,EACXH,MAAO,EACP9U,OAAQ,EACR+U,YAAa,GAIbT,EAR0B,CAC1BW,UAAW,EACXH,MAAO,EACP9U,OAAQ,EACR+U,YAAa,KAOXoC,EAAY,KAAM,CACpBjb,EAFqB,CAAG0D,IAAK,EAAGC,IAAK,GAGrCyU,EAHqB,CAAG1U,IAAK,EAAGC,IAAK,0DCVzC,MAAMuX,EAAkB,CAAC,EACzB,SAASC,EAAkBC,GACvB1c,OAAO2c,OAAOH,EAAiBE,EACnC,gCCHA,SAASE,EAAgB1C,GACrB,YAAiB9W,IAAV8W,GAAiC,IAAVA,CAClC,CACA,SAAS2C,GAAS,MAAE3C,EAAK,OAAE4C,EAAM,OAAEC,IAC/B,OAASH,EAAgB1C,KACpB0C,EAAgBE,KAChBF,EAAgBG,EACzB,CACA,SAASC,EAAa5Y,GAClB,OAAQyY,EAASzY,IACb6Y,EAAe7Y,IACfA,EAAO8Y,GACP9Y,EAAO+Y,QACP/Y,EAAOgZ,SACPhZ,EAAOiZ,OACf,CACA,SAASJ,EAAe7Y,GACpB,OAAOkZ,EAAclZ,EAAO9C,IAAMgc,EAAclZ,EAAOsV,EAC3D,CACA,SAAS4D,EAAcjd,GACnB,OAAOA,GAAmB,OAAVA,CACpB,sHClBA,SAASkd,EAAmBrC,EAAUpB,GAClC,OAAO,SAAwB,QAAmBoB,EAASsC,wBAAyB1D,GACxF,CACA,SAAS2D,EAAe3N,EAAS4N,EAAoBpI,GACjD,MAAMqI,EAAcJ,EAAmBzN,EAASwF,IAC1C,OAAEgG,GAAWoC,EAKnB,OAJIpC,KACA,QAAcqC,EAAYrc,EAAGga,EAAOvX,OAAOzC,IAC3C,QAAcqc,EAAYjE,EAAG4B,EAAOvX,OAAO2V,IAExCiE,CACX,iGCDA,MAAMC,EAAwB,uDAS9B,SAASC,EAAiB9P,EAAS+B,EAASgO,EAAQ,IAChD,OAAUA,GAFG,EAEgB,yDAAyD/P,yDACtF,MAAOgQ,EAAOC,GAVlB,SAA0BjQ,GACtB,MAAMkQ,EAAQL,EAAsBM,KAAKnQ,GACzC,IAAKkQ,EACD,MAAO,CAAC,GACZ,MAAO,CAAEF,EAAOC,GAAYC,EAC5B,MAAO,CAACF,EAAOC,EACnB,CAI8BG,CAAiBpQ,GAE3C,IAAKgQ,EACD,OAEJ,MAAMK,EAAWnK,OAAOoK,iBAAiBvO,GAASwO,iBAAiBP,GACnE,GAAIK,EAAU,CACV,MAAMG,EAAUH,EAASI,OACzB,OAAO,IAAAlf,GAAkBif,GAAWE,WAAWF,GAAWA,CAC9D,CACK,OAAI,QAAmBP,GAEjBH,EAAiBG,EAAUlO,EAASgO,EAAQ,GAG5CE,CAEf,uECjCA,MAAMU,EAAiB,IAAItP,IAAI,CAC3B,QACA,SACA,MACA,OACA,QACA,SACA,IACA,IACA,aACA,eAEEuP,EAAmBxe,GAAQue,EAAenP,IAAIpP,GAI9Cye,EAAiBtZ,GAAMA,IAAM,MAAUA,IAAM,EAAAuZ,GAC7CC,EAAmB,CAACC,EAAQC,IAAQP,WAAWM,EAAOE,MAAM,MAAMD,IAClEE,EAAyB,CAACC,EAAMC,IAAS,CAACC,GAASlO,gBACrD,GAAkB,SAAdA,IAAyBA,EACzB,OAAO,EACX,MAAMmO,EAAWnO,EAAU8M,MAAM,sBACjC,GAAIqB,EACA,OAAOR,EAAiBQ,EAAS,GAAIF,GAEpC,CACD,MAAML,EAAS5N,EAAU8M,MAAM,oBAC/B,OAAIc,EACOD,EAAiBC,EAAO,GAAII,GAG5B,CAEf,GAEEI,EAAgB,IAAInQ,IAAI,CAAC,IAAK,IAAK,MACnCoQ,EAAgCrO,EAAA,EAAmBsO,QAAQtf,IAASof,EAAchQ,IAAIpP,KAe5F,MAAMuf,EAAmB,CAErBC,MAAO,EAAGre,MAAOse,cAAc,IAAKC,eAAe,OAAUve,EAAE2D,IAAM3D,EAAE0D,IAAMyZ,WAAWmB,GAAenB,WAAWoB,GAClHC,OAAQ,EAAGpG,MAAOqG,aAAa,IAAKC,gBAAgB,OAAUtG,EAAEzU,IAAMyU,EAAE1U,IAAMyZ,WAAWsB,GAActB,WAAWuB,GAClH1G,IAAK,CAAC+F,GAAS/F,SAAUmF,WAAWnF,GACpCC,KAAM,CAAC8F,GAAS9F,UAAWkF,WAAWlF,GACtCE,OAAQ,EAAGC,MAAOJ,SAAUmF,WAAWnF,IAAQI,EAAEzU,IAAMyU,EAAE1U,KACzDwU,MAAO,EAAGlY,MAAOiY,UAAWkF,WAAWlF,IAASjY,EAAE2D,IAAM3D,EAAE0D,KAE1D1D,EAAG4d,EAAuB,EAAG,IAC7BxF,EAAGwF,EAAuB,EAAG,KAGjCQ,EAAiBO,WAAaP,EAAiBpe,EAC/Coe,EAAiBQ,WAAaR,EAAiBhG,EAC/C,MA6BMyG,EAAmC,CAAC7M,EAAe7N,EAAQL,EAAS,CAAC,EAAGoO,EAAgB,CAAC,KAC3F/N,EAAS,IAAKA,GACd+N,EAAgB,IAAKA,GACrB,MAAM4M,EAAuBpgB,OAAO6M,KAAKpH,GAAQga,OAAOd,GAGxD,IAAI0B,EAAyB,GACzBC,GAAsC,EAC1C,MAAMC,EAAuB,GAkF7B,GAjFAH,EAAqBjI,SAAShY,IAC1B,MAAME,EAAQiT,EAAcK,SAASxT,GACrC,IAAKmT,EAAckN,SAASrgB,GACxB,OACJ,IAAI4R,EAAO3M,EAAOjF,GACdsgB,GAAW,OAAuB1O,GACtC,MAAM2O,EAAKjb,EAAOtF,GAClB,IAAIwgB,EAKJ,IAAI,OAAkBD,GAAK,CACvB,MAAME,EAAeF,EAAGlhB,OAClBqhB,EAAsB,OAAVH,EAAG,GAAc,EAAI,EACvC3O,EAAO2O,EAAGG,GACVJ,GAAW,OAAuB1O,GAClC,IAAK,IAAIzS,EAAIuhB,EAAWvhB,EAAIshB,GAKV,OAAVF,EAAGphB,GAL+BA,IAOjCqhB,GAMD,QAAU,OAAuBD,EAAGphB,MAAQqhB,EAAQ,2CALpDA,GAAS,OAAuBD,EAAGphB,KACnC,OAAUqhB,IAAWF,GAChB7B,EAAc6B,IAAa7B,EAAc+B,GAAU,gEAMpE,MAEIA,GAAS,OAAuBD,GAEpC,GAAID,IAAaE,EAGb,GAAI/B,EAAc6B,IAAa7B,EAAc+B,GAAS,CAClD,MAAM5S,EAAU1N,EAAM2R,MACC,iBAAZjE,GACP1N,EAAMoQ,IAAIgO,WAAW1Q,IAEP,iBAAP2S,EACPjb,EAAOtF,GAAOse,WAAWiC,GAEpB9gB,MAAMC,QAAQ6gB,IAAOC,IAAW,EAAA9B,KACrCpZ,EAAOtF,GAAOugB,EAAG/c,IAAI8a,YAE7B,MACUgC,aAA2C,EAASA,EAAStP,aAClEwP,aAAuC,EAASA,EAAOxP,aAC9C,IAATY,GAAqB,IAAP2O,GAGF,IAAT3O,EACA1R,EAAMoQ,IAAIkQ,EAAOxP,UAAUY,IAG3BtM,EAAOtF,GAAOsgB,EAAStP,UAAUuP,IAMhCJ,IACDD,EAvIpB,SAAyC/M,GACrC,MAAMwN,EAAoB,GAW1B,OAVAtB,EAA8BrH,SAAShY,IACnC,MAAME,EAAQiT,EAAcK,SAASxT,QACvBiD,IAAV/C,IACAygB,EAAkBlR,KAAK,CAACzP,EAAKE,EAAM2R,QACnC3R,EAAMoQ,IAAItQ,EAAIiR,WAAW,SAAW,EAAI,GAC5C,IAGA0P,EAAkBthB,QAClB8T,EAAcyN,SACXD,CACX,CA2HwBE,CAAgC1N,GACpCgN,GAAsC,GAE1CC,EAAqB3Q,KAAKzP,GAC1BqT,EAAcrT,QACaiD,IAAvBoQ,EAAcrT,GACRqT,EAAcrT,GACdsF,EAAOtF,GACjBE,EAAM4gB,KAAKP,GAEnB,IAEAH,EAAqB/gB,OAAQ,CAC7B,MAAM0hB,EAAUX,EAAqBlK,QAAQ,WAAa,EACpDpC,OAAOkN,YACP,KACAC,EA3HmB,EAAC3b,EAAQ6N,EAAe+N,KACrD,MAAMC,EAAahO,EAAciK,qBAC3BzN,EAAUwD,EAAcvF,QACxBwT,EAAuBlD,iBAAiBvO,IACxC,QAAEsL,GAAYmG,EACdnc,EAAS,CAAC,EAGA,SAAZgW,GACA9H,EAAckO,eAAe,UAAW/b,EAAO2V,SAAW,SAK9DiG,EAAYlJ,SAAShY,IACjBiF,EAAOjF,GAAOuf,EAAiBvf,GAAKmhB,EAAYC,EAAqB,IAGzEjO,EAAcyN,SACd,MAAMU,EAAanO,EAAciK,qBAQjC,OAPA8D,EAAYlJ,SAAShY,IAGjB,MAAME,EAAQiT,EAAcK,SAASxT,GACrCE,GAASA,EAAM4gB,KAAK7b,EAAOjF,IAC3BsF,EAAOtF,GAAOuf,EAAiBvf,GAAKshB,EAAYF,EAAqB,IAElE9b,CAAM,EAgGeic,CAAyBjc,EAAQ6N,EAAeiN,GAaxE,OAXIF,EAAuB7gB,QACvB6gB,EAAuBlI,SAAQ,EAAEhY,EAAKE,MAClCiT,EAAcK,SAASxT,GAAKsQ,IAAIpQ,EAAM,IAI9CiT,EAAcyN,SAEV,KAAyB,OAAZG,GACbjN,OAAO0N,SAAS,CAAErI,IAAK4H,IAEpB,CAAEzb,OAAQ2b,EAAiB5N,gBACtC,CAEI,MAAO,CAAE/N,SAAQ+N,gBACrB,EASJ,SAASoO,EAAetO,EAAe7N,EAAQL,EAAQoO,GACnD,MA3MqB,CAAC/N,GACfzF,OAAO6M,KAAKpH,GAAQqH,KAAK6R,GA0MzBkD,CAAiBpc,GAClB0a,EAAiC7M,EAAe7N,EAAQL,EAAQoO,GAChE,CAAE/N,SAAQ+N,gBACpB,CC5NA,MAAMsO,EAAkB,CAACxO,EAAe7N,EAAQL,EAAQoO,KACpD,MAAM4K,EFuCV,SAA6B9K,MAAoB7N,GAAU+N,GACvD,MAAM1D,EAAUwD,EAAcvF,QAC9B,KAAM+B,aAAmBZ,SACrB,MAAO,CAAEzJ,SAAQ+N,iBAGjBA,IACAA,EAAgB,IAAKA,IAGzBF,EAAclP,OAAO+T,SAAS9X,IAC1B,MAAM0N,EAAU1N,EAAM2R,MACtB,KAAK,QAAmBjE,GACpB,OACJ,MAAMqQ,EAAWP,EAAiB9P,EAAS+B,GACvCsO,GACA/d,EAAMoQ,IAAI2N,EAAS,IAI3B,IAAK,MAAMje,KAAOsF,EAAQ,CACtB,MAAMsI,EAAUtI,EAAOtF,GACvB,KAAK,QAAmB4N,GACpB,SACJ,MAAMqQ,EAAWP,EAAiB9P,EAAS+B,GACtCsO,IAGL3Y,EAAOtF,GAAOie,EACT5K,IACDA,EAAgB,CAAC,QAIMpQ,IAAvBoQ,EAAcrT,KACdqT,EAAcrT,GAAO4N,GAE7B,CACA,MAAO,CAAEtI,SAAQ+N,gBACrB,CE9EqBuO,CAAoBzO,EAAe7N,EAAQ+N,GAG5D,OAAOoO,EAAetO,EAFtB7N,EAAS2Y,EAAS3Y,OAE2BL,EAD7CoO,EAAgB4K,EAAS5K,cAC0C,4BCVvE,MAAMwO,EAAuB,CAAEjU,QAAS,MAClCkU,EAA2B,CAAElU,SAAS,mICkB5C,MAAMmU,EAAeliB,OAAO6M,KAAK,KAC3BsV,EAAcD,EAAa1iB,OAC3B4iB,EAAoB,CACtB,iBACA,oBACA,SACA,sBACA,gBACA,uBACA,2BAEEC,EAAkB,IAAa7iB,OAKrC,MAAM8iB,EACF,WAAAvM,EAAY,OAAEwM,EAAM,MAAEtJ,EAAK,gBAAEuJ,EAAe,oBAAEC,EAAmB,YAAEC,GAAgB1a,EAAU,CAAC,GAK1FgO,KAAKjI,QAAU,KAIfiI,KAAK2M,SAAW,IAAIvT,IAIpB4G,KAAK4M,eAAgB,EACrB5M,KAAK6M,uBAAwB,EAQ7B7M,KAAK3B,mBAAqB,KAM1B2B,KAAK5R,OAAS,IAAI0e,IAIlB9M,KAAK+M,SAAW,CAAC,EAKjB/M,KAAKgN,mBAAqB,IAAIF,IAM9B9M,KAAKiN,iBAAmB,CAAC,EAIzBjN,KAAKkN,OAAS,CAAC,EAMflN,KAAKmN,uBAAyB,CAAC,EAC/BnN,KAAKoN,aAAe,IAAMpN,KAAKqN,OAAO,SAAUrN,KAAKyF,cACrDzF,KAAK+K,OAAS,KACL/K,KAAKjI,UAEViI,KAAKsN,eACLtN,KAAKuN,eAAevN,KAAKjI,QAASiI,KAAKwN,YAAaxN,KAAKiD,MAAMkC,MAAOnF,KAAKyN,YAAW,EAE1FzN,KAAK0N,eAAiB,IAAM,KAAM3C,OAAO/K,KAAK+K,QAAQ,GAAO,GAC7D,MAAM,aAAEtF,EAAY,YAAE+H,GAAgBd,EACtC1M,KAAKyF,aAAeA,EACpBzF,KAAK2N,WAAa,IAAKlI,GACvBzF,KAAK4N,cAAgB3K,EAAM4K,QAAU,IAAKpI,GAAiB,CAAC,EAC5DzF,KAAKwN,YAAcA,EACnBxN,KAAKuM,OAASA,EACdvM,KAAKiD,MAAQA,EACbjD,KAAKwM,gBAAkBA,EACvBxM,KAAK8H,MAAQyE,EAASA,EAAOzE,MAAQ,EAAI,EACzC9H,KAAKyM,oBAAsBA,EAC3BzM,KAAKhO,QAAUA,EACfgO,KAAK6M,uBAAwB,OAAsB5J,GACnDjD,KAAK4M,eAAgB,OAAc3J,GAC/BjD,KAAK4M,gBACL5M,KAAK8N,gBAAkB,IAAI1U,KAE/B4G,KAAK+N,uBAAyB/Z,QAAQuY,GAAUA,EAAOxU,SAWvD,MAAM,WAAE2F,KAAesQ,GAAwBhO,KAAKiO,4BAA4BhL,EAAO,CAAC,GACxF,IAAK,MAAM9Y,KAAO6jB,EAAqB,CACnC,MAAM3jB,EAAQ2jB,EAAoB7jB,QACRiD,IAAtBqY,EAAatb,KAAsB,OAAcE,KACjDA,EAAMoQ,IAAIgL,EAAatb,IAAM,IACzB,EAAA+jB,EAAA,GAAwBxQ,IACxBA,EAAWY,IAAInU,GAG3B,CACJ,CAQA,2BAAA8jB,CAA4BE,EAAQC,GAChC,MAAO,CAAC,CACZ,CACA,KAAAC,CAAMnJ,GACFlF,KAAKjI,QAAUmN,EACf,IAAmBzK,IAAIyK,EAAUlF,MAC7BA,KAAKyN,aAAezN,KAAKyN,WAAWvI,UACpClF,KAAKyN,WAAWY,MAAMnJ,GAEtBlF,KAAKuM,QAAUvM,KAAK4M,gBAAkB5M,KAAK6M,wBAC3C7M,KAAKsO,sBAAwBtO,KAAKuM,OAAOgC,gBAAgBvO,OAE7DA,KAAK5R,OAAO+T,SAAQ,CAAC9X,EAAOF,IAAQ6V,KAAKwO,kBAAkBrkB,EAAKE,KAC3D4hB,EAAyBlU,SC1JtC,WAEI,GADAkU,EAAyBlU,SAAU,EAC9B,IAEL,GAAIkG,OAAOwQ,WAAY,CACnB,MAAMC,EAAmBzQ,OAAOwQ,WAAW,4BACrCE,EAA8B,IAAO3C,EAAqBjU,QAAU2W,EAAiBE,QAC3FF,EAAiBG,YAAYF,GAC7BA,GACJ,MAEI3C,EAAqBjU,SAAU,CAEvC,CD8IY+W,GAEJ9O,KAAK3B,mBAC4B,UAA7B2B,KAAKyM,sBAE8B,WAA7BzM,KAAKyM,qBAEDT,EAAqBjU,SAI/BiI,KAAKuM,QACLvM,KAAKuM,OAAOI,SAASrO,IAAI0B,MAC7BA,KAAKxP,OAAOwP,KAAKiD,MAAOjD,KAAKwM,gBACjC,CACA,OAAAuC,GACI,IAAmBzO,OAAON,KAAKjI,SAC/BiI,KAAKyN,YAAczN,KAAKyN,WAAWsB,WACnC,QAAY/O,KAAKoN,eACjB,QAAYpN,KAAK+K,QACjB/K,KAAKgN,mBAAmB7K,SAAS5D,GAAWA,MAC5CyB,KAAKsO,uBAAyBtO,KAAKsO,wBACnCtO,KAAKuM,QAAUvM,KAAKuM,OAAOI,SAASrM,OAAON,MAC3C,IAAK,MAAM7V,KAAO6V,KAAKkN,OACnBlN,KAAKkN,OAAO/iB,GAAKoW,QAErB,IAAK,MAAMpW,KAAO6V,KAAK+M,SACnB/M,KAAK+M,SAAS5iB,GAAK4kB,UAEvB/O,KAAKjI,QAAU,IACnB,CACA,iBAAAyW,CAAkBrkB,EAAKE,GACnB,MAAM2kB,EAAmB7T,EAAA,EAAe5B,IAAIpP,GACtC8kB,EAAiB5kB,EAAM6kB,GAAG,UAAWC,IACvCnP,KAAKyF,aAAatb,GAAOglB,EACzBnP,KAAKiD,MAAMlR,UACP,KAAMvB,OAAOwP,KAAKoN,cAAc,GAAO,GACvC4B,GAAoBhP,KAAKyN,aACzBzN,KAAKyN,WAAW2B,kBAAmB,EACvC,IAEEC,EAAwBhlB,EAAM6kB,GAAG,gBAAiBlP,KAAK0N,gBAC7D1N,KAAKgN,mBAAmBvS,IAAItQ,GAAK,KAC7B8kB,IACAI,GAAuB,GAE/B,CACA,gBAAAC,CAAiBC,GAIb,OAAKvP,KAAKjI,SACLiI,KAAKwP,0BACNxP,KAAKxO,OAAS+d,EAAM/d,KAGjBwO,KAAKwP,yBAAyBxP,KAAKjI,QAASwX,EAAMxX,SAF9C,CAGf,CACA,YAAA0X,EAAa,SAAE9C,KAAa+C,GAAiBC,EAAUC,EAAmBC,GACtE,IAAIC,EACAC,EAaJ,IAAK,IAAIzmB,EAAI,EAAGA,EAAI6iB,EAAa7iB,IAAK,CAClC,MAAM4Z,EAAOgJ,EAAa5iB,IACpB,UAAE0Z,EAAWgN,QAASC,EAAkB,eAAEC,EAAgBH,cAAeI,GAA4B,IAAmBjN,GAC1HgN,IACAJ,EAA4BI,GAC5BlN,EAAU0M,MACL1P,KAAK+M,SAAS7J,IAAS+M,IACxBjQ,KAAK+M,SAAS7J,GAAQ,IAAI+M,EAAmBjQ,OAE7CmQ,IACAJ,EAAgBI,GAG5B,CACA,IAAmB,SAAdnQ,KAAKxO,MAAiC,QAAdwO,KAAKxO,QAC7BwO,KAAKyN,YACNqC,EAA2B,CAC3B9P,KAAKyN,WAAa,IAAIqC,EAA0B9P,KAAKyF,aAAczF,KAAKuM,QAAUvM,KAAKuM,OAAOkB,YAC9F,MAAM,SAAErK,EAAQ,OAAEN,EAAM,KAAEN,EAAI,gBAAE4N,EAAe,aAAE/K,EAAY,WAAEgL,GAAgBX,EAC/E1P,KAAKyN,WAAW6C,WAAW,CACvBlN,WACAN,SACAyN,oBAAqBvc,QAAQwO,IACxB4N,IAAmB,OAAYA,GACpC9S,cAAe0C,KACf0N,eAAgB,IAAM1N,KAAK0N,iBAQ3B8C,cAAiC,iBAAX1N,EAAsBA,EAAS,OACrD2N,uBAAwBZ,EACxBxK,eACAgL,cAER,CACA,OAAON,CACX,CACA,cAAAW,GACI,IAAK,MAAMvmB,KAAO6V,KAAK+M,SAAU,CAC7B,MAAM4D,EAAU3Q,KAAK+M,SAAS5iB,GAC1BwmB,EAAQC,UACRD,EAAQngB,UAGRmgB,EAAQtC,QACRsC,EAAQC,WAAY,EAE5B,CACJ,CACA,YAAAtD,GACItN,KAAK6Q,MAAM7Q,KAAKwN,YAAaxN,KAAKyF,aAAczF,KAAKhO,QAASgO,KAAKiD,MACvE,CAMA,kBAAAsE,GACI,OAAOvH,KAAKjI,QACNiI,KAAK8Q,2BAA2B9Q,KAAKjI,QAASiI,KAAKiD,QACnD,SACV,CACA,cAAA8N,CAAe5mB,GACX,OAAO6V,KAAKyF,aAAatb,EAC7B,CACA,cAAAqhB,CAAerhB,EAAKE,GAChB2V,KAAKyF,aAAatb,GAAOE,CAC7B,CAQA,oBAAAoT,CAAqBhO,EAAQuhB,GAAY,GACrC,OAAOhR,KAAKiR,iCAAiCxhB,EAAQuQ,KAAKiD,MAAO+N,EACrE,CAKA,MAAAxgB,CAAOyS,EAAOuJ,IACNvJ,EAAMiO,mBAAqBlR,KAAKiD,MAAMiO,oBACtClR,KAAK0N,iBAET1N,KAAKmR,UAAYnR,KAAKiD,MACtBjD,KAAKiD,MAAQA,EACbjD,KAAKoR,oBAAsBpR,KAAKwM,gBAChCxM,KAAKwM,gBAAkBA,EAIvB,IAAK,IAAIljB,EAAI,EAAGA,EAAI8iB,EAAkB5iB,OAAQF,IAAK,CAC/C,MAAMa,EAAMiiB,EAAkB9iB,GAC1B0W,KAAKmN,uBAAuBhjB,KAC5B6V,KAAKmN,uBAAuBhjB,YACrB6V,KAAKmN,uBAAuBhjB,IAEvC,MAAMknB,EAAWpO,EAAM,KAAO9Y,GAC1BknB,IACArR,KAAKmN,uBAAuBhjB,GAAO6V,KAAKkP,GAAG/kB,EAAKknB,GAExD,CACArR,KAAKiN,iBE9Ub,SAAqCnT,EAAStL,EAAM8iB,GAChD,MAAM,WAAE5T,GAAelP,EACvB,IAAK,MAAMrE,KAAOqE,EAAM,CACpB,MAAM+iB,EAAY/iB,EAAKrE,GACjBqnB,EAAYF,EAAKnnB,GACvB,IAAI,OAAconB,GAKdzX,EAAQ2X,SAAStnB,EAAKonB,IAClB,EAAArD,EAAA,GAAwBxQ,IACxBA,EAAWY,IAAInU,QAUlB,IAAI,OAAcqnB,GAKnB1X,EAAQ2X,SAAStnB,GAAK,QAAYonB,EAAW,CAAElX,MAAOP,MAClD,EAAAoU,EAAA,GAAwBxQ,IACxBA,EAAWa,OAAOpU,QAGrB,GAAIqnB,IAAcD,EAMnB,GAAIzX,EAAQ0Q,SAASrgB,GAAM,CACvB,MAAMunB,EAAgB5X,EAAQ6D,SAASxT,IAEtCunB,EAAcC,aAAeD,EAAcjX,IAAI8W,EACpD,KACK,CACD,MAAMpC,EAAcrV,EAAQiX,eAAe5mB,GAC3C2P,EAAQ2X,SAAStnB,GAAK,aAA4BiD,IAAhB+hB,EAA4BA,EAAcoC,EAAW,CAAElX,MAAOP,IACpG,CAER,CAEA,IAAK,MAAM3P,KAAOmnB,OACIlkB,IAAdoB,EAAKrE,IACL2P,EAAQ8X,YAAYznB,GAE5B,OAAOqE,CACX,CFuRgCqjB,CAA4B7R,KAAMA,KAAKiO,4BAA4BhL,EAAOjD,KAAKmR,WAAYnR,KAAKiN,kBACpHjN,KAAK8R,wBACL9R,KAAK8R,wBAEb,CACA,QAAAlV,GACI,OAAOoD,KAAKiD,KAChB,CAIA,UAAA8O,CAAW7O,GACP,OAAOlD,KAAKiD,MAAM+O,SAAWhS,KAAKiD,MAAM+O,SAAS9O,QAAQ9V,CAC7D,CAIA,oBAAA6N,GACI,OAAO+E,KAAKiD,MAAMtH,UACtB,CACA,qBAAAsW,GACI,OAAOjS,KAAKiD,MAAM3D,kBACtB,CACA,qBAAA4S,GACI,OAAOlS,KAAK4M,cACN5M,KACAA,KAAKuM,OACDvM,KAAKuM,OAAO2F,6BACZ9kB,CACd,CACA,iBAAA+kB,CAAkBC,GAAgB,GAC9B,GAAIA,EACA,OAAOpS,KAAKuM,OAASvM,KAAKuM,OAAO4F,yBAAsB/kB,EAE3D,IAAK4S,KAAK6M,sBAAuB,CAC7B,MAAMwF,EAAUrS,KAAKuM,QACfvM,KAAKuM,OAAO4F,qBACZ,CAAC,EAIP,YAH2B/kB,IAAvB4S,KAAKiD,MAAM4K,UACXwE,EAAQxE,QAAU7N,KAAKiD,MAAM4K,SAE1BwE,CACX,CACA,MAAMA,EAAU,CAAC,EACjB,IAAK,IAAI/oB,EAAI,EAAGA,EAAI+iB,EAAiB/iB,IAAK,CACtC,MAAM4Z,EAAO,IAAa5Z,GACpBgpB,EAAOtS,KAAKiD,MAAMC,KACpB,OAAeoP,KAAkB,IAATA,KACxBD,EAAQnP,GAAQoP,EAExB,CACA,OAAOD,CACX,CAIA,eAAA9D,CAAgBgE,GACZ,MAAMC,EAAqBxS,KAAKkS,wBAChC,GAAIM,EAGA,OAFAA,EAAmB1E,iBACf0E,EAAmB1E,gBAAgBxP,IAAIiU,GACpC,IAAMC,EAAmB1E,gBAAgBxN,OAAOiS,EAE/D,CAIA,QAAAd,CAAStnB,EAAKE,GAENA,IAAU2V,KAAK5R,OAAO4N,IAAI7R,KAC1B6V,KAAK4R,YAAYznB,GACjB6V,KAAKwO,kBAAkBrkB,EAAKE,IAEhC2V,KAAK5R,OAAOqM,IAAItQ,EAAKE,GACrB2V,KAAKyF,aAAatb,GAAOE,EAAM2R,KACnC,CAIA,WAAA4V,CAAYznB,GACR6V,KAAK5R,OAAOkS,OAAOnW,GACnB,MAAMsoB,EAAczS,KAAKgN,mBAAmBhR,IAAI7R,GAC5CsoB,IACAA,IACAzS,KAAKgN,mBAAmB1M,OAAOnW,WAE5B6V,KAAKyF,aAAatb,GACzB6V,KAAK0S,2BAA2BvoB,EAAK6V,KAAKwN,YAC9C,CAIA,QAAAhD,CAASrgB,GACL,OAAO6V,KAAK5R,OAAOmL,IAAIpP,EAC3B,CACA,QAAAwT,CAASxT,EAAKwoB,GACV,GAAI3S,KAAKiD,MAAM7U,QAAU4R,KAAKiD,MAAM7U,OAAOjE,GACvC,OAAO6V,KAAKiD,MAAM7U,OAAOjE,GAE7B,IAAIE,EAAQ2V,KAAK5R,OAAO4N,IAAI7R,GAK5B,YAJciD,IAAV/C,QAAwC+C,IAAjBulB,IACvBtoB,GAAQ,QAAYsoB,EAAc,CAAEtY,MAAO2F,OAC3CA,KAAKyR,SAAStnB,EAAKE,IAEhBA,CACX,CAMA,SAAAuoB,CAAUzoB,GACN,IAAI0oB,EACJ,YAAkCzlB,IAA3B4S,KAAKyF,aAAatb,IAAuB6V,KAAKjI,QAES,QAAvD8a,EAAK7S,KAAK8S,uBAAuB9S,KAAKiD,MAAO9Y,UAAyB,IAAP0oB,EAAgBA,EAAK7S,KAAK+S,sBAAsB/S,KAAKjI,QAAS5N,EAAK6V,KAAKhO,SADxIgO,KAAKyF,aAAatb,EAE5B,CAKA,aAAA6oB,CAAc7oB,EAAKE,GACf2V,KAAK2N,WAAWxjB,GAAOE,CAC3B,CAKA,aAAA4oB,CAAc9oB,GACV,IAAI0oB,EACJ,MAAM,QAAEhF,GAAY7N,KAAKiD,MACnBiQ,EAAsC,iBAAZrF,GAA2C,iBAAZA,EACD,QAAvDgF,GAAK,OAAwB7S,KAAKiD,MAAO4K,UAA6B,IAAPgF,OAAgB,EAASA,EAAG1oB,QAC5FiD,EAIN,GAAIygB,QAAgCzgB,IAArB8lB,EACX,OAAOA,EAMX,MAAMzjB,EAASuQ,KAAK8S,uBAAuB9S,KAAKiD,MAAO9Y,GACvD,YAAeiD,IAAXqC,IAAyB,OAAcA,QAMRrC,IAA5B4S,KAAK4N,cAAczjB,SACDiD,IAArB8lB,OACE9lB,EACA4S,KAAK2N,WAAWxjB,GARXsF,CASf,CACA,EAAAyf,CAAGiE,EAAWzR,GAIV,OAHK1B,KAAKkN,OAAOiG,KACbnT,KAAKkN,OAAOiG,GAAa,IAAI,KAE1BnT,KAAKkN,OAAOiG,GAAW7U,IAAIoD,EACtC,CACA,MAAA2L,CAAO8F,KAAcC,GACbpT,KAAKkN,OAAOiG,IACZnT,KAAKkN,OAAOiG,GAAW9F,UAAU+F,EAEzC,EGrfJ,MAAMC,UAAyB/G,EAC3B,wBAAAkD,CAAyB5Z,EAAGC,GAMxB,OAAsC,EAA/BD,EAAE0d,wBAAwBzd,GAAS,GAAK,CACnD,CACA,sBAAAid,CAAuB7P,EAAO9Y,GAC1B,OAAO8Y,EAAMkC,MAAQlC,EAAMkC,MAAMhb,QAAOiD,CAC5C,CACA,0BAAAslB,CAA2BvoB,GAAK,KAAEopB,EAAI,MAAEpO,WAC7BoO,EAAKppB,UACLgb,EAAMhb,EACjB,CACA,gCAAA8mB,EAAiC,WAAEtV,EAAU,cAAE6B,KAAkB/N,IAAU,gBAAE+jB,GAAmB5C,GAC5F,IAAIxhB,GAAS,QAAUK,EAAQkM,GAAc,CAAC,EAAGqE,MAYjD,GARIwT,IACIhW,IACAA,EAAgBgW,EAAgBhW,IAChC/N,IACAA,EAAS+jB,EAAgB/jB,IACzBL,IACAA,EAASokB,EAAgBpkB,KAE7BwhB,EAAW,EACX,QAAwB5Q,KAAMvQ,EAAQL,GACtC,MAAMqkB,EAAS3H,EAAgB9L,KAAMvQ,EAAQL,EAAQoO,GACrDA,EAAgBiW,EAAOjW,cACvB/N,EAASgkB,EAAOhkB,MACpB,CACA,MAAO,CACHkM,aACA6B,mBACG/N,EAEX,4EC1CJ,MAAMikB,GAAgB,IAAAtU,eAAc,CAAC,6BCArC,MAAMuU,GAAc,IAAAvU,eAAc,CAAEwU,QAAQ,4DCE5C,SAASC,EAAuB5Q,GAC5B,MAAM,QAAE4K,EAAO,QAAE7T,GCFrB,SAAgCiJ,EAAOoP,GACnC,IAAI,OAAsBpP,GAAQ,CAC9B,MAAM,QAAE4K,EAAO,QAAE7T,GAAYiJ,EAC7B,MAAO,CACH4K,SAAqB,IAAZA,IAAqB,OAAeA,GACvCA,OACAzgB,EACN4M,SAAS,OAAeA,GAAWA,OAAU5M,EAErD,CACA,OAAyB,IAAlB6V,EAAM6Q,QAAoBzB,EAAU,CAAC,CAChD,CDTiC0B,CAAuB9Q,GAAO,IAAA+Q,YAAWN,IACtE,OAAO,IAAAO,UAAQ,KAAM,CAAGpG,UAAS7T,aAAY,CAACka,EAA0BrG,GAAUqG,EAA0Bla,IAChH,CACA,SAASka,EAA0B5B,GAC/B,OAAO1oB,MAAMC,QAAQyoB,GAAQA,EAAK6B,KAAK,KAAO7B,CAClD,0CELA,MAAM8B,GAA2B,IAAAhV,eAAc,CAAC,GCL1CiV,EAAwBC,OAAOC,IAAI,yBCuBzC,SAAS,GAAsB,kBAAE3E,EAAiB,oBAAE4E,EAAmB,UAAEC,EAAS,eAAEC,EAAc,UAAEC,IAChG/E,GCtBJ,SAAsB7C,GAClB,IAAK,MAAM5iB,KAAO4iB,EACd,IAAmB5iB,GAAO,IACnB,IAAmBA,MACnB4iB,EAAS5iB,GAGxB,CDeyBslB,CAAaG,GA2ClC,MAAMgF,GAAsB,IAAAC,aA1C5B,SAAyB5R,EAAO6R,GAK5B,IAAI/E,EACJ,MAAMgF,EAAiB,KAChB,IAAAf,YAAW3U,EAAA,MACX4D,EACHG,SAAU4R,EAAY/R,KAEpB,SAAE1D,GAAawV,EACf1C,EAAUwB,EAAuB5Q,GACjCyJ,EAAcgI,EAAezR,EAAO1D,GAC1C,IAAKA,GAAY,IAAW,CAOxB8S,EAAQ/U,cEtCpB,SAA0BqX,EAAWjI,EAAazJ,EAAOuR,GACrD,MAAQlX,cAAeiP,IAAW,IAAAyH,YAAWN,GACvCuB,GAAc,IAAAjB,YAAWL,GACzBnH,GAAkB,IAAAwH,YAAW,KAC7BvH,GAAsB,IAAAuH,YAAW3U,EAAA,GAAqBG,cACtD0V,GAAmB,IAAAC,UAIzBX,EAAsBA,GAAuBS,EAAYG,UACpDF,EAAiBnd,SAAWyc,IAC7BU,EAAiBnd,QAAUyc,EAAoBG,EAAW,CACtDjI,cACAH,SACAtJ,QACAuJ,kBACA6I,wBAAuB7I,IACW,IAA5BA,EAAgBqB,QAEtBpB,yBAGR,MAAMnP,EAAgB4X,EAAiBnd,SACvC,IAAAud,qBAAmB,KACfhY,GAAiBA,EAAc9M,OAAOyS,EAAOuJ,EAAgB,IAMjE,MAAM+I,GAAe,IAAAJ,QAAOnhB,QAAQiP,EAAM,OAAkChF,OAAOuX,kBAgCnF,OA/BA,QAA0B,KACjBlY,IAELA,EAAcyN,SAWVwK,EAAaxd,SAAWuF,EAAcQ,gBACtCR,EAAcQ,eAAe2X,iBACjC,KAEJ,IAAAC,YAAU,KACDpY,IAELA,EAAcoT,kBACT6E,EAAaxd,SAAWuF,EAAcQ,gBACvCR,EAAcQ,eAAe2X,iBAE7BF,EAAaxd,UACbwd,EAAaxd,SAAU,EAEvBkG,OAAOuX,iBAAkB,GAC7B,IAEGlY,CACX,CFzBoCqY,CAAiBhB,EAAWjI,EAAaqI,EAAgBP,GAKjF,MAAM3E,GAA2B,IAAAmE,YAAWI,GACtCzE,GAAW,IAAAqE,YAAWL,GAAaC,OACrCvB,EAAQ/U,gBACRyS,EAAgBsC,EAAQ/U,cAAcmS,aAEtCsF,EAAgBpF,EAAUC,EAAmBC,GAErD,CAKA,OAAQ,gBAAoB6D,EAAckC,SAAU,CAAEvrB,MAAOgoB,GACzDtC,GAAiBsC,EAAQ/U,cAAiB,gBAAoByS,EAAe,CAAEzS,cAAe+U,EAAQ/U,iBAAkByX,IAAqB,KAC7IN,EAAUE,EAAW1R,EG1DjC,SAAsByJ,EAAapP,EAAewX,GAC9C,OAAO,IAAAe,cAAa3Q,IAChBA,GAAYwH,EAAY2B,OAAS3B,EAAY2B,MAAMnJ,GAC/C5H,IACA4H,EACM5H,EAAc+Q,MAAMnJ,GACpB5H,EAAcyR,WAEpB+F,IAC2B,mBAAhBA,EACPA,EAAY5P,IAEP,OAAY4P,KACjBA,EAAY/c,QAAUmN,GAE9B,GAOJ,CAAC5H,GACL,CHmCwCwY,CAAapJ,EAAa2F,EAAQ/U,cAAewX,GAAcpI,EAAanN,EAAU8S,EAAQ/U,eAClI,IAGA,OADAsX,EAAoBP,GAAyBM,EACtCC,CACX,CACA,SAASI,GAAY,SAAE5R,IACnB,MAAM2S,GAAgB,IAAA/B,YAAW7U,EAAA6W,GAAoBC,GACrD,OAAOF,QAA8B3oB,IAAbgW,EAClB2S,EAAgB,IAAM3S,EACtBA,CACV,CI5DA,SAAS8S,EAAkBC,GACvB,SAASC,EAAOzB,EAAW0B,EAA8B,CAAC,GACtD,OAAO,EAAsBF,EAAaxB,EAAW0B,GACzD,CACA,GAAqB,oBAAVC,MACP,OAAOF,EAMX,MAAMG,EAAiB,IAAIzJ,IAC3B,OAAO,IAAIwJ,MAAMF,EAAQ,CAMrBpa,IAAK,CAACwa,EAASrsB,KAINosB,EAAehd,IAAIpP,IACpBosB,EAAe9b,IAAItQ,EAAKisB,EAAOjsB,IAE5BosB,EAAeva,IAAI7R,KAGtC,CCxCA,MAAMssB,EAAuB,CACzB,UACA,SACA,OACA,OACA,UACA,IACA,QACA,OACA,SACA,SACA,OACA,WACA,OACA,UACA,UACA,WACA,OACA,OACA,SACA,SACA,MACA,OACA,QACA,MACA,QC3BJ,SAASC,EAAe/B,GACpB,MAKqB,iBAAdA,IAIHA,EAAUzqB,SAAS,SAOvBusB,EAAqBpW,QAAQsU,IAAc,GAIvC,QAAQpZ,KAAKoZ,GAIrB,qCC3BA,MAAMgC,EAAwB,KAAM,CAChCxR,MAAO,CAAC,EACRhK,UAAW,CAAC,EACZyb,gBAAiB,CAAC,EAClBrD,KAAM,CAAC,ICEX,SAASsD,EAAkBpnB,EAAQqnB,EAAQ7T,GACvC,IAAK,MAAM9Y,KAAO2sB,GACT,OAAcA,EAAO3sB,MAAU,OAAoBA,EAAK8Y,KACzDxT,EAAOtF,GAAO2sB,EAAO3sB,GAGjC,CAQA,SAAS4sB,EAAS9T,EAAOyJ,EAAanN,GAClC,MACM4F,EAAQ,CAAC,EAMf,OAFA0R,EAAkB1R,EALAlC,EAAMkC,OAAS,CAAC,EAKElC,GACpCjZ,OAAO2c,OAAOxB,EAdlB,UAAgC,kBAAE+L,GAAqBxE,EAAanN,GAChE,OAAO,IAAA0U,UAAQ,KACX,MAAMrmB,EDfsB,CAChCuX,MAAO,CAAC,EACRhK,UAAW,CAAC,EACZyb,gBAAiB,CAAC,EAClBrD,KAAM,CAAC,GCaH,OADA,OAAgB3lB,EAAO8e,EAAa,CAAEsK,4BAA6BzX,GAAY2R,GACxElnB,OAAO2c,OAAO,CAAC,EAAG/Y,EAAM2lB,KAAM3lB,EAAMuX,MAAM,GAClD,CAACuH,GACR,CAQyBuK,CAAuBhU,EAAOyJ,EAAanN,IACzD0D,EAAMuQ,gBAAkBvQ,EAAMuQ,gBAAgBrO,GAASA,CAClE,CACA,SAAS+R,EAAajU,EAAOyJ,EAAanN,GAEtC,MAAM4X,EAAY,CAAC,EACbhS,EAAQ4R,EAAS9T,EAAOyJ,EAAanN,GAoB3C,OAnBI0D,EAAMT,OAA+B,IAAvBS,EAAMmU,eAEpBD,EAAUE,WAAY,EAEtBlS,EAAMmS,WACFnS,EAAMoS,iBACFpS,EAAMqS,mBACF,OAEZrS,EAAMsS,aACa,IAAfxU,EAAMT,KACA,OACA,QAAsB,MAAfS,EAAMT,KAAe,IAAM,WAEzBpV,IAAnB6V,EAAMyU,WACLzU,EAAM0U,OAAS1U,EAAM2U,YAAc3U,EAAM4U,YAC1CV,EAAUO,SAAW,GAEzBP,EAAUhS,MAAQA,EACXgS,CACX,CChDA,MAAMW,EAAmB,IAAI1e,IAAI,CAC7B,UACA,OACA,WACA,UACA,QACA,SACA,WACA,aACA,oBACA,kBACA,SACA,UACA,wBACA,mBACA,sBACA,WACA,cACA,SACA,YACA,2BACA,kBACA,sBACA,SACA,SACA,eACA,aACA,kBACA,kBACA,kBACA,eACA,aAUJ,SAAS2e,EAAkB5tB,GACvB,OAAQA,EAAIiR,WAAW,UAClBjR,EAAIiR,WAAW,SAAmB,cAARjR,GAC3BA,EAAIiR,WAAW,WACfjR,EAAIiR,WAAW,UACfjR,EAAIiR,WAAW,UACfjR,EAAIiR,WAAW,aACf0c,EAAiBve,IAAIpP,EAC7B,CCrDA,IAAI6tB,EAAiB7tB,IAAS4tB,EAAkB5tB,GAoBhD,KAnBiC8tB,EAyBLC,QAAQ,0BAA0BztB,WArB1DutB,EAAiB7tB,GAAQA,EAAIiR,WAAW,OAAS2c,EAAkB5tB,GAAO8tB,EAAY9tB,GAsB1F,CACA,MAAO0oB,GAEP,CA7BA,IAAiCoF,iBCDjC,MAAME,EAAuB,KAAM,CJD/BhT,MAAO,CAAC,EACRhK,UAAW,CAAC,EACZyb,gBAAiB,CAAC,EAClBrD,KAAM,CAAC,EIAP6E,MAAO,CAAC,mBCEZ,SAASC,EAAYpV,EAAOyJ,EAAa4L,EAAW3D,GAChD,MAAM4D,GAAc,IAAAtE,UAAQ,KACxB,MAAMrmB,EDNqB,CJD/BuX,MAAO,CAAC,EACRhK,UAAW,CAAC,EACZyb,gBAAiB,CAAC,EAClBrD,KAAM,CAAC,EIAP6E,MAAO,CAAC,GCMJ,OADA,OAAcxqB,EAAO8e,EAAa,CAAEsK,4BAA4B,IAAS,OAASrC,GAAY1R,EAAMiO,mBAC7F,IACAtjB,EAAMwqB,MACTjT,MAAO,IAAKvX,EAAMuX,OACrB,GACF,CAACuH,IACJ,GAAIzJ,EAAMkC,MAAO,CACb,MAAMqT,EAAY,CAAC,EACnB3B,EAAkB2B,EAAWvV,EAAMkC,MAAOlC,GAC1CsV,EAAYpT,MAAQ,IAAKqT,KAAcD,EAAYpT,MACvD,CACA,OAAOoT,CACX,CCdA,SAASE,EAAgBC,GAAqB,GAwB1C,MAvBkB,CAAC/D,EAAW1R,EAAO0V,GAAOlT,gBAAgBlG,KACxD,MAGMgZ,GAHiB7B,EAAe/B,GAChC0D,EACAnB,GAC6BjU,EAAOwC,EAAclG,EAAUoV,GAC5DiE,EHoBd,SAAqB3V,EAAO4V,EAAOH,GAC/B,MAAME,EAAgB,CAAC,EACvB,IAAK,MAAMzuB,KAAO8Y,EAQF,WAAR9Y,GAA4C,iBAAjB8Y,EAAM7U,SAEjC4pB,EAAc7tB,KACU,IAAvBuuB,GAA+BX,EAAkB5tB,KAChD0uB,IAAUd,EAAkB5tB,IAE7B8Y,EAAiB,WAAK9Y,EAAIiR,WAAW,aACtCwd,EAAczuB,GAAO8Y,EAAM9Y,IAGnC,OAAOyuB,CACX,CGzC8BE,CAAY7V,EAA4B,iBAAd0R,EAAwB+D,GAClEK,EAAe,IACdH,KACAL,EACHI,QAOE,SAAEhM,GAAa1J,EACf+V,GAAmB,IAAA/E,UAAQ,KAAO,OAActH,GAAYA,EAAS3Q,MAAQ2Q,GAAW,CAACA,IAC/F,OAAO,IAAAsM,eAActE,EAAW,IACzBoE,EACHpM,SAAUqM,GACZ,CAGV,sECxBA,SAASE,EAAmB7uB,GACxB,MAAM8uB,GAAiB,OAAc9uB,GAASA,EAAM2R,MAAQ3R,EAC5D,OAAO,OAAc8uB,GACfA,EAAeC,UACfD,CACV,CCMA,MAAME,EAAsBC,GAAW,CAACrW,EAAO1D,KAC3C,MAAM8S,GAAU,IAAA2B,YAAWN,GACrBlH,GAAkB,IAAAwH,YAAW,KAC7BuF,EAAO,IAbjB,UAAmB,4BAAEtL,EAA2B,kBAAEuL,EAAiB,QAAEC,GAAYxW,EAAOoP,EAAS7F,GAC7F,MAAM5e,EAAQ,CACV6X,aAAciU,EAAiBzW,EAAOoP,EAAS7F,EAAiByB,GAChET,YAAagM,KAKjB,OAHIC,IACA7rB,EAAMygB,MAASnJ,GAAauU,EAAQxW,EAAOiC,EAAUtX,IAElDA,CACX,CAIuB+rB,CAAUL,EAAQrW,EAAOoP,EAAS7F,GACrD,OAAOjN,EAAWga,KAAS,OAAYA,EAAK,EAEhD,SAASG,EAAiBzW,EAAOoP,EAAS7F,EAAiBoN,GACvD,MAAMxrB,EAAS,CAAC,EACVyrB,EAAeD,EAAmB3W,EAAO,CAAC,GAChD,IAAK,MAAM9Y,KAAO0vB,EACdzrB,EAAOjE,GAAO+uB,EAAmBW,EAAa1vB,IAElD,IAAI,QAAE0jB,EAAO,QAAE7T,GAAYiJ,EAC3B,MAAM6W,GAA0B,OAAsB7W,GAChD8W,GAAkB,OAAc9W,GAClCoP,GACA0H,IACCD,IACiB,IAAlB7W,EAAM6Q,eACU1mB,IAAZygB,IACAA,EAAUwE,EAAQxE,cACNzgB,IAAZ4M,IACAA,EAAUqY,EAAQrY,UAE1B,IAAIggB,IAA4BxN,IACE,IAA5BA,EAAgBqB,QAEtBmM,EAA4BA,IAAyC,IAAZnM,EACzD,MAAMoM,EAAeD,EAA4BhgB,EAAU6T,EAC3D,GAAIoM,GACwB,kBAAjBA,KACN,OAAoBA,GAAe,EACvBrwB,MAAMC,QAAQowB,GAAgBA,EAAe,CAACA,IACtD9X,SAASpV,IACV,MAAMqb,GAAW,OAAwBnF,EAAOlW,GAChD,IAAKqb,EACD,OACJ,MAAM,cAAE5K,EAAa,WAAE7B,KAAelM,GAAW2Y,EACjD,IAAK,MAAMje,KAAOsF,EAAQ,CACtB,IAAIuO,EAAcvO,EAAOtF,GACzB,GAAIP,MAAMC,QAAQmU,GAAc,CAQ5BA,EAAcA,EAHAgc,EACRhc,EAAYxU,OAAS,EACrB,EAEV,CACoB,OAAhBwU,IACA5P,EAAOjE,GAAO6T,EAEtB,CACA,IAAK,MAAM7T,KAAOqT,EACdpP,EAAOjE,GAAOqT,EAAcrT,EAAI,GAE5C,CACA,OAAOiE,CACX,gBCtEA,MAAM8rB,EAAkB,CACpBxF,eAAgB2E,EAAmB,CAC/BpL,4BAA6B,IAC7BuL,kBAAmBrB,EACnBsB,QAAS,CAACxW,EAAOiC,GAAYsI,cAAa/H,mBACtC,KAAM0U,MAAK,KACP,IACI3M,EAAY4M,WAEJ,mBADGlV,EAASmV,QAEVnV,EAASmV,UACTnV,EAASsC,uBACvB,CACA,MAAOvR,GAEHuX,EAAY4M,WAAa,CACrB9uB,EAAG,EACHoY,EAAG,EACHiG,MAAO,EACPG,OAAQ,EAEhB,KAEJ,KAAMiB,QAAO,MACT,OAAcyC,EAAa/H,EAAc,CAAEuR,4BAA4B,IAAS,OAAS9R,EAASoV,SAAUrX,EAAMiO,oBAClH,EAAAnG,EAAA,GAAU7F,EAAUsI,EAAY,GAClC,KC9Bd,MAAM+M,EAAmB,CACrB7F,eAAgB2E,EAAmB,CAC/BpL,qCAA2B,EAC3BuL,kBAAmB7C,KCP3B,SAAS6D,EAAY/qB,EAAQ0jB,EAAWsH,EAASzoB,EAAU,CAAE0oB,SAAS,IAElE,OADAjrB,EAAOkrB,iBAAiBxH,EAAWsH,EAASzoB,GACrC,IAAMvC,EAAOmrB,oBAAoBzH,EAAWsH,EACvD,CCHA,MAAMI,GAAoBC,GACI,UAAtBA,EAAMC,YACyB,iBAAjBD,EAAME,QAAuBF,EAAME,QAAU,GAWhC,IAApBF,EAAMG,UCXrB,SAASC,GAAiBJ,EAAOK,EAAY,QACzC,MAAO,CACHtX,MAAO,CACHvY,EAAGwvB,EAAMK,EAAY,KACrBzX,EAAGoX,EAAMK,EAAY,MAGjC,CCNA,SAASC,GAAgB3rB,EAAQ0jB,EAAWsH,EAASzoB,GACjD,OAAOwoB,EAAY/qB,EAAQ0jB,EDMR,CAACsH,GACZK,GAAUD,GAAiBC,IAAUL,EAAQK,EAAOI,GAAiBJ,ICPvCO,CAAeZ,GAAUzoB,EACnE,gBCLA,SAASspB,GAAWpY,GAChB,IAAIqY,EAAO,KACX,MAAO,KACH,MAAMC,EAAW,KACbD,EAAO,IAAI,EAEf,OAAa,OAATA,IACAA,EAAOrY,EACAsY,EAEC,CAEpB,CACA,MAAMC,GAAuBH,GAAW,kBAClCI,GAAqBJ,GAAW,gBACtC,SAASK,GAAcnZ,GACnB,IAAI+Y,GAAO,EACX,GAAa,MAAT/Y,EACA+Y,EAAOG,UAEN,GAAa,MAATlZ,EACL+Y,EAAOE,SAEN,CACD,MAAMG,EAAiBH,KACjBI,EAAeH,KACjBE,GAAkBC,EAClBN,EAAO,KACHK,IACAC,GAAc,GAKdD,GACAA,IACAC,GACAA,IAEZ,CACA,OAAON,CACX,CACA,SAASO,KAGL,MAAMC,EAAkBJ,IAAc,GACtC,OAAKI,IAELA,KACO,EACX,CClDA,MAAM/L,GACF,WAAAjQ,CAAYiF,GACRhF,KAAK4Q,WAAY,EACjB5Q,KAAKgF,KAAOA,CAChB,CACA,MAAAxU,GAAW,ECCf,SAASwrB,GAAchX,EAAMiX,GACzB,MAAM9I,EAAY,WAAa8I,EAAW,QAAU,SAC9CC,EAAe,WAAaD,EAAW,QAAU,OAYvD,OAAOb,GAAgBpW,EAAKjN,QAASob,GAXjB,CAAC2H,EAAOqB,KACxB,GAA0B,UAAtBrB,EAAMC,aAA2Be,KACjC,OACJ,MAAM7Y,EAAQ+B,EAAKpI,WACfoI,EAAKlH,gBAAkBmF,EAAMmZ,YAC7BpX,EAAKlH,eAAeue,UAAU,aAAcJ,GAE5ChZ,EAAMiZ,IACN,KAAM1rB,QAAO,IAAMyS,EAAMiZ,GAAcpB,EAAOqB,IAClD,GAEyD,CACzDzB,SAAU1V,EAAKpI,WAAWsf,IAElC,CChBA,MAAMI,GAAgB,CAAC/P,EAAQgG,MACtBA,IAGIhG,IAAWgG,GAIT+J,GAAc/P,EAAQgG,EAAMgK,8BCL3C,SAASC,GAA0BtZ,EAAMuX,GACrC,IAAKA,EACD,OACJ,MAAMgC,EAAwB,IAAIC,aAAa,UAAYxZ,GAC3DuX,EAAQgC,EAAuBvB,GAAiBuB,GACpD,CCVA,MAAME,GAAoB,IAAIC,QAMxBC,GAAY,IAAID,QAChBE,GAAwBC,IAC1B,MAAMrb,EAAWib,GAAkB3gB,IAAI+gB,EAAMttB,QAC7CiS,GAAYA,EAASqb,EAAM,EAEzBC,GAA4BC,IAC9BA,EAAQ9a,QAAQ2a,GAAqB,EAqBzC,SAASI,GAAoBpjB,EAAS9H,EAAS0P,GAC3C,MAAMyb,EApBV,UAAkC,KAAE5X,KAASvT,IACzC,MAAMorB,EAAa7X,GAAQ8X,SAItBR,GAAUtjB,IAAI6jB,IACfP,GAAUpiB,IAAI2iB,EAAY,CAAC,GAE/B,MAAME,EAAgBT,GAAU7gB,IAAIohB,GAC9BjzB,EAAMozB,KAAKC,UAAUxrB,GAQ3B,OAHKsrB,EAAcnzB,KACfmzB,EAAcnzB,GAAO,IAAIszB,qBAAqBT,GAA0B,CAAEzX,UAASvT,KAEhFsrB,EAAcnzB,EACzB,CAEsCuzB,CAAyB1rB,GAG3D,OAFA2qB,GAAkBliB,IAAIX,EAAS4H,GAC/Byb,EAA0BQ,QAAQ7jB,GAC3B,KACH6iB,GAAkBrc,OAAOxG,GACzBqjB,EAA0BS,UAAU9jB,EAAQ,CAEpD,CC3CA,MAAM+jB,GAAiB,CACnB/mB,KAAM,EACN0H,IAAK,GCAT,MAAMsf,GAAoB,CACtBjb,OAAQ,CACJmN,QDAR,cAA4BA,GACxB,WAAAjQ,GACIge,SAASx0B,WACTyW,KAAKge,gBAAiB,EACtBhe,KAAKie,UAAW,CACpB,CACA,aAAAC,GACIle,KAAK+O,UACL,MAAM,SAAEoP,EAAW,CAAC,GAAMne,KAAKgF,KAAKpI,YAC9B,KAAE2I,EAAM6Y,OAAQC,EAAU,OAAEC,EAAS,OAAM,KAAEC,GAASJ,EACtDnsB,EAAU,CACZuT,KAAMA,EAAOA,EAAKxN,aAAU3K,EAC5BixB,aACAG,UAA6B,iBAAXF,EAAsBA,EAAST,GAAeS,IA+BpE,OAAOpB,GAAoBld,KAAKgF,KAAKjN,QAAS/F,GA7BhB+qB,IAC1B,MAAM,eAAE0B,GAAmB1B,EAI3B,GAAI/c,KAAKie,WAAaQ,EAClB,OAMJ,GALAze,KAAKie,SAAWQ,EAKZF,IAASE,GAAkBze,KAAKge,eAChC,OAEKS,IACLze,KAAKge,gBAAiB,GAEtBhe,KAAKgF,KAAKlH,gBACVkC,KAAKgF,KAAKlH,eAAeue,UAAU,cAAeoC,GAMtD,MAAM,gBAAEC,EAAe,gBAAEC,GAAoB3e,KAAKgF,KAAKpI,WACjD8E,EAAW+c,EAAiBC,EAAkBC,EACpDjd,GAAYA,EAASqb,EAAM,GAGnC,CACA,KAAA1O,GACIrO,KAAKke,eACT,CACA,MAAA1tB,GACI,GAAoC,oBAAzBitB,qBACP,OACJ,MAAM,MAAExa,EAAK,UAAEkO,GAAcnR,KAAKgF,KACR,CAAC,SAAU,SAAU,QAAQlO,KAO/D,UAAkC,SAAEqnB,EAAW,CAAC,IAAOA,SAAUS,EAAe,CAAC,GAAM,CAAC,GACpF,OAAQ1b,GAASib,EAASjb,KAAU0b,EAAa1b,EACrD,CAToE2b,CAAyB5b,EAAOkO,KAExFnR,KAAKke,eAEb,CACA,OAAAnP,GAAY,ICxDZpM,IAAK,CACDqN,QHMR,cAA2BA,GACvB,WAAAjQ,GACIge,SAASx0B,WACTyW,KAAK8e,qBAAuB3zB,GAAA,EAC5B6U,KAAK+e,mBAAqB5zB,GAAA,EAC1B6U,KAAKgf,0BAA4B7zB,GAAA,EACjC6U,KAAKif,kBAAoB,CAACC,EAAYC,KAClC,GAAInf,KAAKof,WACL,OACJpf,KAAK+e,qBACL,MAAM9b,EAAQjD,KAAKgF,KAAKpI,WAgBlByiB,EAA0BjE,GAAgBnd,OAAQ,aAfhC,CAACqhB,EAAUC,KAC/B,IAAKvf,KAAKwf,gBACN,OACJ,MAAM,MAAE7H,EAAK,YAAE8H,EAAW,gBAAEC,GAAoB1f,KAAKgF,KAAKpI,WAC1D,KAAMpM,QAAO,KAKRkvB,GACIpD,GAActc,KAAKgF,KAAKjN,QAASunB,EAAS7vB,QAEzCkoB,GAASA,EAAM2H,EAAUC,GADzBE,GAAeA,EAAYH,EAAUC,EACJ,GACzC,GAEgF,CAAE7E,UAAWzX,EAAM0U,OAAS1U,EAAmB,eAC/H0c,EAA8BvE,GAAgBnd,OAAQ,iBAAiB,CAAC2hB,EAAaC,IAAe7f,KAAK8f,YAAYF,EAAaC,IAAa,CAAEnF,UAAWzX,EAAMwc,aAAexc,EAAuB,mBAC9MjD,KAAK+e,oBAAqB,EAAAgB,GAAA,GAAKV,EAAyBM,GACxD3f,KAAKggB,WAAWd,EAAYC,EAAU,EAE1Cnf,KAAKigB,qBAAuB,KACxB,MAmBMC,EAAwB1F,EAAYxa,KAAKgF,KAAKjN,QAAS,WAnBtCooB,IACnB,GAAyB,UAArBA,EAAah2B,KAAmB6V,KAAKof,WACrC,OAWJpf,KAAK+e,qBACL/e,KAAK+e,mBAAqBvE,EAAYxa,KAAKgF,KAAKjN,QAAS,SAXpCqoB,IACM,UAAnBA,EAAWj2B,KAAoB6V,KAAKwf,iBAExChD,GAA0B,MAAM,CAAC1B,EAAOqB,KACpC,MAAM,MAAExE,GAAU3X,KAAKgF,KAAKpI,WACxB+a,GACA,KAAMnnB,QAAO,IAAMmnB,EAAMmD,EAAOqB,IACpC,GACF,IAINK,GAA0B,QAAQ,CAAC1B,EAAOqB,KACtCnc,KAAKggB,WAAWlF,EAAOqB,EAAK,GAC9B,IAQAkE,EAAqB7F,EAAYxa,KAAKgF,KAAKjN,QAAS,QALvC,KACViI,KAAKof,YAEV5C,GAA0B,UAAU,CAACoD,EAAaC,IAAe7f,KAAK8f,YAAYF,EAAaC,IAAY,IAG/G7f,KAAKgf,2BAA4B,EAAAe,GAAA,GAAKG,EAAuBG,EAAmB,CAExF,CACA,UAAAL,CAAWlF,EAAOqB,GACdnc,KAAKof,YAAa,EAClB,MAAM,WAAExH,EAAU,SAAEC,GAAa7X,KAAKgF,KAAKpI,WAIvCib,GAAY7X,KAAKgF,KAAKlH,gBACtBkC,KAAKgF,KAAKlH,eAAeue,UAAU,YAAY,GAE/CzE,GACA,KAAMpnB,QAAO,IAAMonB,EAAWkD,EAAOqB,IAE7C,CACA,aAAAqD,GACIxf,KAAK+e,qBACL/e,KAAKof,YAAa,EAKlB,OAJcpf,KAAKgF,KAAKpI,WACdib,UAAY7X,KAAKgF,KAAKlH,gBAC5BkC,KAAKgF,KAAKlH,eAAeue,UAAU,YAAY,IAE3CP,IACZ,CACA,WAAAgE,CAAYhF,EAAOqB,GACf,IAAKnc,KAAKwf,gBACN,OACJ,MAAM,YAAEC,GAAgBzf,KAAKgF,KAAKpI,WAC9B6iB,GACA,KAAMjvB,QAAO,IAAMivB,EAAY3E,EAAOqB,IAE9C,CACA,KAAA9N,GACI,MAAMpL,EAAQjD,KAAKgF,KAAKpI,WAClB0jB,EAAwBlF,GAAgBnY,EAAMyc,gBAAkBzhB,OAAS+B,KAAKgF,KAAKjN,QAAS,cAAeiI,KAAKif,kBAAmB,CAAEvE,UAAWzX,EAAM2U,YAAc3U,EAAsB,kBAC1Lsd,EAAsB/F,EAAYxa,KAAKgF,KAAKjN,QAAS,QAASiI,KAAKigB,sBACzEjgB,KAAK8e,sBAAuB,EAAAiB,GAAA,GAAKO,EAAuBC,EAC5D,CACA,OAAAxR,GACI/O,KAAK8e,uBACL9e,KAAK+e,qBACL/e,KAAKgf,2BACT,IGzGAvc,MAAO,CACHuN,QCTR,cAA2BA,GACvB,WAAAjQ,GACIge,SAASx0B,WACTyW,KAAKic,UAAW,CACpB,CACA,OAAAuE,GACI,IAAIC,GAAiB,EAOrB,IACIA,EAAiBzgB,KAAKgF,KAAKjN,QAAQ6W,QAAQ,iBAC/C,CACA,MAAO3Y,GACHwqB,GAAiB,CACrB,CACKA,GAAmBzgB,KAAKgF,KAAKlH,iBAElCkC,KAAKgF,KAAKlH,eAAeue,UAAU,cAAc,GACjDrc,KAAKic,UAAW,EACpB,CACA,MAAAyE,GACS1gB,KAAKic,UAAajc,KAAKgF,KAAKlH,iBAEjCkC,KAAKgF,KAAKlH,eAAeue,UAAU,cAAc,GACjDrc,KAAKic,UAAW,EACpB,CACA,KAAA5N,GACIrO,KAAK+O,SAAU,EAAAgR,GAAA,GAAKvF,EAAYxa,KAAKgF,KAAKjN,QAAS,SAAS,IAAMiI,KAAKwgB,YAAYhG,EAAYxa,KAAKgF,KAAKjN,QAAS,QAAQ,IAAMiI,KAAK0gB,WACzI,CACA,OAAA3R,GAAY,IDtBZrM,MAAO,CACHsN,QLQR,cAA2BA,GACvB,KAAA3B,GACIrO,KAAK+O,SAAU,EAAAgR,GAAA,GAAK/D,GAAchc,KAAKgF,MAAM,GAAOgX,GAAchc,KAAKgF,MAAM,GACjF,CACA,OAAA+J,GAAY,qBO5BhB,SAAS4R,GAAenyB,EAAM8iB,GAC1B,IAAK1nB,MAAMC,QAAQynB,GACf,OAAO,EACX,MAAMsP,EAAatP,EAAK9nB,OACxB,GAAIo3B,IAAepyB,EAAKhF,OACpB,OAAO,EACX,IAAK,IAAIF,EAAI,EAAGA,EAAIs3B,EAAYt3B,IAC5B,GAAIgoB,EAAKhoB,KAAOkF,EAAKlF,GACjB,OAAO,EAEf,OAAO,CACX,yCCRA,SAASu3B,GAAevjB,EAAewjB,EAAS9uB,EAAU,CAAC,GACvD,MAAMoW,GAAW,QAAe9K,EAAewjB,EAAS9uB,EAAQokB,QAChE,IAAI,WAAEza,EAAa2B,EAAcrC,wBAA0B,CAAC,GAAMmN,GAAY,CAAC,EAC3EpW,EAAQuL,qBACR5B,EAAa3J,EAAQuL,oBAMzB,MAAMwjB,EAAe3Y,EACf,IAAM9V,QAAQkM,KAAI,QAAclB,EAAe8K,EAAUpW,IACzD,IAAMM,QAAQC,UAKdyuB,EAAqB1jB,EAAcwQ,iBAAmBxQ,EAAcwQ,gBAAgBmT,KACpF,CAACC,EAAe,KACd,MAAM,cAAEniB,EAAgB,EAAC,gBAAEC,EAAe,iBAAEC,GAAsBtD,EAClE,OAkBZ,SAAyB2B,EAAewjB,EAAS/hB,EAAgB,EAAGC,EAAkB,EAAGC,EAAmB,EAAGjN,GAC3G,MAAM4L,EAAa,GACbujB,GAAsB7jB,EAAcwQ,gBAAgBmT,KAAO,GAAKjiB,EAChEoiB,EAA+C,IAArBniB,EAC1B,CAAC3V,EAAI,IAAMA,EAAI0V,EACf,CAAC1V,EAAI,IAAM63B,EAAqB73B,EAAI0V,EAU1C,OATApV,MAAMmS,KAAKuB,EAAcwQ,iBACpBuT,KAAKC,IACLnf,SAAQ,CAACoQ,EAAOjpB,KACjBipB,EAAMlF,OAAO,iBAAkByT,GAC/BljB,EAAWhE,KAAKinB,GAAetO,EAAOuO,EAAS,IACxC9uB,EACHX,MAAO0N,EAAgBqiB,EAAwB93B,KAChDiL,MAAK,IAAMge,EAAMlF,OAAO,oBAAqByT,KAAU,IAEvDxuB,QAAQkM,IAAIZ,EACvB,CAlCmB2jB,CAAgBjkB,EAAewjB,EAAS/hB,EAAgBmiB,EAAcliB,EAAiBC,EAAkBjN,EAAQ,EAE1H,IAAMM,QAAQC,WAKd,KAAEsM,GAASlD,EACjB,GAAIkD,EAAM,CACN,MAAO2iB,EAAOC,GAAiB,mBAAT5iB,EAChB,CAACkiB,EAAcC,GACf,CAACA,EAAoBD,GAC3B,OAAOS,IAAQjtB,MAAK,IAAMktB,KAC9B,CAEI,OAAOnvB,QAAQkM,IAAI,CAACuiB,IAAgBC,EAAmBhvB,EAAQX,QAEvE,CAkBA,SAASiwB,GAAgB1rB,EAAGC,GACxB,OAAOD,EAAE0Z,iBAAiBzZ,EAC9B,CCpDA,MAAM6rB,GAAuB,IAAI,MAAsBv1B,UACjDw1B,GAAoB,KAAqBn4B,OAC/C,SAASo4B,GAAYtkB,GACjB,OAAQM,GAAetL,QAAQkM,IAAIZ,EAAWjQ,KAAI,EAAGkM,YAAW7H,aCPpE,SAA8BsL,EAAevQ,EAAYiF,EAAU,CAAC,GAEhE,IAAI6H,EACJ,GAFAyD,EAAc+P,OAAO,iBAAkBtgB,GAEnCnD,MAAMC,QAAQkD,GAAa,CAC3B,MAAM6Q,EAAa7Q,EAAWY,KAAKmzB,GAAYD,GAAevjB,EAAewjB,EAAS9uB,KACtF6H,EAAYvH,QAAQkM,IAAIZ,EAC5B,MACK,GAA0B,iBAAf7Q,EACZ8M,EAAYgnB,GAAevjB,EAAevQ,EAAYiF,OAErD,CACD,MAAM6vB,EAA2C,mBAAf90B,GAC5B,QAAeuQ,EAAevQ,EAAYiF,EAAQokB,QAClDrpB,EACN8M,EAAYvH,QAAQkM,KAAI,QAAclB,EAAeukB,EAAoB7vB,GAC7E,CACA,OAAO6H,EAAUtF,MAAK,IAAM+I,EAAc+P,OAAO,oBAAqBtgB,IAC1E,CDVkF+0B,CAAqBxkB,EAAezD,EAAW7H,KACjI,CACA,SAAS+vB,GAAqBzkB,GAC1B,IAAItD,EAAU4nB,GAAYtkB,GAC1B,MAAM1P,EA6RC,CACHoM,QAASgoB,IAAgB,GACzBC,YAAaD,KACb5F,WAAY4F,KACZnK,SAAUmK,KACVE,UAAWF,KACXG,WAAYH,KACZzf,KAAMyf,MAnSV,IAAII,GAAkB,EAKtB,MAAMC,EAA0B,CAACnhB,EAAKnU,KAClC,MAAMqb,GAAW,QAAe9K,EAAevQ,GAC/C,GAAIqb,EAAU,CACV,MAAM,WAAEzM,EAAU,cAAE6B,KAAkB/N,GAAW2Y,EACjDlH,EAAM,IAAKA,KAAQzR,KAAW+N,EAClC,CACA,OAAO0D,CAAG,EAmBd,SAASuU,EAAezjB,EAASswB,GAC7B,MAAMrf,EAAQ3F,EAAcV,WACtByV,EAAU/U,EAAc6U,mBAAkB,IAAS,CAAC,EAKpDvU,EAAa,GAKb2kB,EAAc,IAAInpB,IAMxB,IAAIopB,EAAkB,CAAC,EAKnBC,EAAsBtvB,IAO1B,IAAK,IAAI7J,EAAI,EAAGA,EAAIq4B,GAAmBr4B,IAAK,CACxC,MAAMkI,EAAOkwB,GAAqBp4B,GAC5Bo5B,EAAY90B,EAAM4D,GAClB8gB,OAAuBllB,IAAhB6V,EAAMzR,GAAsByR,EAAMzR,GAAQ6gB,EAAQ7gB,GACzDmxB,GAAgB,OAAerQ,GAK/BsQ,EAAcpxB,IAAS8wB,EAAoBI,EAAUzG,SAAW,MAClD,IAAhB2G,IACAH,EAAsBn5B,GAO1B,IAAIu5B,EAAcvQ,IAASD,EAAQ7gB,IAAS8gB,IAASrP,EAAMzR,IAASmxB,EAepE,GAXIE,GACAT,GACA9kB,EAAcyQ,yBACd8U,GAAc,GAMlBH,EAAUzlB,cAAgB,IAAKulB,IAI7BE,EAAUzG,UAA4B,OAAhB2G,IAElBtQ,IAASoQ,EAAUI,WAErB,OAAoBxQ,IACJ,kBAATA,EACP,SAQJ,IAAIyQ,EADqBC,GAAuBN,EAAUI,SAAUxQ,IAG/D9gB,IAAS8wB,GACNI,EAAUzG,WACT4G,GACDF,GAEHr5B,EAAIm5B,GAAuBE,EAC5BM,GAAuB,EAK3B,MAAMC,EAAiBt5B,MAAMC,QAAQyoB,GAAQA,EAAO,CAACA,GAKrD,IAAI6Q,EAAiBD,EAAejiB,OAAOohB,EAAyB,CAAC,IACjD,IAAhBO,IACAO,EAAiB,CAAC,GAUtB,MAAM,mBAAEC,EAAqB,CAAC,GAAMV,EAC9BW,EAAU,IACTD,KACAD,GAEDG,EAAiBn5B,IACnB44B,GAAoB,EAChBR,EAAYhpB,IAAIpP,KAChB84B,GAAuB,EACvBV,EAAYjiB,OAAOnW,IAEvBu4B,EAAUxlB,eAAe/S,IAAO,CAAI,EAExC,IAAK,MAAMA,KAAOk5B,EAAS,CACvB,MAAM70B,EAAO20B,EAAeh5B,GACtBmnB,EAAO8R,EAAmBj5B,GAEhC,GAAIq4B,EAAgBr5B,eAAegB,GAC/B,SAIJ,IAAIo5B,GAAkB,EAElBA,GADA,QAAkB/0B,KAAS,QAAkB8iB,IAC1BqP,GAAenyB,EAAM8iB,GAGtB9iB,IAAS8iB,EAE3BiS,OACan2B,IAAToB,EAEA80B,EAAcn5B,GAIdo4B,EAAYjkB,IAAInU,QAGNiD,IAAToB,GAAsB+zB,EAAYhpB,IAAIpP,GAK3Cm5B,EAAcn5B,GAOdu4B,EAAUzlB,cAAc9S,IAAO,CAEvC,CAKAu4B,EAAUI,SAAWxQ,EACrBoQ,EAAUU,mBAAqBD,EAI3BT,EAAUzG,WACVuG,EAAkB,IAAKA,KAAoBW,IAE3Cf,GAAmB9kB,EAAc+X,wBACjC0N,GAAoB,IAKpBA,GAAuBF,IAAeI,GACtCrlB,EAAWhE,QAAQspB,EAAev1B,KAAKkM,IAAc,CACjDA,UAAWA,EACX7H,QAAS,CAAER,UAASQ,OAGhC,CAMA,GAAIuwB,EAAYtB,KAAM,CAClB,MAAMuC,EAAoB,CAAC,EAC3BjB,EAAYpgB,SAAShY,IACjB,MAAMs5B,EAAiBnmB,EAAc2V,cAAc9oB,QAC5BiD,IAAnBq2B,IACAD,EAAkBr5B,GAAOs5B,EAC7B,IAEJ7lB,EAAWhE,KAAK,CAAEC,UAAW2pB,GACjC,CACA,IAAIE,EAAgB1vB,QAAQ4J,EAAWpU,QAOvC,OANI44B,IACmB,IAAlBnf,EAAM4K,SAAqB5K,EAAM4K,UAAY5K,EAAMjJ,SACnDsD,EAAcyQ,yBACf2V,GAAgB,GAEpBtB,GAAkB,EACXsB,EAAgB1pB,EAAQ4D,GAActL,QAAQC,SACzD,CAkBA,MAAO,CACHkjB,iBACA4G,UAhBJ,SAAmB7qB,EAAMyqB,EAAUjqB,GAC/B,IAAI6gB,EAEJ,GAAIjlB,EAAM4D,GAAMyqB,WAAaA,EACzB,OAAO3pB,QAAQC,UAEsB,QAAxCsgB,EAAKvV,EAAcwQ,uBAAoC,IAAP+E,GAAyBA,EAAG1Q,SAASoQ,IAAY,IAAIM,EAAI,OAAuC,QAA/BA,EAAKN,EAAMzU,sBAAmC,IAAP+U,OAAgB,EAASA,EAAGwJ,UAAU7qB,EAAMyqB,EAAS,IAC9MruB,EAAM4D,GAAMyqB,SAAWA,EACvB,MAAMre,EAAa6X,EAAezjB,EAASR,GAC3C,IAAK,MAAMrH,KAAOyD,EACdA,EAAMzD,GAAK8S,cAAgB,CAAC,EAEhC,OAAOW,CACX,EAII+lB,mBArPJ,SAA4BC,GACxB5pB,EAAU4pB,EAAatmB,EAC3B,EAoPIS,SAAU,IAAMnQ,EAExB,CACA,SAASo1B,GAAuB1R,EAAM9iB,GAClC,MAAoB,iBAATA,EACAA,IAAS8iB,IAEX1nB,MAAMC,QAAQ2E,KACXmyB,GAAenyB,EAAM8iB,EAGrC,CACA,SAAS0Q,GAAgB/F,GAAW,GAChC,MAAO,CACHA,WACAhf,cAAe,CAAC,EAChBC,eAAgB,CAAC,EACjBkmB,mBAAoB,CAAC,EAE7B,CExSA,IAAInN,GAAK,ECCT,MAAMrY,GAAa,CACf/D,UAAW,CACPmW,QCDR,cAA+BA,GAM3B,WAAAjQ,CAAYiF,GACR+Y,MAAM/Y,GACNA,EAAKlH,iBAAmBkH,EAAKlH,eAAiBikB,GAAqB/c,GACvE,CACA,mCAAA6e,GACI,MAAM,QAAE7pB,GAAYgG,KAAKgF,KAAKpI,WAC9BoD,KAAK+O,WACD,OAAoB/U,KACpBgG,KAAK+O,QAAU/U,EAAQ8pB,UAAU9jB,KAAKgF,MAE9C,CAIA,KAAAqJ,GACIrO,KAAK6jB,qCACT,CACA,MAAArzB,GACI,MAAM,QAAEwJ,GAAYgG,KAAKgF,KAAKpI,YACtB5C,QAAS+pB,GAAgB/jB,KAAKgF,KAAKmM,WAAa,CAAC,EACrDnX,IAAY+pB,GACZ/jB,KAAK6jB,qCAEb,CACA,OAAA9U,GAAY,ID3BZxM,KAAM,CACFyN,QDLR,cAAmCA,GAC/B,WAAAjQ,GACIge,SAASx0B,WACTyW,KAAKiW,GAAKA,IACd,CACA,MAAAzlB,GACI,IAAKwP,KAAKgF,KAAKwH,gBACX,OACJ,MAAM,UAAEwX,EAAS,eAAEC,EAAc,OAAE7N,GAAWpW,KAAKgF,KAAKwH,iBAChDwX,UAAWE,GAAkBlkB,KAAKgF,KAAKoM,qBAAuB,CAAC,EACvE,IAAKpR,KAAKgF,KAAKlH,gBAAkBkmB,IAAcE,EAC3C,OAEJ,MAAMC,EAAgBnkB,KAAKgF,KAAKlH,eAAeue,UAAU,QAAS2H,EAAW,CAAE5N,OAAQA,QAAuCA,EAASpW,KAAKgF,KAAKpI,WAAWwZ,SACxJ6N,IAAmBD,GACnBG,EAAc5vB,MAAK,IAAM0vB,EAAejkB,KAAKiW,KAErD,CACA,KAAA5H,GACI,MAAM,SAAE+V,GAAapkB,KAAKgF,KAAKwH,iBAAmB,CAAC,EAC/C4X,IACApkB,KAAK+O,QAAUqV,EAASpkB,KAAKiW,IAErC,CACA,OAAAlH,GAAY,iCG3BhB,MAAMjJ,GAAW,CAAClQ,EAAGC,IAAMlK,KAAKC,IAAIgK,EAAIC,GCWxC,MAAMwuB,GACF,WAAAtkB,CAAY+a,EAAOwJ,GAAU,mBAAEhlB,EAAkB,cAAEilB,EAAa,iBAAEC,GAAmB,GAAU,CAAC,GAgE5F,GA5DAxkB,KAAKkf,WAAa,KAIlBlf,KAAKykB,cAAgB,KAIrBzkB,KAAK0kB,kBAAoB,KAIzB1kB,KAAKskB,SAAW,CAAC,EAIjBtkB,KAAKukB,cAAgBtmB,OACrB+B,KAAK2kB,YAAc,KACf,IAAM3kB,KAAKykB,gBAAiBzkB,KAAK0kB,kBAC7B,OACJ,MAAMvI,EAAOyI,GAAW5kB,KAAK0kB,kBAAmB1kB,KAAK6kB,SAC/CC,EAAmC,OAApB9kB,KAAKkf,WAIpB6F,EDxClB,SAAoBnvB,EAAGC,GAEnB,MAAMmvB,EAASlf,GAASlQ,EAAEtK,EAAGuK,EAAEvK,GACzB25B,EAASnf,GAASlQ,EAAE8N,EAAG7N,EAAE6N,GAC/B,OAAO/X,KAAK8K,KAAKuuB,GAAU,EAAIC,GAAU,EAC7C,CCmC4CC,CAAW/I,EAAKpuB,OAAQ,CAAEzC,EAAG,EAAGoY,EAAG,KAAQ,EAC3E,IAAKohB,IAAiBC,EAClB,OACJ,MAAM,MAAElhB,GAAUsY,GACZ,UAAEzrB,GAAc,KACtBsP,KAAK6kB,QAAQjrB,KAAK,IAAKiK,EAAOnT,cAC9B,MAAM,QAAEy0B,EAAO,OAAEC,GAAWplB,KAAKskB,SAC5BQ,IACDK,GAAWA,EAAQnlB,KAAKykB,cAAetI,GACvCnc,KAAKkf,WAAalf,KAAKykB,eAE3BW,GAAUA,EAAOplB,KAAKykB,cAAetI,EAAK,EAE9Cnc,KAAKqlB,kBAAoB,CAACvK,EAAOqB,KAC7Bnc,KAAKykB,cAAgB3J,EACrB9a,KAAK0kB,kBAAoB5gB,GAAeqY,EAAMnc,KAAKV,oBAEnD,KAAM9O,OAAOwP,KAAK2kB,aAAa,EAAK,EAExC3kB,KAAKslB,gBAAkB,CAACxK,EAAOqB,KAC3Bnc,KAAKulB,MACL,MAAM,MAAEC,EAAK,aAAEC,EAAY,gBAAEC,GAAoB1lB,KAAKskB,SAGtD,GAFItkB,KAAKwkB,kBACLkB,GAAmBA,KACjB1lB,KAAKykB,gBAAiBzkB,KAAK0kB,kBAC7B,OACJ,MAAMiB,EAAUf,GAA0B,kBAAf9J,EAAMtpB,KAC3BwO,KAAK0kB,kBACL5gB,GAAeqY,EAAMnc,KAAKV,oBAAqBU,KAAK6kB,SACtD7kB,KAAKkf,YAAcsG,GACnBA,EAAM1K,EAAO6K,GAEjBF,GAAgBA,EAAa3K,EAAO6K,EAAQ,GAG3C9K,GAAiBC,GAClB,OACJ9a,KAAKwkB,iBAAmBA,EACxBxkB,KAAKskB,SAAWA,EAChBtkB,KAAKV,mBAAqBA,EAC1BU,KAAKukB,cAAgBA,GAAiBtmB,OACtC,MACM2nB,EAAc9hB,GADPoX,GAAiBJ,GACW9a,KAAKV,qBACxC,MAAEuE,GAAU+hB,GACZ,UAAEl1B,GAAc,KACtBsP,KAAK6kB,QAAU,CAAC,IAAKhhB,EAAOnT,cAC5B,MAAM,eAAEm1B,GAAmBvB,EAC3BuB,GACIA,EAAe/K,EAAO8J,GAAWgB,EAAa5lB,KAAK6kB,UACvD7kB,KAAK8lB,iBAAkB,EAAA/F,GAAA,GAAK3E,GAAgBpb,KAAKukB,cAAe,cAAevkB,KAAKqlB,mBAAoBjK,GAAgBpb,KAAKukB,cAAe,YAAavkB,KAAKslB,iBAAkBlK,GAAgBpb,KAAKukB,cAAe,gBAAiBvkB,KAAKslB,iBAC9O,CACA,cAAAS,CAAezB,GACXtkB,KAAKskB,SAAWA,CACpB,CACA,GAAAiB,GACIvlB,KAAK8lB,iBAAmB9lB,KAAK8lB,mBAC7B,QAAY9lB,KAAK2kB,YACrB,EAEJ,SAAS7gB,GAAeqY,EAAM7c,GAC1B,OAAOA,EAAqB,CAAEuE,MAAOvE,EAAmB6c,EAAKtY,QAAWsY,CAC5E,CACA,SAAS6J,GAAcpwB,EAAGC,GACtB,MAAO,CAAEvK,EAAGsK,EAAEtK,EAAIuK,EAAEvK,EAAGoY,EAAG9N,EAAE8N,EAAI7N,EAAE6N,EACtC,CACA,SAASkhB,IAAW,MAAE/gB,GAASghB,GAC3B,MAAO,CACHhhB,QACA/T,MAAOk2B,GAAcniB,EAAOoiB,GAAgBpB,IAC5C92B,OAAQi4B,GAAcniB,EAAOqiB,GAAiBrB,IAC9Cn2B,SAAU6N,GAAYsoB,EAAS,IAEvC,CACA,SAASqB,GAAiBrB,GACtB,OAAOA,EAAQ,EACnB,CACA,SAASoB,GAAgBpB,GACrB,OAAOA,EAAQA,EAAQr7B,OAAS,EACpC,CACA,SAAS+S,GAAYsoB,EAASsB,GAC1B,GAAItB,EAAQr7B,OAAS,EACjB,MAAO,CAAE8B,EAAG,EAAGoY,EAAG,GAEtB,IAAIpa,EAAIu7B,EAAQr7B,OAAS,EACrB48B,EAAmB,KACvB,MAAMC,EAAYJ,GAAgBpB,GAClC,KAAOv7B,GAAK,IACR88B,EAAmBvB,EAAQv7B,KACvB+8B,EAAU31B,UAAY01B,EAAiB11B,WACvC,QAAsBy1B,MAG1B78B,IAEJ,IAAK88B,EACD,MAAO,CAAE96B,EAAG,EAAGoY,EAAG,GAEtB,MAAMjP,GAAO,QAAsB4xB,EAAU31B,UAAY01B,EAAiB11B,WAC1E,GAAa,IAAT+D,EACA,MAAO,CAAEnJ,EAAG,EAAGoY,EAAG,GAEtB,MAAM1L,EAAkB,CACpB1M,GAAI+6B,EAAU/6B,EAAI86B,EAAiB96B,GAAKmJ,EACxCiP,GAAI2iB,EAAU3iB,EAAI0iB,EAAiB1iB,GAAKjP,GAQ5C,OANIuD,EAAgB1M,IAAM6H,MACtB6E,EAAgB1M,EAAI,GAEpB0M,EAAgB0L,IAAMvQ,MACtB6E,EAAgB0L,EAAI,GAEjB1L,CACX,6BCvJA,SAASsuB,GAAW9hB,GAChB,OAAOA,EAAKvV,IAAMuV,EAAKxV,GAC3B,CACA,SAASu3B,GAAOl8B,EAAOoF,EAAS,EAAG+2B,EAAc,KAC7C,OAAO76B,KAAKC,IAAIvB,EAAQoF,IAAW+2B,CACvC,CACA,SAASC,GAAc32B,EAAOgnB,EAAQrnB,EAAQL,EAAS,IACnDU,EAAMV,OAASA,EACfU,EAAMqU,aAAc,EAAAuiB,GAAA,GAAI5P,EAAO9nB,IAAK8nB,EAAO7nB,IAAKa,EAAMV,QACtDU,EAAMoU,MAAQoiB,GAAW72B,GAAU62B,GAAWxP,IAC1CyP,GAAOz2B,EAAMoU,MAAO,EAAG,OAAW1N,MAAM1G,EAAMoU,UAC9CpU,EAAMoU,MAAQ,GAClBpU,EAAMuU,WACF,EAAAqiB,GAAA,GAAIj3B,EAAOT,IAAKS,EAAOR,IAAKa,EAAMV,QAAUU,EAAMqU,aAClDoiB,GAAOz2B,EAAMuU,YAAc7N,MAAM1G,EAAMuU,cACvCvU,EAAMuU,UAAY,EAC1B,CACA,SAASsiB,GAAa72B,EAAOgnB,EAAQrnB,EAAQL,GACzCq3B,GAAc32B,EAAMxE,EAAGwrB,EAAOxrB,EAAGmE,EAAOnE,EAAG8D,EAASA,EAAOw3B,aAAUx5B,GACrEq5B,GAAc32B,EAAM4T,EAAGoT,EAAOpT,EAAGjU,EAAOiU,EAAGtU,EAASA,EAAOy3B,aAAUz5B,EACzE,CACA,SAAS05B,GAAiBr3B,EAAQs3B,EAAUxa,GACxC9c,EAAOT,IAAMud,EAAOvd,IAAM+3B,EAAS/3B,IACnCS,EAAOR,IAAMQ,EAAOT,IAAMs3B,GAAWS,EACzC,CAKA,SAASC,GAAyBv3B,EAAQqT,EAAQyJ,GAC9C9c,EAAOT,IAAM8T,EAAO9T,IAAMud,EAAOvd,IACjCS,EAAOR,IAAMQ,EAAOT,IAAMs3B,GAAWxjB,EACzC,CACA,SAASmkB,GAAqBx3B,EAAQqT,EAAQyJ,GAC1Cya,GAAyBv3B,EAAOnE,EAAGwX,EAAOxX,EAAGihB,EAAOjhB,GACpD07B,GAAyBv3B,EAAOiU,EAAGZ,EAAOY,EAAG6I,EAAO7I,EACxD,gBCZA,SAASwjB,GAA4B1iB,EAAMxV,EAAKC,GAC5C,MAAO,CACHD,SAAa5B,IAAR4B,EAAoBwV,EAAKxV,IAAMA,OAAM5B,EAC1C6B,SAAa7B,IAAR6B,EACCuV,EAAKvV,IAAMA,GAAOuV,EAAKvV,IAAMuV,EAAKxV,UAClC5B,EAEd,CAcA,SAAS+5B,GAA4BC,EAAYC,GAC7C,IAAIr4B,EAAMq4B,EAAgBr4B,IAAMo4B,EAAWp4B,IACvCC,EAAMo4B,EAAgBp4B,IAAMm4B,EAAWn4B,IAO3C,OAJIo4B,EAAgBp4B,IAAMo4B,EAAgBr4B,IACtCo4B,EAAWn4B,IAAMm4B,EAAWp4B,OAC3BA,EAAKC,GAAO,CAACA,EAAKD,IAEhB,CAAEA,MAAKC,MAClB,CAuCA,MAAMq4B,GAAiB,IAgBvB,SAASC,GAAmBC,EAAaC,EAAUC,GAC/C,MAAO,CACH14B,IAAK24B,GAAoBH,EAAaC,GACtCx4B,IAAK04B,GAAoBH,EAAaE,GAE9C,CACA,SAASC,GAAoBH,EAAaI,GACtC,MAA8B,iBAAhBJ,EACRA,EACAA,EAAYI,IAAU,CAChC,iBC1HA,SAASC,GAASnmB,GACd,MAAO,CAACA,EAAS,KAAMA,EAAS,KACpC,qDCDA,MAAMomB,GAAmB,EAAG/vB,aACjBA,EAAUA,EAAQgwB,cAAcC,YAAc,KCiBnDC,GAAsB,IAAIrL,QAKhC,MAAMsL,GACF,WAAAnoB,CAAYzC,GAIR0C,KAAKmoB,eAAiB,KACtBnoB,KAAKooB,YAAa,EAClBpoB,KAAKqoB,iBAAmB,KACxBroB,KAAKmE,YAAc,CAAE7Y,EAAG,EAAGoY,EAAG,GAI9B1D,KAAKsoB,aAAc,EACnBtoB,KAAKuoB,uBAAwB,EAI7BvoB,KAAKwoB,SAAU,WACfxoB,KAAK1C,cAAgBA,CACzB,CACA,KAAA3M,CAAM83B,GAAa,aAAEC,GAAe,GAAU,CAAC,GAI3C,MAAM,gBAAElc,GAAoBxM,KAAK1C,cACjC,GAAIkP,IAAiD,IAA9BA,EAAgBwX,UACnC,OACJ,MA4FM,iBAAEQ,GAAqBxkB,KAAKpD,WAClCoD,KAAK2oB,WAAa,IAAItE,GAAWoE,EAAa,CAC1C5C,eA9FoB/K,IACpB,MAAM,iBAAE0J,GAAqBxkB,KAAKpD,WAGlC4nB,EAAmBxkB,KAAK4oB,iBAAmB5oB,KAAK6oB,gBAC5CH,GACA1oB,KAAK0oB,aAAaxN,GAAiBJ,EAAO,QAAQjX,MACtD,EAwFAshB,QAtFY,CAACrK,EAAOqB,KAEpB,MAAM,KAAE3Z,EAAI,gBAAEsmB,EAAe,YAAEC,GAAgB/oB,KAAKpD,WACpD,GAAI4F,IAASsmB,IACL9oB,KAAKmoB,gBACLnoB,KAAKmoB,iBACTnoB,KAAKmoB,eAAiBxM,GAAcnZ,IAE/BxC,KAAKmoB,gBACN,OAERnoB,KAAKooB,YAAa,EAClBpoB,KAAKqoB,iBAAmB,KACxBroB,KAAKgpB,qBACDhpB,KAAK1C,cAAcmQ,aACnBzN,KAAK1C,cAAcmQ,WAAWwb,oBAAqB,EACnDjpB,KAAK1C,cAAcmQ,WAAWhe,YAASrC,GAK3Cy6B,IAAUrjB,IACN,IAAIzM,EAAUiI,KAAKkpB,mBAAmB1kB,GAAMxI,OAAS,EAIrD,GAAI,MAAQT,KAAKxD,GAAU,CACvB,MAAM,WAAE0V,GAAezN,KAAK1C,cAC5B,GAAImQ,GAAcA,EAAW3K,OAAQ,CACjC,MAAMqmB,EAAe1b,EAAW3K,OAAOsmB,UAAU5kB,GACjD,GAAI2kB,EAAc,CAEdpxB,EADeuuB,GAAW6C,IACN1gB,WAAW1Q,GAAW,IAC9C,CACJ,CACJ,CACAiI,KAAKmE,YAAYK,GAAQzM,CAAO,IAGhCgxB,GACA,KAAMv4B,QAAO,IAAMu4B,EAAYjO,EAAOqB,KAAO,GAAO,GAExD,MAAM,eAAEre,GAAmBkC,KAAK1C,cAChCQ,GAAkBA,EAAeue,UAAU,aAAa,EAAK,EA4C7D+I,OA1CW,CAACtK,EAAOqB,KAEnB,MAAM,gBAAE2M,EAAe,kBAAEO,EAAiB,gBAAEC,EAAe,OAAEC,GAAYvpB,KAAKpD,WAE9E,IAAKksB,IAAoB9oB,KAAKmoB,eAC1B,OACJ,MAAM,OAAEp6B,GAAWouB,EAEnB,GAAIkN,GAA+C,OAA1BrpB,KAAKqoB,iBAM1B,OALAroB,KAAKqoB,iBAmWrB,SAA6Bt6B,EAAQy7B,EAAgB,IACjD,IAAIrvB,EAAY,KACZxO,KAAKC,IAAImC,EAAO2V,GAAK8lB,EACrBrvB,EAAY,IAEPxO,KAAKC,IAAImC,EAAOzC,GAAKk+B,IAC1BrvB,EAAY,KAEhB,OAAOA,CACX,CA5WwCsvB,CAAoB17B,QAEd,OAA1BiS,KAAKqoB,kBACLiB,GAAmBA,EAAgBtpB,KAAKqoB,mBAKhDroB,KAAK0pB,WAAW,IAAKvN,EAAKtY,MAAO9V,GACjCiS,KAAK0pB,WAAW,IAAKvN,EAAKtY,MAAO9V,GAOjCiS,KAAK1C,cAAcyN,SAKnBwe,GAAUA,EAAOzO,EAAOqB,EAAK,EAa7BsJ,aAXiB,CAAC3K,EAAOqB,IAASnc,KAAKpP,KAAKkqB,EAAOqB,GAYnDuJ,gBAXoB,IAAMmC,IAAUrjB,IACpC,IAAIqO,EACJ,MAAwC,WAAjC7S,KAAK2pB,kBAAkBnlB,KAC0B,QAAlDqO,EAAK7S,KAAKkpB,mBAAmB1kB,GAAM3K,iBAA8B,IAAPgZ,OAAgB,EAASA,EAAGxe,OAAO,KASpG,CACCiL,mBAAoBU,KAAK1C,cAAc2U,wBACvCuS,mBACAD,cAAeuD,GAAiB9nB,KAAK1C,gBAE7C,CACA,IAAA1M,CAAKkqB,EAAOqB,GACR,MAAMiM,EAAapoB,KAAKooB,WAExB,GADApoB,KAAK5L,UACAg0B,EACD,OACJ,MAAM,SAAE15B,GAAaytB,EACrBnc,KAAK4pB,eAAel7B,GACpB,MAAM,UAAEm7B,GAAc7pB,KAAKpD,WACvBitB,GACA,KAAMr5B,QAAO,IAAMq5B,EAAU/O,EAAOqB,IAE5C,CACA,MAAA/nB,GACI4L,KAAKooB,YAAa,EAClB,MAAM,WAAE3a,EAAU,eAAE3P,GAAmBkC,KAAK1C,cACxCmQ,IACAA,EAAWwb,oBAAqB,GAEpCjpB,KAAK2oB,YAAc3oB,KAAK2oB,WAAWpD,MACnCvlB,KAAK2oB,gBAAav7B,EAClB,MAAM,gBAAE07B,GAAoB9oB,KAAKpD,YAC5BksB,GAAmB9oB,KAAKmoB,iBACzBnoB,KAAKmoB,iBACLnoB,KAAKmoB,eAAiB,MAE1BrqB,GAAkBA,EAAeue,UAAU,aAAa,EAC5D,CACA,UAAAqN,CAAWllB,EAAMslB,EAAQ/7B,GACrB,MAAM,KAAEyU,GAASxC,KAAKpD,WAEtB,IAAK7O,IAAWg8B,GAAWvlB,EAAMhC,EAAMxC,KAAKqoB,kBACxC,OACJ,MAAM2B,EAAYhqB,KAAKkpB,mBAAmB1kB,GAC1C,IAAIhW,EAAOwR,KAAKmE,YAAYK,GAAQzW,EAAOyW,GAEvCxE,KAAKsoB,aAAetoB,KAAKsoB,YAAY9jB,KACrChW,EHtLZ,SAA0BqV,GAAO,IAAE7U,EAAG,IAAEC,GAAOu5B,GAS3C,YARYp7B,IAAR4B,GAAqB6U,EAAQ7U,EAE7B6U,EAAQ2kB,GAAU,EAAA9B,GAAA,GAAI13B,EAAK6U,EAAO2kB,EAAQx5B,KAAOrD,KAAKsD,IAAI4U,EAAO7U,QAEpD5B,IAAR6B,GAAqB4U,EAAQ5U,IAElC4U,EAAQ2kB,GAAU,EAAA9B,GAAA,GAAIz3B,EAAK4U,EAAO2kB,EAAQv5B,KAAOtD,KAAKqD,IAAI6U,EAAO5U,IAE9D4U,CACX,CG4KmBomB,CAAiBz7B,EAAMwR,KAAKsoB,YAAY9jB,GAAOxE,KAAKwoB,QAAQhkB,KAEvEwlB,EAAUvvB,IAAIjM,EAClB,CACA,kBAAAw6B,GACI,IAAInW,EACJ,MAAM,gBAAEzC,EAAe,YAAEoX,GAAgBxnB,KAAKpD,WACxCkG,EAAS9C,KAAK1C,cAAcmQ,aAC7BzN,KAAK1C,cAAcmQ,WAAW3K,OAC7B9C,KAAK1C,cAAcmQ,WAAWyc,SAAQ,GACG,QAAxCrX,EAAK7S,KAAK1C,cAAcmQ,kBAA+B,IAAPoF,OAAgB,EAASA,EAAG/P,OAC7EqnB,EAAkBnqB,KAAKsoB,YACzBlY,IAAmB,OAAYA,GAC1BpQ,KAAKsoB,cACNtoB,KAAKsoB,YAActoB,KAAKoqB,yBAKxBpqB,KAAKsoB,eADLlY,IAAmBtN,IH5KnC,SAAiCsmB,GAAW,IAAE9lB,EAAG,KAAEC,EAAI,OAAEE,EAAM,MAAED,IAC7D,MAAO,CACHlY,EAAG47B,GAA4BkC,EAAU99B,EAAGiY,EAAMC,GAClDE,EAAGwjB,GAA4BkC,EAAU1lB,EAAGJ,EAAKG,GAEzD,CGwKmC4mB,CAAwBvnB,EAAOsmB,UAAWhZ,GAMrEpQ,KAAKwoB,QHrHb,SAA4BhB,EAAcF,IAOtC,OANoB,IAAhBE,EACAA,EAAc,GAEO,IAAhBA,IACLA,EAAcF,IAEX,CACHh8B,EAAGi8B,GAAmBC,EAAa,OAAQ,SAC3C9jB,EAAG6jB,GAAmBC,EAAa,MAAO,UAElD,CG0GuB8C,CAAmB9C,GAK9B2C,IAAoBnqB,KAAKsoB,aACzBxlB,GACA9C,KAAKsoB,cACJtoB,KAAKuoB,uBACNV,IAAUrjB,IACFxE,KAAKkpB,mBAAmB1kB,KACxBxE,KAAKsoB,YAAY9jB,GH9IrC,SAA+B1B,EAAQwlB,GACnC,MAAMiC,EAAsB,CAAC,EAO7B,YANwBn9B,IAApBk7B,EAAYt5B,MACZu7B,EAAoBv7B,IAAMs5B,EAAYt5B,IAAM8T,EAAO9T,UAE/B5B,IAApBk7B,EAAYr5B,MACZs7B,EAAoBt7B,IAAMq5B,EAAYr5B,IAAM6T,EAAO9T,KAEhDu7B,CACX,CGqI6CC,CAAsB1nB,EAAOsmB,UAAU5kB,GAAOxE,KAAKsoB,YAAY9jB,IAC5F,GAGZ,CACA,qBAAA4lB,GACI,MAAQha,gBAAiBkY,EAAW,yBAAEmC,GAA6BzqB,KAAKpD,WACxE,IAAK0rB,KAAgB,OAAYA,GAC7B,OAAO,EACX,MAAMoC,EAAqBpC,EAAYvwB,SACvC,QAAiC,OAAvB2yB,EAA6B,0GACvC,MAAM,WAAEjd,GAAezN,KAAK1C,cAE5B,IAAKmQ,IAAeA,EAAW3K,OAC3B,OAAO,EACX,MAAM6nB,GAAiB,EAAAT,GAAA,GAAeQ,EAAoBjd,EAAWlI,KAAMvF,KAAK1C,cAAc2U,yBAC9F,IAAI2Y,EHvLZ,SAAiCxB,EAAWuB,GACxC,MAAO,CACHr/B,EAAG67B,GAA4BiC,EAAU99B,EAAGq/B,EAAer/B,GAC3DoY,EAAGyjB,GAA4BiC,EAAU1lB,EAAGinB,EAAejnB,GAEnE,CGkLkCmnB,CAAwBpd,EAAW3K,OAAOsmB,UAAWuB,GAK/E,GAAIF,EAA0B,CAC1B,MAAMK,EAAkBL,GAAyB,SAAwBG,IACzE5qB,KAAKuoB,wBAA0BuC,EAC3BA,IACAF,GAAsB,SAAwBE,GAEtD,CACA,OAAOF,CACX,CACA,cAAAhB,CAAel7B,GACX,MAAM,KAAE8T,EAAI,aAAEuoB,EAAY,YAAEvD,EAAW,eAAEwD,EAAc,iBAAExG,EAAgB,oBAAEyG,GAAyBjrB,KAAKpD,WACnG0rB,EAActoB,KAAKsoB,aAAe,CAAC,EACnC4C,EAAqBrD,IAAUrjB,IACjC,IAAKulB,GAAWvlB,EAAMhC,EAAMxC,KAAKqoB,kBAC7B,OAEJ,IAAI1sB,EAAc2sB,GAAeA,EAAY9jB,IAAU,CAAC,EACpDggB,IACA7oB,EAAa,CAAE3M,IAAK,EAAGC,IAAK,IAOhC,MAAMH,EAAkB04B,EAAc,IAAM,IACtC34B,EAAgB24B,EAAc,GAAK,IACnC/4B,EAAU,CACZ+C,KAAM,UACN9C,SAAUq8B,EAAer8B,EAAS8V,GAAQ,EAC1C1V,kBACAD,gBACAD,aAAc,IACdM,UAAW,EACXC,UAAW,MACR67B,KACArvB,GAKP,OAAOqE,KAAKmrB,wBAAwB3mB,EAAM/V,EAAQ,IAGtD,OAAO6D,QAAQkM,IAAI0sB,GAAoB32B,KAAK02B,EAChD,CACA,uBAAAE,CAAwB3mB,EAAM7I,GAC1B,MAAMquB,EAAYhqB,KAAKkpB,mBAAmB1kB,GAC1C,OAAOwlB,EAAUr5B,OAAM,QAAmB6T,EAAMwlB,EAAW,EAAGruB,GAClE,CACA,aAAAktB,GACIhB,IAAUrjB,GAASxE,KAAKkpB,mBAAmB1kB,GAAM5T,QACrD,CACA,cAAAg4B,GACIf,IAAUrjB,IAAW,IAAIqO,EAAI,OAA0D,QAAlDA,EAAK7S,KAAKkpB,mBAAmB1kB,GAAM3K,iBAA8B,IAAPgZ,OAAgB,EAASA,EAAGje,OAAO,GACtI,CACA,iBAAA+0B,CAAkBnlB,GACd,IAAIqO,EACJ,OAA0D,QAAlDA,EAAK7S,KAAKkpB,mBAAmB1kB,GAAM3K,iBAA8B,IAAPgZ,OAAgB,EAASA,EAAGjlB,KAClG,CAOA,kBAAAs7B,CAAmB1kB,GACf,MAAM4mB,EAAU,QAAU5mB,EAAK6mB,cACzBpoB,EAAQjD,KAAK1C,cAAcV,WAC3B0uB,EAAsBroB,EAAMmoB,GAClC,OAAOE,GAEDtrB,KAAK1C,cAAcK,SAAS6G,GAAOvB,EAAM4K,QAAU5K,EAAM4K,QAAQrJ,QAAQpX,IAAc,EACjG,CACA,YAAAs7B,CAAa7kB,GACTgkB,IAAUrjB,IACN,MAAM,KAAEhC,GAASxC,KAAKpD,WAEtB,IAAKmtB,GAAWvlB,EAAMhC,EAAMxC,KAAKqoB,kBAC7B,OACJ,MAAM,WAAE5a,GAAezN,KAAK1C,cACtB0sB,EAAYhqB,KAAKkpB,mBAAmB1kB,GAC1C,GAAIiJ,GAAcA,EAAW3K,OAAQ,CACjC,MAAM,IAAE9T,EAAG,IAAEC,GAAQwe,EAAW3K,OAAOsmB,UAAU5kB,GACjDwlB,EAAUvvB,IAAIoJ,EAAMW,IAAQ,EAAAkiB,GAAA,GAAI13B,EAAKC,EAAK,IAC9C,IAER,CAMA,8BAAAs8B,GACI,IAAKvrB,KAAK1C,cAAcvF,QACpB,OACJ,MAAM,KAAEyK,EAAI,gBAAE4N,GAAoBpQ,KAAKpD,YACjC,WAAE6Q,GAAezN,KAAK1C,cAC5B,KAAK,OAAY8S,KAAqB3C,IAAezN,KAAKsoB,YACtD,OAKJtoB,KAAK6oB,gBAKL,MAAM2C,EAAc,CAAElgC,EAAG,EAAGoY,EAAG,GAC/BmkB,IAAUrjB,IACN,MAAMwlB,EAAYhqB,KAAKkpB,mBAAmB1kB,GAC1C,GAAIwlB,EAAW,CACX,MAAMj6B,EAASi6B,EAAUhuB,MACzBwvB,EAAYhnB,GHpS5B,SAAoBsS,EAAQrnB,GACxB,IAAIL,EAAS,GACb,MAAMq8B,EAAenF,GAAWxP,GAC1B4U,EAAepF,GAAW72B,GAOhC,OANIi8B,EAAeD,EACfr8B,GAAS,EAAAwE,GAAA,GAASnE,EAAOT,IAAKS,EAAOR,IAAMw8B,EAAc3U,EAAO9nB,KAE3Dy8B,EAAeC,IACpBt8B,GAAS,EAAAwE,GAAA,GAASkjB,EAAO9nB,IAAK8nB,EAAO7nB,IAAMy8B,EAAcj8B,EAAOT,OAE7D,EAAA2D,GAAA,GAAM,EAAG,EAAGvD,EACvB,CGyRoCu8B,CAAW,CAAE38B,IAAKe,EAAQd,IAAKc,GAAUiQ,KAAKsoB,YAAY9jB,GAClF,KAKJ,MAAM,kBAAE0M,GAAsBlR,KAAK1C,cAAcV,WACjDoD,KAAK1C,cAAcvF,QAAQoN,MAAMhK,UAAY+V,EACvCA,EAAkB,CAAC,EAAG,IACtB,OACNzD,EAAWlI,MAAQkI,EAAWlI,KAAKqmB,eACnCne,EAAWoe,eACX7rB,KAAKgpB,qBAKLnB,IAAUrjB,IACN,IAAKulB,GAAWvlB,EAAMhC,EAAM,MACxB,OAIJ,MAAMwnB,EAAYhqB,KAAKkpB,mBAAmB1kB,IACpC,IAAExV,EAAG,IAAEC,GAAQ+Q,KAAKsoB,YAAY9jB,GACtCwlB,EAAUvvB,KAAI,EAAAisB,GAAA,GAAI13B,EAAKC,EAAKu8B,EAAYhnB,IAAO,GAEvD,CACA,YAAAsnB,GACI,IAAK9rB,KAAK1C,cAAcvF,QACpB,OACJkwB,GAAoBxtB,IAAIuF,KAAK1C,cAAe0C,MAC5C,MAIM+rB,EAAsB3Q,GAJZpb,KAAK1C,cAAcvF,QAIkB,eAAgB+iB,IACjE,MAAM,KAAEtY,EAAI,aAAE4U,GAAe,GAASpX,KAAKpD,WAC3C4F,GAAQ4U,GAAgBpX,KAAKrP,MAAMmqB,EAAM,IAEvCkR,EAAyB,KAC3B,MAAM,gBAAE5b,GAAoBpQ,KAAKpD,YAC7B,OAAYwT,KACZpQ,KAAKsoB,YAActoB,KAAKoqB,wBAC5B,GAEE,WAAE3c,GAAezN,KAAK1C,cACtB2uB,EAA4Bxe,EAAWkN,iBAAiB,UAAWqR,GACrEve,IAAeA,EAAW3K,SAC1B2K,EAAWlI,MAAQkI,EAAWlI,KAAKqmB,eACnCne,EAAWoe,gBAEfG,IAKA,MAAME,EAAqB1R,EAAYvc,OAAQ,UAAU,IAAM+B,KAAKurB,mCAK9DY,EAA2B1e,EAAWkN,iBAAiB,aAAa,EAAI7qB,QAAOs8B,uBAC7EpsB,KAAKooB,YAAcgE,IACnBvE,IAAUrjB,IACN,MAAM6nB,EAAcrsB,KAAKkpB,mBAAmB1kB,GACvC6nB,IAELrsB,KAAKmE,YAAYK,IAAS1U,EAAM0U,GAAMH,UACtCgoB,EAAY5xB,IAAI4xB,EAAYrwB,MAAQlM,EAAM0U,GAAMH,WAAU,IAE9DrE,KAAK1C,cAAcyN,SAE1B,IACD,MAAO,KACHmhB,IACAH,IACAE,IACAE,GAA4BA,GAA0B,CAE9D,CACA,QAAAvvB,GACI,MAAMqG,EAAQjD,KAAK1C,cAAcV,YAC3B,KAAE4F,GAAO,EAAK,kBAAE6mB,GAAoB,EAAK,gBAAEP,GAAkB,EAAK,gBAAE1Y,GAAkB,EAAK,YAAEoX,EAAcF,GAAc,aAAEyD,GAAe,GAAU9nB,EAC1J,MAAO,IACAA,EACHT,OACA6mB,oBACAP,kBACA1Y,kBACAoX,cACAuD,eAER,EAEJ,SAAShB,GAAW5vB,EAAWqI,EAAM6lB,GACjC,SAAkB,IAAT7lB,GAAiBA,IAASrI,GACT,OAArBkuB,GAA6BA,IAAqBluB,EAC3D,CCtcA,MAAMmyB,GAAgB7R,GAAY,CAACK,EAAOqB,KAClC1B,GACA,KAAMjqB,QAAO,IAAMiqB,EAAQK,EAAOqB,IACtC,ECLJ,MAAMoQ,GAAwB,CAK1BC,wBAAwB,EAKxBC,gBAAgB,GCbpB,SAASC,GAAgBC,EAAQnoB,GAC7B,OAAIA,EAAKvV,MAAQuV,EAAKxV,IACX,EACH29B,GAAUnoB,EAAKvV,IAAMuV,EAAKxV,KAAQ,GAC9C,CAQA,MAAM49B,GAAsB,CACxBC,QAAS,CAAC98B,EAAQiV,KACd,IAAKA,EAAKvV,OACN,OAAOM,EAKX,GAAsB,iBAAXA,EAAqB,CAC5B,IAAI,GAAA8Y,GAAGtN,KAAKxL,GAIR,OAAOA,EAHPA,EAAS0Y,WAAW1Y,EAK5B,CAOA,MAAO,GAFG28B,GAAgB38B,EAAQiV,EAAKvV,OAAOnE,OACpCohC,GAAgB38B,EAAQiV,EAAKvV,OAAOiU,KAC1B,mBCjC5B,MAAMopB,GAAmB,CACrBD,QAAS,CAAC98B,GAAU6U,YAAWK,sBAC3B,MAAM8nB,EAAWh9B,EACXi9B,EAAS1xB,GAAA,EAAQ2xB,MAAMl9B,GAE7B,GAAIi9B,EAAOxjC,OAAS,EAChB,OAAOujC,EACX,MAAMG,EAAW5xB,GAAA,EAAQ6xB,kBAAkBp9B,GACrChC,EAA8B,iBAAdi/B,EAAO,GAAkB,EAAI,EAE7CI,EAASnoB,EAAgB3Z,EAAE4Y,MAAQU,EAAUtZ,EAC7C+hC,EAASpoB,EAAgBvB,EAAEQ,MAAQU,EAAUlB,EACnDspB,EAAO,EAAIj/B,IAAWq/B,EACtBJ,EAAO,EAAIj/B,IAAWs/B,EAOtB,MAAMC,GAAe,EAAA5G,GAAA,GAAI0G,EAAQC,EAAQ,IAOzC,MALkC,iBAAvBL,EAAO,EAAIj/B,KAClBi/B,EAAO,EAAIj/B,IAAWu/B,GAEQ,iBAAvBN,EAAO,EAAIj/B,KAClBi/B,EAAO,EAAIj/B,IAAWu/B,GACnBJ,EAASF,EAAO,iBCpB/B,MAAMO,WAAiC,YAMnC,iBAAAC,GACI,MAAM,cAAElwB,EAAa,YAAEmwB,EAAW,kBAAEC,EAAiB,SAAEtqB,GAAapD,KAAKiD,OACnE,WAAEwK,GAAenQ,GACvB,QAAkBqwB,IACdlgB,IACIggB,EAAYG,OACZH,EAAYG,MAAMtvB,IAAImP,GACtBigB,GAAqBA,EAAkBtJ,UAAYhhB,GACnDsqB,EAAkBtJ,SAAS3W,GAE/BA,EAAWlI,KAAKsoB,YAChBpgB,EAAWkN,iBAAiB,qBAAqB,KAC7C3a,KAAK8tB,cAAc,IAEvBrgB,EAAW6C,WAAW,IACf7C,EAAWzb,QACdiyB,eAAgB,IAAMjkB,KAAK8tB,kBAGnCvB,GAAsBE,gBAAiB,CAC3C,CACA,uBAAAsB,CAAwB5c,GACpB,MAAM,iBAAE6c,EAAgB,cAAE1wB,EAAa,KAAEkF,EAAI,UAAEwhB,GAAchkB,KAAKiD,MAC5DwK,EAAanQ,EAAcmQ,WACjC,OAAKA,GASLA,EAAWuW,UAAYA,EACnBxhB,GACA2O,EAAU6c,mBAAqBA,QACV5gC,IAArB4gC,EACAvgB,EAAWwgB,aAGXjuB,KAAK8tB,eAEL3c,EAAU6S,YAAcA,IACpBA,EACAvW,EAAWygB,UAELzgB,EAAW0gB,YAMjB,KAAMC,YAAW,KACb,MAAMC,EAAQ5gB,EAAW6gB,WACpBD,GAAUA,EAAME,QAAQ/kC,QACzBwW,KAAK8tB,cACT,KAIL,MAnCI,IAoCf,CACA,kBAAAU,GACI,MAAM,WAAE/gB,GAAezN,KAAKiD,MAAM3F,cAC9BmQ,IACAA,EAAWlI,KAAKsoB,YAChBY,gBAAe,MACNhhB,EAAWihB,kBAAoBjhB,EAAWkhB,UAC3C3uB,KAAK8tB,cACT,IAGZ,CACA,oBAAAc,GACI,MAAM,cAAEtxB,EAAa,YAAEmwB,EAAaC,kBAAmBmB,GAAoB7uB,KAAKiD,OAC1E,WAAEwK,GAAenQ,EACnBmQ,IACAA,EAAWqhB,4BACPrB,GAAeA,EAAYG,OAC3BH,EAAYG,MAAMrvB,OAAOkP,GACzBohB,GAAkBA,EAAeE,YACjCF,EAAeE,WAAWthB,GAEtC,CACA,YAAAqgB,GACI,MAAM,aAAEA,GAAiB9tB,KAAKiD,MAC9B6qB,GAAgBA,GACpB,CACA,MAAA/iB,GACI,OAAO,IACX,EAEJ,SAASgF,GAAc9M,GACnB,MAAO+gB,EAAW8J,GCnFtB,WACI,MAAMzb,GAAU,IAAA2B,YAAW,KAC3B,GAAgB,OAAZ3B,EACA,MAAO,EAAC,EAAM,MAClB,MAAM,UAAE2R,EAAS,eAAEC,EAAc,SAAEG,GAAa/R,EAG1C4D,GAAK,IAAA+Y,SAGX,OAFA,IAAAtZ,YAAU,IAAM0O,EAASnO,IAAK,KAEtB+N,GAAaC,EAAiB,EAAC,EADlB,IAAMA,GAAkBA,EAAehO,IACE,EAAC,EACnE,CDwEsCgZ,GAC5BxB,GAAc,IAAAzZ,YAAW7U,EAAA6W,GAC/B,OAAQ,gBAA6BuX,GAA0B,IAAKtqB,EAAOwqB,YAAaA,EAAaC,mBAAmB,IAAA1Z,YAAWI,GAA2B4P,UAAWA,EAAW8J,aAAcA,GACtM,CACA,MAAMH,GAAyB,CAC3BuB,aAAc,IACPtC,GACHuC,QAAS,CACL,sBACA,uBACA,yBACA,4BAGRC,oBAAqBxC,GACrByC,qBAAsBzC,GACtB0C,uBAAwB1C,GACxB2C,wBAAyB3C,GACzB4C,UAAW1C,gCEzHf,MAAM2C,GAAU,CAAC,UAAW,WAAY,aAAc,eAChDC,GAAaD,GAAQjmC,OACrBmmC,GAAYtlC,GAA2B,iBAAVA,EAAqBoe,WAAWpe,GAASA,EACtEulC,GAAQvlC,GAA2B,iBAAVA,GAAsB,GAAAwe,GAAGtN,KAAKlR,GA0C7D,SAASwlC,GAAUzhC,EAAQ0hC,GACvB,YAA8B1iC,IAAvBgB,EAAO0hC,GACR1hC,EAAO0hC,GACP1hC,EAAO8gC,YACjB,CAwBA,MAAMa,GAAkBC,GAAS,EAAG,GAAKC,GAAA,IACnCC,GAAmBF,GAAS,GAAK,IAAM7kC,GAAA,GAC7C,SAAS6kC,GAAShhC,EAAKC,EAAKZ,GACxB,OAAQzB,GAEAA,EAAIoC,EACG,EACPpC,EAAIqC,EACG,EACJZ,GAAO,EAAAuF,GAAA,GAAS5E,EAAKC,EAAKrC,GAEzC,CCrFA,SAASujC,GAAa3rB,EAAM4rB,GACxB5rB,EAAKxV,IAAMohC,EAAWphC,IACtBwV,EAAKvV,IAAMmhC,EAAWnhC,GAC1B,CAMA,SAASohC,GAAY3rB,EAAK4rB,GACtBH,GAAazrB,EAAIpZ,EAAGglC,EAAUhlC,GAC9B6kC,GAAazrB,EAAIhB,EAAG4sB,EAAU5sB,EAClC,iBCVA,SAAS6sB,GAAiB1sB,EAAOQ,EAAWH,EAAOC,EAAaG,GAM5D,OALAT,GAASQ,EACTR,GAAQ,SAAWA,EAAO,EAAIK,EAAOC,QACpB/W,IAAbkX,IACAT,GAAQ,SAAWA,EAAO,EAAIS,EAAUH,IAErCN,CACX,CAsBA,SAAS2sB,GAAqBhsB,EAAMwB,GAAa7b,EAAK8b,EAAUC,GAAY9W,EAAQqhC,IAlBpF,SAAyBjsB,EAAMH,EAAY,EAAGH,EAAQ,EAAG9U,EAAS,GAAKkV,EAAU8rB,EAAa5rB,EAAMisB,EAAajsB,GACzG,MAAQjJ,KAAK8I,KACbA,EAAYoE,WAAWpE,GAEvBA,GADyB,EAAAqiB,GAAA,GAAI+J,EAAWzhC,IAAKyhC,EAAWxhC,IAAKoV,EAAY,KAC1CosB,EAAWzhC,KAE9C,GAAyB,iBAAdqV,EACP,OACJ,IAAIF,GAAc,EAAAuiB,GAAA,GAAI0J,EAAWphC,IAAKohC,EAAWnhC,IAAKG,GAClDoV,IAAS4rB,IACTjsB,GAAeE,GACnBG,EAAKxV,IAAMuhC,GAAiB/rB,EAAKxV,IAAKqV,EAAWH,EAAOC,EAAaG,GACrEE,EAAKvV,IAAMshC,GAAiB/rB,EAAKvV,IAAKoV,EAAWH,EAAOC,EAAaG,EACzE,CAMIosB,CAAgBlsB,EAAMwB,EAAW7b,GAAM6b,EAAWC,GAAWD,EAAWE,GAAYF,EAAW9B,MAAO9U,EAAQqhC,EAClH,CAIA,MAAMrqB,GAAQ,CAAC,IAAK,SAAU,WACxBC,GAAQ,CAAC,IAAK,SAAU,WAK9B,SAASsqB,GAAoBjsB,EAAKsB,EAAYsqB,EAAWM,GACrDJ,GAAqB9rB,EAAIpZ,EAAG0a,EAAYI,GAAOkqB,EAAYA,EAAUhlC,OAAI8B,EAAWwjC,EAAYA,EAAUtlC,OAAI8B,GAC9GojC,GAAqB9rB,EAAIhB,EAAGsC,EAAYK,GAAOiqB,EAAYA,EAAU5sB,OAAItW,EAAWwjC,EAAYA,EAAUltB,OAAItW,EAClH,iBCjDA,SAASyjC,GAAgB/gC,GACrB,OAA2B,IAApBA,EAAMuU,WAAmC,IAAhBvU,EAAMoU,KAC1C,CACA,SAAS4sB,GAAYhhC,GACjB,OAAO+gC,GAAgB/gC,EAAMxE,IAAMulC,GAAgB/gC,EAAM4T,EAC7D,CAOA,SAASqtB,GAAiBn7B,EAAGC,GACzB,OAAQlK,KAAK4H,MAAMqC,EAAEtK,EAAE0D,OAASrD,KAAK4H,MAAMsC,EAAEvK,EAAE0D,MAC3CrD,KAAK4H,MAAMqC,EAAEtK,EAAE2D,OAAStD,KAAK4H,MAAMsC,EAAEvK,EAAE2D,MACvCtD,KAAK4H,MAAMqC,EAAE8N,EAAE1U,OAASrD,KAAK4H,MAAMsC,EAAE6N,EAAE1U,MACvCrD,KAAK4H,MAAMqC,EAAE8N,EAAEzU,OAAStD,KAAK4H,MAAMsC,EAAE6N,EAAEzU,IAC/C,CACA,SAAS+hC,GAAYtsB,GACjB,OAAO4hB,GAAW5hB,EAAIpZ,GAAKg7B,GAAW5hB,EAAIhB,EAC9C,iBCpBA,MAAMutB,GACF,WAAAlxB,GACIC,KAAKuuB,QAAU,EACnB,CACA,GAAAjwB,CAAI0G,IACA,SAAchF,KAAKuuB,QAASvpB,GAC5BA,EAAK0I,gBACT,CACA,MAAAnP,CAAOyG,GAKH,IAJA,SAAWhF,KAAKuuB,QAASvpB,GACrBA,IAAShF,KAAKkxB,WACdlxB,KAAKkxB,cAAW9jC,GAEhB4X,IAAShF,KAAKmxB,KAAM,CACpB,MAAMD,EAAWlxB,KAAKuuB,QAAQvuB,KAAKuuB,QAAQ/kC,OAAS,GAChD0nC,GACAlxB,KAAKkuB,QAAQgD,EAErB,CACJ,CACA,QAAA/C,CAASnpB,GACL,MAAMosB,EAAcpxB,KAAKuuB,QAAQ8C,WAAWC,GAAWtsB,IAASssB,IAChE,GAAoB,IAAhBF,EACA,OAAO,EAIX,IAAIF,EACJ,IAAK,IAAI5nC,EAAI8nC,EAAa9nC,GAAK,EAAGA,IAAK,CACnC,MAAMgoC,EAAStxB,KAAKuuB,QAAQjlC,GAC5B,IAAyB,IAArBgoC,EAAOtN,UAAqB,CAC5BkN,EAAWI,EACX,KACJ,CACJ,CACA,QAAIJ,IACAlxB,KAAKkuB,QAAQgD,IACN,EAKf,CACA,OAAAhD,CAAQlpB,EAAMusB,GACV,MAAML,EAAWlxB,KAAKmxB,KACtB,GAAInsB,IAASksB,IAEblxB,KAAKkxB,SAAWA,EAChBlxB,KAAKmxB,KAAOnsB,EACZA,EAAKwsB,OACDN,GAAU,CACVA,EAAShsB,UAAYgsB,EAASxjB,iBAC9B1I,EAAK0I,iBACL1I,EAAKysB,WAAaP,EACdK,IACAvsB,EAAKysB,WAAWC,iBAAkB,GAElCR,EAASS,WACT3sB,EAAK2sB,SAAWT,EAASS,SACzB3sB,EAAK2sB,SAASlsB,aACVyrB,EAASU,iBAAmBV,EAASzrB,cAEzCT,EAAKO,MAAQP,EAAKO,KAAKssB,aACvB7sB,EAAK8sB,eAAgB,GAEzB,MAAM,UAAEC,GAAc/sB,EAAKhT,SACT,IAAd+/B,GACAb,EAASc,MAcjB,CACJ,CACA,qBAAAC,GACIjyB,KAAKuuB,QAAQpsB,SAAS6C,IAClB,MAAM,QAAEhT,EAAO,aAAEkgC,GAAiBltB,EAClChT,EAAQiyB,gBAAkBjyB,EAAQiyB,iBAC9BiO,GACAA,EAAalgC,QAAQiyB,gBACjBiO,EAAalgC,QAAQiyB,gBAC7B,GAER,CACA,cAAAvW,GACI1N,KAAKuuB,QAAQpsB,SAAS6C,IAClBA,EAAKE,UAAYF,EAAK0I,gBAAe,EAAM,GAEnD,CAKA,kBAAAykB,GACQnyB,KAAKmxB,MAAQnxB,KAAKmxB,KAAKQ,WACvB3xB,KAAKmxB,KAAKQ,cAAWvkC,EAE7B,EC5GJ,SAASglC,GAAyBtiC,EAAO8U,EAAWytB,GAChD,IAAIl3B,EAAY,GAOhB,MAAMm3B,EAAaxiC,EAAMxE,EAAE+Y,UAAYO,EAAUtZ,EAC3CinC,EAAaziC,EAAM4T,EAAEW,UAAYO,EAAUlB,EAWjD,IAVI4uB,GAAcC,KACdp3B,EAAY,eAAem3B,QAAiBC,YAM5B,IAAhB3tB,EAAUtZ,GAA2B,IAAhBsZ,EAAUlB,IAC/BvI,GAAa,SAAS,EAAIyJ,EAAUtZ,MAAM,EAAIsZ,EAAUlB,OAExD2uB,EAAiB,CACjB,MAAM,OAAElrB,EAAM,QAAEC,EAAO,QAAEC,GAAYgrB,EACjClrB,IACAhM,GAAa,UAAUgM,UACvBC,IACAjM,GAAa,WAAWiM,UACxBC,IACAlM,GAAa,WAAWkM,SAChC,CAKA,MAAMmrB,EAAgB1iC,EAAMxE,EAAE4Y,MAAQU,EAAUtZ,EAC1CmnC,EAAgB3iC,EAAM4T,EAAEQ,MAAQU,EAAUlB,EAIhD,OAHsB,IAAlB8uB,GAAyC,IAAlBC,IACvBt3B,GAAa,SAASq3B,MAAkBC,MAErCt3B,GAAa,MACxB,iBCvCA,MAAMu3B,GAAiB,CAAC98B,EAAGC,IAAMD,EAAEkS,MAAQjS,EAAEiS,MCG7C,MAAM6qB,GACF,WAAA5yB,GACIC,KAAK2M,SAAW,GAChB3M,KAAK4yB,SAAU,CACnB,CACA,GAAAt0B,CAAIiU,IACA,SAAcvS,KAAK2M,SAAU4F,GAC7BvS,KAAK4yB,SAAU,CACnB,CACA,MAAAr0B,CAAOgU,IACH,SAAWvS,KAAK2M,SAAU4F,GAC1BvS,KAAK4yB,SAAU,CACnB,CACA,OAAAzwB,CAAQT,GACJ1B,KAAK4yB,SAAW5yB,KAAK2M,SAAS0U,KAAKqR,IACnC1yB,KAAK4yB,SAAU,EACf5yB,KAAK2M,SAASxK,QAAQT,EAC1B,8BCMJ,MAAMmxB,GAAgB,CAAC,GAAI,IAAK,IAAK,KAC/BC,GAAmB,CAAEC,WAAY,UAMvC,IAAI,GAAK,EAKT,MAAMC,GAAsB,CACxBxhC,KAAM,kBACNyhC,WAAY,EACZC,qBAAsB,EACtBC,uBAAwB,GAE5B,SAASC,IAAqB,qBAAEC,EAAoB,cAAEC,EAAa,cAAEC,EAAa,kBAAEC,EAAiB,eAAEC,IACnG,OAAO,MACH,WAAA1zB,CAAY0F,EAAe,CAAC,EAAG8G,GAAS+mB,aAAqD,EAASA,MAIlGtzB,KAAKiW,GAAK,KAIVjW,KAAK0zB,YAAc,EAOnB1zB,KAAK2M,SAAW,IAAIvT,IAKpB4G,KAAKhO,QAAU,CAAC,EAMhBgO,KAAK2zB,iBAAkB,EACvB3zB,KAAKipB,oBAAqB,EAO1BjpB,KAAK8xB,eAAgB,EAKrB9xB,KAAK4zB,mBAAoB,EAKzB5zB,KAAK6zB,yBAA0B,EAK/B7zB,KAAKoP,kBAAmB,EAIxBpP,KAAK8zB,uBAAwB,EAC7B9zB,KAAK+zB,uBAAwB,EAK7B/zB,KAAK6xB,YAAa,EAIlB7xB,KAAKg0B,OAAQ,EAKbh0B,KAAKi0B,YAAa,EAIlBj0B,KAAKk0B,sBAAuB,EAS5Bl0B,KAAK4E,UAAY,CAAEtZ,EAAG,EAAGoY,EAAG,GAI5B1D,KAAKm0B,cAAgB,IAAIrnB,IACzB9M,KAAKo0B,iBAAkB,EAEvBp0B,KAAKq0B,iBAAkB,EACvBr0B,KAAKs0B,2BAA4B,EACjCt0B,KAAKu0B,kBAAoB,KACjBv0B,KAAK6xB,aACL7xB,KAAK6xB,YAAa,EAClB7xB,KAAKw0B,oBACT,EAOJx0B,KAAKy0B,iBAAmB,KCnJpC,IAAgBC,EDoJA10B,KAAKs0B,2BAA4B,EAKjCtB,GAAoBC,WAChBD,GAAoBE,qBAChBF,GAAoBG,uBAChB,EACZnzB,KAAK20B,MAAMxyB,QAAQyyB,IACnB50B,KAAK20B,MAAMxyB,QAAQ0yB,IACnB70B,KAAK20B,MAAMxyB,QAAQ2yB,IACnB90B,KAAK20B,MAAMxyB,QAAQ4yB,IChKnBL,EDiKO1B,GChKf/0B,OAAO+2B,aACP/2B,OAAO+2B,YAAYC,OAAOP,ED+JS,EAE/B10B,KAAKk1B,cAAe,EACpBl1B,KAAKm1B,WAAY,EACjBn1B,KAAKo1B,kBAAoB,EAKzBp1B,KAAKq1B,YAAc,IAAIvoB,IACvB9M,KAAKyF,aAAeA,EACpBzF,KAAKuF,KAAOgH,EAASA,EAAOhH,MAAQgH,EAASvM,KAC7CA,KAAKs1B,KAAO/oB,EAAS,IAAIA,EAAO+oB,KAAM/oB,GAAU,GAChDvM,KAAKuM,OAASA,EACdvM,KAAK8H,MAAQyE,EAASA,EAAOzE,MAAQ,EAAI,EACzC,IAAK,IAAIxe,EAAI,EAAGA,EAAI0W,KAAKs1B,KAAK9rC,OAAQF,IAClC0W,KAAKs1B,KAAKhsC,GAAG4qC,sBAAuB,EAEpCl0B,KAAKuF,OAASvF,OACdA,KAAK20B,MAAQ,IAAIhC,GACzB,CACA,gBAAAhY,CAAiBzX,EAAMuX,GAInB,OAHKza,KAAKm0B,cAAc56B,IAAI2J,IACxBlD,KAAKm0B,cAAc15B,IAAIyI,EAAM,IAAI,MAE9BlD,KAAKm0B,cAAcn4B,IAAIkH,GAAM5E,IAAImc,EAC5C,CACA,eAAA8a,CAAgBryB,KAASkQ,GACrB,MAAMoiB,EAAsBx1B,KAAKm0B,cAAcn4B,IAAIkH,GACnDsyB,GAAuBA,EAAoBnoB,UAAU+F,EACzD,CACA,YAAAqiB,CAAavyB,GACT,OAAOlD,KAAKm0B,cAAc56B,IAAI2J,EAClC,CAIA,KAAAmL,CAAMnJ,EAAU4sB,EAAgB9xB,KAAKuF,KAAK6uB,iBACtC,GAAIp0B,KAAKkF,SACL,OACJlF,KAAKg0B,OAAQ,QAAa9uB,GAC1BlF,KAAKkF,SAAWA,EAChB,MAAM,SAAE9B,EAAQ,OAAEN,EAAM,cAAExF,GAAkB0C,KAAKhO,QASjD,GARIsL,IAAkBA,EAAcvF,SAChCuF,EAAc+Q,MAAMnJ,GAExBlF,KAAKuF,KAAKovB,MAAMr2B,IAAI0B,MACpBA,KAAKuM,QAAUvM,KAAKuM,OAAOI,SAASrO,IAAI0B,MACpC8xB,IAAkBhvB,GAAUM,KAC5BpD,KAAK8xB,eAAgB,GAErBuB,EAAsB,CACtB,IAAIqC,EACJ,MAAMC,EAAsB,IAAO31B,KAAKuF,KAAKwuB,uBAAwB,EACrEV,EAAqBnuB,GAAU,KAC3BlF,KAAKuF,KAAKwuB,uBAAwB,EAClC2B,GAAeA,IACfA,EErNpB,SAAeh0B,EAAUk0B,GACrB,MAAMjlC,EAAQI,YAAYF,MACpBglC,EAAe,EAAGnlC,gBACpB,MAAMgD,EAAUhD,EAAYC,EACxB+C,GAAWkiC,KACX,QAAYC,GACZn0B,EAAShO,EAAUkiC,GACvB,EAGJ,OADA,KAAMzb,KAAK0b,GAAc,GAClB,KAAM,QAAYA,EAC7B,CF0MkCxkC,CAAMskC,EAAqB,KACrCpJ,GAAsBC,yBACtBD,GAAsBC,wBAAyB,EAC/CxsB,KAAK20B,MAAMxyB,QAAQ2zB,IACvB,GAER,CACI1yB,GACApD,KAAKuF,KAAKwwB,mBAAmB3yB,EAAUpD,OAGd,IAAzBA,KAAKhO,QAAQgI,SACbsD,IACC8F,GAAYN,IACb9C,KAAK2a,iBAAiB,aAAa,EAAG7qB,QAAOs8B,mBAAkB4J,2BAA0BlzB,OAAQmzB,MAC7F,GAAIj2B,KAAKk2B,yBAGL,OAFAl2B,KAAKvQ,YAASrC,OACd4S,KAAKm2B,oBAAiB/oC,GAI1B,MAAMgpC,EAAmBp2B,KAAKhO,QAAQ2J,YAClC2B,EAAcrC,wBACdo7B,IACE,uBAAEC,EAAsB,0BAAEC,GAA+Bj5B,EAAcV,WAKvE45B,GAAiBx2B,KAAKy2B,eACvB1F,GAAiB/wB,KAAKy2B,aAAcR,IACrCD,EAMEU,GAAgCtK,GAAoB4J,EAC1D,GAAIh2B,KAAKhO,QAAQqe,YACZrQ,KAAKyxB,YAAczxB,KAAKyxB,WAAWvsB,UACpCwxB,GACCtK,IACIoK,IAAkBx2B,KAAK0uB,kBAAoB,CAC5C1uB,KAAKyxB,aACLzxB,KAAKkyB,aAAelyB,KAAKyxB,WACzBzxB,KAAKkyB,aAAaA,kBAAe9kC,GAErC4S,KAAK22B,mBAAmB7mC,EAAO4mC,GAC/B,MAAME,EAAmB,KAClB,QAAmBR,EAAkB,UACxCxkC,OAAQ0kC,EACRxkC,WAAYykC,IAEZj5B,EAAce,oBACd2B,KAAKhO,QAAQqe,cACbumB,EAAiBvlC,MAAQ,EACzBulC,EAAiBplC,MAAO,GAE5BwO,KAAK4pB,eAAegN,EACxB,MAOSxK,GACD0J,GAAgB91B,MAEhBA,KAAK2uB,UAAY3uB,KAAKhO,QAAQiyB,gBAC9BjkB,KAAKhO,QAAQiyB,iBAGrBjkB,KAAKy2B,aAAeR,CAAS,GAGzC,CACA,OAAAlnB,GACI/O,KAAKhO,QAAQoR,UAAYpD,KAAKiuB,aAC9BjuB,KAAKuF,KAAKovB,MAAMp2B,OAAOyB,MACvB,MAAMquB,EAAQruB,KAAKsuB,WACnBD,GAASA,EAAM9vB,OAAOyB,MACtBA,KAAKuM,QAAUvM,KAAKuM,OAAOI,SAASrM,OAAON,MAC3CA,KAAKkF,cAAW9X,GAChB,QAAY4S,KAAKy0B,iBACrB,CAEA,WAAAoC,GACI72B,KAAK8zB,uBAAwB,CACjC,CACA,aAAAgD,GACI92B,KAAK8zB,uBAAwB,CACjC,CACA,eAAAiD,GACI,OAAO/2B,KAAK8zB,uBAAyB9zB,KAAK+zB,qBAC9C,CACA,sBAAAmC,GACI,OAAQl2B,KAAKipB,oBACRjpB,KAAKuM,QAAUvM,KAAKuM,OAAO2pB,2BAC5B,CACR,CAEA,WAAAc,GACQh3B,KAAK+2B,oBAET/2B,KAAK6xB,YAAa,EAClB7xB,KAAK20B,OAAS30B,KAAK20B,MAAMxyB,QAAQ80B,IACjCj3B,KAAK0zB,cACT,CACA,oBAAAwD,GACI,MAAM,cAAE55B,GAAkB0C,KAAKhO,QAC/B,OAAOsL,GAAiBA,EAAcV,WAAWsU,iBACrD,CACA,UAAA+c,CAAWkJ,GAAwB,GAE/B,GADAn3B,KAAKuF,KAAK6uB,iBAAkB,EACxBp0B,KAAKuF,KAAKwxB,kBAEV,YADA/2B,KAAKhO,QAAQiyB,gBAAkBjkB,KAAKhO,QAAQiyB,kBAIhD,IADCjkB,KAAKuF,KAAKssB,YAAc7xB,KAAKuF,KAAKyxB,cAC/Bh3B,KAAK8xB,cACL,OACJ9xB,KAAK8xB,eAAgB,EACrB,IAAK,IAAIxoC,EAAI,EAAGA,EAAI0W,KAAKs1B,KAAK9rC,OAAQF,IAAK,CACvC,MAAM0b,EAAOhF,KAAKs1B,KAAKhsC,GACvB0b,EAAKkvB,sBAAuB,EAC5BlvB,EAAK4mB,aAAa,YACd5mB,EAAKhT,QAAQqe,YACbrL,EAAKipB,YAAW,EAExB,CACA,MAAM,SAAE7qB,EAAQ,OAAEN,GAAW9C,KAAKhO,QAClC,QAAiB5E,IAAbgW,IAA2BN,EAC3B,OACJ,MAAMoO,EAAoBlR,KAAKk3B,uBAC/Bl3B,KAAKo3B,2BAA6BlmB,EAC5BA,EAAkBlR,KAAKyF,aAAc,SACrCrY,EACN4S,KAAKq3B,iBACLF,GAAyBn3B,KAAKu1B,gBAAgB,aAClD,CACA,MAAA/kC,GACIwP,KAAKq0B,iBAAkB,EAKvB,GAJyBr0B,KAAK+2B,kBAQ1B,OAHA/2B,KAAK82B,gBACL92B,KAAKw0B,yBACLx0B,KAAK20B,MAAMxyB,QAAQm1B,IAGlBt3B,KAAK6xB,YACN7xB,KAAK20B,MAAMxyB,QAAQo1B,IAEvBv3B,KAAK6xB,YAAa,EAIlB7xB,KAAK20B,MAAMxyB,QAAQq1B,IAKnBx3B,KAAK20B,MAAMxyB,QAAQ0pB,IAKnB7rB,KAAK20B,MAAMxyB,QAAQs1B,IACnBz3B,KAAKw0B,oBAML,MAAM3jC,EAAME,YAAYF,MACxB,KAAUf,OAAQ,EAAA6C,GAAA,GAAM,EAAG,IAAO,GAAI9B,EAAM,KAAUH,WACtD,KAAUA,UAAYG,EACtB,KAAUC,cAAe,EACzB,KAAMN,OAAO2P,QAAQ,MACrB,KAAMu3B,UAAUv3B,QAAQ,MACxB,KAAM4K,OAAO5K,QAAQ,MACrB,KAAUrP,cAAe,CAC7B,CACA,SAAA+8B,GACS7tB,KAAKq0B,kBACNr0B,KAAKq0B,iBAAkB,EACvB5F,gBAAe,IAAMzuB,KAAKxP,WAElC,CACA,iBAAAgkC,GACIx0B,KAAK20B,MAAMxyB,QAAQw1B,IACnB33B,KAAKq1B,YAAYlzB,QAAQy1B,GAC7B,CACA,wBAAAC,GACS73B,KAAKs0B,4BACNt0B,KAAKs0B,2BAA4B,EACjC,KAAMoD,UAAU13B,KAAKy0B,kBAAkB,GAAO,GAEtD,CACA,yBAAA3F,GAMI,KAAMV,YAAW,KACTpuB,KAAK8xB,cACL9xB,KAAKuF,KAAKsoB,YAGV7tB,KAAKuF,KAAKgvB,mBACd,GAER,CAIA,cAAA8C,IACQr3B,KAAK2xB,UAAa3xB,KAAKkF,WAE3BlF,KAAK2xB,SAAW3xB,KAAKkqB,UACzB,CACA,YAAA2B,GACI,IAAK7rB,KAAKkF,SACN,OAGJ,GADAlF,KAAK4rB,iBACC5rB,KAAKhO,QAAQue,qBAAuBvQ,KAAK2uB,UAC1C3uB,KAAK8xB,eACN,OASJ,GAAI9xB,KAAKyxB,aAAezxB,KAAKyxB,WAAWvsB,SACpC,IAAK,IAAI5b,EAAI,EAAGA,EAAI0W,KAAKs1B,KAAK9rC,OAAQF,IAAK,CAC1B0W,KAAKs1B,KAAKhsC,GAClBsiC,cACT,CAEJ,MAAMkM,EAAa93B,KAAK8C,OACxB9C,KAAK8C,OAAS9C,KAAKkqB,SAAQ,GAC3BlqB,KAAK+3B,iBAAkB,WACvB/3B,KAAK8xB,eAAgB,EACrB9xB,KAAKiF,qBAAkB7X,EACvB4S,KAAKu1B,gBAAgB,UAAWv1B,KAAK8C,OAAOsmB,WAC5C,MAAM,cAAE9rB,GAAkB0C,KAAKhO,QAC/BsL,GACIA,EAAc+P,OAAO,gBAAiBrN,KAAK8C,OAAOsmB,UAAW0O,EAAaA,EAAW1O,eAAYh8B,EACzG,CACA,YAAAw+B,CAAaoM,EAAQ,WACjB,IAAIC,EAAmBjkC,QAAQgM,KAAKhO,QAAQqT,cAAgBrF,KAAKkF,UAC7DlF,KAAKsF,QACLtF,KAAKsF,OAAOouB,cAAgB1zB,KAAKuF,KAAKmuB,aACtC1zB,KAAKsF,OAAO0yB,QAAUA,IACtBC,GAAmB,GAEnBA,IACAj4B,KAAKsF,OAAS,CACVouB,YAAa1zB,KAAKuF,KAAKmuB,YACvBsE,QACAE,OAAQ1E,EAAkBxzB,KAAKkF,UAC/BnX,OAAQwlC,EAAcvzB,KAAKkF,WAGvC,CACA,cAAAuuB,GACI,IAAKA,EACD,OACJ,MAAM0E,EAAmBn4B,KAAK8xB,eAAiB9xB,KAAKk0B,qBAC9CkE,EAAgBp4B,KAAKiF,kBAAoB6rB,GAAY9wB,KAAKiF,iBAC1DiM,EAAoBlR,KAAKk3B,uBACzBmB,EAAyBnnB,EACzBA,EAAkBlR,KAAKyF,aAAc,SACrCrY,EACAkrC,EAA8BD,IAA2Br4B,KAAKo3B,2BAChEe,IACCC,IACG,SAAap4B,KAAKyF,eAClB6yB,KACJ7E,EAAezzB,KAAKkF,SAAUmzB,GAC9Br4B,KAAKk0B,sBAAuB,EAC5Bl0B,KAAK0N,iBAEb,CACA,OAAAwc,CAAQqO,GAAkB,GACtB,MAAMC,EAAUx4B,KAAKyH,iBACrB,IAAI2hB,EAAYppB,KAAKy4B,oBAAoBD,GA+8BrD,IAAkB9zB,EAr8BN,OAJI6zB,IACAnP,EAAYppB,KAAKu4B,gBAAgBnP,IAy8B7CsP,IADch0B,EAt8BG0kB,GAu8BH99B,GACdotC,GAAUh0B,EAAIhB,GAv8BC,CACHgwB,YAAa1zB,KAAKuF,KAAKmuB,YACvBiF,YAAaH,EACbpP,YACA3jB,aAAc,CAAC,EACfqR,OAAQ9W,KAAKiW,GAErB,CACA,cAAAxO,GACI,MAAM,cAAEnK,GAAkB0C,KAAKhO,QAC/B,IAAKsL,EACD,OAAO,WACX,MAAMoH,EAAMpH,EAAciK,sBAEpB,OAAEjC,GAAWtF,KAAKuF,KAKxB,OAJID,KACA,SAAcZ,EAAIpZ,EAAGga,EAAOvX,OAAOzC,IACnC,SAAcoZ,EAAIhB,EAAG4B,EAAOvX,OAAO2V,IAEhCgB,CACX,CACA,mBAAA+zB,CAAoB/zB,GAChB,MAAMk0B,GAAmB,WACzBvI,GAAYuI,EAAkBl0B,GAK9B,IAAK,IAAIpb,EAAI,EAAGA,EAAI0W,KAAKs1B,KAAK9rC,OAAQF,IAAK,CACvC,MAAM0b,EAAOhF,KAAKs1B,KAAKhsC,IACjB,OAAEgc,EAAM,QAAEtT,GAAYgT,EAC5B,GAAIA,IAAShF,KAAKuF,MAAQD,GAAUtT,EAAQqT,aAAc,CAKtD,GAAIC,EAAO4yB,OAAQ,CACf7H,GAAYuI,EAAkBl0B,GAC9B,MAAQY,OAAQuzB,GAAe74B,KAAKuF,KAKhCszB,KACA,SAAcD,EAAiBttC,GAAIutC,EAAW9qC,OAAOzC,IACrD,SAAcstC,EAAiBl1B,GAAIm1B,EAAW9qC,OAAO2V,GAE7D,EACA,SAAck1B,EAAiBttC,EAAGga,EAAOvX,OAAOzC,IAChD,SAAcstC,EAAiBl1B,EAAG4B,EAAOvX,OAAO2V,EACpD,CACJ,CACA,OAAOk1B,CACX,CACA,cAAAE,CAAep0B,EAAKq0B,GAAgB,GAChC,MAAMC,GAAiB,WACvB3I,GAAY2I,EAAgBt0B,GAC5B,IAAK,IAAIpb,EAAI,EAAGA,EAAI0W,KAAKs1B,KAAK9rC,OAAQF,IAAK,CACvC,MAAM0b,EAAOhF,KAAKs1B,KAAKhsC,IAClByvC,GACD/zB,EAAKhT,QAAQqT,cACbL,EAAKM,QACLN,IAASA,EAAKO,OACd,SAAayzB,EAAgB,CACzB1tC,GAAI0Z,EAAKM,OAAOvX,OAAOzC,EACvBoY,GAAIsB,EAAKM,OAAOvX,OAAO2V,KAG1B,SAAasB,EAAKS,gBAEvB,SAAauzB,EAAgBh0B,EAAKS,aACtC,CAIA,OAHI,SAAazF,KAAKyF,gBAClB,SAAauzB,EAAgBh5B,KAAKyF,cAE/BuzB,CACX,CACA,eAAAT,CAAgB7zB,GACZ,MAAMu0B,GAAsB,WAC5B5I,GAAY4I,EAAqBv0B,GACjC,IAAK,IAAIpb,EAAI,EAAGA,EAAI0W,KAAKs1B,KAAK9rC,OAAQF,IAAK,CACvC,MAAM0b,EAAOhF,KAAKs1B,KAAKhsC,GACvB,IAAK0b,EAAKE,SACN,SACJ,KAAK,SAAaF,EAAKS,cACnB,UACJ,SAAST,EAAKS,eAAiBT,EAAKqyB,iBACpC,MAAMzG,GAAY,WAElBP,GAAYO,EADI5rB,EAAKyC,kBAErBkpB,GAAoBsI,EAAqBj0B,EAAKS,aAAcT,EAAK2sB,SAAW3sB,EAAK2sB,SAASvI,eAAYh8B,EAAWwjC,EACrH,CAIA,OAHI,SAAa5wB,KAAKyF,eAClBkrB,GAAoBsI,EAAqBj5B,KAAKyF,cAE3CwzB,CACX,CACA,cAAAC,CAAeppC,GACXkQ,KAAKm5B,YAAcrpC,EACnBkQ,KAAKuF,KAAKsyB,2BACV73B,KAAK4zB,mBAAoB,CAC7B,CACA,UAAAtjB,CAAWte,GACPgO,KAAKhO,QAAU,IACRgO,KAAKhO,WACLA,EACH+/B,eAAiC3kC,IAAtB4E,EAAQ+/B,WAA0B//B,EAAQ+/B,UAE7D,CACA,iBAAAuF,GACIt3B,KAAKsF,YAASlY,EACd4S,KAAK8C,YAAS1V,EACd4S,KAAK2xB,cAAWvkC,EAChB4S,KAAKo3B,gCAA6BhqC,EAClC4S,KAAKm5B,iBAAc/rC,EACnB4S,KAAKvQ,YAASrC,EACd4S,KAAK8xB,eAAgB,CACzB,CACA,kCAAAsH,GACSp5B,KAAKq5B,gBAQNr5B,KAAKq5B,eAAeC,2BACpB,KAAU5oC,WACVsP,KAAKq5B,eAAexE,oBAAmB,EAE/C,CACA,kBAAAA,CAAmB0E,GAAqB,GACpC,IAAI1mB,EAMJ,MAAMse,EAAOnxB,KAAKw5B,UAClBx5B,KAAK4zB,oBAAsB5zB,KAAK4zB,kBAAoBzC,EAAKyC,mBACzD5zB,KAAKoP,mBAAqBpP,KAAKoP,iBAAmB+hB,EAAK/hB,kBACvDpP,KAAK6zB,0BAA4B7zB,KAAK6zB,wBAA0B1C,EAAK0C,yBACrE,MAAM4F,EAAWzlC,QAAQgM,KAAKkyB,eAAiBlyB,OAASmxB,EAUxD,KALkBoI,GACbE,GAAYz5B,KAAK6zB,yBAClB7zB,KAAK4zB,oBACmB,QAAtB/gB,EAAK7S,KAAKuM,cAA2B,IAAPsG,OAAgB,EAASA,EAAG+gB,oBAC5D5zB,KAAK05B,gCAEL,OACJ,MAAM,OAAE52B,EAAM,SAAEM,GAAapD,KAAKhO,QAIlC,GAAKgO,KAAK8C,SAAYA,GAAUM,GAAhC,CASA,GAPApD,KAAKs5B,yBAA2B,KAAU5oC,WAOrCsP,KAAKm5B,cAAgBn5B,KAAKm2B,eAAgB,CAE3C,MAAMkD,EAAiBr5B,KAAK25B,6BACxBN,GACAA,EAAev2B,QACY,IAA3B9C,KAAKo1B,mBACLp1B,KAAKq5B,eAAiBA,EACtBr5B,KAAKo5B,qCACLp5B,KAAKm2B,gBAAiB,WACtBn2B,KAAK45B,sBAAuB,WAC5B3S,GAAqBjnB,KAAK45B,qBAAsB55B,KAAK8C,OAAOsmB,UAAWiQ,EAAev2B,OAAOsmB,WAC7FiH,GAAYrwB,KAAKm2B,eAAgBn2B,KAAK45B,uBAGtC55B,KAAKq5B,eAAiBr5B,KAAKm2B,oBAAiB/oC,CAEpD,CAKA,GAAK4S,KAAKm2B,gBAAmBn2B,KAAKm5B,YAAlC,CnB5qBZ,IAAyB1pC,EAAQs3B,EAAUxa,EmBqtB/B,GApCKvM,KAAKvQ,SACNuQ,KAAKvQ,QAAS,WACduQ,KAAK65B,sBAAuB,YAK5B75B,KAAKm2B,gBACLn2B,KAAK45B,sBACL55B,KAAKq5B,gBACLr5B,KAAKq5B,eAAe5pC,QACpBuQ,KAAKo5B,qCnB5rBI3pC,EmB6rBOuQ,KAAKvQ,OnB7rBJs3B,EmB6rBY/mB,KAAKm2B,enB7rBP5pB,EmB6rBuBvM,KAAKq5B,eAAe5pC,OnB5rBlFq3B,GAAiBr3B,EAAOnE,EAAGy7B,EAASz7B,EAAGihB,EAAOjhB,GAC9Cw7B,GAAiBr3B,EAAOiU,EAAGqjB,EAASrjB,EAAG6I,EAAO7I,ImBgsB7B1D,KAAKm5B,aACNnlC,QAAQgM,KAAKkyB,cAEblyB,KAAKvQ,OAASuQ,KAAK84B,eAAe94B,KAAK8C,OAAOsmB,WAG9CiH,GAAYrwB,KAAKvQ,OAAQuQ,KAAK8C,OAAOsmB,YAEzC,SAAcppB,KAAKvQ,OAAQuQ,KAAKm5B,cAMhC9I,GAAYrwB,KAAKvQ,OAAQuQ,KAAK8C,OAAOsmB,WAKrCppB,KAAK05B,+BAAgC,CACrC15B,KAAK05B,gCAAiC,EACtC,MAAML,EAAiBr5B,KAAK25B,6BACxBN,GACArlC,QAAQqlC,EAAenH,gBACnBl+B,QAAQgM,KAAKkyB,gBAChBmH,EAAernC,QAAQqT,cACxBg0B,EAAe5pC,QACY,IAA3BuQ,KAAKo1B,mBACLp1B,KAAKq5B,eAAiBA,EACtBr5B,KAAKo5B,qCACLp5B,KAAKm2B,gBAAiB,WACtBn2B,KAAK45B,sBAAuB,WAC5B3S,GAAqBjnB,KAAK45B,qBAAsB55B,KAAKvQ,OAAQ4pC,EAAe5pC,QAC5E4gC,GAAYrwB,KAAKm2B,eAAgBn2B,KAAK45B,uBAGtC55B,KAAKq5B,eAAiBr5B,KAAKm2B,oBAAiB/oC,CAEpD,CAIA4lC,GAAoBE,sBA/DV,CA9BA,CA8Fd,CACA,0BAAAyG,GACI,GAAK35B,KAAKuM,UACN,SAASvM,KAAKuM,OAAO9G,iBACrB,SAAezF,KAAKuM,OAAO9G,cAG/B,OAAIzF,KAAKuM,OAAOutB,eACL95B,KAAKuM,OAGLvM,KAAKuM,OAAOotB,4BAE3B,CACA,YAAAG,GACI,OAAO9lC,SAASgM,KAAKm2B,gBACjBn2B,KAAKm5B,aACLn5B,KAAKhO,QAAQqe,aACbrQ,KAAK8C,OACb,CACA,cAAAgyB,GACI,IAAIjiB,EACJ,MAAMse,EAAOnxB,KAAKw5B,UACZC,EAAWzlC,QAAQgM,KAAKkyB,eAAiBlyB,OAASmxB,EACxD,IAAI/yB,GAAU,EAuBd,IAlBI4B,KAAK4zB,oBAA6C,QAAtB/gB,EAAK7S,KAAKuM,cAA2B,IAAPsG,OAAgB,EAASA,EAAG+gB,sBACtFx1B,GAAU,GAMVq7B,IACCz5B,KAAK6zB,yBAA2B7zB,KAAKoP,oBACtChR,GAAU,GAMV4B,KAAKs5B,2BAA6B,KAAU5oC,YAC5C0N,GAAU,GAEVA,EACA,OACJ,MAAM,OAAE0E,EAAM,SAAEM,GAAapD,KAAKhO,QAWlC,GANAgO,KAAK2zB,gBAAkB3/B,QAASgM,KAAKuM,QAAUvM,KAAKuM,OAAOonB,iBACvD3zB,KAAK0uB,kBACL1uB,KAAK+5B,kBACJ/5B,KAAK2zB,kBACN3zB,KAAKm5B,YAAcn5B,KAAKm2B,oBAAiB/oC,IAExC4S,KAAK8C,SAAYA,IAAUM,EAC5B,OAKJitB,GAAYrwB,KAAK+3B,gBAAiB/3B,KAAK8C,OAAOsmB,WAI9C,MAAM4Q,EAAiBh6B,KAAK4E,UAAUtZ,EAChC2uC,EAAiBj6B,KAAK4E,UAAUlB,GAKtC,SAAgB1D,KAAK+3B,gBAAiB/3B,KAAK4E,UAAW5E,KAAKs1B,KAAMmE,IAK7DtI,EAAKruB,QACJquB,EAAK1hC,QACgB,IAArBuQ,KAAK4E,UAAUtZ,GAAgC,IAArB0U,KAAK4E,UAAUlB,IAC1CytB,EAAK1hC,OAAS0hC,EAAKruB,OAAOsmB,WAE9B,MAAM,OAAE35B,GAAW0hC,EACnB,IAAK1hC,EAWD,YALIuQ,KAAKk6B,sBACLl6B,KAAKiF,iBAAkB,WACvBjF,KAAKk6B,oBAAsB,OAC3Bl6B,KAAK0N,mBAIR1N,KAAKiF,kBACNjF,KAAKiF,iBAAkB,WACvBjF,KAAKm6B,8BAA+B,YAExC,MAAMC,EAA0Bp6B,KAAKk6B,oBAUrCvT,GAAa3mB,KAAKiF,gBAAiBjF,KAAK+3B,gBAAiBtoC,EAAQuQ,KAAKyF,cACtEzF,KAAKk6B,oBAAsB9H,GAAyBpyB,KAAKiF,gBAAiBjF,KAAK4E,WAC3E5E,KAAKk6B,sBAAwBE,GAC7Bp6B,KAAK4E,UAAUtZ,IAAM0uC,GACrBh6B,KAAK4E,UAAUlB,IAAMu2B,IACrBj6B,KAAKk1B,cAAe,EACpBl1B,KAAK0N,iBACL1N,KAAKu1B,gBAAgB,mBAAoB9lC,IAK7CujC,GAAoBG,wBACxB,CACA,IAAAnB,GACIhyB,KAAKm1B,WAAY,CAErB,CACA,IAAA3D,GACIxxB,KAAKm1B,WAAY,CAErB,CACA,cAAAznB,CAAe2sB,GAAY,GAEvB,GADAr6B,KAAKhO,QAAQ0b,gBAAkB1N,KAAKhO,QAAQ0b,iBACxC2sB,EAAW,CACX,MAAMhM,EAAQruB,KAAKsuB,WACnBD,GAASA,EAAM3gB,gBACnB,CACI1N,KAAKkyB,eAAiBlyB,KAAKkyB,aAAahtB,WACxClF,KAAKkyB,kBAAe9kC,EAE5B,CACA,kBAAAupC,CAAmB7mC,EAAO4mC,GAA+B,GACrD,MAAM/E,EAAW3xB,KAAK2xB,SAChB2I,EAAuB3I,EACvBA,EAASlsB,aACT,CAAC,EACD80B,EAAc,IAAKv6B,KAAKyF,cACxB0zB,GAAc,WACfn5B,KAAKq5B,gBACLr5B,KAAKq5B,eAAernC,QAAQqe,aAC7BrQ,KAAKm2B,eAAiBn2B,KAAK45B,0BAAuBxsC,GAEtD4S,KAAK05B,gCAAkChD,EACvC,MAAM8D,GAAiB,WAGjBC,GAFiB9I,EAAWA,EAAS7a,YAAS1pB,MAC/B4S,KAAK8C,OAAS9C,KAAK8C,OAAOgU,YAAS1pB,GAElDihC,EAAQruB,KAAKsuB,WACboM,GAAgBrM,GAASA,EAAME,QAAQ/kC,QAAU,EACjDmxC,EAAyB3mC,QAAQymC,IAClCC,IAC0B,IAA3B16B,KAAKhO,QAAQ+/B,YACZ/xB,KAAKs1B,KAAKx+B,KAAK8jC,KAEpB,IAAIC,EADJ76B,KAAKo1B,kBAAoB,EAEzBp1B,KAAK86B,eAAkB/qC,IACnB,MAAM6D,EAAW7D,EAAS,IL36B1C,IAAmB6F,EAAGC,EK66CNklC,EAAQh/B,EAAM2O,EAAI9d,EAjgBlBouC,GAAa7B,EAAY7tC,EAAGwE,EAAMxE,EAAGsI,GACrConC,GAAa7B,EAAYz1B,EAAG5T,EAAM4T,EAAG9P,GACrCoM,KAAKk5B,eAAeC,GAChBn5B,KAAKm2B,gBACLn2B,KAAK45B,sBACL55B,KAAK8C,QACL9C,KAAKq5B,gBACLr5B,KAAKq5B,eAAev2B,SACpBmkB,GAAqBuT,EAAgBx6B,KAAK8C,OAAOsmB,UAAWppB,KAAKq5B,eAAev2B,OAAOsmB,WAyf3F2R,EAxfW/6B,KAAKm2B,eAwfRp6B,EAxfwBiE,KAAK45B,qBAwfvBlvB,EAxf6C8vB,EAwfzC5tC,EAxfyDgH,EAyfvFqnC,GAAQF,EAAOzvC,EAAGyQ,EAAKzQ,EAAGof,EAAGpf,EAAGsB,GAChCquC,GAAQF,EAAOr3B,EAAG3H,EAAK2H,EAAGgH,EAAGhH,EAAG9W,GArfZiuC,IL17BLjlC,EK27BeoK,KAAKm2B,eL37BjBtgC,EK27BiCglC,EL17B3CjlC,EAAEtK,EAAE0D,MAAQ6G,EAAEvK,EAAE0D,KACpB4G,EAAEtK,EAAE2D,MAAQ4G,EAAEvK,EAAE2D,KAChB2G,EAAE8N,EAAE1U,MAAQ6G,EAAE6N,EAAE1U,KAChB4G,EAAE8N,EAAEzU,MAAQ4G,EAAE6N,EAAEzU,OKw7BA+Q,KAAK4zB,mBAAoB,GAExBiH,IACDA,GAAqB,YACzBxK,GAAYwK,EAAoB76B,KAAKm2B,iBAErCsE,IACAz6B,KAAK4xB,gBAAkB2I,ERj8B3C,SAAmB9qC,EAAQyrC,EAAQ/J,EAAMv9B,EAAU+mC,EAAwBD,GACnEC,GACAlrC,EAAO0rC,SAAU,EAAAzU,GAAA,GAAI,OAEJt5B,IAAjB+jC,EAAKgK,QAAwBhK,EAAKgK,QAAU,EAAGpL,GAAgBn8B,IAC/DnE,EAAO2rC,aAAc,EAAA1U,GAAA,QAAuBt5B,IAAnB8tC,EAAOC,QAAwBD,EAAOC,QAAU,EAAG,EAAGjL,GAAiBt8B,KAE3F8mC,IACLjrC,EAAO0rC,SAAU,EAAAzU,GAAA,QAAuBt5B,IAAnB8tC,EAAOC,QAAwBD,EAAOC,QAAU,OAAoB/tC,IAAjB+jC,EAAKgK,QAAwBhK,EAAKgK,QAAU,EAAGvnC,IAK3H,IAAK,IAAItK,EAAI,EAAGA,EAAIomC,GAAYpmC,IAAK,CACjC,MAAM+xC,EAAc,SAAS5L,GAAQnmC,WACrC,IAAIgyC,EAAezL,GAAUqL,EAAQG,GACjCE,EAAa1L,GAAUsB,EAAMkK,QACZjuC,IAAjBkuC,QAA6CluC,IAAfmuC,IAElCD,IAAiBA,EAAe,GAChCC,IAAeA,EAAa,GACI,IAAjBD,GACI,IAAfC,GACA3L,GAAK0L,KAAkB1L,GAAK2L,IAE5B9rC,EAAO4rC,GAAe1vC,KAAKsD,KAAI,EAAAy3B,GAAA,GAAIiJ,GAAS2L,GAAe3L,GAAS4L,GAAa3nC,GAAW,IACxF,MAAQ2H,KAAKggC,IAAe,MAAQhgC,KAAK+/B,MACzC7rC,EAAO4rC,IAAgB,MAI3B5rC,EAAO4rC,GAAeE,EAE9B,EAIIL,EAAO/zB,QAAUgqB,EAAKhqB,UACtB1X,EAAO0X,QAAS,EAAAuf,GAAA,GAAIwU,EAAO/zB,QAAU,EAAGgqB,EAAKhqB,QAAU,EAAGvT,GAElE,CQ05BoB4nC,CAAUjB,EAAaD,EAAsBt6B,KAAKyF,aAAc7R,EAAU+mC,EAAwBD,IAEtG16B,KAAKuF,KAAKsyB,2BACV73B,KAAK0N,iBACL1N,KAAKo1B,kBAAoBxhC,CAAQ,EAErCoM,KAAK86B,eAAe96B,KAAKhO,QAAQqe,WAAa,IAAO,EACzD,CACA,cAAAuZ,CAAe53B,GACXgO,KAAKu1B,gBAAgB,kBACrBv1B,KAAK0uB,kBAAoB1uB,KAAK0uB,iBAAiB99B,OAC3CoP,KAAKkyB,cAAgBlyB,KAAKkyB,aAAaxD,kBACvC1uB,KAAKkyB,aAAaxD,iBAAiB99B,OAEnCoP,KAAK+5B,oBACL,QAAY/5B,KAAK+5B,kBACjB/5B,KAAK+5B,sBAAmB3sC,GAO5B4S,KAAK+5B,iBAAmB,KAAMvpC,QAAO,KACjC+7B,GAAsBC,wBAAyB,EAC/CxsB,KAAK0uB,kBAAmB,QAAmB,EAr8BnC,IAq8BuD,IACxD18B,EACHD,SAAWhC,IACPiQ,KAAK86B,eAAe/qC,GACpBiC,EAAQD,UAAYC,EAAQD,SAAShC,EAAO,EAEhD+B,WAAY,KACRE,EAAQF,YAAcE,EAAQF,aAC9BkO,KAAKy7B,mBAAmB,IAG5Bz7B,KAAKkyB,eACLlyB,KAAKkyB,aAAaxD,iBAAmB1uB,KAAK0uB,kBAE9C1uB,KAAK+5B,sBAAmB3sC,CAAS,GAEzC,CACA,iBAAAquC,GACQz7B,KAAKkyB,eACLlyB,KAAKkyB,aAAaxD,sBAAmBthC,EACrC4S,KAAKkyB,aAAaR,qBAAkBtkC,GAExC,MAAMihC,EAAQruB,KAAKsuB,WACnBD,GAASA,EAAM4D,wBACfjyB,KAAKkyB,aACDlyB,KAAK0uB,iBACD1uB,KAAK4xB,qBACDxkC,EACZ4S,KAAKu1B,gBAAgB,oBACzB,CACA,eAAAO,GACQ91B,KAAK0uB,mBACL1uB,KAAK86B,gBAAkB96B,KAAK86B,eAr+BpB,KAs+BR96B,KAAK0uB,iBAAiB99B,QAE1BoP,KAAKy7B,mBACT,CACA,uBAAAC,GACI,MAAMvK,EAAOnxB,KAAKw5B,UAClB,IAAI,qBAAEK,EAAoB,OAAEpqC,EAAM,OAAEqT,EAAM,aAAE2C,GAAiB0rB,EAC7D,GAAK0I,GAAyBpqC,GAAWqT,EAAzC,CAOA,GAAI9C,OAASmxB,GACTnxB,KAAK8C,QACLA,GACA64B,GAA0B37B,KAAKhO,QAAQwe,cAAexQ,KAAK8C,OAAOsmB,UAAWtmB,EAAOsmB,WAAY,CAChG35B,EAASuQ,KAAKvQ,SAAU,WACxB,MAAMmsC,EAAUtV,GAAWtmB,KAAK8C,OAAOsmB,UAAU99B,GACjDmE,EAAOnE,EAAE0D,IAAMmiC,EAAK1hC,OAAOnE,EAAE0D,IAC7BS,EAAOnE,EAAE2D,IAAMQ,EAAOnE,EAAE0D,IAAM4sC,EAC9B,MAAMC,EAAUvV,GAAWtmB,KAAK8C,OAAOsmB,UAAU1lB,GACjDjU,EAAOiU,EAAE1U,IAAMmiC,EAAK1hC,OAAOiU,EAAE1U,IAC7BS,EAAOiU,EAAEzU,IAAMQ,EAAOiU,EAAE1U,IAAM6sC,CAClC,CACAxL,GAAYwJ,EAAsBpqC,IAMlC,SAAaoqC,EAAsBp0B,GAOnCkhB,GAAa3mB,KAAKm6B,6BAA8Bn6B,KAAK+3B,gBAAiB8B,EAAsBp0B,EA/BlF,CAgCd,CACA,kBAAAswB,CAAmB3yB,EAAU4B,GACpBhF,KAAKq1B,YAAY97B,IAAI6J,IACtBpD,KAAKq1B,YAAY56B,IAAI2I,EAAU,IAAI6tB,IAEzBjxB,KAAKq1B,YAAYr5B,IAAIoH,GAC7B9E,IAAI0G,GACV,MAAMsU,EAAStU,EAAKhT,QAAQye,uBAC5BzL,EAAKkpB,QAAQ,CACTvyB,WAAY2d,EAASA,EAAO3d,gBAAavO,EACzCmkC,sBAAuBjY,GAAUA,EAAOwiB,4BAClCxiB,EAAOwiB,4BAA4B92B,QACnC5X,GAEd,CACA,MAAAuhC,GACI,MAAMN,EAAQruB,KAAKsuB,WACnB,OAAOD,GAAQA,EAAM8C,OAASnxB,IAClC,CACA,OAAAw5B,GACI,IAAI3mB,EACJ,MAAM,SAAEzP,GAAapD,KAAKhO,QAC1B,OAAOoR,IAAuC,QAA1ByP,EAAK7S,KAAKsuB,kBAA+B,IAAPzb,OAAgB,EAASA,EAAGse,OAAgBnxB,IACtG,CACA,WAAA+7B,GACI,IAAIlpB,EACJ,MAAM,SAAEzP,GAAapD,KAAKhO,QAC1B,OAAOoR,EAAsC,QAA1ByP,EAAK7S,KAAKsuB,kBAA+B,IAAPzb,OAAgB,EAASA,EAAGqe,cAAW9jC,CAChG,CACA,QAAAkhC,GACI,MAAM,SAAElrB,GAAapD,KAAKhO,QAC1B,GAAIoR,EACA,OAAOpD,KAAKuF,KAAK8vB,YAAYr5B,IAAIoH,EACzC,CACA,OAAA8qB,EAAQ,WAAE+F,EAAU,WAAEt4B,EAAU,sBAAE41B,GAA2B,CAAC,GAC1D,MAAMlD,EAAQruB,KAAKsuB,WACfD,GACAA,EAAMH,QAAQluB,KAAMuxB,GACpB0C,IACAj0B,KAAKiF,qBAAkB7X,EACvB4S,KAAKi0B,YAAa,GAElBt4B,GACAqE,KAAKsQ,WAAW,CAAE3U,cAC1B,CACA,QAAAwyB,GACI,MAAME,EAAQruB,KAAKsuB,WACnB,QAAID,GACOA,EAAMF,SAASnuB,KAK9B,CACA,aAAAi3B,GACI,MAAM,cAAE35B,GAAkB0C,KAAKhO,QAC/B,IAAKsL,EACD,OAEJ,IAAI0+B,GAAY,EAKhB,MAAM,aAAEv2B,GAAiBnI,EAQzB,IAPImI,EAAa0B,QACb1B,EAAa2B,SACb3B,EAAa4B,SACb5B,EAAaw2B,WACbD,GAAY,IAGXA,EACD,OACJ,MAAME,EAAc,CAAC,EAErB,IAAK,IAAI5yC,EAAI,EAAGA,EAAIupC,GAAcrpC,OAAQF,IAAK,CAC3C,MAAMa,EAAM,SAAW0oC,GAAcvpC,GAEjCmc,EAAatb,KACb+xC,EAAY/xC,GAAOsb,EAAatb,GAChCmT,EAAckO,eAAerhB,EAAK,GAE1C,CAGAmT,EAAcyN,SAEd,IAAK,MAAM5gB,KAAO+xC,EACd5+B,EAAckO,eAAerhB,EAAK+xC,EAAY/xC,IAIlDmT,EAAcoQ,gBAClB,CACA,mBAAAyuB,CAAoBC,GAChB,IAAIvpB,EAAIwpB,EACR,IAAKr8B,KAAKkF,UAAYlF,KAAKg0B,MACvB,OACJ,IAAKh0B,KAAKm1B,UACN,OAAOrC,GAEX,MAAMwJ,EAAS,CACXvJ,WAAY,IAEV7hB,EAAoBlR,KAAKk3B,uBAC/B,GAAIl3B,KAAKi0B,WAQL,OAPAj0B,KAAKi0B,YAAa,EAClBqI,EAAOnB,QAAU,GACjBmB,EAAOC,cACHrjB,EAAmBkjB,aAA6C,EAASA,EAAUG,gBAAkB,GACzGD,EAAOnhC,UAAY+V,EACbA,EAAkBlR,KAAKyF,aAAc,IACrC,OACC62B,EAEX,MAAMnL,EAAOnxB,KAAKw5B,UAClB,IAAKx5B,KAAKiF,kBAAoBjF,KAAK8C,SAAWquB,EAAK1hC,OAAQ,CACvD,MAAM+sC,EAAc,CAAC,EAerB,OAdIx8B,KAAKhO,QAAQoR,WACbo5B,EAAYrB,aACsB/tC,IAA9B4S,KAAKyF,aAAa01B,QACZn7B,KAAKyF,aAAa01B,QAClB,EACVqB,EAAYD,cACRrjB,EAAmBkjB,aAA6C,EAASA,EAAUG,gBAAkB,IAEzGv8B,KAAKk1B,gBAAiB,SAAal1B,KAAKyF,gBACxC+2B,EAAYrhC,UAAY+V,EAClBA,EAAkB,CAAC,EAAG,IACtB,OACNlR,KAAKk1B,cAAe,GAEjBsH,CACX,CACA,MAAMC,EAAiBtL,EAAKS,iBAAmBT,EAAK1rB,aACpDzF,KAAK07B,0BACLY,EAAOnhC,UAAYi3B,GAAyBpyB,KAAKm6B,6BAA8Bn6B,KAAK4E,UAAW63B,GAC3FvrB,IACAorB,EAAOnhC,UAAY+V,EAAkBurB,EAAgBH,EAAOnhC,YAEhE,MAAM,EAAE7P,EAAC,EAAEoY,GAAM1D,KAAKiF,gBACtBq3B,EAAO1lB,gBAAkB,GAAc,IAAXtrB,EAAE8D,WAA4B,IAAXsU,EAAEtU,YAC7C+hC,EAAKS,gBAKL0K,EAAOnB,QACHhK,IAASnxB,KACiG,QAAnGq8B,EAAuC,QAAjCxpB,EAAK4pB,EAAetB,eAA4B,IAAPtoB,EAAgBA,EAAK7S,KAAKyF,aAAa01B,eAA4B,IAAPkB,EAAgBA,EAAK,EACjIr8B,KAAK0xB,gBACD1xB,KAAKyF,aAAa01B,QAClBsB,EAAerB,YAO7BkB,EAAOnB,QACHhK,IAASnxB,UACwB5S,IAA3BqvC,EAAetB,QACXsB,EAAetB,QACf,QAC2B/tC,IAA/BqvC,EAAerB,YACXqB,EAAerB,YACf,EAKlB,IAAK,MAAMjxC,KAAO,KAAiB,CAC/B,QAA4BiD,IAAxBqvC,EAAetyC,GACf,SACJ,MAAM,QAAE0iC,EAAO,QAAEsC,GAAY,KAAgBhlC,GAOvCuyC,EAAiC,SAArBJ,EAAOnhC,UACnBshC,EAAetyC,GACf0iC,EAAQ4P,EAAetyC,GAAMgnC,GACnC,GAAIhC,EAAS,CACT,MAAMwN,EAAMxN,EAAQ3lC,OACpB,IAAK,IAAIF,EAAI,EAAGA,EAAIqzC,EAAKrzC,IACrBgzC,EAAOnN,EAAQ7lC,IAAMozC,CAE7B,MAEIJ,EAAOnyC,GAAOuyC,CAEtB,CAYA,OANI18B,KAAKhO,QAAQoR,WACbk5B,EAAOC,cACHpL,IAASnxB,KACHkZ,EAAmBkjB,aAA6C,EAASA,EAAUG,gBAAkB,GACrG,QAEPD,CACX,CACA,aAAA3E,GACI33B,KAAKyxB,WAAazxB,KAAK2xB,cAAWvkC,CACtC,CAEA,SAAAwvC,GACI58B,KAAKuF,KAAKovB,MAAMxyB,SAAS6C,IAAW,IAAI6N,EAAI,OAAwC,QAAhCA,EAAK7N,EAAK0pB,wBAAqC,IAAP7b,OAAgB,EAASA,EAAGjiB,MAAM,IAC9HoP,KAAKuF,KAAKovB,MAAMxyB,QAAQm1B,IACxBt3B,KAAKuF,KAAK8vB,YAAY90B,OAC1B,EAER,CACA,SAASsrB,GAAa7mB,GAClBA,EAAK6mB,cACT,CACA,SAAS4L,GAAmBzyB,GACxB,IAAI6N,EACJ,MAAM8e,GAAuC,QAA1B9e,EAAK7N,EAAKysB,kBAA+B,IAAP5e,OAAgB,EAASA,EAAG8e,WAAa3sB,EAAK2sB,SACnG,GAAI3sB,EAAK2pB,UACL3pB,EAAKlC,QACL6uB,GACA3sB,EAAKywB,aAAa,aAAc,CAChC,MAAQrM,UAAWtmB,EAAQ61B,YAAakE,GAAmB73B,EAAKlC,QAC1D,cAAE0N,GAAkBxL,EAAKhT,QACzBynC,EAAW9H,EAAS7a,SAAW9R,EAAKlC,OAAOgU,OAG3B,SAAlBtG,EACAqX,IAAUrjB,IACN,MAAMs4B,EAAerD,EACf9H,EAASgH,YAAYn0B,GACrBmtB,EAASvI,UAAU5kB,GACnBhb,EAAS88B,GAAWwW,GAC1BA,EAAa9tC,IAAM8T,EAAO0B,GAAMxV,IAChC8tC,EAAa7tC,IAAM6tC,EAAa9tC,IAAMxF,CAAM,IAG3CmyC,GAA0BnrB,EAAemhB,EAASvI,UAAWtmB,IAClE+kB,IAAUrjB,IACN,MAAMs4B,EAAerD,EACf9H,EAASgH,YAAYn0B,GACrBmtB,EAASvI,UAAU5kB,GACnBhb,EAAS88B,GAAWxjB,EAAO0B,IACjCs4B,EAAa7tC,IAAM6tC,EAAa9tC,IAAMxF,EAIlCwb,EAAKmxB,iBAAmBnxB,EAAK0pB,mBAC7B1pB,EAAK4uB,mBAAoB,EACzB5uB,EAAKmxB,eAAe3xB,GAAMvV,IACtB+V,EAAKmxB,eAAe3xB,GAAMxV,IAAMxF,EACxC,IAGR,MAAMuzC,GAAc,WACpBpW,GAAaoW,EAAaj6B,EAAQ6uB,EAASvI,WAC3C,MAAM4T,GAAc,WAChBvD,EACA9S,GAAaqW,EAAah4B,EAAK8zB,eAAe+D,GAAgB,GAAOlL,EAASgH,aAG9EhS,GAAaqW,EAAal6B,EAAQ6uB,EAASvI,WAE/C,MAAMgD,GAAoB0E,GAAYiM,GACtC,IAAI/G,GAA2B,EAC/B,IAAKhxB,EAAKysB,WAAY,CAClB,MAAM4H,EAAiBr0B,EAAK20B,6BAK5B,GAAIN,IAAmBA,EAAe5H,WAAY,CAC9C,MAAQE,SAAUsL,EAAgBn6B,OAAQo6B,GAAiB7D,EAC3D,GAAI4D,GAAkBC,EAAc,CAChC,MAAMC,GAAmB,WACzBlW,GAAqBkW,EAAkBxL,EAASvI,UAAW6T,EAAe7T,WAC1E,MAAMoR,GAAiB,WACvBvT,GAAqBuT,EAAgB13B,EAAQo6B,EAAa9T,WACrD2H,GAAiBoM,EAAkB3C,KACpCxE,GAA2B,GAE3BqD,EAAernC,QAAQqe,aACvBrL,EAAKmxB,eAAiBqE,EACtBx1B,EAAK40B,qBAAuBuD,EAC5Bn4B,EAAKq0B,eAAiBA,EAE9B,CACJ,CACJ,CACAr0B,EAAKuwB,gBAAgB,YAAa,CAC9BzyB,SACA6uB,WACA7hC,MAAOktC,EACPD,cACA3Q,mBACA4J,4BAER,MACK,GAAIhxB,EAAK2pB,SAAU,CACpB,MAAM,eAAE1K,GAAmBjf,EAAKhT,QAChCiyB,GAAkBA,GACtB,CAMAjf,EAAKhT,QAAQ2J,gBAAavO,CAC9B,CACA,SAASwnC,GAAoB5vB,GAIzBguB,GAAoBC,aACfjuB,EAAKuH,SAQLvH,EAAK80B,iBACN90B,EAAK4uB,kBAAoB5uB,EAAKuH,OAAOqnB,mBAOzC5uB,EAAK6uB,0BAA4B7uB,EAAK6uB,wBAA0B7/B,QAAQgR,EAAK4uB,mBACzE5uB,EAAKuH,OAAOqnB,mBACZ5uB,EAAKuH,OAAOsnB,0BAChB7uB,EAAKoK,mBAAqBpK,EAAKoK,iBAAmBpK,EAAKuH,OAAO6C,kBAClE,CACA,SAAS2lB,GAAgB/vB,GACrBA,EAAK4uB,kBACD5uB,EAAK6uB,wBACD7uB,EAAKoK,kBACD,CAChB,CACA,SAASuoB,GAAc3yB,GACnBA,EAAK2yB,eACT,CACA,SAASL,GAAkBtyB,GACvBA,EAAKsyB,mBACT,CACA,SAASC,GAAmBvyB,GACxBA,EAAK8sB,eAAgB,CACzB,CACA,SAAS0F,GAAoBxyB,GACzB,MAAM,cAAE1H,GAAkB0H,EAAKhT,QAC3BsL,GAAiBA,EAAcV,WAAWwgC,uBAC1C9/B,EAAc+P,OAAO,uBAEzBrI,EAAKyuB,gBACT,CACA,SAASqC,GAAgB9wB,GACrBA,EAAK8wB,kBACL9wB,EAAKm0B,YAAcn0B,EAAKmxB,eAAiBnxB,EAAKvV,YAASrC,EACvD4X,EAAK4uB,mBAAoB,CAC7B,CACA,SAASiB,GAAmB7vB,GACxBA,EAAK6vB,oBACT,CACA,SAASC,GAAe9vB,GACpBA,EAAK8vB,gBACT,CACA,SAASmC,GAAcjyB,GACnBA,EAAKiyB,eACT,CACA,SAASW,GAAoBvJ,GACzBA,EAAM8D,oBACV,CACA,SAAS6I,GAAaD,EAAQjrC,EAAOlD,GACjCmuC,EAAO12B,WAAY,EAAAqiB,GAAA,GAAI52B,EAAMuU,UAAW,EAAGzX,GAC3CmuC,EAAO72B,OAAQ,EAAAwiB,GAAA,GAAI52B,EAAMoU,MAAO,EAAGtX,GACnCmuC,EAAO3rC,OAASU,EAAMV,OACtB2rC,EAAO52B,YAAcrU,EAAMqU,WAC/B,CACA,SAAS82B,GAAQF,EAAQh/B,EAAM2O,EAAI9d,GAC/BmuC,EAAO/rC,KAAM,EAAA03B,GAAA,GAAI3qB,EAAK/M,IAAK0b,EAAG1b,IAAKpC,GACnCmuC,EAAO9rC,KAAM,EAAAy3B,GAAA,GAAI3qB,EAAK9M,IAAKyb,EAAGzb,IAAKrC,EACvC,CAKA,SAASguC,GAAoB51B,GACzB,OAAQA,EAAK4sB,sBAAwDxkC,IAArC4X,EAAK4sB,gBAAgBwJ,WACzD,CACA,MAAM/E,GAA0B,CAC5B/oC,SAAU,IACVG,KAAM,CAAC,GAAK,EAAG,GAAK,IAElB4vC,GAAqBC,GAAgC,oBAAdC,WACzCA,UAAUC,UAAUC,cAAcvzC,SAASozC,GAMzCI,GAAaL,GAAkB,kBAAoBA,GAAkB,WACrE1xC,KAAK4H,MACLpI,GAAA,EACN,SAASutC,GAAUl0B,GAEfA,EAAKxV,IAAM0uC,GAAWl5B,EAAKxV,KAC3BwV,EAAKvV,IAAMyuC,GAAWl5B,EAAKvV,IAC/B,CAKA,SAAS0sC,GAA0BnrB,EAAemhB,EAAU7uB,GACxD,MAA0B,aAAlB0N,GACe,oBAAlBA,IACI+V,GAAOyK,GAAYW,GAAWX,GAAYluB,GAAS,GAChE,CGp9CA,MAAM66B,GAAyBvK,GAAqB,CAChDC,qBAAsB,CAAC1a,EAAKtL,IAAWmN,EAAY7B,EAAK,SAAUtL,GAClEkmB,cAAe,KAAM,CACjBjoC,EAAG+xB,SAASugB,gBAAgBC,YAAcxgB,SAASygB,KAAKD,WACxDn6B,EAAG2Z,SAASugB,gBAAgBG,WAAa1gB,SAASygB,KAAKC,YAE3DvK,kBAAmB,KAAM,ICNvB9rB,GAAqB,CACvB3P,aAAS3K,GAEP4wC,GAAqB5K,GAAqB,CAC5CG,cAAgBruB,IAAa,CACzB5Z,EAAG4Z,EAAS24B,WACZn6B,EAAGwB,EAAS64B,YAEhBzK,cAAe,KACX,IAAK5rB,GAAmB3P,QAAS,CAC7B,MAAMkmC,EAAe,IAAIN,GAAuB,CAAC,GACjDM,EAAa5vB,MAAMpQ,QACnBggC,EAAa3tB,WAAW,CAAEjL,cAAc,IACxCqC,GAAmB3P,QAAUkmC,CACjC,CACA,OAAOv2B,GAAmB3P,OAAO,EAErC07B,eAAgB,CAACvuB,EAAU7a,KACvB6a,EAASC,MAAMhK,eAAsB/N,IAAV/C,EAAsBA,EAAQ,MAAM,EAEnEmpC,kBAAoBtuB,GAAalR,QAAuD,UAA/CiK,OAAOoK,iBAAiBnD,GAAUg5B,YClBzE17B,GAAO,CACTI,IAAK,CACDoN,QnBKR,cAAyBA,GACrB,WAAAjQ,GACIge,SAASx0B,WACTyW,KAAKm+B,0BAA4BhzC,GAAA,CACrC,CACA,aAAAizC,CAAcC,GACVr+B,KAAKs+B,QAAU,IAAIja,GAAWga,EAAkBr+B,KAAKu+B,oBAAqB,CACtEj/B,mBAAoBU,KAAKgF,KAAKiN,wBAC9BsS,cAAeuD,GAAiB9nB,KAAKgF,OAE7C,CACA,iBAAAu5B,GACI,MAAM,kBAAEC,EAAiB,WAAEC,EAAU,MAAEC,EAAK,SAAEC,GAAa3+B,KAAKgF,KAAKpI,WACrE,MAAO,CACHipB,eAAgByG,GAAakS,GAC7BrZ,QAASmH,GAAamS,GACtBrZ,OAAQsZ,EACRlZ,MAAO,CAAC1K,EAAOqB,YACJnc,KAAKs+B,QACRK,GACA,KAAMnuC,QAAO,IAAMmuC,EAAS7jB,EAAOqB,IACvC,EAGZ,CACA,KAAA9N,GACIrO,KAAKm+B,0BAA4B/iB,GAAgBpb,KAAKgF,KAAKjN,QAAS,eAAgB+iB,GAAU9a,KAAKo+B,cAActjB,IACrH,CACA,MAAAtqB,GACIwP,KAAKs+B,SAAWt+B,KAAKs+B,QAAQvY,eAAe/lB,KAAKu+B,oBACrD,CACA,OAAAxvB,GACI/O,KAAKm+B,4BACLn+B,KAAKs+B,SAAWt+B,KAAKs+B,QAAQ/Y,KACjC,ImBrCA/iB,KAAM,CACFwN,QCNR,cAA0BA,GACtB,WAAAjQ,CAAYiF,GACR+Y,MAAM/Y,GACNhF,KAAK4+B,oBAAsBzzC,GAAA,EAC3B6U,KAAK8lB,gBAAkB36B,GAAA,EACvB6U,KAAK1L,SAAW,IAAI4zB,GAA0BljB,EAClD,CACA,KAAAqJ,GAGI,MAAM,aAAEwwB,GAAiB7+B,KAAKgF,KAAKpI,WAC/BiiC,IACA7+B,KAAK4+B,oBAAsBC,EAAa/a,UAAU9jB,KAAK1L,WAE3D0L,KAAK8lB,gBAAkB9lB,KAAK1L,SAASw3B,gBAAkB3gC,GAAA,CAC3D,CACA,OAAA4jB,GACI/O,KAAK4+B,sBACL5+B,KAAK8lB,iBACT,GDZI5V,eAAgB8tB,GAChBjuB,cAAa,iCERrB,MAAM,GAAyB,CAAC4E,EAAW3iB,IAChC0kB,EAAe/B,GAChB,IAAImqB,GAAA,EAAiB9sC,EAAS,CAAEglB,4BAA4B,IAC5D,IAAI+nB,GAAA,EAAkB/sC,EAAS,CAAEglB,4BAA4B,ICEjEpH,GAAoB,IACnBhS,MACAkgB,MACAtb,MCTQ,CACXM,OAAQ,CACJoN,eAAgB8tB,GAChBjuB,cAAa,MDefivB,GAAuB9oB,GAAkB,CAACvB,EAAW2E,IEhB3D,SAA+B3E,GAAW,mBAAE+D,GAAqB,GAAS9I,EAAmB4E,GAIzF,MAAO,IAHYkC,EAAe/B,GAC5BuF,EACAK,EAGF3K,oBACA6E,UAAWgE,EAAgBC,GAC3BlE,sBACAG,YAER,CFKsE,CAAsBA,EAAW2E,EAAQ1J,GAAmB,qDGlBlI,MAAMqvB,EAAeC,GAAQA,EAAIC,QAAQ,kBAAmB,SAAS1B,gFCHrE,MAAM2B,EAAyBr3B,GAAW5d,GAAuB,iBAARA,GAAoBA,EAAIiR,WAAW2M,GACtFs3B,EAAoBD,EAAsB,MAC1CE,EAAqBF,EAAsB,UAC3CG,EAAmB,8GCHzB,SAASC,EAAa1lC,GAClB,OAAOA,aAAmB2lC,YAAkC,QAApB3lC,EAAQwgB,OACpD,sGCEA,SAASolB,EAAkBv1C,EAAKE,GAC5B,IAAIs1C,GAAmB,OAAoBx1C,GAI3C,OAHIw1C,IAAqB,MACrBA,EAAmB,KAEhBA,EAAiBD,kBAClBC,EAAiBD,kBAAkBr1C,QACnC+C,CACV,0ECLA,MAAMwyC,EAAoB,aACnB,EAEHC,MAAK,IACLC,gBAAiB,IACjBC,aAAc,IACd9lC,KAAM,IACN+lC,OAAQ,IAERC,YAAa,IACbC,eAAgB,IAChBC,iBAAkB,IAClBC,kBAAmB,IACnBC,gBAAiB,IACjB52B,OAAM,IACN62B,aAAc,KAKZC,EAAuBp2C,GAAQy1C,EAAkBz1C,+FCxBvD,MCKMq2C,EAAsB,CAAC,KAAQ,EAAA33B,GAAI,KAAS,KAAS,EAAA43B,GAAI,EAAAC,GDLlD,CACTnlC,KAAOjM,GAAY,SAANA,EACb29B,MAAQ39B,GAAMA,ICOZqxC,EAA0BrxC,GAAMkxC,EAAoBI,MAAK,EAAArlC,EAAA,GAAcjM,6ECV7E,MAAM,EAAM,IACL,KACH6L,UAAWxP,KAAK4H,OCAdstC,EAAmB,CAErBC,YAAa,EAAAj4B,GACbk4B,eAAgB,EAAAl4B,GAChBm4B,iBAAkB,EAAAn4B,GAClBo4B,kBAAmB,EAAAp4B,GACnBq4B,gBAAiB,EAAAr4B,GACjBqmB,aAAc,EAAArmB,GACds4B,OAAQ,EAAAt4B,GACRumB,oBAAqB,EAAAvmB,GACrBwmB,qBAAsB,EAAAxmB,GACtB0mB,wBAAyB,EAAA1mB,GACzBymB,uBAAwB,EAAAzmB,GAExBc,MAAO,EAAAd,GACPu4B,SAAU,EAAAv4B,GACViB,OAAQ,EAAAjB,GACRw4B,UAAW,EAAAx4B,GACXoY,KAAM,EAAApY,GACNvF,IAAK,EAAAuF,GACLrF,MAAO,EAAAqF,GACPpF,OAAQ,EAAAoF,GACRtF,KAAM,EAAAsF,GAENy4B,QAAS,EAAAz4B,GACTkB,WAAY,EAAAlB,GACZgB,aAAc,EAAAhB,GACdmB,cAAe,EAAAnB,GACfe,YAAa,EAAAf,GACbuV,OAAQ,EAAAvV,GACR04B,UAAW,EAAA14B,GACX24B,YAAa,EAAA34B,GACb44B,aAAc,EAAA54B,GACd64B,WAAY,EAAA74B,GAEZ1B,OAAQ,KACRC,QAAS,KACTC,QAAS,KACT40B,QAAS,KACT/3B,MAAK,KACL4C,OAAQ,KACRC,OAAQ,KACR46B,OAAQ,KACRC,KAAM,KACNC,MAAO,KACPC,MAAO,KACPh8B,SAAU,EAAA+C,GACVoB,WAAY,EAAApB,GACZqB,WAAY,EAAArB,GACZk5B,WAAY,EAAAl5B,GACZvd,EAAG,EAAAud,GACHnF,EAAG,EAAAmF,GACH3B,EAAG,EAAA2B,GACHm5B,YAAa,EAAAn5B,GACbo5B,qBAAsB,EAAAp5B,GACtBsyB,QAAS,KACTvU,QAAS,KACTC,QAAS,KACTqb,QAAS,EAAAr5B,GAETs5B,OAAQ,EAERC,YAAa,KACbC,cAAe,KACfC,WAAY,kDCjEhB,MAAMC,EAAiBjzC,GAAOkC,GAASA,EAAK+J,KAAKjM,wJCUjD,MAAMyvC,UAA0B,IAC5B,WAAAh/B,GACIge,SAASx0B,WACTyW,KAAKxO,KAAO,MAChB,CACA,qBAAAuhB,CAAsB7N,EAAU/a,GAC5B,GAAI,IAAeoP,IAAIpP,GAAM,CACzB,MAAMq4C,GAAc,OAAoBr4C,GACxC,OAAOq4C,GAAcA,EAAY/3C,SAAe,CACpD,CACK,CACD,MAAMg4C,GAdQ3oC,EAcyBoL,EAbxCjH,OAAOoK,iBAAiBvO,IAcjBzP,IAAS,QAAkBF,GAC3Bs4C,EAAcn6B,iBAAiBne,GAC/Bs4C,EAAct4C,KAAS,EAC7B,MAAwB,iBAAVE,EAAqBA,EAAMme,OAASne,CACtD,CAnBR,IAA0ByP,CAoBtB,CACA,0BAAAgX,CAA2B5L,GAAU,mBAAE5F,IACnC,OAAO,IAAAojC,GAAmBx9B,EAAU5F,EACxC,CACA,KAAAuR,CAAMrD,EAAa/H,EAAczT,EAASiR,IACtC,OAAgBuK,EAAa/H,EAAczT,EAASiR,EAAMiO,kBAC9D,CACA,2BAAAjD,CAA4BhL,EAAOkO,GAC/B,OAAO,OAA4BlO,EAAOkO,EAC9C,CACA,sBAAAW,GACQ9R,KAAK2iC,oBACL3iC,KAAK2iC,2BACE3iC,KAAK2iC,mBAEhB,MAAM,SAAEh2B,GAAa3M,KAAKiD,OACtB,OAAc0J,KACd3M,KAAK2iC,kBAAoBh2B,EAASuC,GAAG,UAAWnf,IACxCiQ,KAAKjI,UACLiI,KAAKjI,QAAQ6qC,YAAc,GAAG7yC,IAAQ,IAGtD,CACA,cAAAwd,CAAerI,EAAUsI,EAAa4uB,EAAW3uB,IAC7C,OAAWvI,EAAUsI,EAAa4uB,EAAW3uB,EACjD,gECrDJ,MAAMo1B,EAAiB,CACnBv3C,EAAG,aACHoY,EAAG,aACHwD,EAAG,aACH+6B,qBAAsB,eAEpBa,EAAgB,IAAmBt5C,sBCLzC,MAAMu5C,EAAiB,CAAC14C,EAAOmH,IACpBA,GAAyB,iBAAVnH,EAChBmH,EAAK2J,UAAU9Q,GACfA,iBCAV,SAAS24C,EAAgBp1C,EAAO6X,EAAczT,EAASkf,GACnD,MAAM,MAAE/L,EAAK,KAAEoO,EAAI,UAAEpY,EAAS,gBAAEyb,GAAoBhpB,EAEpD,IAAIoZ,GAAe,EACfi8B,GAAqB,EAErBC,GAAkB,EAOtB,IAAK,MAAM/4C,KAAOsb,EAAc,CAC5B,MAAMpb,EAAQob,EAAatb,GAI3B,IAAI,QAAkBA,GAAM,CACxBopB,EAAKppB,GAAOE,EACZ,QACJ,CAEA,MAAM84C,EAAYC,EAAA,EAAiBj5C,GAC7Bk5C,EAAcN,EAAe14C,EAAO84C,GAC1C,GAAI,IAAe5pC,IAAIpP,GAAM,CAKzB,GAHA6c,GAAe,EACf7L,EAAUhR,GAAOk5C,GAEZH,EACD,SAEA74C,KAAW84C,EAAU14C,SAAW,KAChCy4C,GAAkB,EAC1B,MACS/4C,EAAIiR,WAAW,WAEpB6nC,GAAqB,EACrBrsB,EAAgBzsB,GAAOk5C,GAGvBl+B,EAAMhb,GAAOk5C,CAErB,CAiBA,GAhBK59B,EAAatK,YACV6L,GAAgBkK,EAChB/L,EAAMhK,UFtClB,SAAwBA,GAAW,2BAAE6b,GAA6B,EAAI,mBAAEssB,GAAqB,GAASC,EAAoBryB,GAEtH,IAAIsyB,EAAkB,GAKtB,IAAK,IAAIl6C,EAAI,EAAGA,EAAIw5C,EAAex5C,IAAK,CACpC,MAAMa,EAAM,IAAmBb,QACR8D,IAAnB+N,EAAUhR,KAEVq5C,GAAmB,GADGX,EAAe14C,IAAQA,KACNgR,EAAUhR,OAEzD,CAaA,OAZI6sB,IAA+B7b,EAAU+L,IACzCs8B,GAAmB,iBAEvBA,EAAkBA,EAAgBh7B,OAG9B0I,EACAsyB,EAAkBtyB,EAAkB/V,EAAWooC,EAAqB,GAAKC,GAEpEF,GAAsBC,IAC3BC,EAAkB,QAEfA,CACX,CEW8BC,CAAe71C,EAAMuN,UAAWnJ,EAASkxC,EAAiBhyB,GAEvE/L,EAAMhK,YAKXgK,EAAMhK,UAAY,SAOtB8nC,EAAoB,CACpB,MAAM,QAAErc,EAAU,MAAK,QAAEC,EAAU,MAAK,QAAEqb,EAAU,GAAOtrB,EAC3DzR,EAAMyR,gBAAkB,GAAGgQ,KAAWC,KAAWqb,GACrD,CACJ,gCCvEA,SAASwB,EAAW5pC,GAAS,MAAEqL,EAAK,KAAEoO,GAAQ6oB,EAAW3uB,GACrDzjB,OAAO2c,OAAO7M,EAAQqL,MAAOA,EAAOsI,GAAcA,EAAW0uB,oBAAoBC,IAEjF,IAAK,MAAMjyC,KAAOopB,EACdzZ,EAAQqL,MAAMw+B,YAAYx5C,EAAKopB,EAAKppB,GAE5C,2FCHA,SAAS8jB,EAA4BhL,EAAOkO,GACxC,MAAM,MAAEhM,GAAUlC,EACZ2gC,EAAY,CAAC,EACnB,IAAK,MAAMz5C,KAAOgb,IACV,OAAcA,EAAMhb,KACnBgnB,EAAUhM,QAAS,OAAcgM,EAAUhM,MAAMhb,MAClD,OAAoBA,EAAK8Y,MACzB2gC,EAAUz5C,GAAOgb,EAAMhb,IAG/B,OAAOy5C,CACX,yDCXA,MAAMC,EAAqB,CACvB,uBACA,IACA,IACA,IACA,aACA,aACA,aACA,QACA,SACA,SACA,SACA,UACA,UACA,UACA,OACA,QACA,SAKEC,EAAiB,IAAI1qC,IAAIyqC,kDCzB/B,MAAME,EAAqB,IAAInnB,wKCW/B,MAAMkiB,UAAyB,IAC3B,WAAA/+B,GACIge,SAASx0B,WACTyW,KAAKxO,KAAO,MACZwO,KAAKgkC,UAAW,CACpB,CACA,sBAAAlxB,CAAuB7P,EAAO9Y,GAC1B,OAAO8Y,EAAM9Y,EACjB,CACA,qBAAA4oB,CAAsB7N,EAAU/a,GAC5B,GAAI,IAAeoP,IAAIpP,GAAM,CACzB,MAAMq4C,GAAc,OAAoBr4C,GACxC,OAAOq4C,GAAcA,EAAY/3C,SAAe,CACpD,CAEA,OADAN,EAAO,IAAoBoP,IAAIpP,GAA0BA,GAAnB,OAAYA,GAC3C+a,EAAS++B,aAAa95C,EACjC,CACA,0BAAA2mB,GACI,OAAO,SACX,CACA,2BAAA7C,CAA4BhL,EAAOkO,GAC/B,OAAO,OAA4BlO,EAAOkO,EAC9C,CACA,KAAAN,CAAMrD,EAAa/H,EAAczT,EAASiR,IACtC,OAAcuK,EAAa/H,EAAczT,EAASgO,KAAKgkC,SAAU/gC,EAAMiO,kBAC3E,CACA,cAAA3D,CAAerI,EAAUsI,EAAa4uB,EAAW3uB,IAC7C,OAAUvI,EAAUsI,EAAa4uB,EAAW3uB,EAChD,CACA,KAAAY,CAAMnJ,GACFlF,KAAKgkC,UAAW,OAAS9+B,EAASoV,SAClCyD,MAAM1P,MAAMnJ,EAChB,2ECzCJ,SAASymB,EAAWv8B,EAAQrB,EAAQkzB,GAChC,MAAyB,iBAAX7xB,EACRA,EACA,EAAAyZ,GAAG1N,UAAUpN,EAASkzB,EAAO7xB,EACvC,CCJA,MAAM80C,EAAW,CACbn2C,OAAQ,oBACRo2C,MAAO,oBAELC,EAAY,CACdr2C,OAAQ,mBACRo2C,MAAO,mBCDX,SAASE,EAAcz2C,GAAO,MAAE02C,EAAK,MAAEC,EAAK,UAAEC,EAAS,QAAE5d,EAAO,QAAEC,EAAO,WAAE4d,EAAU,YAAEC,EAAc,EAAC,WAAEC,EAAa,KAElH50C,GAAUiC,EAASgyC,EAAU9yB,GAM5B,IALA,OAAgBtjB,EAAOmC,EAAQiC,EAASkf,GAKpC8yB,EAIA,YAHIp2C,EAAMuX,MAAMy/B,UACZh3C,EAAMwqB,MAAMwsB,QAAUh3C,EAAMuX,MAAMy/B,UAI1Ch3C,EAAMwqB,MAAQxqB,EAAMuX,MACpBvX,EAAMuX,MAAQ,CAAC,EACf,MAAM,MAAEiT,EAAK,MAAEjT,EAAK,WAAEiV,GAAexsB,EAKjCwqB,EAAMjd,YACFif,IACAjV,EAAMhK,UAAYid,EAAMjd,kBACrBid,EAAMjd,WAGbif,SACahtB,IAAZw5B,QAAqCx5B,IAAZy5B,GAAyB1hB,EAAMhK,aACzDgK,EAAMyR,gBFzBd,SAAgCwD,EAAYwM,EAASC,GAGjD,MAAO,GAFW8E,EAAW/E,EAASxM,EAAW9uB,EAAG8uB,EAAWzQ,UAC7CgiB,EAAW9E,EAASzM,EAAW1W,EAAG0W,EAAWtQ,SAEnE,CEqBgC+6B,CAAuBzqB,OAAwBhtB,IAAZw5B,EAAwBA,EAAU,QAAiBx5B,IAAZy5B,EAAwBA,EAAU,UAG1Hz5B,IAAVk3C,IACAlsB,EAAM9sB,EAAIg5C,QACAl3C,IAAVm3C,IACAnsB,EAAM1U,EAAI6gC,QACIn3C,IAAdo3C,IACApsB,EAAMlU,MAAQsgC,QAECp3C,IAAfq3C,GD7BR,SAAsBrsB,EAAO5uB,EAAQs7C,EAAU,EAAG/2C,EAAS,EAAGg3C,GAAc,GAExE3sB,EAAMqsB,WAAa,EAGnB,MAAM5tC,EAAOkuC,EAAcb,EAAWE,EAEtChsB,EAAMvhB,EAAK9I,QAAU,EAAA8a,GAAG1N,WAAWpN,GAEnC,MAAM02C,EAAa,EAAA57B,GAAG1N,UAAU3R,GAC1Bk7C,EAAc,EAAA77B,GAAG1N,UAAU2pC,GACjC1sB,EAAMvhB,EAAKstC,OAAS,GAAGM,KAAcC,GACzC,CCkBQM,CAAa5sB,EAAOqsB,EAAYC,EAAaC,GAAY,EAEjE,iDC9CA,MAAMM,EAAsB,IAAI7rC,IAAI,CAChC,gBACA,kBACA,eACA,mBACA,aACA,WACA,oBACA,eACA,cACA,aACA,UACA,UACA,eACA,mBACA,mBACA,eACA,cACA,UACA,oBACA,aACA,cACA,aACA,gEC1BJ,MAAM4qC,EAAYkB,GAAuB,iBAARA,GAA0C,QAAtBA,EAAIzH,kGCIzD,SAAS0H,EAAUrrC,EAAS0T,EAAa43B,EAAY33B,IACjD,OAAW3T,EAAS0T,OAAapgB,EAAWqgB,GAC5C,IAAK,MAAMtjB,KAAOqjB,EAAY4K,MAC1Bte,EAAQurC,aAAc,IAAoB9rC,IAAIpP,GAA0BA,GAAnB,OAAYA,GAAYqjB,EAAY4K,MAAMjuB,GAEvG,qFCLA,SAAS8jB,EAA4BhL,EAAOkO,GACxC,MAAMyyB,GAAY,OAA8B3gC,EAAOkO,GACvD,IAAK,MAAMhnB,KAAO8Y,EACd,IAAI,OAAcA,EAAM9Y,MAAS,OAAcgnB,EAAUhnB,IAAO,CAI5Dy5C,GAHuD,IAArC,IAAmBvjC,QAAQlW,GACvC,OAASA,EAAIm7C,OAAO,GAAGja,cAAgBlhC,EAAIo7C,UAAU,GACrDp7C,GACiB8Y,EAAM9Y,EACjC,CAEJ,OAAOy5C,CACX,8FCXA,SAAS/2B,EAAsB5J,GAC3B,OAAQ,OAAoBA,EAAMjJ,UAC9B,IAAalD,MAAMoM,IAAS,OAAeD,EAAMC,KACzD,CACA,SAAS0J,EAAc3J,GACnB,OAAOjP,QAAQ6Y,EAAsB5J,IAAUA,EAAM+O,SACzD,gCCPA,SAASwzB,EAAel2C,GACpB,MAAoB,iBAANA,GAAkB1F,MAAMC,QAAQyF,EAClD,gFCaA,SAASm2C,EAAenoC,EAAevQ,EAAYqpB,GAC/C,MAAMnT,EAAQ3F,EAAcV,WAC5B,OAAO,OAAwBqG,EAAOlW,OAAuBK,IAAXgpB,EAAuBA,EAASnT,EAAMmT,OAf5F,SAAoB9Y,GAChB,MAAMvF,EAAU,CAAC,EAEjB,OADAuF,EAAclP,OAAO+T,SAAQ,CAAC9X,EAAOF,IAAS4N,EAAQ5N,GAAOE,EAAM2R,QAC5DjE,CACX,CAWoG2tC,CAAWpoC,GAP/G,SAAqBA,GACjB,MAAM5O,EAAW,CAAC,EAElB,OADA4O,EAAclP,OAAO+T,SAAQ,CAAC9X,EAAOF,IAASuE,EAASvE,GAAOE,EAAMkS,gBAC7D7N,CACX,CAG+H6N,CAAYe,GAC3I,gCCrBA,SAASqoC,EAAwB1iC,EAAOlW,EAAYqpB,EAAQwvB,EAAgB,CAAC,EAAG5tC,EAAkB,CAAC,GAsB/F,MAlB0B,mBAAfjL,IACPA,EAAaA,OAAsBK,IAAXgpB,EAAuBA,EAASnT,EAAMmT,OAAQwvB,EAAe5tC,IAM/D,iBAAfjL,IACPA,EAAakW,EAAM+O,UAAY/O,EAAM+O,SAASjlB,IAOxB,mBAAfA,IACPA,EAAaA,OAAsBK,IAAXgpB,EAAuBA,EAASnT,EAAMmT,OAAQwvB,EAAe5tC,IAElFjL,CACX,0LCfA,MAAM84C,EAAa,IAAI,IAAqBhG,EAAA,EAAOvkC,EAAA,GAI7CwqC,EAAiBx2C,GAAMu2C,EAAWjF,MAAK,EAAArlC,EAAA,GAAcjM,mBCC3D,SAASy2C,EAAezoC,EAAenT,EAAKE,GACpCiT,EAAckN,SAASrgB,GACvBmT,EAAcK,SAASxT,GAAKsQ,IAAIpQ,GAGhCiT,EAAcmU,SAAStnB,GAAK,QAAYE,GAEhD,CACA,SAAS27C,EAAU1oC,EAAevQ,GAC9B,MAAMqb,GAAW,OAAe9K,EAAevQ,GAC/C,IAAI,cAAEyQ,EAAgB,CAAC,EAAC,WAAE7B,EAAa,CAAC,KAAMlM,GAAW2Y,EAAW9K,EAAcG,qBAAqB2K,GAAU,GAAS,CAAC,EAC3H3Y,EAAS,IAAKA,KAAW+N,GACzB,IAAK,MAAMrT,KAAOsF,EAAQ,CAEtBs2C,EAAezoC,EAAenT,GADhB,OAA6BsF,EAAOtF,IAEtD,CACJ,CAwBA,SAAS87C,EAAwB3oC,EAAe7N,EAAQL,GACpD,IAAIyjB,EAAIwpB,EACR,MAAM6J,EAAel8C,OAAO6M,KAAKpH,GAAQga,QAAQtf,IAASmT,EAAckN,SAASrgB,KAC3Eg8C,EAAeD,EAAa18C,OAClC,GAAK28C,EAEL,IAAK,IAAI78C,EAAI,EAAGA,EAAI68C,EAAc78C,IAAK,CACnC,MAAMa,EAAM+7C,EAAa58C,GACnB88C,EAAc32C,EAAOtF,GAC3B,IAAIE,EAAQ,KAKRT,MAAMC,QAAQu8C,KACd/7C,EAAQ+7C,EAAY,IAOV,OAAV/7C,IACAA,EAAoG,QAA3FgyC,EAA4B,QAAtBxpB,EAAKzjB,EAAOjF,UAAyB,IAAP0oB,EAAgBA,EAAKvV,EAAcsV,UAAUzoB,UAAyB,IAAPkyC,EAAgBA,EAAK5sC,EAAOtF,IAMxIE,UAEiB,iBAAVA,KACN,IAAAf,GAAkBe,KAAU,OAAkBA,IAE/CA,EAAQoe,WAAWpe,IAEby7C,EAAcz7C,IAAUiR,EAAA,EAAQC,KAAK6qC,KAC3C/7C,GAAQ,OAAkBF,EAAKi8C,IAEnC9oC,EAAcmU,SAAStnB,GAAK,QAAYE,EAAO,CAAEgQ,MAAOiD,UACpClQ,IAAhBgC,EAAOjF,KACPiF,EAAOjF,GAAOE,GAEJ,OAAVA,GACAiT,EAAc0V,cAAc7oB,EAAKE,GACzC,CACJ,CACA,SAASg8C,EAAwBl8C,EAAKwR,GAClC,IAAKA,EACD,OAEJ,OADwBA,EAAWxR,IAAQwR,EAAoB,SAAKA,GAC7CI,IAC3B,CACA,SAASuqC,EAAU72C,EAAQkM,EAAY2B,GACnC,MAAMlO,EAAS,CAAC,EAChB,IAAK,MAAMjF,KAAOsF,EAAQ,CACtB,MAAM82C,EAAmBF,EAAwBl8C,EAAKwR,GACtD,QAAyBvO,IAArBm5C,EACAn3C,EAAOjF,GAAOo8C,MAEb,CACD,MAAMl8C,EAAQiT,EAAcK,SAASxT,GACjCE,IACA+E,EAAOjF,GAAOE,EAAM2R,MAE5B,CACJ,CACA,OAAO5M,CACX,yDCzHA,MAAMo3C,EAAuB,CACzB,UACA,cACA,aACA,aACA,WACA,YACA,QAEEC,EAAe,CAAC,aAAcD,iCCTpC,SAASE,EAAcC,EAAKC,IACG,IAAvBD,EAAItmC,QAAQumC,IACZD,EAAI/sC,KAAKgtC,EACjB,CACA,SAASC,EAAWF,EAAKC,GACrB,MAAMxmC,EAAQumC,EAAItmC,QAAQumC,GACtBxmC,GAAS,GACTumC,EAAIr4C,OAAO8R,EAAO,EAC1B,0ECRA,MAAMzN,EAAQ,CAAC3D,EAAKC,EAAKK,IAAM3D,KAAKqD,IAAIrD,KAAKsD,IAAIK,EAAGN,GAAMC,uECE1D,IAAI63C,EAAU,IACVC,EAAY,iGCFhB,SAASC,EAASp6C,EAAGq6C,EAAGt8C,GAKpB,OAJIA,EAAI,IACJA,GAAK,GACLA,EAAI,IACJA,GAAK,GACLA,EAAI,EAAI,EACDiC,EAAc,GAATq6C,EAAIr6C,GAASjC,EACzBA,EAAI,GACGs8C,EACPt8C,EAAI,EAAI,EACDiC,GAAKq6C,EAAIr6C,IAAM,EAAI,EAAIjC,GAAK,EAChCiC,CACX,qCCHA,MAAMs6C,EAAiB,CAACnrC,EAAM2O,EAAIpb,KAC9B,MAAM63C,EAAWprC,EAAOA,EACxB,OAAOpQ,KAAK8K,KAAK9K,KAAKsD,IAAI,EAAGK,GAAKob,EAAKA,EAAKy8B,GAAYA,GAAU,EAEhEC,EAAa,CAACC,EAAA,EAAKC,EAAA,EAAMC,EAAA,GAE/B,SAASC,EAAO3H,GACZ,MAAMruC,GAFYlC,EAEQuwC,EAFFuH,EAAWxG,MAAMpvC,GAASA,EAAK+J,KAAKjM,MAA3C,IAACA,GAGlB,OAAU0E,QAAQxC,GAAO,IAAIquC,yEAC7B,IAAI4H,EAAQj2C,EAAKy7B,MAAM4S,GAKvB,OAJIruC,IAAS+1C,EAAA,IAETE,EDRR,UAAoB,IAAEC,EAAG,WAAEC,EAAU,UAAEC,EAAS,MAAEC,IAC9CH,GAAO,IAEPE,GAAa,IACb,IAAIE,EAAM,EACNC,EAAQ,EACRC,EAAO,EACX,GALAL,GAAc,IAQT,CACD,MAAMV,EAAIW,EAAY,GAChBA,GAAa,EAAID,GACjBC,EAAYD,EAAaC,EAAYD,EACrC/6C,EAAI,EAAIg7C,EAAYX,EAC1Ba,EAAMd,EAASp6C,EAAGq6C,EAAGS,EAAM,EAAI,GAC/BK,EAAQf,EAASp6C,EAAGq6C,EAAGS,GACvBM,EAAOhB,EAASp6C,EAAGq6C,EAAGS,EAAM,EAAI,EACpC,MAVII,EAAMC,EAAQC,EAAOJ,EAWzB,MAAO,CACHE,IAAKn8C,KAAK4H,MAAY,IAANu0C,GAChBC,MAAOp8C,KAAK4H,MAAc,IAARw0C,GAClBC,KAAMr8C,KAAK4H,MAAa,IAAPy0C,GACjBH,QAER,CCjBgBI,CAAWR,IAEhBA,CACX,CACA,MAAMS,EAAW,CAACnsC,EAAM2O,KACpB,MAAMy9B,EAAWX,EAAOzrC,GAClBqsC,EAASZ,EAAO98B,GAChB29B,EAAU,IAAKF,GACrB,OAAQ74C,IACJ+4C,EAAQP,IAAMZ,EAAeiB,EAASL,IAAKM,EAAON,IAAKx4C,GACvD+4C,EAAQN,MAAQb,EAAeiB,EAASJ,MAAOK,EAAOL,MAAOz4C,GAC7D+4C,EAAQL,KAAOd,EAAeiB,EAASH,KAAMI,EAAOJ,KAAM14C,GAC1D+4C,EAAQR,OAAQ,EAAAnhB,EAAA,GAAIyhB,EAASN,MAAOO,EAAOP,MAAOv4C,GAC3Cg4C,EAAA,EAAKnsC,UAAUktC,GACzB,2BC7BL,MAAMC,EAAe,CAACl5C,EAAQK,IAAY7C,GAAM,GAAGA,EAAI,EAAI6C,EAASL,IACpE,SAASm5C,EAASn5C,EAAQK,GACtB,MAAsB,iBAAXL,EACCE,IAAM,EAAAo3B,EAAA,GAAIt3B,EAAQK,EAAQH,GAE7BuwC,EAAA,EAAMtkC,KAAKnM,GACT84C,EAAS94C,EAAQK,GAGjBL,EAAOgM,WAAW,QACnBktC,EAAal5C,EAAQK,GACrB+4C,EAAWp5C,EAAQK,EAEjC,CACA,MAAMg5C,EAAW,CAAC1sC,EAAM2O,KACpB,MAAMqwB,EAAS,IAAIh/B,GACb2sC,EAAY3N,EAAOvxC,OACnBm/C,EAAa5sC,EAAKpO,KAAI,CAACi7C,EAAUt/C,IAAMi/C,EAASK,EAAUl+B,EAAGphB,MACnE,OAAQgG,IACJ,IAAK,IAAIhG,EAAI,EAAGA,EAAIo/C,EAAWp/C,IAC3ByxC,EAAOzxC,GAAKq/C,EAAWr/C,GAAGgG,GAE9B,OAAOyrC,CAAM,CAChB,EAEC8N,EAAY,CAACz5C,EAAQK,KACvB,MAAMsrC,EAAS,IAAK3rC,KAAWK,GACzBk5C,EAAa,CAAC,EACpB,IAAK,MAAMx+C,KAAO4wC,OACM3tC,IAAhBgC,EAAOjF,SAAsCiD,IAAhBqC,EAAOtF,KACpCw+C,EAAWx+C,GAAOo+C,EAASn5C,EAAOjF,GAAMsF,EAAOtF,KAGvD,OAAQmF,IACJ,IAAK,MAAMnF,KAAOw+C,EACd5N,EAAO5wC,GAAOw+C,EAAWx+C,GAAKmF,GAElC,OAAOyrC,CAAM,CAChB,EAECyN,EAAa,CAACp5C,EAAQK,KACxB,MAAMy9B,EAAW5xB,EAAA,EAAQ6xB,kBAAkB19B,GACrCq5C,GAAc,OAAoB15C,GAClC25C,GAAc,OAAoBt5C,GAIxC,OAHuBq5C,EAAYE,UAAYD,EAAYC,SACvDF,EAAYG,YAAcF,EAAYE,WACtCH,EAAYI,YAAcH,EAAYG,YAE/B,EAAAnpB,EAAA,GAAK0oB,EAASK,EAAY16C,OAAQ26C,EAAY36C,QAAS8+B,KAG9D,QAAQ,EAAM,mBAAmB99B,WAAgBK,6KAC1C64C,EAAal5C,EAAQK,GAChC,0BClDJ,MAAM05C,EAAY,CAACptC,EAAM2O,IAAQ9d,IAAM,EAAA85B,EAAA,GAAI3qB,EAAM2O,EAAI9d,GAgBrD,SAASw8C,EAAarO,EAAQttC,EAAM47C,GAChC,MAAMC,EAAS,GACTC,EAAeF,IAhBJ,iBADO/5C,EAiB+ByrC,EAAO,IAfnDoO,EAEW,iBAAN75C,EACLuwC,EAAA,EAAMtkC,KAAKjM,GAAK44C,EAAWM,EAE7B5+C,MAAMC,QAAQyF,GACZm5C,EAEW,iBAANn5C,EACLu5C,EAEJM,GAbX,IAA4B75C,EAkBxB,MAAMk6C,EAAYzO,EAAOvxC,OAAS,EAClC,IAAK,IAAIF,EAAI,EAAGA,EAAIkgD,EAAWlgD,IAAK,CAChC,IAAImgD,EAAQF,EAAaxO,EAAOzxC,GAAIyxC,EAAOzxC,EAAI,IAC/C,GAAImE,EAAM,CACN,MAAMi8C,EAAiB9/C,MAAMC,QAAQ4D,GAAQA,EAAKnE,IAAM6B,EAAA,EAAOsC,EAC/Dg8C,GAAQ,EAAA1pB,EAAA,GAAK2pB,EAAgBD,EACjC,CACAH,EAAO1vC,KAAK6vC,EAChB,CACA,OAAOH,CACX,CAoBA,SAASn7C,EAAYw7C,EAAO5O,GAAUpoC,MAAOi3C,GAAU,EAAI,KAAEn8C,EAAI,MAAEg8C,GAAU,CAAC,GAC1E,MAAMI,EAAcF,EAAMngD,OAM1B,IALA,OAAUqgD,IAAgB9O,EAAOvxC,OAAQ,wDAKrB,IAAhBqgD,EACA,MAAO,IAAM9O,EAAO,GAEpB4O,EAAM,GAAKA,EAAME,EAAc,KAC/BF,EAAQ,IAAIA,GAAOx9C,UACnB4uC,EAAS,IAAIA,GAAQ5uC,WAEzB,MAAMm9C,EAASF,EAAarO,EAAQttC,EAAMg8C,GACpCD,EAAYF,EAAO9/C,OACnBsgD,EAAgBx6C,IAClB,IAAIhG,EAAI,EACR,GAAIkgD,EAAY,EACZ,KAAOlgD,EAAIqgD,EAAMngD,OAAS,KAClB8F,EAAIq6C,EAAMrgD,EAAI,IADOA,KAKjC,MAAMygD,GAAkB,EAAAn2C,EAAA,GAAS+1C,EAAMrgD,GAAIqgD,EAAMrgD,EAAI,GAAIgG,GACzD,OAAOg6C,EAAOhgD,GAAGygD,EAAgB,EAErC,OAAOH,EACAt6C,GAAMw6C,GAAa,EAAAn3C,EAAA,GAAMg3C,EAAM,GAAIA,EAAME,EAAc,GAAIv6C,IAC5Dw6C,CACV,iDCzFA,MAAME,EAAgC,oBAAb3sB,wDCGzB,MAAM4sB,EAAqB36C,GAAM,iBAAiBiM,KAAKjM,iCCHvD,SAAS46C,EAAYvxB,GACjB,OAAQA,GACW,iBAARA,GACP3uB,OAAOC,UAAUd,eAAeiB,KAAKuuB,EAAK,UAClD,iECDA,MAAMwxB,EAAqB76C,GAAM,aAAaiM,KAAKjM,iCCHnD,SAAS2J,EAAKyI,GACV,IAAIrL,EACJ,MAAO,UACYjJ,IAAXiJ,IACAA,EAASqL,KACNrL,EAEf,iECcA,MAAMqwB,EAAM,CAAC3qB,EAAM2O,EAAI9W,KAAcA,EAAWmI,EAAOnI,EAAW8W,EAAK3O,+CCrBvE,MAAM5Q,EAAQi/C,GAAQA,gECEtB,SAASC,EAAc1D,GACnB,MAAM54C,EAAS,CAAC,GAEhB,OADA,IAAAmI,GAAWnI,EAAQ44C,EAAIn9C,OAAS,GACzBuE,CACX,2ECHA,SAASu8C,EAAWv8C,EAAQw8C,GACxB,MAAMv7C,EAAMjB,EAAOA,EAAOvE,OAAS,GACnC,IAAK,IAAIF,EAAI,EAAGA,GAAKihD,EAAWjhD,IAAK,CACjC,MAAMkhD,GAAiB,OAAS,EAAGD,EAAWjhD,GAC9CyE,EAAO6L,MAAK,OAAI5K,EAAK,EAAGw7C,GAC5B,CACJ,gDCFA,MAAMC,EAAmB,CAAC70C,EAAGC,IAAOvG,GAAMuG,EAAED,EAAEtG,IACxCywB,EAAO,IAAI2qB,IAAiBA,EAAazpC,OAAOwpC,kDCItD,MAAM72C,EAAW,CAACmI,EAAM2O,EAAIrgB,KACxB,MAAMsgD,EAAmBjgC,EAAK3O,EAC9B,OAA4B,IAArB4uC,EAAyB,GAAKtgD,EAAQ0R,GAAQ4uC,CAAgB,wECZzE,MAAMC,EAAiBt7C,GACZ0E,QAAQ1E,GAAkB,iBAANA,GAAkBA,EAAEo3B,KAAOp3B,EAAE8pB,SAEtDyxB,EAAgCv7C,IAE3B,OAAkBA,GAAKA,EAAEA,EAAE9F,OAAS,IAAM,EAAI8F,gECLzD,MAAMw7C,EACF,WAAA/qC,GACIC,KAAK+qC,cAAgB,EACzB,CACA,GAAAzsC,CAAImc,GAEA,OADA,QAAcza,KAAK+qC,cAAetwB,GAC3B,KAAM,QAAWza,KAAK+qC,cAAetwB,EAChD,CACA,MAAApN,CAAOzX,EAAGC,EAAGE,GACT,MAAMi1C,EAAmBhrC,KAAK+qC,cAAcvhD,OAC5C,GAAKwhD,EAEL,GAAyB,IAArBA,EAIAhrC,KAAK+qC,cAAc,GAAGn1C,EAAGC,EAAGE,QAG5B,IAAK,IAAIzM,EAAI,EAAGA,EAAI0hD,EAAkB1hD,IAAK,CAKvC,MAAMmxB,EAAUza,KAAK+qC,cAAczhD,GACnCmxB,GAAWA,EAAQ7kB,EAAGC,EAAGE,EAC7B,CAER,CACA,OAAAk1C,GACI,OAAOjrC,KAAK+qC,cAAcvhD,MAC9B,CACA,KAAA+W,GACIP,KAAK+qC,cAAcvhD,OAAS,CAChC,0DC9BJ,MAAM0hD,EAAyBC,GAAsB,IAAVA,EACrCC,EAAyBC,GAAiBA,EAAe,kECE/D,SAASC,EAAYC,GACjB,MAAM5yB,GAAM,IAAAxD,QAAO,MAInB,OAHoB,OAAhBwD,EAAI5gB,UACJ4gB,EAAI5gB,QAAUwzC,KAEX5yB,EAAI5gB,OACf,gECZA,MAAMyzC,WAA4B,EAAY,EAAAC,gBAAkB,EAAA/1B,wCCGhE,SAASg2B,EAAkBh9C,EAAUi9C,GACjC,OAAOA,EAAgBj9C,GAAY,IAAOi9C,GAAiB,CAC/D,gHCHA,MAGMC,EAAsB,CACxB7zC,aAAS3K,GAOb,MAAMy+C,EASF,WAAA9rC,CAAYwrC,EAAMv5C,EAAU,CAAC,GApBjB,IAAC3H,EAyBT2V,KAAK8rC,QAAU,UAMf9rC,KAAKmmB,UAAY,EAMjBnmB,KAAK+rC,YAAc,EAQnB/rC,KAAKgsC,kBAAmB,EAIxBhsC,KAAKkN,OAAS,CAAC,EACflN,KAAKisC,gBAAkB,CAAC38C,EAAGyb,GAAS,KAChC/K,KAAKsR,KAAOtR,KAAKjI,QACjBiI,KAAKjI,QAAUzI,EAEf,MAAM,MAAEQ,EAAK,UAAEY,GAAc,KACzBsP,KAAK+rC,cAAgBr7C,IACrBsP,KAAKmmB,UAAYr2B,EACjBkQ,KAAK+rC,YAAcr7C,EACnB,KAAM09B,WAAWpuB,KAAKksC,wBAGtBlsC,KAAKsR,OAAStR,KAAKjI,SAAWiI,KAAKkN,OAAOi/B,QAC1CnsC,KAAKkN,OAAOi/B,OAAO9+B,OAAOrN,KAAKjI,SAG/BiI,KAAKkN,OAAOk/B,gBACZpsC,KAAKkN,OAAOk/B,eAAe/+B,OAAOrN,KAAKzD,eAGvCwO,GAAU/K,KAAKkN,OAAOm/B,eACtBrsC,KAAKkN,OAAOm/B,cAAch/B,OAAOrN,KAAKjI,QAC1C,EAUJiI,KAAKksC,sBAAwB,IAAM,KAAM9d,WAAWpuB,KAAKssC,eAUzDtsC,KAAKssC,cAAgB,EAAG57C,gBAChBA,IAAcsP,KAAK+rC,cACnB/rC,KAAKsR,KAAOtR,KAAKjI,QACbiI,KAAKkN,OAAOk/B,gBACZpsC,KAAKkN,OAAOk/B,eAAe/+B,OAAOrN,KAAKzD,eAE/C,EAEJyD,KAAK2R,aAAc,EACnB3R,KAAKsR,KAAOtR,KAAKjI,QAAUwzC,EAC3BvrC,KAAKgsC,kBArGI3hD,EAqGuB2V,KAAKjI,SApGjCvB,MAAMiS,WAAWpe,KAqGrB2V,KAAK3F,MAAQrI,EAAQqI,KACzB,CAyCA,QAAAkyC,CAASC,GAIL,OAAOxsC,KAAKkP,GAAG,SAAUs9B,EAC7B,CACA,EAAAt9B,CAAGiE,EAAWzR,GACL1B,KAAKkN,OAAOiG,KACbnT,KAAKkN,OAAOiG,GAAa,IAAI,KAEjC,MAAMV,EAAczS,KAAKkN,OAAOiG,GAAW7U,IAAIoD,GAC/C,MAAkB,WAAdyR,EACO,KACHV,IAKA,KAAM0H,MAAK,KACFna,KAAKkN,OAAOi/B,OAAOlB,WACpBjrC,KAAKpP,MACT,GACF,EAGH6hB,CACX,CACA,cAAAg6B,GACI,IAAK,MAAMC,KAAiB1sC,KAAKkN,OAC7BlN,KAAKkN,OAAOw/B,GAAensC,OAEnC,CAMA,MAAAosC,CAAOC,EAAeC,GAClB7sC,KAAK4sC,cAAgBA,EACrB5sC,KAAK6sC,kBAAoBA,CAC7B,CAgBA,GAAApyC,CAAInL,EAAGyb,GAAS,GACPA,GAAW/K,KAAK4sC,cAIjB5sC,KAAK4sC,cAAct9C,EAAG0Q,KAAKisC,iBAH3BjsC,KAAKisC,gBAAgB38C,EAAGyb,EAKhC,CACA,eAAAjQ,CAAgBwW,EAAMvZ,EAASjI,GAC3BkQ,KAAKvF,IAAI1C,GACTiI,KAAKsR,KAAOA,EACZtR,KAAKmmB,UAAYr2B,CACrB,CAKA,IAAAmb,CAAK3b,GACD0Q,KAAKisC,gBAAgB38C,GACrB0Q,KAAKsR,KAAOhiB,EACZ0Q,KAAKpP,OACDoP,KAAK6sC,mBACL7sC,KAAK6sC,mBACb,CAQA,GAAA7wC,GAII,OAHI4vC,EAAoB7zC,SACpB6zC,EAAoB7zC,QAAQ6B,KAAKoG,MAE9BA,KAAKjI,OAChB,CAIA,WAAA+0C,GACI,OAAO9sC,KAAKsR,IAChB,CAQA,WAAA/U,GAEI,OAAOyD,KAAKgsC,kBAEJ,OAAkBvjC,WAAWzI,KAAKjI,SAC9B0Q,WAAWzI,KAAKsR,MAAOtR,KAAKmmB,WAClC,CACV,CAaA,KAAAx1B,CAAMi5B,GAEF,OADA5pB,KAAKpP,OACE,IAAI0B,SAASC,IAChByN,KAAK2R,aAAc,EACnB3R,KAAKnG,UAAY+vB,EAAer3B,GAC5ByN,KAAKkN,OAAO6/B,gBACZ/sC,KAAKkN,OAAO6/B,eAAe1/B,QAC/B,IACD9Y,MAAK,KACAyL,KAAKkN,OAAO8/B,mBACZhtC,KAAKkN,OAAO8/B,kBAAkB3/B,SAElCrN,KAAKitC,gBAAgB,GAE7B,CAMA,IAAAr8C,GACQoP,KAAKnG,YACLmG,KAAKnG,UAAUjJ,OACXoP,KAAKkN,OAAOggC,iBACZltC,KAAKkN,OAAOggC,gBAAgB7/B,UAGpCrN,KAAKitC,gBACT,CAMA,WAAAE,GACI,QAASntC,KAAKnG,SAClB,CACA,cAAAozC,UACWjtC,KAAKnG,SAChB,CAUA,OAAAuzC,GACIptC,KAAKysC,iBACLzsC,KAAKpP,OACDoP,KAAK6sC,mBACL7sC,KAAK6sC,mBAEb,EAEJ,SAASxgB,EAAYkf,EAAMv5C,GACvB,OAAO,IAAI65C,EAAYN,EAAMv5C,EACjC,+DC7SA,MAAMq1C,EAAM,CACR9rC,MAAM,cAAc,KACpB0xB,MAhCJ,SAAkB39B,GACd,IAAI+9C,EAAI,GACJl3C,EAAI,GACJN,EAAI,GACJD,EAAI,GAmBR,OAjBItG,EAAE9F,OAAS,GACX6jD,EAAI/9C,EAAEi2C,UAAU,EAAG,GACnBpvC,EAAI7G,EAAEi2C,UAAU,EAAG,GACnB1vC,EAAIvG,EAAEi2C,UAAU,EAAG,GACnB3vC,EAAItG,EAAEi2C,UAAU,EAAG,KAInB8H,EAAI/9C,EAAEi2C,UAAU,EAAG,GACnBpvC,EAAI7G,EAAEi2C,UAAU,EAAG,GACnB1vC,EAAIvG,EAAEi2C,UAAU,EAAG,GACnB3vC,EAAItG,EAAEi2C,UAAU,EAAG,GACnB8H,GAAKA,EACLl3C,GAAKA,EACLN,GAAKA,EACLD,GAAKA,GAEF,CACHkyC,IAAKwF,SAASD,EAAG,IACjBtF,MAAOuF,SAASn3C,EAAG,IACnB6xC,KAAMsF,SAASz3C,EAAG,IAClBgyC,MAAOjyC,EAAI03C,SAAS13C,EAAG,IAAM,IAAM,EAE3C,EAIIuF,UAAW,IAAKA,0GC/BpB,MAAMosC,EAAO,CACThsC,MAAM,OAAc,MAAO,OAC3B0xB,OAAO,OAAW,MAAO,aAAc,aACvC9xB,UAAW,EAAGusC,MAAKC,aAAYC,YAAWC,MAAO0F,EAAU,KAC/C,QACJ5hD,KAAK4H,MAAMm0C,GACX,KACA,KAAQvsC,WAAU,QAASwsC,IAC3B,KACA,KAAQxsC,WAAU,QAASysC,IAC3B,MACA,QAAS,KAAMzsC,UAAUoyC,IACzB,kGCZZ,MAAM1N,EAAQ,CACVtkC,KAAOjM,GAAM,IAAKiM,KAAKjM,IAAM,IAAIiM,KAAKjM,IAAM,IAAKiM,KAAKjM,GACtD29B,MAAQ39B,GACA,IAAKiM,KAAKjM,GACH,IAAK29B,MAAM39B,GAEb,IAAKiM,KAAKjM,GACR,IAAK29B,MAAM39B,GAGX,IAAI29B,MAAM39B,GAGzB6L,UAAY7L,IACD,QAASA,GACVA,EACAA,EAAEnG,eAAe,OACb,IAAKgS,UAAU7L,GACf,IAAK6L,UAAU7L,iGClBjC,MACMk+C,EAAU,IACT,KACHryC,UAAY7L,GAAM3D,KAAK4H,MAHN,CAACjE,IAAM,OAAM,EAAG,IAAKA,GAGTm+C,CAAan+C,KAExCg4C,EAAO,CACT/rC,MAAM,OAAc,MAAO,OAC3B0xB,OAAO,OAAW,MAAO,QAAS,QAClC9xB,UAAW,EAAG2sC,MAAKC,QAAOC,OAAMH,MAAO0F,EAAU,KAAQ,QACrDC,EAAQryC,UAAU2sC,GAClB,KACA0F,EAAQryC,UAAU4sC,GAClB,KACAyF,EAAQryC,UAAU6sC,GAClB,MACA,QAAS,KAAM7sC,UAAUoyC,IACzB,2ECfR,MAAMG,EAAgB,CAACl8C,EAAMm8C,IAAcr+C,GAChC0E,SAAS,QAAS1E,IAAM,KAAiBiM,KAAKjM,IAAMA,EAAE8L,WAAW5J,IACnEm8C,GAAY3jD,OAAOC,UAAUd,eAAeiB,KAAKkF,EAAGq+C,IAEvDC,EAAa,CAACC,EAAOC,EAAOC,IAAWz+C,IACzC,KAAK,QAASA,GACV,OAAOA,EACX,MAAOsG,EAAGC,EAAGE,EAAG8xC,GAASv4C,EAAE2Y,MAAM,MACjC,MAAO,CACH,CAAC4lC,GAAQplC,WAAW7S,GACpB,CAACk4C,GAAQrlC,WAAW5S,GACpB,CAACk4C,GAAQtlC,WAAW1S,GACpB8xC,WAAiBz6C,IAAVy6C,EAAsBp/B,WAAWo/B,GAAS,EACpD,2ECbL,MAAMmG,EAAc,IAAI50C,IAAI,CAAC,aAAc,WAAY,WAAY,YACnE,SAAS60C,EAAmB3+C,GACxB,MAAO4T,EAAM7Y,GAASiF,EAAE4+C,MAAM,GAAI,GAAGjlC,MAAM,KAC3C,GAAa,gBAAT/F,EACA,OAAO5T,EACX,MAAO8zC,GAAU/4C,EAAM4d,MAAM,OAAe,GAC5C,IAAKm7B,EACD,OAAO9zC,EACX,MAAM6+C,EAAO9jD,EAAM80C,QAAQiE,EAAQ,IACnC,IAAIzwB,EAAeq7B,EAAYz0C,IAAI2J,GAAQ,EAAI,EAG/C,OAFIkgC,IAAW/4C,IACXsoB,GAAgB,KACbzP,EAAO,IAAMyP,EAAew7B,EAAO,GAC9C,CACA,MAAMC,EAAgB,oBAChB3kC,EAAS,IACR,IACHi2B,kBAAoBpwC,IAChB,MAAM++C,EAAY/+C,EAAE2Y,MAAMmmC,GAC1B,OAAOC,EAAYA,EAAU1gD,IAAIsgD,GAAoB95B,KAAK,KAAO7kB,CAAC,kHCX1E,MAAMg/C,EAAkB,CACpBC,MAAO,KACPC,SAAU,OACVzmC,MAAO,OACPklB,MAAO,KAELwhB,EAAiB,CACnBF,MAAO,KACPC,SAAU,SACVzmC,MAAO,OACPklB,MAAO,IAAMA,OAEXyhB,EAAkB,CACpBH,MAAO,KACPC,SAAU,UACVzmC,MAAO,OACPklB,MAAO,KAAOA,OAElB,SAAS0hB,EAASxyB,GAAM,MAAEoyB,EAAK,SAAEC,EAAQ,MAAEzmC,EAAK,MAAEklB,IAC9C,MAAMre,EAAUuN,EAAKyyB,UAAU3mC,MAAMsmC,GAChC3/B,IAELuN,EAAK,MAAQqyB,GAAY5/B,EAAQplB,OACjC2yB,EAAKyyB,UAAYzyB,EAAKyyB,UAAUzP,QAAQoP,EAAOxmC,GAC/CoU,EAAK/tB,OAAOwL,QAAQgV,EAAQjhB,IAAIs/B,IACpC,CACA,SAAS4hB,EAAoBxkD,GACzB,MAAMykD,EAAgBzkD,EAAMN,WACtBoyB,EAAO,CACT9xB,MAAOykD,EACPF,UAAWE,EACX1gD,OAAQ,GACR46C,QAAS,EACTC,UAAW,EACXC,WAAY,GAMhB,OAJI/sB,EAAK9xB,MAAMH,SAAS,WACpBykD,EAASxyB,EAAMmyB,GACnBK,EAASxyB,EAAMsyB,GACfE,EAASxyB,EAAMuyB,GACRvyB,CACX,CACA,SAAS4yB,EAAkBz/C,GACvB,OAAOu/C,EAAoBv/C,GAAGlB,MAClC,CACA,SAAS++B,EAAkBrW,GACvB,MAAM,OAAE1oB,EAAM,UAAE66C,EAAS,QAAED,EAAO,UAAE4F,GAAcC,EAAoB/3B,GAChE4xB,EAAYt6C,EAAO5E,OACzB,OAAQ8F,IACJ,IAAIyrC,EAAS6T,EACb,IAAK,IAAItlD,EAAI,EAAGA,EAAIo/C,EAAWp/C,IAEvByxC,EADAzxC,EAAI0/C,EACKjO,EAAOoE,QAAQmP,EAAgBvmC,MAAOzY,EAAEhG,IAE5CA,EAAI0/C,EAAUC,EACVlO,EAAOoE,QAAQsP,EAAe1mC,MAAO,IAAM5M,UAAU7L,EAAEhG,KAGvDyxC,EAAOoE,QAAQuP,EAAgB3mC,OAAO,QAASzY,EAAEhG,KAGlE,OAAOyxC,CAAM,CAErB,CACA,MAAMiU,EAAwB1/C,GAAmB,iBAANA,EAAiB,EAAIA,EAMhE,MAAMgM,EAAU,CACZC,KA/EJ,SAAcjM,GACV,IAAIujB,EAAIwpB,EACR,OAAQ7lC,MAAMlH,KACV,QAASA,MACwB,QAA9BujB,EAAKvjB,EAAE2Y,MAAM,aAAgC,IAAP4K,OAAgB,EAASA,EAAGrpB,SAAW,KAC3C,QAA9B6yC,EAAK/sC,EAAE2Y,MAAM,aAAgC,IAAPo0B,OAAgB,EAASA,EAAG7yC,SAAW,GAChF,CACZ,EAyEIyjC,MAAO8hB,EACP5hB,oBACAuS,kBATJ,SAA2BpwC,GACvB,MAAMmkB,EAASs7B,EAAkBz/C,GAEjC,OADoB69B,EAAkB79B,EAC/B2/C,CAAYx7B,EAAO9lB,IAAIqhD,GAClC,mFCjFA,MAAM5L,EAAS,CACX7nC,KAAOjM,GAAmB,iBAANA,EACpB29B,MAAOxkB,WACPtN,UAAY7L,GAAMA,GAEhBu4C,EAAQ,IACPzE,EACHjoC,UAAY7L,IAAM,OAAM,EAAG,EAAGA,IAE5B4U,EAAQ,IACPk/B,EACH34C,QAAS,+GCXb,MAAMykD,EAAkBf,IAAS,CAC7B5yC,KAAOjM,IAAM,QAASA,IAAMA,EAAE6/C,SAAShB,IAAiC,IAAxB7+C,EAAE2Z,MAAM,KAAKzf,OAC7DyjC,MAAOxkB,WACPtN,UAAY7L,GAAM,GAAGA,IAAI6+C,MAEvBiB,EAAUF,EAAe,OACzBG,EAAUH,EAAe,KACzBrmC,EAAKqmC,EAAe,MACpBxO,EAAKwO,EAAe,MACpBzO,EAAKyO,EAAe,MACpBI,EAAqB,IACpBD,EACHpiB,MAAQ39B,GAAM+/C,EAAQpiB,MAAM39B,GAAK,IACjC6L,UAAY7L,GAAM+/C,EAAQl0C,UAAc,IAAJ7L,wFCTxC,MAAMigD,EAAYjgD,GAAM3D,KAAK4H,MAAU,IAAJjE,GAAc,IAC3CkgD,EAAa,uBACbC,EAAa,8FACbC,EAAmB,+FACzB,SAASC,EAASrgD,GACd,MAAoB,iBAANA,CAClB,+DCVA,SAASsgD,EAAwBvlD,GAC7B,OAAO2J,SAAQ,OAAc3J,IAAUA,EAAMiU,IACjD,iDCJA,MAAMuxC,EAAiBxlD,GAAU2J,QAAQ3J,GAASA,EAAMkS","sources":["webpack://nikon-client/./node_modules/.pnpm/classnames@2.5.1/node_modules/classnames/index.js","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/easing/cubic-bezier.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/easing/ease.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/easing/back.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/easing/utils/map.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/easing/anticipate.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/animation/generators/keyframes.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/utils/offsets/time.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/animation/generators/inertia.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/animation/animators/js/driver-frameloop.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/animation/animators/js/index.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/animation/generators/spring/find.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/animation/generators/spring/index.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/animation/generators/utils/calc-duration.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/animation/generators/utils/velocity.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/utils/use-instant-transition-state.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/easing/utils/is-bezier-definition.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/animation/animators/waapi/easing.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/animation/animators/waapi/create-accelerated-animation.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/animation/animators/waapi/index.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/animation/animators/waapi/utils/get-final-keyframe.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/animation/utils/default-transitions.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/animation/utils/is-animatable.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/animation/utils/is-none.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/utils/GlobalConfig.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/animation/interfaces/motion-value.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/animation/utils/keyframes.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/animation/animators/instant.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/animation/interfaces/single-value.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/animation/interfaces/visual-element-target.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/animation/optimized-appear/data-id.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/animation/utils/is-animation-controls.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/animation/utils/is-keyframes-target.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/animation/utils/transitions.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/context/LayoutGroupContext.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/context/MotionConfigContext.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/context/PresenceContext.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/easing/circ.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/easing/modifiers/mirror.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/easing/modifiers/reverse.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/easing/utils/is-easing-array.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/frameloop/render-step.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/frameloop/batcher.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/frameloop/frame.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/motion/features/definitions.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/motion/utils/is-forced-motion-value.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/projection/geometry/conversion.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/projection/geometry/delta-apply.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/projection/geometry/models.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/projection/styles/scale-correction.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/projection/utils/has-transform.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/projection/utils/measure.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/dom/utils/css-variables-conversion.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/dom/utils/unit-conversion.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/dom/utils/parse-dom-variant.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/utils/reduced-motion/state.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/VisualElement.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/utils/reduced-motion/index.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/utils/motion-values.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/dom/DOMVisualElement.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/context/MotionContext/index.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/context/LazyContext.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/context/MotionContext/create.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/context/MotionContext/utils.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/context/SwitchLayoutGroupContext.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/motion/utils/symbol.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/motion/index.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/motion/features/load-features.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/motion/utils/use-visual-element.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/motion/utils/use-motion-ref.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/dom/motion-proxy.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/svg/lowercase-elements.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/dom/utils/is-svg-component.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/html/utils/create-render-state.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/html/use-props.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/motion/utils/valid-prop.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/dom/utils/filter-props.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/svg/utils/create-render-state.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/svg/use-props.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/dom/use-render.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/value/utils/resolve-motion-value.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/motion/utils/use-visual-state.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/svg/config-motion.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/html/config-motion.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/events/add-dom-event.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/events/utils/is-primary-pointer.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/events/event-info.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/events/add-pointer-event.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/gestures/drag/utils/lock.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/motion/features/Feature.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/gestures/hover.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/gestures/utils/is-node-or-child.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/gestures/press.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/motion/features/viewport/observers.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/motion/features/viewport/index.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/motion/features/gestures.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/gestures/focus.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/utils/shallow-compare.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/animation/interfaces/visual-element-variant.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/utils/animation-state.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/animation/interfaces/visual-element.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/motion/features/animation/exit.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/motion/features/animations.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/motion/features/animation/index.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/utils/distance.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/gestures/pan/PanSession.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/projection/geometry/delta-calc.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/gestures/drag/utils/constraints.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/projection/utils/each-axis.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/utils/get-context-window.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/gestures/drag/VisualElementDragControls.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/gestures/pan/index.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/projection/node/state.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/projection/styles/scale-border-radius.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/projection/styles/scale-box-shadow.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/motion/features/layout/MeasureLayout.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/components/AnimatePresence/use-presence.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/projection/animation/mix-values.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/projection/geometry/copy.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/projection/geometry/delta-remove.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/projection/geometry/utils.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/projection/shared/stack.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/projection/styles/transform.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/utils/compare-by-depth.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/utils/flat-tree.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/projection/node/create-projection-node.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/debug/record.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/utils/delay.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/projection/node/DocumentProjectionNode.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/projection/node/HTMLProjectionNode.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/motion/features/drag.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/gestures/drag/index.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/dom/create-visual-element.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/dom/motion.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/motion/features/layout.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/dom/utils/create-config.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/dom/utils/camel-to-dash.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/dom/utils/is-css-variable.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/dom/utils/is-svg-element.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/dom/value-types/animatable-none.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/dom/value-types/defaults.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/dom/value-types/type-auto.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/dom/value-types/dimensions.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/dom/value-types/type-int.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/dom/value-types/number.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/dom/value-types/test.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/html/HTMLVisualElement.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/html/utils/build-transform.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/dom/value-types/get-as-type.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/html/utils/build-styles.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/html/utils/render.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/html/utils/scrape-motion-values.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/html/utils/transform.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/store.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/svg/SVGVisualElement.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/svg/utils/transform-origin.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/svg/utils/path.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/svg/utils/build-attrs.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/svg/utils/camel-case-attrs.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/svg/utils/is-svg-tag.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/svg/utils/render.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/svg/utils/scrape-motion-values.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/utils/is-controlling-variants.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/utils/is-variant-label.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/utils/resolve-dynamic-variants.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/utils/resolve-variants.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/dom/value-types/find.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/utils/setters.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/utils/variant-props.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/utils/array.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/utils/clamp.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/utils/errors.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/utils/hsla-to-rgba.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/utils/mix-color.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/utils/mix-complex.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/utils/interpolate.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/utils/is-browser.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/utils/is-numerical-string.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/utils/is-ref-object.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/utils/is-zero-value-string.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/utils/memo.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/utils/mix.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/utils/noop.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/utils/offsets/default.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/utils/offsets/fill.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/utils/pipe.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/utils/progress.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/utils/resolve-value.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/utils/subscription-manager.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/utils/time-conversion.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/utils/use-constant.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/utils/use-isomorphic-effect.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/utils/velocity-per-second.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/value/index.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/value/types/color/hex.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/value/types/color/hsla.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/value/types/color/index.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/value/types/color/rgba.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/value/types/color/utils.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/value/types/complex/filter.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/value/types/complex/index.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/value/types/numbers/index.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/value/types/numbers/units.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/value/types/utils.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/value/use-will-change/is.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/value/utils/is-motion-value.mjs"],"sourcesContent":["/*!\n\tCopyright (c) 2018 Jed Watson.\n\tLicensed under the MIT License (MIT), see\n\thttp://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\n\tfunction classNames () {\n\t\tvar classes = '';\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (arg) {\n\t\t\t\tclasses = appendClass(classes, parseValue(arg));\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction parseValue (arg) {\n\t\tif (typeof arg === 'string' || typeof arg === 'number') {\n\t\t\treturn arg;\n\t\t}\n\n\t\tif (typeof arg !== 'object') {\n\t\t\treturn '';\n\t\t}\n\n\t\tif (Array.isArray(arg)) {\n\t\t\treturn classNames.apply(null, arg);\n\t\t}\n\n\t\tif (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes('[native code]')) {\n\t\t\treturn arg.toString();\n\t\t}\n\n\t\tvar classes = '';\n\n\t\tfor (var key in arg) {\n\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\tclasses = appendClass(classes, key);\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction appendClass (value, newClass) {\n\t\tif (!newClass) {\n\t\t\treturn value;\n\t\t}\n\t\n\t\tif (value) {\n\t\t\treturn value + ' ' + newClass;\n\t\t}\n\t\n\t\treturn value + newClass;\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tclassNames.default = classNames;\n\t\tmodule.exports = classNames;\n\t} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\tdefine('classnames', [], function () {\n\t\t\treturn classNames;\n\t\t});\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n","import { noop } from '../utils/noop.mjs';\n\n/*\n Bezier function generator\n This has been modified from Gaëtan Renaudeau's BezierEasing\n https://github.com/gre/bezier-easing/blob/master/src/index.js\n https://github.com/gre/bezier-easing/blob/master/LICENSE\n \n I've removed the newtonRaphsonIterate algo because in benchmarking it\n wasn't noticiably faster than binarySubdivision, indeed removing it\n usually improved times, depending on the curve.\n I also removed the lookup table, as for the added bundle size and loop we're\n only cutting ~4 or so subdivision iterations. I bumped the max iterations up\n to 12 to compensate and this still tended to be faster for no perceivable\n loss in accuracy.\n Usage\n const easeOut = cubicBezier(.17,.67,.83,.67);\n const x = easeOut(0.5); // returns 0.627...\n*/\n// Returns x(t) given t, x1, and x2, or y(t) given t, y1, and y2.\nconst calcBezier = (t, a1, a2) => (((1.0 - 3.0 * a2 + 3.0 * a1) * t + (3.0 * a2 - 6.0 * a1)) * t + 3.0 * a1) *\n t;\nconst subdivisionPrecision = 0.0000001;\nconst subdivisionMaxIterations = 12;\nfunction binarySubdivide(x, lowerBound, upperBound, mX1, mX2) {\n let currentX;\n let currentT;\n let i = 0;\n do {\n currentT = lowerBound + (upperBound - lowerBound) / 2.0;\n currentX = calcBezier(currentT, mX1, mX2) - x;\n if (currentX > 0.0) {\n upperBound = currentT;\n }\n else {\n lowerBound = currentT;\n }\n } while (Math.abs(currentX) > subdivisionPrecision &&\n ++i < subdivisionMaxIterations);\n return currentT;\n}\nfunction cubicBezier(mX1, mY1, mX2, mY2) {\n // If this is a linear gradient, return linear easing\n if (mX1 === mY1 && mX2 === mY2)\n return noop;\n const getTForX = (aX) => binarySubdivide(aX, 0, 1, mX1, mX2);\n // If animation is at start/end, return t without easing\n return (t) => t === 0 || t === 1 ? t : calcBezier(getTForX(t), mY1, mY2);\n}\n\nexport { cubicBezier };\n","import { cubicBezier } from './cubic-bezier.mjs';\n\nconst easeIn = cubicBezier(0.42, 0, 1, 1);\nconst easeOut = cubicBezier(0, 0, 0.58, 1);\nconst easeInOut = cubicBezier(0.42, 0, 0.58, 1);\n\nexport { easeIn, easeInOut, easeOut };\n","import { cubicBezier } from './cubic-bezier.mjs';\nimport { mirrorEasing } from './modifiers/mirror.mjs';\nimport { reverseEasing } from './modifiers/reverse.mjs';\n\nconst backOut = cubicBezier(0.33, 1.53, 0.69, 0.99);\nconst backIn = reverseEasing(backOut);\nconst backInOut = mirrorEasing(backIn);\n\nexport { backIn, backInOut, backOut };\n","import { invariant } from '../../utils/errors.mjs';\nimport { cubicBezier } from '../cubic-bezier.mjs';\nimport { noop } from '../../utils/noop.mjs';\nimport { easeIn, easeInOut, easeOut } from '../ease.mjs';\nimport { circIn, circInOut, circOut } from '../circ.mjs';\nimport { backIn, backInOut, backOut } from '../back.mjs';\nimport { anticipate } from '../anticipate.mjs';\n\nconst easingLookup = {\n linear: noop,\n easeIn,\n easeInOut,\n easeOut,\n circIn,\n circInOut,\n circOut,\n backIn,\n backInOut,\n backOut,\n anticipate,\n};\nconst easingDefinitionToFunction = (definition) => {\n if (Array.isArray(definition)) {\n // If cubic bezier definition, create bezier curve\n invariant(definition.length === 4, `Cubic bezier arrays must contain four numerical values.`);\n const [x1, y1, x2, y2] = definition;\n return cubicBezier(x1, y1, x2, y2);\n }\n else if (typeof definition === \"string\") {\n // Else lookup from table\n invariant(easingLookup[definition] !== undefined, `Invalid easing type '${definition}'`);\n return easingLookup[definition];\n }\n return definition;\n};\n\nexport { easingDefinitionToFunction };\n","import { backIn } from './back.mjs';\n\nconst anticipate = (p) => (p *= 2) < 1 ? 0.5 * backIn(p) : 0.5 * (2 - Math.pow(2, -10 * (p - 1)));\n\nexport { anticipate };\n","import { easeInOut } from '../../easing/ease.mjs';\nimport { isEasingArray } from '../../easing/utils/is-easing-array.mjs';\nimport { easingDefinitionToFunction } from '../../easing/utils/map.mjs';\nimport { interpolate } from '../../utils/interpolate.mjs';\nimport { defaultOffset } from '../../utils/offsets/default.mjs';\nimport { convertOffsetToTimes } from '../../utils/offsets/time.mjs';\n\nfunction defaultEasing(values, easing) {\n return values.map(() => easing || easeInOut).splice(0, values.length - 1);\n}\nfunction keyframes({ duration = 300, keyframes: keyframeValues, times, ease = \"easeInOut\", }) {\n /**\n * Easing functions can be externally defined as strings. Here we convert them\n * into actual functions.\n */\n const easingFunctions = isEasingArray(ease)\n ? ease.map(easingDefinitionToFunction)\n : easingDefinitionToFunction(ease);\n /**\n * This is the Iterator-spec return value. We ensure it's mutable rather than using a generator\n * to reduce GC during animation.\n */\n const state = {\n done: false,\n value: keyframeValues[0],\n };\n /**\n * Create a times array based on the provided 0-1 offsets\n */\n const absoluteTimes = convertOffsetToTimes(\n // Only use the provided offsets if they're the correct length\n // TODO Maybe we should warn here if there's a length mismatch\n times && times.length === keyframeValues.length\n ? times\n : defaultOffset(keyframeValues), duration);\n const mapTimeToKeyframe = interpolate(absoluteTimes, keyframeValues, {\n ease: Array.isArray(easingFunctions)\n ? easingFunctions\n : defaultEasing(keyframeValues, easingFunctions),\n });\n return {\n calculatedDuration: duration,\n next: (t) => {\n state.value = mapTimeToKeyframe(t);\n state.done = t >= duration;\n return state;\n },\n };\n}\n\nexport { defaultEasing, keyframes };\n","function convertOffsetToTimes(offset, duration) {\n return offset.map((o) => o * duration);\n}\n\nexport { convertOffsetToTimes };\n","import { spring } from './spring/index.mjs';\nimport { calcGeneratorVelocity } from './utils/velocity.mjs';\n\nfunction inertia({ keyframes, velocity = 0.0, power = 0.8, timeConstant = 325, bounceDamping = 10, bounceStiffness = 500, modifyTarget, min, max, restDelta = 0.5, restSpeed, }) {\n const origin = keyframes[0];\n const state = {\n done: false,\n value: origin,\n };\n const isOutOfBounds = (v) => (min !== undefined && v < min) || (max !== undefined && v > max);\n const nearestBoundary = (v) => {\n if (min === undefined)\n return max;\n if (max === undefined)\n return min;\n return Math.abs(min - v) < Math.abs(max - v) ? min : max;\n };\n let amplitude = power * velocity;\n const ideal = origin + amplitude;\n const target = modifyTarget === undefined ? ideal : modifyTarget(ideal);\n /**\n * If the target has changed we need to re-calculate the amplitude, otherwise\n * the animation will start from the wrong position.\n */\n if (target !== ideal)\n amplitude = target - origin;\n const calcDelta = (t) => -amplitude * Math.exp(-t / timeConstant);\n const calcLatest = (t) => target + calcDelta(t);\n const applyFriction = (t) => {\n const delta = calcDelta(t);\n const latest = calcLatest(t);\n state.done = Math.abs(delta) <= restDelta;\n state.value = state.done ? target : latest;\n };\n /**\n * Ideally this would resolve for t in a stateless way, we could\n * do that by always precalculating the animation but as we know\n * this will be done anyway we can assume that spring will\n * be discovered during that.\n */\n let timeReachedBoundary;\n let spring$1;\n const checkCatchBoundary = (t) => {\n if (!isOutOfBounds(state.value))\n return;\n timeReachedBoundary = t;\n spring$1 = spring({\n keyframes: [state.value, nearestBoundary(state.value)],\n velocity: calcGeneratorVelocity(calcLatest, t, state.value),\n damping: bounceDamping,\n stiffness: bounceStiffness,\n restDelta,\n restSpeed,\n });\n };\n checkCatchBoundary(0);\n return {\n calculatedDuration: null,\n next: (t) => {\n /**\n * We need to resolve the friction to figure out if we need a\n * spring but we don't want to do this twice per frame. So here\n * we flag if we updated for this frame and later if we did\n * we can skip doing it again.\n */\n let hasUpdatedFrame = false;\n if (!spring$1 && timeReachedBoundary === undefined) {\n hasUpdatedFrame = true;\n applyFriction(t);\n checkCatchBoundary(t);\n }\n /**\n * If we have a spring and the provided t is beyond the moment the friction\n * animation crossed the min/max boundary, use the spring.\n */\n if (timeReachedBoundary !== undefined && t > timeReachedBoundary) {\n return spring$1.next(t - timeReachedBoundary);\n }\n else {\n !hasUpdatedFrame && applyFriction(t);\n return state;\n }\n },\n };\n}\n\nexport { inertia };\n","import { frame, cancelFrame, frameData } from '../../../frameloop/frame.mjs';\n\nconst frameloopDriver = (update) => {\n const passTimestamp = ({ timestamp }) => update(timestamp);\n return {\n start: () => frame.update(passTimestamp, true),\n stop: () => cancelFrame(passTimestamp),\n /**\n * If we're processing this frame we can use the\n * framelocked timestamp to keep things in sync.\n */\n now: () => frameData.isProcessing ? frameData.timestamp : performance.now(),\n };\n};\n\nexport { frameloopDriver };\n","import { keyframes } from '../../generators/keyframes.mjs';\nimport { spring } from '../../generators/spring/index.mjs';\nimport { inertia } from '../../generators/inertia.mjs';\nimport { frameloopDriver } from './driver-frameloop.mjs';\nimport { interpolate } from '../../../utils/interpolate.mjs';\nimport { clamp } from '../../../utils/clamp.mjs';\nimport { millisecondsToSeconds, secondsToMilliseconds } from '../../../utils/time-conversion.mjs';\nimport { calcGeneratorDuration } from '../../generators/utils/calc-duration.mjs';\nimport { invariant } from '../../../utils/errors.mjs';\n\nconst types = {\n decay: inertia,\n inertia,\n tween: keyframes,\n keyframes: keyframes,\n spring,\n};\n/**\n * Animate a single value on the main thread.\n *\n * This function is written, where functionality overlaps,\n * to be largely spec-compliant with WAAPI to allow fungibility\n * between the two.\n */\nfunction animateValue({ autoplay = true, delay = 0, driver = frameloopDriver, keyframes: keyframes$1, type = \"keyframes\", repeat = 0, repeatDelay = 0, repeatType = \"loop\", onPlay, onStop, onComplete, onUpdate, ...options }) {\n let speed = 1;\n let hasStopped = false;\n let resolveFinishedPromise;\n let currentFinishedPromise;\n /**\n * Resolve the current Promise every time we enter the\n * finished state. This is WAAPI-compatible behaviour.\n */\n const updateFinishedPromise = () => {\n currentFinishedPromise = new Promise((resolve) => {\n resolveFinishedPromise = resolve;\n });\n };\n // Create the first finished promise\n updateFinishedPromise();\n let animationDriver;\n const generatorFactory = types[type] || keyframes;\n /**\n * If this isn't the keyframes generator and we've been provided\n * strings as keyframes, we need to interpolate these.\n */\n let mapNumbersToKeyframes;\n if (generatorFactory !== keyframes &&\n typeof keyframes$1[0] !== \"number\") {\n if (process.env.NODE_ENV !== \"production\") {\n invariant(keyframes$1.length === 2, `Only two keyframes currently supported with spring and inertia animations. Trying to animate ${keyframes$1}`);\n }\n mapNumbersToKeyframes = interpolate([0, 100], keyframes$1, {\n clamp: false,\n });\n keyframes$1 = [0, 100];\n }\n const generator = generatorFactory({ ...options, keyframes: keyframes$1 });\n let mirroredGenerator;\n if (repeatType === \"mirror\") {\n mirroredGenerator = generatorFactory({\n ...options,\n keyframes: [...keyframes$1].reverse(),\n velocity: -(options.velocity || 0),\n });\n }\n let playState = \"idle\";\n let holdTime = null;\n let startTime = null;\n let cancelTime = null;\n /**\n * If duration is undefined and we have repeat options,\n * we need to calculate a duration from the generator.\n *\n * We set it to the generator itself to cache the duration.\n * Any timeline resolver will need to have already precalculated\n * the duration by this step.\n */\n if (generator.calculatedDuration === null && repeat) {\n generator.calculatedDuration = calcGeneratorDuration(generator);\n }\n const { calculatedDuration } = generator;\n let resolvedDuration = Infinity;\n let totalDuration = Infinity;\n if (calculatedDuration !== null) {\n resolvedDuration = calculatedDuration + repeatDelay;\n totalDuration = resolvedDuration * (repeat + 1) - repeatDelay;\n }\n let currentTime = 0;\n const tick = (timestamp) => {\n if (startTime === null)\n return;\n /**\n * requestAnimationFrame timestamps can come through as lower than\n * the startTime as set by performance.now(). Here we prevent this,\n * though in the future it could be possible to make setting startTime\n * a pending operation that gets resolved here.\n */\n if (speed > 0)\n startTime = Math.min(startTime, timestamp);\n if (speed < 0)\n startTime = Math.min(timestamp - totalDuration / speed, startTime);\n if (holdTime !== null) {\n currentTime = holdTime;\n }\n else {\n // Rounding the time because floating point arithmetic is not always accurate, e.g. 3000.367 - 1000.367 =\n // 2000.0000000000002. This is a problem when we are comparing the currentTime with the duration, for\n // example.\n currentTime = Math.round(timestamp - startTime) * speed;\n }\n // Rebase on delay\n const timeWithoutDelay = currentTime - delay * (speed >= 0 ? 1 : -1);\n const isInDelayPhase = speed >= 0 ? timeWithoutDelay < 0 : timeWithoutDelay > totalDuration;\n currentTime = Math.max(timeWithoutDelay, 0);\n /**\n * If this animation has finished, set the current time\n * to the total duration.\n */\n if (playState === \"finished\" && holdTime === null) {\n currentTime = totalDuration;\n }\n let elapsed = currentTime;\n let frameGenerator = generator;\n if (repeat) {\n /**\n * Get the current progress (0-1) of the animation. If t is >\n * than duration we'll get values like 2.5 (midway through the\n * third iteration)\n */\n const progress = Math.min(currentTime, totalDuration) / resolvedDuration;\n /**\n * Get the current iteration (0 indexed). For instance the floor of\n * 2.5 is 2.\n */\n let currentIteration = Math.floor(progress);\n /**\n * Get the current progress of the iteration by taking the remainder\n * so 2.5 is 0.5 through iteration 2\n */\n let iterationProgress = progress % 1.0;\n /**\n * If iteration progress is 1 we count that as the end\n * of the previous iteration.\n */\n if (!iterationProgress && progress >= 1) {\n iterationProgress = 1;\n }\n iterationProgress === 1 && currentIteration--;\n currentIteration = Math.min(currentIteration, repeat + 1);\n /**\n * Reverse progress if we're not running in \"normal\" direction\n */\n const isOddIteration = Boolean(currentIteration % 2);\n if (isOddIteration) {\n if (repeatType === \"reverse\") {\n iterationProgress = 1 - iterationProgress;\n if (repeatDelay) {\n iterationProgress -= repeatDelay / resolvedDuration;\n }\n }\n else if (repeatType === \"mirror\") {\n frameGenerator = mirroredGenerator;\n }\n }\n elapsed = clamp(0, 1, iterationProgress) * resolvedDuration;\n }\n /**\n * If we're in negative time, set state as the initial keyframe.\n * This prevents delay: x, duration: 0 animations from finishing\n * instantly.\n */\n const state = isInDelayPhase\n ? { done: false, value: keyframes$1[0] }\n : frameGenerator.next(elapsed);\n if (mapNumbersToKeyframes) {\n state.value = mapNumbersToKeyframes(state.value);\n }\n let { done } = state;\n if (!isInDelayPhase && calculatedDuration !== null) {\n done = speed >= 0 ? currentTime >= totalDuration : currentTime <= 0;\n }\n const isAnimationFinished = holdTime === null &&\n (playState === \"finished\" || (playState === \"running\" && done));\n if (onUpdate) {\n onUpdate(state.value);\n }\n if (isAnimationFinished) {\n finish();\n }\n return state;\n };\n const stopAnimationDriver = () => {\n animationDriver && animationDriver.stop();\n animationDriver = undefined;\n };\n const cancel = () => {\n playState = \"idle\";\n stopAnimationDriver();\n resolveFinishedPromise();\n updateFinishedPromise();\n startTime = cancelTime = null;\n };\n const finish = () => {\n playState = \"finished\";\n onComplete && onComplete();\n stopAnimationDriver();\n resolveFinishedPromise();\n };\n const play = () => {\n if (hasStopped)\n return;\n if (!animationDriver)\n animationDriver = driver(tick);\n const now = animationDriver.now();\n onPlay && onPlay();\n if (holdTime !== null) {\n startTime = now - holdTime;\n }\n else if (!startTime || playState === \"finished\") {\n startTime = now;\n }\n if (playState === \"finished\") {\n updateFinishedPromise();\n }\n cancelTime = startTime;\n holdTime = null;\n /**\n * Set playState to running only after we've used it in\n * the previous logic.\n */\n playState = \"running\";\n animationDriver.start();\n };\n if (autoplay) {\n play();\n }\n const controls = {\n then(resolve, reject) {\n return currentFinishedPromise.then(resolve, reject);\n },\n get time() {\n return millisecondsToSeconds(currentTime);\n },\n set time(newTime) {\n newTime = secondsToMilliseconds(newTime);\n currentTime = newTime;\n if (holdTime !== null || !animationDriver || speed === 0) {\n holdTime = newTime;\n }\n else {\n startTime = animationDriver.now() - newTime / speed;\n }\n },\n get duration() {\n const duration = generator.calculatedDuration === null\n ? calcGeneratorDuration(generator)\n : generator.calculatedDuration;\n return millisecondsToSeconds(duration);\n },\n get speed() {\n return speed;\n },\n set speed(newSpeed) {\n if (newSpeed === speed || !animationDriver)\n return;\n speed = newSpeed;\n controls.time = millisecondsToSeconds(currentTime);\n },\n get state() {\n return playState;\n },\n play,\n pause: () => {\n playState = \"paused\";\n holdTime = currentTime;\n },\n stop: () => {\n hasStopped = true;\n if (playState === \"idle\")\n return;\n playState = \"idle\";\n onStop && onStop();\n cancel();\n },\n cancel: () => {\n if (cancelTime !== null)\n tick(cancelTime);\n cancel();\n },\n complete: () => {\n playState = \"finished\";\n },\n sample: (elapsed) => {\n startTime = 0;\n return tick(elapsed);\n },\n };\n return controls;\n}\n\nexport { animateValue };\n","import { warning } from '../../../utils/errors.mjs';\nimport { clamp } from '../../../utils/clamp.mjs';\nimport { secondsToMilliseconds, millisecondsToSeconds } from '../../../utils/time-conversion.mjs';\n\nconst safeMin = 0.001;\nconst minDuration = 0.01;\nconst maxDuration = 10.0;\nconst minDamping = 0.05;\nconst maxDamping = 1;\nfunction findSpring({ duration = 800, bounce = 0.25, velocity = 0, mass = 1, }) {\n let envelope;\n let derivative;\n warning(duration <= secondsToMilliseconds(maxDuration), \"Spring duration must be 10 seconds or less\");\n let dampingRatio = 1 - bounce;\n /**\n * Restrict dampingRatio and duration to within acceptable ranges.\n */\n dampingRatio = clamp(minDamping, maxDamping, dampingRatio);\n duration = clamp(minDuration, maxDuration, millisecondsToSeconds(duration));\n if (dampingRatio < 1) {\n /**\n * Underdamped spring\n */\n envelope = (undampedFreq) => {\n const exponentialDecay = undampedFreq * dampingRatio;\n const delta = exponentialDecay * duration;\n const a = exponentialDecay - velocity;\n const b = calcAngularFreq(undampedFreq, dampingRatio);\n const c = Math.exp(-delta);\n return safeMin - (a / b) * c;\n };\n derivative = (undampedFreq) => {\n const exponentialDecay = undampedFreq * dampingRatio;\n const delta = exponentialDecay * duration;\n const d = delta * velocity + velocity;\n const e = Math.pow(dampingRatio, 2) * Math.pow(undampedFreq, 2) * duration;\n const f = Math.exp(-delta);\n const g = calcAngularFreq(Math.pow(undampedFreq, 2), dampingRatio);\n const factor = -envelope(undampedFreq) + safeMin > 0 ? -1 : 1;\n return (factor * ((d - e) * f)) / g;\n };\n }\n else {\n /**\n * Critically-damped spring\n */\n envelope = (undampedFreq) => {\n const a = Math.exp(-undampedFreq * duration);\n const b = (undampedFreq - velocity) * duration + 1;\n return -safeMin + a * b;\n };\n derivative = (undampedFreq) => {\n const a = Math.exp(-undampedFreq * duration);\n const b = (velocity - undampedFreq) * (duration * duration);\n return a * b;\n };\n }\n const initialGuess = 5 / duration;\n const undampedFreq = approximateRoot(envelope, derivative, initialGuess);\n duration = secondsToMilliseconds(duration);\n if (isNaN(undampedFreq)) {\n return {\n stiffness: 100,\n damping: 10,\n duration,\n };\n }\n else {\n const stiffness = Math.pow(undampedFreq, 2) * mass;\n return {\n stiffness,\n damping: dampingRatio * 2 * Math.sqrt(mass * stiffness),\n duration,\n };\n }\n}\nconst rootIterations = 12;\nfunction approximateRoot(envelope, derivative, initialGuess) {\n let result = initialGuess;\n for (let i = 1; i < rootIterations; i++) {\n result = result - envelope(result) / derivative(result);\n }\n return result;\n}\nfunction calcAngularFreq(undampedFreq, dampingRatio) {\n return undampedFreq * Math.sqrt(1 - dampingRatio * dampingRatio);\n}\n\nexport { calcAngularFreq, findSpring, maxDamping, maxDuration, minDamping, minDuration };\n","import { millisecondsToSeconds } from '../../../utils/time-conversion.mjs';\nimport { calcGeneratorVelocity } from '../utils/velocity.mjs';\nimport { findSpring, calcAngularFreq } from './find.mjs';\n\nconst durationKeys = [\"duration\", \"bounce\"];\nconst physicsKeys = [\"stiffness\", \"damping\", \"mass\"];\nfunction isSpringType(options, keys) {\n return keys.some((key) => options[key] !== undefined);\n}\nfunction getSpringOptions(options) {\n let springOptions = {\n velocity: 0.0,\n stiffness: 100,\n damping: 10,\n mass: 1.0,\n isResolvedFromDuration: false,\n ...options,\n };\n // stiffness/damping/mass overrides duration/bounce\n if (!isSpringType(options, physicsKeys) &&\n isSpringType(options, durationKeys)) {\n const derived = findSpring(options);\n springOptions = {\n ...springOptions,\n ...derived,\n mass: 1.0,\n };\n springOptions.isResolvedFromDuration = true;\n }\n return springOptions;\n}\nfunction spring({ keyframes, restDelta, restSpeed, ...options }) {\n const origin = keyframes[0];\n const target = keyframes[keyframes.length - 1];\n /**\n * This is the Iterator-spec return value. We ensure it's mutable rather than using a generator\n * to reduce GC during animation.\n */\n const state = { done: false, value: origin };\n const { stiffness, damping, mass, duration, velocity, isResolvedFromDuration, } = getSpringOptions({\n ...options,\n velocity: -millisecondsToSeconds(options.velocity || 0),\n });\n const initialVelocity = velocity || 0.0;\n const dampingRatio = damping / (2 * Math.sqrt(stiffness * mass));\n const initialDelta = target - origin;\n const undampedAngularFreq = millisecondsToSeconds(Math.sqrt(stiffness / mass));\n /**\n * If we're working on a granular scale, use smaller defaults for determining\n * when the spring is finished.\n *\n * These defaults have been selected emprically based on what strikes a good\n * ratio between feeling good and finishing as soon as changes are imperceptible.\n */\n const isGranularScale = Math.abs(initialDelta) < 5;\n restSpeed || (restSpeed = isGranularScale ? 0.01 : 2);\n restDelta || (restDelta = isGranularScale ? 0.005 : 0.5);\n let resolveSpring;\n if (dampingRatio < 1) {\n const angularFreq = calcAngularFreq(undampedAngularFreq, dampingRatio);\n // Underdamped spring\n resolveSpring = (t) => {\n const envelope = Math.exp(-dampingRatio * undampedAngularFreq * t);\n return (target -\n envelope *\n (((initialVelocity +\n dampingRatio * undampedAngularFreq * initialDelta) /\n angularFreq) *\n Math.sin(angularFreq * t) +\n initialDelta * Math.cos(angularFreq * t)));\n };\n }\n else if (dampingRatio === 1) {\n // Critically damped spring\n resolveSpring = (t) => target -\n Math.exp(-undampedAngularFreq * t) *\n (initialDelta +\n (initialVelocity + undampedAngularFreq * initialDelta) * t);\n }\n else {\n // Overdamped spring\n const dampedAngularFreq = undampedAngularFreq * Math.sqrt(dampingRatio * dampingRatio - 1);\n resolveSpring = (t) => {\n const envelope = Math.exp(-dampingRatio * undampedAngularFreq * t);\n // When performing sinh or cosh values can hit Infinity so we cap them here\n const freqForT = Math.min(dampedAngularFreq * t, 300);\n return (target -\n (envelope *\n ((initialVelocity +\n dampingRatio * undampedAngularFreq * initialDelta) *\n Math.sinh(freqForT) +\n dampedAngularFreq *\n initialDelta *\n Math.cosh(freqForT))) /\n dampedAngularFreq);\n };\n }\n return {\n calculatedDuration: isResolvedFromDuration ? duration || null : null,\n next: (t) => {\n const current = resolveSpring(t);\n if (!isResolvedFromDuration) {\n let currentVelocity = initialVelocity;\n if (t !== 0) {\n /**\n * We only need to calculate velocity for under-damped springs\n * as over- and critically-damped springs can't overshoot, so\n * checking only for displacement is enough.\n */\n if (dampingRatio < 1) {\n currentVelocity = calcGeneratorVelocity(resolveSpring, t, current);\n }\n else {\n currentVelocity = 0;\n }\n }\n const isBelowVelocityThreshold = Math.abs(currentVelocity) <= restSpeed;\n const isBelowDisplacementThreshold = Math.abs(target - current) <= restDelta;\n state.done =\n isBelowVelocityThreshold && isBelowDisplacementThreshold;\n }\n else {\n state.done = t >= duration;\n }\n state.value = state.done ? target : current;\n return state;\n },\n };\n}\n\nexport { spring };\n","/**\n * Implement a practical max duration for keyframe generation\n * to prevent infinite loops\n */\nconst maxGeneratorDuration = 20000;\nfunction calcGeneratorDuration(generator) {\n let duration = 0;\n const timeStep = 50;\n let state = generator.next(duration);\n while (!state.done && duration < maxGeneratorDuration) {\n duration += timeStep;\n state = generator.next(duration);\n }\n return duration >= maxGeneratorDuration ? Infinity : duration;\n}\n\nexport { calcGeneratorDuration, maxGeneratorDuration };\n","import { velocityPerSecond } from '../../../utils/velocity-per-second.mjs';\n\nconst velocitySampleDuration = 5; // ms\nfunction calcGeneratorVelocity(resolveValue, t, current) {\n const prevT = Math.max(t - velocitySampleDuration, 0);\n return velocityPerSecond(current - resolveValue(prevT), t - prevT);\n}\n\nexport { calcGeneratorVelocity };\n","const instantAnimationState = {\n current: false,\n};\n\nexport { instantAnimationState };\n","const isBezierDefinition = (easing) => Array.isArray(easing) && typeof easing[0] === \"number\";\n\nexport { isBezierDefinition };\n","import { isBezierDefinition } from '../../../easing/utils/is-bezier-definition.mjs';\n\nfunction isWaapiSupportedEasing(easing) {\n return Boolean(!easing ||\n (typeof easing === \"string\" && supportedWaapiEasing[easing]) ||\n isBezierDefinition(easing) ||\n (Array.isArray(easing) && easing.every(isWaapiSupportedEasing)));\n}\nconst cubicBezierAsString = ([a, b, c, d]) => `cubic-bezier(${a}, ${b}, ${c}, ${d})`;\nconst supportedWaapiEasing = {\n linear: \"linear\",\n ease: \"ease\",\n easeIn: \"ease-in\",\n easeOut: \"ease-out\",\n easeInOut: \"ease-in-out\",\n circIn: cubicBezierAsString([0, 0.65, 0.55, 1]),\n circOut: cubicBezierAsString([0.55, 0, 1, 0.45]),\n backIn: cubicBezierAsString([0.31, 0.01, 0.66, -0.59]),\n backOut: cubicBezierAsString([0.33, 1.53, 0.69, 0.99]),\n};\nfunction mapEasingToNativeEasing(easing) {\n if (!easing)\n return undefined;\n return isBezierDefinition(easing)\n ? cubicBezierAsString(easing)\n : Array.isArray(easing)\n ? easing.map(mapEasingToNativeEasing)\n : supportedWaapiEasing[easing];\n}\n\nexport { cubicBezierAsString, isWaapiSupportedEasing, mapEasingToNativeEasing, supportedWaapiEasing };\n","import { animateStyle } from './index.mjs';\nimport { isWaapiSupportedEasing } from './easing.mjs';\nimport { getFinalKeyframe } from './utils/get-final-keyframe.mjs';\nimport { animateValue } from '../js/index.mjs';\nimport { millisecondsToSeconds, secondsToMilliseconds } from '../../../utils/time-conversion.mjs';\nimport { memo } from '../../../utils/memo.mjs';\nimport { noop } from '../../../utils/noop.mjs';\nimport { frame, cancelFrame } from '../../../frameloop/frame.mjs';\n\nconst supportsWaapi = memo(() => Object.hasOwnProperty.call(Element.prototype, \"animate\"));\n/**\n * A list of values that can be hardware-accelerated.\n */\nconst acceleratedValues = new Set([\n \"opacity\",\n \"clipPath\",\n \"filter\",\n \"transform\",\n \"backgroundColor\",\n]);\n/**\n * 10ms is chosen here as it strikes a balance between smooth\n * results (more than one keyframe per frame at 60fps) and\n * keyframe quantity.\n */\nconst sampleDelta = 10; //ms\n/**\n * Implement a practical max duration for keyframe generation\n * to prevent infinite loops\n */\nconst maxDuration = 20000;\nconst requiresPregeneratedKeyframes = (valueName, options) => options.type === \"spring\" ||\n valueName === \"backgroundColor\" ||\n !isWaapiSupportedEasing(options.ease);\nfunction createAcceleratedAnimation(value, valueName, { onUpdate, onComplete, ...options }) {\n const canAccelerateAnimation = supportsWaapi() &&\n acceleratedValues.has(valueName) &&\n !options.repeatDelay &&\n options.repeatType !== \"mirror\" &&\n options.damping !== 0 &&\n options.type !== \"inertia\";\n if (!canAccelerateAnimation)\n return false;\n /**\n * TODO: Unify with js/index\n */\n let hasStopped = false;\n let resolveFinishedPromise;\n let currentFinishedPromise;\n /**\n * Cancelling an animation will write to the DOM. For safety we want to defer\n * this until the next `update` frame lifecycle. This flag tracks whether we\n * have a pending cancel, if so we shouldn't allow animations to finish.\n */\n let pendingCancel = false;\n /**\n * Resolve the current Promise every time we enter the\n * finished state. This is WAAPI-compatible behaviour.\n */\n const updateFinishedPromise = () => {\n currentFinishedPromise = new Promise((resolve) => {\n resolveFinishedPromise = resolve;\n });\n };\n // Create the first finished promise\n updateFinishedPromise();\n let { keyframes, duration = 300, ease, times } = options;\n /**\n * If this animation needs pre-generated keyframes then generate.\n */\n if (requiresPregeneratedKeyframes(valueName, options)) {\n const sampleAnimation = animateValue({\n ...options,\n repeat: 0,\n delay: 0,\n });\n let state = { done: false, value: keyframes[0] };\n const pregeneratedKeyframes = [];\n /**\n * Bail after 20 seconds of pre-generated keyframes as it's likely\n * we're heading for an infinite loop.\n */\n let t = 0;\n while (!state.done && t < maxDuration) {\n state = sampleAnimation.sample(t);\n pregeneratedKeyframes.push(state.value);\n t += sampleDelta;\n }\n times = undefined;\n keyframes = pregeneratedKeyframes;\n duration = t - sampleDelta;\n ease = \"linear\";\n }\n const animation = animateStyle(value.owner.current, valueName, keyframes, {\n ...options,\n duration,\n /**\n * This function is currently not called if ease is provided\n * as a function so the cast is safe.\n *\n * However it would be possible for a future refinement to port\n * in easing pregeneration from Motion One for browsers that\n * support the upcoming `linear()` easing function.\n */\n ease: ease,\n times,\n });\n const cancelAnimation = () => {\n pendingCancel = false;\n animation.cancel();\n };\n const safeCancel = () => {\n pendingCancel = true;\n frame.update(cancelAnimation);\n resolveFinishedPromise();\n updateFinishedPromise();\n };\n /**\n * Prefer the `onfinish` prop as it's more widely supported than\n * the `finished` promise.\n *\n * Here, we synchronously set the provided MotionValue to the end\n * keyframe. If we didn't, when the WAAPI animation is finished it would\n * be removed from the element which would then revert to its old styles.\n */\n animation.onfinish = () => {\n if (pendingCancel)\n return;\n value.set(getFinalKeyframe(keyframes, options));\n onComplete && onComplete();\n safeCancel();\n };\n /**\n * Animation interrupt callback.\n */\n const controls = {\n then(resolve, reject) {\n return currentFinishedPromise.then(resolve, reject);\n },\n attachTimeline(timeline) {\n animation.timeline = timeline;\n animation.onfinish = null;\n return noop;\n },\n get time() {\n return millisecondsToSeconds(animation.currentTime || 0);\n },\n set time(newTime) {\n animation.currentTime = secondsToMilliseconds(newTime);\n },\n get speed() {\n return animation.playbackRate;\n },\n set speed(newSpeed) {\n animation.playbackRate = newSpeed;\n },\n get duration() {\n return millisecondsToSeconds(duration);\n },\n play: () => {\n if (hasStopped)\n return;\n animation.play();\n /**\n * Cancel any pending cancel tasks\n */\n cancelFrame(cancelAnimation);\n },\n pause: () => animation.pause(),\n stop: () => {\n hasStopped = true;\n if (animation.playState === \"idle\")\n return;\n /**\n * WAAPI doesn't natively have any interruption capabilities.\n *\n * Rather than read commited styles back out of the DOM, we can\n * create a renderless JS animation and sample it twice to calculate\n * its current value, \"previous\" value, and therefore allow\n * Motion to calculate velocity for any subsequent animation.\n */\n const { currentTime } = animation;\n if (currentTime) {\n const sampleAnimation = animateValue({\n ...options,\n autoplay: false,\n });\n value.setWithVelocity(sampleAnimation.sample(currentTime - sampleDelta).value, sampleAnimation.sample(currentTime).value, sampleDelta);\n }\n safeCancel();\n },\n complete: () => {\n if (pendingCancel)\n return;\n animation.finish();\n },\n cancel: safeCancel,\n };\n return controls;\n}\n\nexport { createAcceleratedAnimation };\n","import { mapEasingToNativeEasing } from './easing.mjs';\n\nfunction animateStyle(element, valueName, keyframes, { delay = 0, duration, repeat = 0, repeatType = \"loop\", ease, times, } = {}) {\n const keyframeOptions = { [valueName]: keyframes };\n if (times)\n keyframeOptions.offset = times;\n const easing = mapEasingToNativeEasing(ease);\n /**\n * If this is an easing array, apply to keyframes, not animation as a whole\n */\n if (Array.isArray(easing))\n keyframeOptions.easing = easing;\n return element.animate(keyframeOptions, {\n delay,\n duration,\n easing: !Array.isArray(easing) ? easing : \"linear\",\n fill: \"both\",\n iterations: repeat + 1,\n direction: repeatType === \"reverse\" ? \"alternate\" : \"normal\",\n });\n}\n\nexport { animateStyle };\n","function getFinalKeyframe(keyframes, { repeat, repeatType = \"loop\" }) {\n const index = repeat && repeatType !== \"loop\" && repeat % 2 === 1\n ? 0\n : keyframes.length - 1;\n return keyframes[index];\n}\n\nexport { getFinalKeyframe };\n","import { transformProps } from '../../render/html/utils/transform.mjs';\n\nconst underDampedSpring = {\n type: \"spring\",\n stiffness: 500,\n damping: 25,\n restSpeed: 10,\n};\nconst criticallyDampedSpring = (target) => ({\n type: \"spring\",\n stiffness: 550,\n damping: target === 0 ? 2 * Math.sqrt(550) : 30,\n restSpeed: 10,\n});\nconst keyframesTransition = {\n type: \"keyframes\",\n duration: 0.8,\n};\n/**\n * Default easing curve is a slightly shallower version of\n * the default browser easing curve.\n */\nconst ease = {\n type: \"keyframes\",\n ease: [0.25, 0.1, 0.35, 1],\n duration: 0.3,\n};\nconst getDefaultTransition = (valueKey, { keyframes }) => {\n if (keyframes.length > 2) {\n return keyframesTransition;\n }\n else if (transformProps.has(valueKey)) {\n return valueKey.startsWith(\"scale\")\n ? criticallyDampedSpring(keyframes[1])\n : underDampedSpring;\n }\n return ease;\n};\n\nexport { getDefaultTransition };\n","import { complex } from '../../value/types/complex/index.mjs';\n\n/**\n * Check if a value is animatable. Examples:\n *\n * ✅: 100, \"100px\", \"#fff\"\n * ❌: \"block\", \"url(2.jpg)\"\n * @param value\n *\n * @internal\n */\nconst isAnimatable = (key, value) => {\n // If the list of keys tat might be non-animatable grows, replace with Set\n if (key === \"zIndex\")\n return false;\n // If it's a number or a keyframes array, we can animate it. We might at some point\n // need to do a deep isAnimatable check of keyframes, or let Popmotion handle this,\n // but for now lets leave it like this for performance reasons\n if (typeof value === \"number\" || Array.isArray(value))\n return true;\n if (typeof value === \"string\" && // It's animatable if we have a string\n (complex.test(value) || value === \"0\") && // And it contains numbers and/or colors\n !value.startsWith(\"url(\") // Unless it starts with \"url(\"\n ) {\n return true;\n }\n return false;\n};\n\nexport { isAnimatable };\n","import { isZeroValueString } from '../../utils/is-zero-value-string.mjs';\n\nfunction isNone(value) {\n if (typeof value === \"number\") {\n return value === 0;\n }\n else if (value !== null) {\n return value === \"none\" || value === \"0\" || isZeroValueString(value);\n }\n}\n\nexport { isNone };\n","const MotionGlobalConfig = {\n skipAnimations: false,\n};\n\nexport { MotionGlobalConfig };\n","import { warning } from '../../utils/errors.mjs';\nimport { secondsToMilliseconds } from '../../utils/time-conversion.mjs';\nimport { instantAnimationState } from '../../utils/use-instant-transition-state.mjs';\nimport { createAcceleratedAnimation } from '../animators/waapi/create-accelerated-animation.mjs';\nimport { createInstantAnimation } from '../animators/instant.mjs';\nimport { getDefaultTransition } from '../utils/default-transitions.mjs';\nimport { isAnimatable } from '../utils/is-animatable.mjs';\nimport { getKeyframes } from '../utils/keyframes.mjs';\nimport { getValueTransition, isTransitionDefined } from '../utils/transitions.mjs';\nimport { animateValue } from '../animators/js/index.mjs';\nimport { MotionGlobalConfig } from '../../utils/GlobalConfig.mjs';\n\nconst animateMotionValue = (valueName, value, target, transition = {}) => {\n return (onComplete) => {\n const valueTransition = getValueTransition(transition, valueName) || {};\n /**\n * Most transition values are currently completely overwritten by value-specific\n * transitions. In the future it'd be nicer to blend these transitions. But for now\n * delay actually does inherit from the root transition if not value-specific.\n */\n const delay = valueTransition.delay || transition.delay || 0;\n /**\n * Elapsed isn't a public transition option but can be passed through from\n * optimized appear effects in milliseconds.\n */\n let { elapsed = 0 } = transition;\n elapsed = elapsed - secondsToMilliseconds(delay);\n const keyframes = getKeyframes(value, valueName, target, valueTransition);\n /**\n * Check if we're able to animate between the start and end keyframes,\n * and throw a warning if we're attempting to animate between one that's\n * animatable and another that isn't.\n */\n const originKeyframe = keyframes[0];\n const targetKeyframe = keyframes[keyframes.length - 1];\n const isOriginAnimatable = isAnimatable(valueName, originKeyframe);\n const isTargetAnimatable = isAnimatable(valueName, targetKeyframe);\n warning(isOriginAnimatable === isTargetAnimatable, `You are trying to animate ${valueName} from \"${originKeyframe}\" to \"${targetKeyframe}\". ${originKeyframe} is not an animatable value - to enable this animation set ${originKeyframe} to a value animatable to ${targetKeyframe} via the \\`style\\` property.`);\n let options = {\n keyframes,\n velocity: value.getVelocity(),\n ease: \"easeOut\",\n ...valueTransition,\n delay: -elapsed,\n onUpdate: (v) => {\n value.set(v);\n valueTransition.onUpdate && valueTransition.onUpdate(v);\n },\n onComplete: () => {\n onComplete();\n valueTransition.onComplete && valueTransition.onComplete();\n },\n };\n /**\n * If there's no transition defined for this value, we can generate\n * unqiue transition settings for this value.\n */\n if (!isTransitionDefined(valueTransition)) {\n options = {\n ...options,\n ...getDefaultTransition(valueName, options),\n };\n }\n /**\n * Both WAAPI and our internal animation functions use durations\n * as defined by milliseconds, while our external API defines them\n * as seconds.\n */\n if (options.duration) {\n options.duration = secondsToMilliseconds(options.duration);\n }\n if (options.repeatDelay) {\n options.repeatDelay = secondsToMilliseconds(options.repeatDelay);\n }\n if (!isOriginAnimatable ||\n !isTargetAnimatable ||\n instantAnimationState.current ||\n valueTransition.type === false ||\n MotionGlobalConfig.skipAnimations) {\n /**\n * If we can't animate this value, or the global instant animation flag is set,\n * or this is simply defined as an instant transition, return an instant transition.\n */\n return createInstantAnimation(instantAnimationState.current\n ? { ...options, delay: 0 }\n : options);\n }\n /**\n * Animate via WAAPI if possible.\n */\n if (\n /**\n * If this is a handoff animation, the optimised animation will be running via\n * WAAPI. Therefore, this animation must be JS to ensure it runs \"under\" the\n * optimised animation.\n */\n !transition.isHandoff &&\n value.owner &&\n value.owner.current instanceof HTMLElement &&\n /**\n * If we're outputting values to onUpdate then we can't use WAAPI as there's\n * no way to read the value from WAAPI every frame.\n */\n !value.owner.getProps().onUpdate) {\n const acceleratedAnimation = createAcceleratedAnimation(value, valueName, options);\n if (acceleratedAnimation)\n return acceleratedAnimation;\n }\n /**\n * If we didn't create an accelerated animation, create a JS animation\n */\n return animateValue(options);\n };\n};\n\nexport { animateMotionValue };\n","import { getAnimatableNone } from '../../render/dom/value-types/animatable-none.mjs';\nimport { isAnimatable } from './is-animatable.mjs';\nimport { isNone } from './is-none.mjs';\n\nfunction getKeyframes(value, valueName, target, transition) {\n const isTargetAnimatable = isAnimatable(valueName, target);\n let keyframes;\n if (Array.isArray(target)) {\n keyframes = [...target];\n }\n else {\n keyframes = [null, target];\n }\n const defaultOrigin = transition.from !== undefined ? transition.from : value.get();\n let animatableTemplateValue = undefined;\n const noneKeyframeIndexes = [];\n for (let i = 0; i < keyframes.length; i++) {\n /**\n * Fill null/wildcard keyframes\n */\n if (keyframes[i] === null) {\n keyframes[i] = i === 0 ? defaultOrigin : keyframes[i - 1];\n }\n if (isNone(keyframes[i])) {\n noneKeyframeIndexes.push(i);\n }\n // TODO: Clean this conditional, it works for now\n if (typeof keyframes[i] === \"string\" &&\n keyframes[i] !== \"none\" &&\n keyframes[i] !== \"0\") {\n animatableTemplateValue = keyframes[i];\n }\n }\n if (isTargetAnimatable &&\n noneKeyframeIndexes.length &&\n animatableTemplateValue) {\n for (let i = 0; i < noneKeyframeIndexes.length; i++) {\n const index = noneKeyframeIndexes[i];\n keyframes[index] = getAnimatableNone(valueName, animatableTemplateValue);\n }\n }\n return keyframes;\n}\n\nexport { getKeyframes };\n","import { animateValue } from './js/index.mjs';\nimport { noop } from '../../utils/noop.mjs';\n\nfunction createInstantAnimation({ keyframes, delay, onUpdate, onComplete, }) {\n const setValue = () => {\n onUpdate && onUpdate(keyframes[keyframes.length - 1]);\n onComplete && onComplete();\n /**\n * TODO: As this API grows it could make sense to always return\n * animateValue. This will be a bigger project as animateValue\n * is frame-locked whereas this function resolves instantly.\n * This is a behavioural change and also has ramifications regarding\n * assumptions within tests.\n */\n return {\n time: 0,\n speed: 1,\n duration: 0,\n play: (noop),\n pause: (noop),\n stop: (noop),\n then: (resolve) => {\n resolve();\n return Promise.resolve();\n },\n cancel: (noop),\n complete: (noop),\n };\n };\n return delay\n ? animateValue({\n keyframes: [0, 1],\n duration: 0,\n delay,\n onComplete: setValue,\n })\n : setValue();\n}\n\nexport { createInstantAnimation };\n","import { animateMotionValue } from './motion-value.mjs';\nimport { motionValue } from '../../value/index.mjs';\nimport { isMotionValue } from '../../value/utils/is-motion-value.mjs';\n\nfunction animateSingleValue(value, keyframes, options) {\n const motionValue$1 = isMotionValue(value) ? value : motionValue(value);\n motionValue$1.start(animateMotionValue(\"\", motionValue$1, keyframes, options));\n return motionValue$1.animation;\n}\n\nexport { animateSingleValue };\n","import { transformProps } from '../../render/html/utils/transform.mjs';\nimport { optimizedAppearDataAttribute } from '../optimized-appear/data-id.mjs';\nimport { animateMotionValue } from './motion-value.mjs';\nimport { isWillChangeMotionValue } from '../../value/use-will-change/is.mjs';\nimport { setTarget } from '../../render/utils/setters.mjs';\nimport { getValueTransition } from '../utils/transitions.mjs';\nimport { frame } from '../../frameloop/frame.mjs';\n\n/**\n * Decide whether we should block this animation. Previously, we achieved this\n * just by checking whether the key was listed in protectedKeys, but this\n * posed problems if an animation was triggered by afterChildren and protectedKeys\n * had been set to true in the meantime.\n */\nfunction shouldBlockAnimation({ protectedKeys, needsAnimating }, key) {\n const shouldBlock = protectedKeys.hasOwnProperty(key) && needsAnimating[key] !== true;\n needsAnimating[key] = false;\n return shouldBlock;\n}\nfunction hasKeyframesChanged(value, target) {\n const current = value.get();\n if (Array.isArray(target)) {\n for (let i = 0; i < target.length; i++) {\n if (target[i] !== current)\n return true;\n }\n }\n else {\n return current !== target;\n }\n}\nfunction animateTarget(visualElement, definition, { delay = 0, transitionOverride, type } = {}) {\n let { transition = visualElement.getDefaultTransition(), transitionEnd, ...target } = visualElement.makeTargetAnimatable(definition);\n const willChange = visualElement.getValue(\"willChange\");\n if (transitionOverride)\n transition = transitionOverride;\n const animations = [];\n const animationTypeState = type &&\n visualElement.animationState &&\n visualElement.animationState.getState()[type];\n for (const key in target) {\n const value = visualElement.getValue(key);\n const valueTarget = target[key];\n if (!value ||\n valueTarget === undefined ||\n (animationTypeState &&\n shouldBlockAnimation(animationTypeState, key))) {\n continue;\n }\n const valueTransition = {\n delay,\n elapsed: 0,\n ...getValueTransition(transition || {}, key),\n };\n /**\n * If this is the first time a value is being animated, check\n * to see if we're handling off from an existing animation.\n */\n if (window.HandoffAppearAnimations) {\n const appearId = visualElement.getProps()[optimizedAppearDataAttribute];\n if (appearId) {\n const elapsed = window.HandoffAppearAnimations(appearId, key, value, frame);\n if (elapsed !== null) {\n valueTransition.elapsed = elapsed;\n valueTransition.isHandoff = true;\n }\n }\n }\n let canSkip = !valueTransition.isHandoff &&\n !hasKeyframesChanged(value, valueTarget);\n if (valueTransition.type === \"spring\" &&\n (value.getVelocity() || valueTransition.velocity)) {\n canSkip = false;\n }\n /**\n * Temporarily disable skipping animations if there's an animation in\n * progress. Better would be to track the current target of a value\n * and compare that against valueTarget.\n */\n if (value.animation) {\n canSkip = false;\n }\n if (canSkip)\n continue;\n value.start(animateMotionValue(key, value, valueTarget, visualElement.shouldReduceMotion && transformProps.has(key)\n ? { type: false }\n : valueTransition));\n const animation = value.animation;\n if (isWillChangeMotionValue(willChange)) {\n willChange.add(key);\n animation.then(() => willChange.remove(key));\n }\n animations.push(animation);\n }\n if (transitionEnd) {\n Promise.all(animations).then(() => {\n transitionEnd && setTarget(visualElement, transitionEnd);\n });\n }\n return animations;\n}\n\nexport { animateTarget };\n","import { camelToDash } from '../../render/dom/utils/camel-to-dash.mjs';\n\nconst optimizedAppearDataId = \"framerAppearId\";\nconst optimizedAppearDataAttribute = \"data-\" + camelToDash(optimizedAppearDataId);\n\nexport { optimizedAppearDataAttribute, optimizedAppearDataId };\n","function isAnimationControls(v) {\n return (v !== null &&\n typeof v === \"object\" &&\n typeof v.start === \"function\");\n}\n\nexport { isAnimationControls };\n","const isKeyframesTarget = (v) => {\n return Array.isArray(v);\n};\n\nexport { isKeyframesTarget };\n","/**\n * Decide whether a transition is defined on a given Transition.\n * This filters out orchestration options and returns true\n * if any options are left.\n */\nfunction isTransitionDefined({ when, delay: _delay, delayChildren, staggerChildren, staggerDirection, repeat, repeatType, repeatDelay, from, elapsed, ...transition }) {\n return !!Object.keys(transition).length;\n}\nfunction getValueTransition(transition, key) {\n return transition[key] || transition[\"default\"] || transition;\n}\n\nexport { getValueTransition, isTransitionDefined };\n","import { createContext } from 'react';\n\nconst LayoutGroupContext = createContext({});\n\nexport { LayoutGroupContext };\n","import { createContext } from 'react';\n\n/**\n * @public\n */\nconst MotionConfigContext = createContext({\n transformPagePoint: (p) => p,\n isStatic: false,\n reducedMotion: \"never\",\n});\n\nexport { MotionConfigContext };\n","import { createContext } from 'react';\n\n/**\n * @public\n */\nconst PresenceContext = createContext(null);\n\nexport { PresenceContext };\n","import { mirrorEasing } from './modifiers/mirror.mjs';\nimport { reverseEasing } from './modifiers/reverse.mjs';\n\nconst circIn = (p) => 1 - Math.sin(Math.acos(p));\nconst circOut = reverseEasing(circIn);\nconst circInOut = mirrorEasing(circIn);\n\nexport { circIn, circInOut, circOut };\n","// Accepts an easing function and returns a new one that outputs mirrored values for\n// the second half of the animation. Turns easeIn into easeInOut.\nconst mirrorEasing = (easing) => (p) => p <= 0.5 ? easing(2 * p) / 2 : (2 - easing(2 * (1 - p))) / 2;\n\nexport { mirrorEasing };\n","// Accepts an easing function and returns a new one that outputs reversed values.\n// Turns easeIn into easeOut.\nconst reverseEasing = (easing) => (p) => 1 - easing(1 - p);\n\nexport { reverseEasing };\n","const isEasingArray = (ease) => {\n return Array.isArray(ease) && typeof ease[0] !== \"number\";\n};\n\nexport { isEasingArray };\n","class Queue {\n constructor() {\n this.order = [];\n this.scheduled = new Set();\n }\n add(process) {\n if (!this.scheduled.has(process)) {\n this.scheduled.add(process);\n this.order.push(process);\n return true;\n }\n }\n remove(process) {\n const index = this.order.indexOf(process);\n if (index !== -1) {\n this.order.splice(index, 1);\n this.scheduled.delete(process);\n }\n }\n clear() {\n this.order.length = 0;\n this.scheduled.clear();\n }\n}\nfunction createRenderStep(runNextFrame) {\n /**\n * We create and reuse two queues, one to queue jobs for the current frame\n * and one for the next. We reuse to avoid triggering GC after x frames.\n */\n let thisFrame = new Queue();\n let nextFrame = new Queue();\n let numToRun = 0;\n /**\n * Track whether we're currently processing jobs in this step. This way\n * we can decide whether to schedule new jobs for this frame or next.\n */\n let isProcessing = false;\n let flushNextFrame = false;\n /**\n * A set of processes which were marked keepAlive when scheduled.\n */\n const toKeepAlive = new WeakSet();\n const step = {\n /**\n * Schedule a process to run on the next frame.\n */\n schedule: (callback, keepAlive = false, immediate = false) => {\n const addToCurrentFrame = immediate && isProcessing;\n const queue = addToCurrentFrame ? thisFrame : nextFrame;\n if (keepAlive)\n toKeepAlive.add(callback);\n if (queue.add(callback) && addToCurrentFrame && isProcessing) {\n // If we're adding it to the currently running queue, update its measured size\n numToRun = thisFrame.order.length;\n }\n return callback;\n },\n /**\n * Cancel the provided callback from running on the next frame.\n */\n cancel: (callback) => {\n nextFrame.remove(callback);\n toKeepAlive.delete(callback);\n },\n /**\n * Execute all schedule callbacks.\n */\n process: (frameData) => {\n /**\n * If we're already processing we've probably been triggered by a flushSync\n * inside an existing process. Instead of executing, mark flushNextFrame\n * as true and ensure we flush the following frame at the end of this one.\n */\n if (isProcessing) {\n flushNextFrame = true;\n return;\n }\n isProcessing = true;\n [thisFrame, nextFrame] = [nextFrame, thisFrame];\n // Clear the next frame queue\n nextFrame.clear();\n // Execute this frame\n numToRun = thisFrame.order.length;\n if (numToRun) {\n for (let i = 0; i < numToRun; i++) {\n const callback = thisFrame.order[i];\n callback(frameData);\n if (toKeepAlive.has(callback)) {\n step.schedule(callback);\n runNextFrame();\n }\n }\n }\n isProcessing = false;\n if (flushNextFrame) {\n flushNextFrame = false;\n step.process(frameData);\n }\n },\n };\n return step;\n}\n\nexport { createRenderStep };\n","import { createRenderStep } from './render-step.mjs';\n\nconst stepsOrder = [\n \"prepare\",\n \"read\",\n \"update\",\n \"preRender\",\n \"render\",\n \"postRender\",\n];\nconst maxElapsed = 40;\nfunction createRenderBatcher(scheduleNextBatch, allowKeepAlive) {\n let runNextFrame = false;\n let useDefaultElapsed = true;\n const state = {\n delta: 0,\n timestamp: 0,\n isProcessing: false,\n };\n const steps = stepsOrder.reduce((acc, key) => {\n acc[key] = createRenderStep(() => (runNextFrame = true));\n return acc;\n }, {});\n const processStep = (stepId) => steps[stepId].process(state);\n const processBatch = () => {\n const timestamp = performance.now();\n runNextFrame = false;\n state.delta = useDefaultElapsed\n ? 1000 / 60\n : Math.max(Math.min(timestamp - state.timestamp, maxElapsed), 1);\n state.timestamp = timestamp;\n state.isProcessing = true;\n stepsOrder.forEach(processStep);\n state.isProcessing = false;\n if (runNextFrame && allowKeepAlive) {\n useDefaultElapsed = false;\n scheduleNextBatch(processBatch);\n }\n };\n const wake = () => {\n runNextFrame = true;\n useDefaultElapsed = true;\n if (!state.isProcessing) {\n scheduleNextBatch(processBatch);\n }\n };\n const schedule = stepsOrder.reduce((acc, key) => {\n const step = steps[key];\n acc[key] = (process, keepAlive = false, immediate = false) => {\n if (!runNextFrame)\n wake();\n return step.schedule(process, keepAlive, immediate);\n };\n return acc;\n }, {});\n const cancel = (process) => stepsOrder.forEach((key) => steps[key].cancel(process));\n return { schedule, cancel, state, steps };\n}\n\nexport { createRenderBatcher, stepsOrder };\n","import { noop } from '../utils/noop.mjs';\nimport { createRenderBatcher } from './batcher.mjs';\n\nconst { schedule: frame, cancel: cancelFrame, state: frameData, steps, } = createRenderBatcher(typeof requestAnimationFrame !== \"undefined\" ? requestAnimationFrame : noop, true);\n\nexport { cancelFrame, frame, frameData, steps };\n","const featureProps = {\n animation: [\n \"animate\",\n \"variants\",\n \"whileHover\",\n \"whileTap\",\n \"exit\",\n \"whileInView\",\n \"whileFocus\",\n \"whileDrag\",\n ],\n exit: [\"exit\"],\n drag: [\"drag\", \"dragControls\"],\n focus: [\"whileFocus\"],\n hover: [\"whileHover\", \"onHoverStart\", \"onHoverEnd\"],\n tap: [\"whileTap\", \"onTap\", \"onTapStart\", \"onTapCancel\"],\n pan: [\"onPan\", \"onPanStart\", \"onPanSessionStart\", \"onPanEnd\"],\n inView: [\"whileInView\", \"onViewportEnter\", \"onViewportLeave\"],\n layout: [\"layout\", \"layoutId\"],\n};\nconst featureDefinitions = {};\nfor (const key in featureProps) {\n featureDefinitions[key] = {\n isEnabled: (props) => featureProps[key].some((name) => !!props[name]),\n };\n}\n\nexport { featureDefinitions };\n","import { scaleCorrectors } from '../../projection/styles/scale-correction.mjs';\nimport { transformProps } from '../../render/html/utils/transform.mjs';\n\nfunction isForcedMotionValue(key, { layout, layoutId }) {\n return (transformProps.has(key) ||\n key.startsWith(\"origin\") ||\n ((layout || layoutId !== undefined) &&\n (!!scaleCorrectors[key] || key === \"opacity\")));\n}\n\nexport { isForcedMotionValue };\n","/**\n * Bounding boxes tend to be defined as top, left, right, bottom. For various operations\n * it's easier to consider each axis individually. This function returns a bounding box\n * as a map of single-axis min/max values.\n */\nfunction convertBoundingBoxToBox({ top, left, right, bottom, }) {\n return {\n x: { min: left, max: right },\n y: { min: top, max: bottom },\n };\n}\nfunction convertBoxToBoundingBox({ x, y }) {\n return { top: y.min, right: x.max, bottom: y.max, left: x.min };\n}\n/**\n * Applies a TransformPoint function to a bounding box. TransformPoint is usually a function\n * provided by Framer to allow measured points to be corrected for device scaling. This is used\n * when measuring DOM elements and DOM event points.\n */\nfunction transformBoxPoints(point, transformPoint) {\n if (!transformPoint)\n return point;\n const topLeft = transformPoint({ x: point.left, y: point.top });\n const bottomRight = transformPoint({ x: point.right, y: point.bottom });\n return {\n top: topLeft.y,\n left: topLeft.x,\n bottom: bottomRight.y,\n right: bottomRight.x,\n };\n}\n\nexport { convertBoundingBoxToBox, convertBoxToBoundingBox, transformBoxPoints };\n","import { mix } from '../../utils/mix.mjs';\nimport { hasTransform } from '../utils/has-transform.mjs';\n\n/**\n * Scales a point based on a factor and an originPoint\n */\nfunction scalePoint(point, scale, originPoint) {\n const distanceFromOrigin = point - originPoint;\n const scaled = scale * distanceFromOrigin;\n return originPoint + scaled;\n}\n/**\n * Applies a translate/scale delta to a point\n */\nfunction applyPointDelta(point, translate, scale, originPoint, boxScale) {\n if (boxScale !== undefined) {\n point = scalePoint(point, boxScale, originPoint);\n }\n return scalePoint(point, scale, originPoint) + translate;\n}\n/**\n * Applies a translate/scale delta to an axis\n */\nfunction applyAxisDelta(axis, translate = 0, scale = 1, originPoint, boxScale) {\n axis.min = applyPointDelta(axis.min, translate, scale, originPoint, boxScale);\n axis.max = applyPointDelta(axis.max, translate, scale, originPoint, boxScale);\n}\n/**\n * Applies a translate/scale delta to a box\n */\nfunction applyBoxDelta(box, { x, y }) {\n applyAxisDelta(box.x, x.translate, x.scale, x.originPoint);\n applyAxisDelta(box.y, y.translate, y.scale, y.originPoint);\n}\n/**\n * Apply a tree of deltas to a box. We do this to calculate the effect of all the transforms\n * in a tree upon our box before then calculating how to project it into our desired viewport-relative box\n *\n * This is the final nested loop within updateLayoutDelta for future refactoring\n */\nfunction applyTreeDeltas(box, treeScale, treePath, isSharedTransition = false) {\n const treeLength = treePath.length;\n if (!treeLength)\n return;\n // Reset the treeScale\n treeScale.x = treeScale.y = 1;\n let node;\n let delta;\n for (let i = 0; i < treeLength; i++) {\n node = treePath[i];\n delta = node.projectionDelta;\n /**\n * TODO: Prefer to remove this, but currently we have motion components with\n * display: contents in Framer.\n */\n const instance = node.instance;\n if (instance &&\n instance.style &&\n instance.style.display === \"contents\") {\n continue;\n }\n if (isSharedTransition &&\n node.options.layoutScroll &&\n node.scroll &&\n node !== node.root) {\n transformBox(box, {\n x: -node.scroll.offset.x,\n y: -node.scroll.offset.y,\n });\n }\n if (delta) {\n // Incoporate each ancestor's scale into a culmulative treeScale for this component\n treeScale.x *= delta.x.scale;\n treeScale.y *= delta.y.scale;\n // Apply each ancestor's calculated delta into this component's recorded layout box\n applyBoxDelta(box, delta);\n }\n if (isSharedTransition && hasTransform(node.latestValues)) {\n transformBox(box, node.latestValues);\n }\n }\n /**\n * Snap tree scale back to 1 if it's within a non-perceivable threshold.\n * This will help reduce useless scales getting rendered.\n */\n treeScale.x = snapToDefault(treeScale.x);\n treeScale.y = snapToDefault(treeScale.y);\n}\nfunction snapToDefault(scale) {\n if (Number.isInteger(scale))\n return scale;\n return scale > 1.0000000000001 || scale < 0.999999999999 ? scale : 1;\n}\nfunction translateAxis(axis, distance) {\n axis.min = axis.min + distance;\n axis.max = axis.max + distance;\n}\n/**\n * Apply a transform to an axis from the latest resolved motion values.\n * This function basically acts as a bridge between a flat motion value map\n * and applyAxisDelta\n */\nfunction transformAxis(axis, transforms, [key, scaleKey, originKey]) {\n const axisOrigin = transforms[originKey] !== undefined ? transforms[originKey] : 0.5;\n const originPoint = mix(axis.min, axis.max, axisOrigin);\n // Apply the axis delta to the final axis\n applyAxisDelta(axis, transforms[key], transforms[scaleKey], originPoint, transforms.scale);\n}\n/**\n * The names of the motion values we want to apply as translation, scale and origin.\n */\nconst xKeys = [\"x\", \"scaleX\", \"originX\"];\nconst yKeys = [\"y\", \"scaleY\", \"originY\"];\n/**\n * Apply a transform to a box from the latest resolved motion values.\n */\nfunction transformBox(box, transform) {\n transformAxis(box.x, transform, xKeys);\n transformAxis(box.y, transform, yKeys);\n}\n\nexport { applyAxisDelta, applyBoxDelta, applyPointDelta, applyTreeDeltas, scalePoint, transformAxis, transformBox, translateAxis };\n","const createAxisDelta = () => ({\n translate: 0,\n scale: 1,\n origin: 0,\n originPoint: 0,\n});\nconst createDelta = () => ({\n x: createAxisDelta(),\n y: createAxisDelta(),\n});\nconst createAxis = () => ({ min: 0, max: 0 });\nconst createBox = () => ({\n x: createAxis(),\n y: createAxis(),\n});\n\nexport { createAxis, createAxisDelta, createBox, createDelta };\n","const scaleCorrectors = {};\nfunction addScaleCorrector(correctors) {\n Object.assign(scaleCorrectors, correctors);\n}\n\nexport { addScaleCorrector, scaleCorrectors };\n","function isIdentityScale(scale) {\n return scale === undefined || scale === 1;\n}\nfunction hasScale({ scale, scaleX, scaleY }) {\n return (!isIdentityScale(scale) ||\n !isIdentityScale(scaleX) ||\n !isIdentityScale(scaleY));\n}\nfunction hasTransform(values) {\n return (hasScale(values) ||\n has2DTranslate(values) ||\n values.z ||\n values.rotate ||\n values.rotateX ||\n values.rotateY);\n}\nfunction has2DTranslate(values) {\n return is2DTranslate(values.x) || is2DTranslate(values.y);\n}\nfunction is2DTranslate(value) {\n return value && value !== \"0%\";\n}\n\nexport { has2DTranslate, hasScale, hasTransform };\n","import { convertBoundingBoxToBox, transformBoxPoints } from '../geometry/conversion.mjs';\nimport { translateAxis } from '../geometry/delta-apply.mjs';\n\nfunction measureViewportBox(instance, transformPoint) {\n return convertBoundingBoxToBox(transformBoxPoints(instance.getBoundingClientRect(), transformPoint));\n}\nfunction measurePageBox(element, rootProjectionNode, transformPagePoint) {\n const viewportBox = measureViewportBox(element, transformPagePoint);\n const { scroll } = rootProjectionNode;\n if (scroll) {\n translateAxis(viewportBox.x, scroll.offset.x);\n translateAxis(viewportBox.y, scroll.offset.y);\n }\n return viewportBox;\n}\n\nexport { measurePageBox, measureViewportBox };\n","import { invariant } from '../../../utils/errors.mjs';\nimport { isNumericalString } from '../../../utils/is-numerical-string.mjs';\nimport { isCSSVariableToken } from './is-css-variable.mjs';\n\n/**\n * Parse Framer's special CSS variable format into a CSS token and a fallback.\n *\n * ```\n * `var(--foo, #fff)` => [`--foo`, '#fff']\n * ```\n *\n * @param current\n */\nconst splitCSSVariableRegex = /var\\((--[a-zA-Z0-9-_]+),? ?([a-zA-Z0-9 ()%#.,-]+)?\\)/;\nfunction parseCSSVariable(current) {\n const match = splitCSSVariableRegex.exec(current);\n if (!match)\n return [,];\n const [, token, fallback] = match;\n return [token, fallback];\n}\nconst maxDepth = 4;\nfunction getVariableValue(current, element, depth = 1) {\n invariant(depth <= maxDepth, `Max CSS variable fallback depth detected in property \"${current}\". This may indicate a circular fallback dependency.`);\n const [token, fallback] = parseCSSVariable(current);\n // No CSS variable detected\n if (!token)\n return;\n // Attempt to read this CSS variable off the element\n const resolved = window.getComputedStyle(element).getPropertyValue(token);\n if (resolved) {\n const trimmed = resolved.trim();\n return isNumericalString(trimmed) ? parseFloat(trimmed) : trimmed;\n }\n else if (isCSSVariableToken(fallback)) {\n // The fallback might itself be a CSS variable, in which case we attempt to resolve it too.\n return getVariableValue(fallback, element, depth + 1);\n }\n else {\n return fallback;\n }\n}\n/**\n * Resolve CSS variables from\n *\n * @internal\n */\nfunction resolveCSSVariables(visualElement, { ...target }, transitionEnd) {\n const element = visualElement.current;\n if (!(element instanceof Element))\n return { target, transitionEnd };\n // If `transitionEnd` isn't `undefined`, clone it. We could clone `target` and `transitionEnd`\n // only if they change but I think this reads clearer and this isn't a performance-critical path.\n if (transitionEnd) {\n transitionEnd = { ...transitionEnd };\n }\n // Go through existing `MotionValue`s and ensure any existing CSS variables are resolved\n visualElement.values.forEach((value) => {\n const current = value.get();\n if (!isCSSVariableToken(current))\n return;\n const resolved = getVariableValue(current, element);\n if (resolved)\n value.set(resolved);\n });\n // Cycle through every target property and resolve CSS variables. Currently\n // we only read single-var properties like `var(--foo)`, not `calc(var(--foo) + 20px)`\n for (const key in target) {\n const current = target[key];\n if (!isCSSVariableToken(current))\n continue;\n const resolved = getVariableValue(current, element);\n if (!resolved)\n continue;\n // Clone target if it hasn't already been\n target[key] = resolved;\n if (!transitionEnd)\n transitionEnd = {};\n // If the user hasn't already set this key on `transitionEnd`, set it to the unresolved\n // CSS variable. This will ensure that after the animation the component will reflect\n // changes in the value of the CSS variable.\n if (transitionEnd[key] === undefined) {\n transitionEnd[key] = current;\n }\n }\n return { target, transitionEnd };\n}\n\nexport { parseCSSVariable, resolveCSSVariables };\n","import { isKeyframesTarget } from '../../../animation/utils/is-keyframes-target.mjs';\nimport { invariant } from '../../../utils/errors.mjs';\nimport { transformPropOrder } from '../../html/utils/transform.mjs';\nimport { findDimensionValueType } from '../value-types/dimensions.mjs';\nimport { isBrowser } from '../../../utils/is-browser.mjs';\nimport { number } from '../../../value/types/numbers/index.mjs';\nimport { px } from '../../../value/types/numbers/units.mjs';\n\nconst positionalKeys = new Set([\n \"width\",\n \"height\",\n \"top\",\n \"left\",\n \"right\",\n \"bottom\",\n \"x\",\n \"y\",\n \"translateX\",\n \"translateY\",\n]);\nconst isPositionalKey = (key) => positionalKeys.has(key);\nconst hasPositionalKey = (target) => {\n return Object.keys(target).some(isPositionalKey);\n};\nconst isNumOrPxType = (v) => v === number || v === px;\nconst getPosFromMatrix = (matrix, pos) => parseFloat(matrix.split(\", \")[pos]);\nconst getTranslateFromMatrix = (pos2, pos3) => (_bbox, { transform }) => {\n if (transform === \"none\" || !transform)\n return 0;\n const matrix3d = transform.match(/^matrix3d\\((.+)\\)$/);\n if (matrix3d) {\n return getPosFromMatrix(matrix3d[1], pos3);\n }\n else {\n const matrix = transform.match(/^matrix\\((.+)\\)$/);\n if (matrix) {\n return getPosFromMatrix(matrix[1], pos2);\n }\n else {\n return 0;\n }\n }\n};\nconst transformKeys = new Set([\"x\", \"y\", \"z\"]);\nconst nonTranslationalTransformKeys = transformPropOrder.filter((key) => !transformKeys.has(key));\nfunction removeNonTranslationalTransform(visualElement) {\n const removedTransforms = [];\n nonTranslationalTransformKeys.forEach((key) => {\n const value = visualElement.getValue(key);\n if (value !== undefined) {\n removedTransforms.push([key, value.get()]);\n value.set(key.startsWith(\"scale\") ? 1 : 0);\n }\n });\n // Apply changes to element before measurement\n if (removedTransforms.length)\n visualElement.render();\n return removedTransforms;\n}\nconst positionalValues = {\n // Dimensions\n width: ({ x }, { paddingLeft = \"0\", paddingRight = \"0\" }) => x.max - x.min - parseFloat(paddingLeft) - parseFloat(paddingRight),\n height: ({ y }, { paddingTop = \"0\", paddingBottom = \"0\" }) => y.max - y.min - parseFloat(paddingTop) - parseFloat(paddingBottom),\n top: (_bbox, { top }) => parseFloat(top),\n left: (_bbox, { left }) => parseFloat(left),\n bottom: ({ y }, { top }) => parseFloat(top) + (y.max - y.min),\n right: ({ x }, { left }) => parseFloat(left) + (x.max - x.min),\n // Transform\n x: getTranslateFromMatrix(4, 13),\n y: getTranslateFromMatrix(5, 14),\n};\n// Alias translate longform names\npositionalValues.translateX = positionalValues.x;\npositionalValues.translateY = positionalValues.y;\nconst convertChangedValueTypes = (target, visualElement, changedKeys) => {\n const originBbox = visualElement.measureViewportBox();\n const element = visualElement.current;\n const elementComputedStyle = getComputedStyle(element);\n const { display } = elementComputedStyle;\n const origin = {};\n // If the element is currently set to display: \"none\", make it visible before\n // measuring the target bounding box\n if (display === \"none\") {\n visualElement.setStaticValue(\"display\", target.display || \"block\");\n }\n /**\n * Record origins before we render and update styles\n */\n changedKeys.forEach((key) => {\n origin[key] = positionalValues[key](originBbox, elementComputedStyle);\n });\n // Apply the latest values (as set in checkAndConvertChangedValueTypes)\n visualElement.render();\n const targetBbox = visualElement.measureViewportBox();\n changedKeys.forEach((key) => {\n // Restore styles to their **calculated computed style**, not their actual\n // originally set style. This allows us to animate between equivalent pixel units.\n const value = visualElement.getValue(key);\n value && value.jump(origin[key]);\n target[key] = positionalValues[key](targetBbox, elementComputedStyle);\n });\n return target;\n};\nconst checkAndConvertChangedValueTypes = (visualElement, target, origin = {}, transitionEnd = {}) => {\n target = { ...target };\n transitionEnd = { ...transitionEnd };\n const targetPositionalKeys = Object.keys(target).filter(isPositionalKey);\n // We want to remove any transform values that could affect the element's bounding box before\n // it's measured. We'll reapply these later.\n let removedTransformValues = [];\n let hasAttemptedToRemoveTransformValues = false;\n const changedValueTypeKeys = [];\n targetPositionalKeys.forEach((key) => {\n const value = visualElement.getValue(key);\n if (!visualElement.hasValue(key))\n return;\n let from = origin[key];\n let fromType = findDimensionValueType(from);\n const to = target[key];\n let toType;\n // TODO: The current implementation of this basically throws an error\n // if you try and do value conversion via keyframes. There's probably\n // a way of doing this but the performance implications would need greater scrutiny,\n // as it'd be doing multiple resize-remeasure operations.\n if (isKeyframesTarget(to)) {\n const numKeyframes = to.length;\n const fromIndex = to[0] === null ? 1 : 0;\n from = to[fromIndex];\n fromType = findDimensionValueType(from);\n for (let i = fromIndex; i < numKeyframes; i++) {\n /**\n * Don't allow wildcard keyframes to be used to detect\n * a difference in value types.\n */\n if (to[i] === null)\n break;\n if (!toType) {\n toType = findDimensionValueType(to[i]);\n invariant(toType === fromType ||\n (isNumOrPxType(fromType) && isNumOrPxType(toType)), \"Keyframes must be of the same dimension as the current value\");\n }\n else {\n invariant(findDimensionValueType(to[i]) === toType, \"All keyframes must be of the same type\");\n }\n }\n }\n else {\n toType = findDimensionValueType(to);\n }\n if (fromType !== toType) {\n // If they're both just number or px, convert them both to numbers rather than\n // relying on resize/remeasure to convert (which is wasteful in this situation)\n if (isNumOrPxType(fromType) && isNumOrPxType(toType)) {\n const current = value.get();\n if (typeof current === \"string\") {\n value.set(parseFloat(current));\n }\n if (typeof to === \"string\") {\n target[key] = parseFloat(to);\n }\n else if (Array.isArray(to) && toType === px) {\n target[key] = to.map(parseFloat);\n }\n }\n else if ((fromType === null || fromType === void 0 ? void 0 : fromType.transform) &&\n (toType === null || toType === void 0 ? void 0 : toType.transform) &&\n (from === 0 || to === 0)) {\n // If one or the other value is 0, it's safe to coerce it to the\n // type of the other without measurement\n if (from === 0) {\n value.set(toType.transform(from));\n }\n else {\n target[key] = fromType.transform(to);\n }\n }\n else {\n // If we're going to do value conversion via DOM measurements, we first\n // need to remove non-positional transform values that could affect the bbox measurements.\n if (!hasAttemptedToRemoveTransformValues) {\n removedTransformValues =\n removeNonTranslationalTransform(visualElement);\n hasAttemptedToRemoveTransformValues = true;\n }\n changedValueTypeKeys.push(key);\n transitionEnd[key] =\n transitionEnd[key] !== undefined\n ? transitionEnd[key]\n : target[key];\n value.jump(to);\n }\n }\n });\n if (changedValueTypeKeys.length) {\n const scrollY = changedValueTypeKeys.indexOf(\"height\") >= 0\n ? window.pageYOffset\n : null;\n const convertedTarget = convertChangedValueTypes(target, visualElement, changedValueTypeKeys);\n // If we removed transform values, reapply them before the next render\n if (removedTransformValues.length) {\n removedTransformValues.forEach(([key, value]) => {\n visualElement.getValue(key).set(value);\n });\n }\n // Reapply original values\n visualElement.render();\n // Restore scroll position\n if (isBrowser && scrollY !== null) {\n window.scrollTo({ top: scrollY });\n }\n return { target: convertedTarget, transitionEnd };\n }\n else {\n return { target, transitionEnd };\n }\n};\n/**\n * Convert value types for x/y/width/height/top/left/bottom/right\n *\n * Allows animation between `'auto'` -> `'100%'` or `0` -> `'calc(50% - 10vw)'`\n *\n * @internal\n */\nfunction unitConversion(visualElement, target, origin, transitionEnd) {\n return hasPositionalKey(target)\n ? checkAndConvertChangedValueTypes(visualElement, target, origin, transitionEnd)\n : { target, transitionEnd };\n}\n\nexport { positionalValues, unitConversion };\n","import { resolveCSSVariables } from './css-variables-conversion.mjs';\nimport { unitConversion } from './unit-conversion.mjs';\n\n/**\n * Parse a DOM variant to make it animatable. This involves resolving CSS variables\n * and ensuring animations like \"20%\" => \"calc(50vw)\" are performed in pixels.\n */\nconst parseDomVariant = (visualElement, target, origin, transitionEnd) => {\n const resolved = resolveCSSVariables(visualElement, target, transitionEnd);\n target = resolved.target;\n transitionEnd = resolved.transitionEnd;\n return unitConversion(visualElement, target, origin, transitionEnd);\n};\n\nexport { parseDomVariant };\n","// Does this device prefer reduced motion? Returns `null` server-side.\nconst prefersReducedMotion = { current: null };\nconst hasReducedMotionListener = { current: false };\n\nexport { hasReducedMotionListener, prefersReducedMotion };\n","import { warning, invariant } from '../utils/errors.mjs';\nimport { createBox } from '../projection/geometry/models.mjs';\nimport { isRefObject } from '../utils/is-ref-object.mjs';\nimport { initPrefersReducedMotion } from '../utils/reduced-motion/index.mjs';\nimport { hasReducedMotionListener, prefersReducedMotion } from '../utils/reduced-motion/state.mjs';\nimport { SubscriptionManager } from '../utils/subscription-manager.mjs';\nimport { motionValue } from '../value/index.mjs';\nimport { isWillChangeMotionValue } from '../value/use-will-change/is.mjs';\nimport { isMotionValue } from '../value/utils/is-motion-value.mjs';\nimport { transformProps } from './html/utils/transform.mjs';\nimport { isControllingVariants, isVariantNode } from './utils/is-controlling-variants.mjs';\nimport { isVariantLabel } from './utils/is-variant-label.mjs';\nimport { updateMotionValuesFromProps } from './utils/motion-values.mjs';\nimport { resolveVariantFromProps } from './utils/resolve-variants.mjs';\nimport { warnOnce } from '../utils/warn-once.mjs';\nimport { featureDefinitions } from '../motion/features/definitions.mjs';\nimport { variantProps } from './utils/variant-props.mjs';\nimport { visualElementStore } from './store.mjs';\nimport { frame, cancelFrame } from '../frameloop/frame.mjs';\n\nconst featureNames = Object.keys(featureDefinitions);\nconst numFeatures = featureNames.length;\nconst propEventHandlers = [\n \"AnimationStart\",\n \"AnimationComplete\",\n \"Update\",\n \"BeforeLayoutMeasure\",\n \"LayoutMeasure\",\n \"LayoutAnimationStart\",\n \"LayoutAnimationComplete\",\n];\nconst numVariantProps = variantProps.length;\n/**\n * A VisualElement is an imperative abstraction around UI elements such as\n * HTMLElement, SVGElement, Three.Object3D etc.\n */\nclass VisualElement {\n constructor({ parent, props, presenceContext, reducedMotionConfig, visualState, }, options = {}) {\n /**\n * A reference to the current underlying Instance, e.g. a HTMLElement\n * or Three.Mesh etc.\n */\n this.current = null;\n /**\n * A set containing references to this VisualElement's children.\n */\n this.children = new Set();\n /**\n * Determine what role this visual element should take in the variant tree.\n */\n this.isVariantNode = false;\n this.isControllingVariants = false;\n /**\n * Decides whether this VisualElement should animate in reduced motion\n * mode.\n *\n * TODO: This is currently set on every individual VisualElement but feels\n * like it could be set globally.\n */\n this.shouldReduceMotion = null;\n /**\n * A map of all motion values attached to this visual element. Motion\n * values are source of truth for any given animated value. A motion\n * value might be provided externally by the component via props.\n */\n this.values = new Map();\n /**\n * Cleanup functions for active features (hover/tap/exit etc)\n */\n this.features = {};\n /**\n * A map of every subscription that binds the provided or generated\n * motion values onChange listeners to this visual element.\n */\n this.valueSubscriptions = new Map();\n /**\n * A reference to the previously-provided motion values as returned\n * from scrapeMotionValuesFromProps. We use the keys in here to determine\n * if any motion values need to be removed after props are updated.\n */\n this.prevMotionValues = {};\n /**\n * An object containing a SubscriptionManager for each active event.\n */\n this.events = {};\n /**\n * An object containing an unsubscribe function for each prop event subscription.\n * For example, every \"Update\" event can have multiple subscribers via\n * VisualElement.on(), but only one of those can be defined via the onUpdate prop.\n */\n this.propEventSubscriptions = {};\n this.notifyUpdate = () => this.notify(\"Update\", this.latestValues);\n this.render = () => {\n if (!this.current)\n return;\n this.triggerBuild();\n this.renderInstance(this.current, this.renderState, this.props.style, this.projection);\n };\n this.scheduleRender = () => frame.render(this.render, false, true);\n const { latestValues, renderState } = visualState;\n this.latestValues = latestValues;\n this.baseTarget = { ...latestValues };\n this.initialValues = props.initial ? { ...latestValues } : {};\n this.renderState = renderState;\n this.parent = parent;\n this.props = props;\n this.presenceContext = presenceContext;\n this.depth = parent ? parent.depth + 1 : 0;\n this.reducedMotionConfig = reducedMotionConfig;\n this.options = options;\n this.isControllingVariants = isControllingVariants(props);\n this.isVariantNode = isVariantNode(props);\n if (this.isVariantNode) {\n this.variantChildren = new Set();\n }\n this.manuallyAnimateOnMount = Boolean(parent && parent.current);\n /**\n * Any motion values that are provided to the element when created\n * aren't yet bound to the element, as this would technically be impure.\n * However, we iterate through the motion values and set them to the\n * initial values for this component.\n *\n * TODO: This is impure and we should look at changing this to run on mount.\n * Doing so will break some tests but this isn't neccessarily a breaking change,\n * more a reflection of the test.\n */\n const { willChange, ...initialMotionValues } = this.scrapeMotionValuesFromProps(props, {});\n for (const key in initialMotionValues) {\n const value = initialMotionValues[key];\n if (latestValues[key] !== undefined && isMotionValue(value)) {\n value.set(latestValues[key], false);\n if (isWillChangeMotionValue(willChange)) {\n willChange.add(key);\n }\n }\n }\n }\n /**\n * This method takes React props and returns found MotionValues. For example, HTML\n * MotionValues will be found within the style prop, whereas for Three.js within attribute arrays.\n *\n * This isn't an abstract method as it needs calling in the constructor, but it is\n * intended to be one.\n */\n scrapeMotionValuesFromProps(_props, _prevProps) {\n return {};\n }\n mount(instance) {\n this.current = instance;\n visualElementStore.set(instance, this);\n if (this.projection && !this.projection.instance) {\n this.projection.mount(instance);\n }\n if (this.parent && this.isVariantNode && !this.isControllingVariants) {\n this.removeFromVariantTree = this.parent.addVariantChild(this);\n }\n this.values.forEach((value, key) => this.bindToMotionValue(key, value));\n if (!hasReducedMotionListener.current) {\n initPrefersReducedMotion();\n }\n this.shouldReduceMotion =\n this.reducedMotionConfig === \"never\"\n ? false\n : this.reducedMotionConfig === \"always\"\n ? true\n : prefersReducedMotion.current;\n if (process.env.NODE_ENV !== \"production\") {\n warnOnce(this.shouldReduceMotion !== true, \"You have Reduced Motion enabled on your device. Animations may not appear as expected.\");\n }\n if (this.parent)\n this.parent.children.add(this);\n this.update(this.props, this.presenceContext);\n }\n unmount() {\n visualElementStore.delete(this.current);\n this.projection && this.projection.unmount();\n cancelFrame(this.notifyUpdate);\n cancelFrame(this.render);\n this.valueSubscriptions.forEach((remove) => remove());\n this.removeFromVariantTree && this.removeFromVariantTree();\n this.parent && this.parent.children.delete(this);\n for (const key in this.events) {\n this.events[key].clear();\n }\n for (const key in this.features) {\n this.features[key].unmount();\n }\n this.current = null;\n }\n bindToMotionValue(key, value) {\n const valueIsTransform = transformProps.has(key);\n const removeOnChange = value.on(\"change\", (latestValue) => {\n this.latestValues[key] = latestValue;\n this.props.onUpdate &&\n frame.update(this.notifyUpdate, false, true);\n if (valueIsTransform && this.projection) {\n this.projection.isTransformDirty = true;\n }\n });\n const removeOnRenderRequest = value.on(\"renderRequest\", this.scheduleRender);\n this.valueSubscriptions.set(key, () => {\n removeOnChange();\n removeOnRenderRequest();\n });\n }\n sortNodePosition(other) {\n /**\n * If these nodes aren't even of the same type we can't compare their depth.\n */\n if (!this.current ||\n !this.sortInstanceNodePosition ||\n this.type !== other.type) {\n return 0;\n }\n return this.sortInstanceNodePosition(this.current, other.current);\n }\n loadFeatures({ children, ...renderedProps }, isStrict, preloadedFeatures, initialLayoutGroupConfig) {\n let ProjectionNodeConstructor;\n let MeasureLayout;\n /**\n * If we're in development mode, check to make sure we're not rendering a motion component\n * as a child of LazyMotion, as this will break the file-size benefits of using it.\n */\n if (process.env.NODE_ENV !== \"production\" &&\n preloadedFeatures &&\n isStrict) {\n const strictMessage = \"You have rendered a `motion` component within a `LazyMotion` component. This will break tree shaking. Import and render a `m` component instead.\";\n renderedProps.ignoreStrict\n ? warning(false, strictMessage)\n : invariant(false, strictMessage);\n }\n for (let i = 0; i < numFeatures; i++) {\n const name = featureNames[i];\n const { isEnabled, Feature: FeatureConstructor, ProjectionNode, MeasureLayout: MeasureLayoutComponent, } = featureDefinitions[name];\n if (ProjectionNode)\n ProjectionNodeConstructor = ProjectionNode;\n if (isEnabled(renderedProps)) {\n if (!this.features[name] && FeatureConstructor) {\n this.features[name] = new FeatureConstructor(this);\n }\n if (MeasureLayoutComponent) {\n MeasureLayout = MeasureLayoutComponent;\n }\n }\n }\n if ((this.type === \"html\" || this.type === \"svg\") &&\n !this.projection &&\n ProjectionNodeConstructor) {\n this.projection = new ProjectionNodeConstructor(this.latestValues, this.parent && this.parent.projection);\n const { layoutId, layout, drag, dragConstraints, layoutScroll, layoutRoot, } = renderedProps;\n this.projection.setOptions({\n layoutId,\n layout,\n alwaysMeasureLayout: Boolean(drag) ||\n (dragConstraints && isRefObject(dragConstraints)),\n visualElement: this,\n scheduleRender: () => this.scheduleRender(),\n /**\n * TODO: Update options in an effect. This could be tricky as it'll be too late\n * to update by the time layout animations run.\n * We also need to fix this safeToRemove by linking it up to the one returned by usePresence,\n * ensuring it gets called if there's no potential layout animations.\n *\n */\n animationType: typeof layout === \"string\" ? layout : \"both\",\n initialPromotionConfig: initialLayoutGroupConfig,\n layoutScroll,\n layoutRoot,\n });\n }\n return MeasureLayout;\n }\n updateFeatures() {\n for (const key in this.features) {\n const feature = this.features[key];\n if (feature.isMounted) {\n feature.update();\n }\n else {\n feature.mount();\n feature.isMounted = true;\n }\n }\n }\n triggerBuild() {\n this.build(this.renderState, this.latestValues, this.options, this.props);\n }\n /**\n * Measure the current viewport box with or without transforms.\n * Only measures axis-aligned boxes, rotate and skew must be manually\n * removed with a re-render to work.\n */\n measureViewportBox() {\n return this.current\n ? this.measureInstanceViewportBox(this.current, this.props)\n : createBox();\n }\n getStaticValue(key) {\n return this.latestValues[key];\n }\n setStaticValue(key, value) {\n this.latestValues[key] = value;\n }\n /**\n * Make a target animatable by Popmotion. For instance, if we're\n * trying to animate width from 100px to 100vw we need to measure 100vw\n * in pixels to determine what we really need to animate to. This is also\n * pluggable to support Framer's custom value types like Color,\n * and CSS variables.\n */\n makeTargetAnimatable(target, canMutate = true) {\n return this.makeTargetAnimatableFromInstance(target, this.props, canMutate);\n }\n /**\n * Update the provided props. Ensure any newly-added motion values are\n * added to our map, old ones removed, and listeners updated.\n */\n update(props, presenceContext) {\n if (props.transformTemplate || this.props.transformTemplate) {\n this.scheduleRender();\n }\n this.prevProps = this.props;\n this.props = props;\n this.prevPresenceContext = this.presenceContext;\n this.presenceContext = presenceContext;\n /**\n * Update prop event handlers ie onAnimationStart, onAnimationComplete\n */\n for (let i = 0; i < propEventHandlers.length; i++) {\n const key = propEventHandlers[i];\n if (this.propEventSubscriptions[key]) {\n this.propEventSubscriptions[key]();\n delete this.propEventSubscriptions[key];\n }\n const listener = props[\"on\" + key];\n if (listener) {\n this.propEventSubscriptions[key] = this.on(key, listener);\n }\n }\n this.prevMotionValues = updateMotionValuesFromProps(this, this.scrapeMotionValuesFromProps(props, this.prevProps), this.prevMotionValues);\n if (this.handleChildMotionValue) {\n this.handleChildMotionValue();\n }\n }\n getProps() {\n return this.props;\n }\n /**\n * Returns the variant definition with a given name.\n */\n getVariant(name) {\n return this.props.variants ? this.props.variants[name] : undefined;\n }\n /**\n * Returns the defined default transition on this component.\n */\n getDefaultTransition() {\n return this.props.transition;\n }\n getTransformPagePoint() {\n return this.props.transformPagePoint;\n }\n getClosestVariantNode() {\n return this.isVariantNode\n ? this\n : this.parent\n ? this.parent.getClosestVariantNode()\n : undefined;\n }\n getVariantContext(startAtParent = false) {\n if (startAtParent) {\n return this.parent ? this.parent.getVariantContext() : undefined;\n }\n if (!this.isControllingVariants) {\n const context = this.parent\n ? this.parent.getVariantContext() || {}\n : {};\n if (this.props.initial !== undefined) {\n context.initial = this.props.initial;\n }\n return context;\n }\n const context = {};\n for (let i = 0; i < numVariantProps; i++) {\n const name = variantProps[i];\n const prop = this.props[name];\n if (isVariantLabel(prop) || prop === false) {\n context[name] = prop;\n }\n }\n return context;\n }\n /**\n * Add a child visual element to our set of children.\n */\n addVariantChild(child) {\n const closestVariantNode = this.getClosestVariantNode();\n if (closestVariantNode) {\n closestVariantNode.variantChildren &&\n closestVariantNode.variantChildren.add(child);\n return () => closestVariantNode.variantChildren.delete(child);\n }\n }\n /**\n * Add a motion value and bind it to this visual element.\n */\n addValue(key, value) {\n // Remove existing value if it exists\n if (value !== this.values.get(key)) {\n this.removeValue(key);\n this.bindToMotionValue(key, value);\n }\n this.values.set(key, value);\n this.latestValues[key] = value.get();\n }\n /**\n * Remove a motion value and unbind any active subscriptions.\n */\n removeValue(key) {\n this.values.delete(key);\n const unsubscribe = this.valueSubscriptions.get(key);\n if (unsubscribe) {\n unsubscribe();\n this.valueSubscriptions.delete(key);\n }\n delete this.latestValues[key];\n this.removeValueFromRenderState(key, this.renderState);\n }\n /**\n * Check whether we have a motion value for this key\n */\n hasValue(key) {\n return this.values.has(key);\n }\n getValue(key, defaultValue) {\n if (this.props.values && this.props.values[key]) {\n return this.props.values[key];\n }\n let value = this.values.get(key);\n if (value === undefined && defaultValue !== undefined) {\n value = motionValue(defaultValue, { owner: this });\n this.addValue(key, value);\n }\n return value;\n }\n /**\n * If we're trying to animate to a previously unencountered value,\n * we need to check for it in our state and as a last resort read it\n * directly from the instance (which might have performance implications).\n */\n readValue(key) {\n var _a;\n return this.latestValues[key] !== undefined || !this.current\n ? this.latestValues[key]\n : (_a = this.getBaseTargetFromProps(this.props, key)) !== null && _a !== void 0 ? _a : this.readValueFromInstance(this.current, key, this.options);\n }\n /**\n * Set the base target to later animate back to. This is currently\n * only hydrated on creation and when we first read a value.\n */\n setBaseTarget(key, value) {\n this.baseTarget[key] = value;\n }\n /**\n * Find the base target for a value thats been removed from all animation\n * props.\n */\n getBaseTarget(key) {\n var _a;\n const { initial } = this.props;\n const valueFromInitial = typeof initial === \"string\" || typeof initial === \"object\"\n ? (_a = resolveVariantFromProps(this.props, initial)) === null || _a === void 0 ? void 0 : _a[key]\n : undefined;\n /**\n * If this value still exists in the current initial variant, read that.\n */\n if (initial && valueFromInitial !== undefined) {\n return valueFromInitial;\n }\n /**\n * Alternatively, if this VisualElement config has defined a getBaseTarget\n * so we can read the value from an alternative source, try that.\n */\n const target = this.getBaseTargetFromProps(this.props, key);\n if (target !== undefined && !isMotionValue(target))\n return target;\n /**\n * If the value was initially defined on initial, but it doesn't any more,\n * return undefined. Otherwise return the value as initially read from the DOM.\n */\n return this.initialValues[key] !== undefined &&\n valueFromInitial === undefined\n ? undefined\n : this.baseTarget[key];\n }\n on(eventName, callback) {\n if (!this.events[eventName]) {\n this.events[eventName] = new SubscriptionManager();\n }\n return this.events[eventName].add(callback);\n }\n notify(eventName, ...args) {\n if (this.events[eventName]) {\n this.events[eventName].notify(...args);\n }\n }\n}\n\nexport { VisualElement };\n","import { isBrowser } from '../is-browser.mjs';\nimport { hasReducedMotionListener, prefersReducedMotion } from './state.mjs';\n\nfunction initPrefersReducedMotion() {\n hasReducedMotionListener.current = true;\n if (!isBrowser)\n return;\n if (window.matchMedia) {\n const motionMediaQuery = window.matchMedia(\"(prefers-reduced-motion)\");\n const setReducedMotionPreferences = () => (prefersReducedMotion.current = motionMediaQuery.matches);\n motionMediaQuery.addListener(setReducedMotionPreferences);\n setReducedMotionPreferences();\n }\n else {\n prefersReducedMotion.current = false;\n }\n}\n\nexport { initPrefersReducedMotion };\n","import { isWillChangeMotionValue } from '../../value/use-will-change/is.mjs';\nimport { warnOnce } from '../../utils/warn-once.mjs';\nimport { motionValue } from '../../value/index.mjs';\nimport { isMotionValue } from '../../value/utils/is-motion-value.mjs';\n\nfunction updateMotionValuesFromProps(element, next, prev) {\n const { willChange } = next;\n for (const key in next) {\n const nextValue = next[key];\n const prevValue = prev[key];\n if (isMotionValue(nextValue)) {\n /**\n * If this is a motion value found in props or style, we want to add it\n * to our visual element's motion value map.\n */\n element.addValue(key, nextValue);\n if (isWillChangeMotionValue(willChange)) {\n willChange.add(key);\n }\n /**\n * Check the version of the incoming motion value with this version\n * and warn against mismatches.\n */\n if (process.env.NODE_ENV === \"development\") {\n warnOnce(nextValue.version === \"10.18.0\", `Attempting to mix Framer Motion versions ${nextValue.version} with 10.18.0 may not work as expected.`);\n }\n }\n else if (isMotionValue(prevValue)) {\n /**\n * If we're swapping from a motion value to a static value,\n * create a new motion value from that\n */\n element.addValue(key, motionValue(nextValue, { owner: element }));\n if (isWillChangeMotionValue(willChange)) {\n willChange.remove(key);\n }\n }\n else if (prevValue !== nextValue) {\n /**\n * If this is a flat value that has changed, update the motion value\n * or create one if it doesn't exist. We only want to do this if we're\n * not handling the value with our animation state.\n */\n if (element.hasValue(key)) {\n const existingValue = element.getValue(key);\n // TODO: Only update values that aren't being animated or even looked at\n !existingValue.hasAnimated && existingValue.set(nextValue);\n }\n else {\n const latestValue = element.getStaticValue(key);\n element.addValue(key, motionValue(latestValue !== undefined ? latestValue : nextValue, { owner: element }));\n }\n }\n }\n // Handle removed values\n for (const key in prev) {\n if (next[key] === undefined)\n element.removeValue(key);\n }\n return next;\n}\n\nexport { updateMotionValuesFromProps };\n","import { getOrigin, checkTargetForNewValues } from '../utils/setters.mjs';\nimport { parseDomVariant } from './utils/parse-dom-variant.mjs';\nimport { VisualElement } from '../VisualElement.mjs';\n\nclass DOMVisualElement extends VisualElement {\n sortInstanceNodePosition(a, b) {\n /**\n * compareDocumentPosition returns a bitmask, by using the bitwise &\n * we're returning true if 2 in that bitmask is set to true. 2 is set\n * to true if b preceeds a.\n */\n return a.compareDocumentPosition(b) & 2 ? 1 : -1;\n }\n getBaseTargetFromProps(props, key) {\n return props.style ? props.style[key] : undefined;\n }\n removeValueFromRenderState(key, { vars, style }) {\n delete vars[key];\n delete style[key];\n }\n makeTargetAnimatableFromInstance({ transition, transitionEnd, ...target }, { transformValues }, isMounted) {\n let origin = getOrigin(target, transition || {}, this);\n /**\n * If Framer has provided a function to convert `Color` etc value types, convert them\n */\n if (transformValues) {\n if (transitionEnd)\n transitionEnd = transformValues(transitionEnd);\n if (target)\n target = transformValues(target);\n if (origin)\n origin = transformValues(origin);\n }\n if (isMounted) {\n checkTargetForNewValues(this, target, origin);\n const parsed = parseDomVariant(this, target, origin, transitionEnd);\n transitionEnd = parsed.transitionEnd;\n target = parsed.target;\n }\n return {\n transition,\n transitionEnd,\n ...target,\n };\n }\n}\n\nexport { DOMVisualElement };\n","import { createContext } from 'react';\n\nconst MotionContext = createContext({});\n\nexport { MotionContext };\n","import { createContext } from 'react';\n\nconst LazyContext = createContext({ strict: false });\n\nexport { LazyContext };\n","import { useContext, useMemo } from 'react';\nimport { MotionContext } from './index.mjs';\nimport { getCurrentTreeVariants } from './utils.mjs';\n\nfunction useCreateMotionContext(props) {\n const { initial, animate } = getCurrentTreeVariants(props, useContext(MotionContext));\n return useMemo(() => ({ initial, animate }), [variantLabelsAsDependency(initial), variantLabelsAsDependency(animate)]);\n}\nfunction variantLabelsAsDependency(prop) {\n return Array.isArray(prop) ? prop.join(\" \") : prop;\n}\n\nexport { useCreateMotionContext };\n","import { isVariantLabel } from '../../render/utils/is-variant-label.mjs';\nimport { isControllingVariants } from '../../render/utils/is-controlling-variants.mjs';\n\nfunction getCurrentTreeVariants(props, context) {\n if (isControllingVariants(props)) {\n const { initial, animate } = props;\n return {\n initial: initial === false || isVariantLabel(initial)\n ? initial\n : undefined,\n animate: isVariantLabel(animate) ? animate : undefined,\n };\n }\n return props.inherit !== false ? context : {};\n}\n\nexport { getCurrentTreeVariants };\n","import { createContext } from 'react';\n\n/**\n * Internal, exported only for usage in Framer\n */\nconst SwitchLayoutGroupContext = createContext({});\n\nexport { SwitchLayoutGroupContext };\n","const motionComponentSymbol = Symbol.for(\"motionComponentSymbol\");\n\nexport { motionComponentSymbol };\n","import * as React from 'react';\nimport { forwardRef, useContext } from 'react';\nimport { MotionConfigContext } from '../context/MotionConfigContext.mjs';\nimport { MotionContext } from '../context/MotionContext/index.mjs';\nimport { useVisualElement } from './utils/use-visual-element.mjs';\nimport { useMotionRef } from './utils/use-motion-ref.mjs';\nimport { useCreateMotionContext } from '../context/MotionContext/create.mjs';\nimport { loadFeatures } from './features/load-features.mjs';\nimport { isBrowser } from '../utils/is-browser.mjs';\nimport { LayoutGroupContext } from '../context/LayoutGroupContext.mjs';\nimport { LazyContext } from '../context/LazyContext.mjs';\nimport { SwitchLayoutGroupContext } from '../context/SwitchLayoutGroupContext.mjs';\nimport { motionComponentSymbol } from './utils/symbol.mjs';\n\n/**\n * Create a `motion` component.\n *\n * This function accepts a Component argument, which can be either a string (ie \"div\"\n * for `motion.div`), or an actual React component.\n *\n * Alongside this is a config option which provides a way of rendering the provided\n * component \"offline\", or outside the React render cycle.\n */\nfunction createMotionComponent({ preloadedFeatures, createVisualElement, useRender, useVisualState, Component, }) {\n preloadedFeatures && loadFeatures(preloadedFeatures);\n function MotionComponent(props, externalRef) {\n /**\n * If we need to measure the element we load this functionality in a\n * separate class component in order to gain access to getSnapshotBeforeUpdate.\n */\n let MeasureLayout;\n const configAndProps = {\n ...useContext(MotionConfigContext),\n ...props,\n layoutId: useLayoutId(props),\n };\n const { isStatic } = configAndProps;\n const context = useCreateMotionContext(props);\n const visualState = useVisualState(props, isStatic);\n if (!isStatic && isBrowser) {\n /**\n * Create a VisualElement for this component. A VisualElement provides a common\n * interface to renderer-specific APIs (ie DOM/Three.js etc) as well as\n * providing a way of rendering to these APIs outside of the React render loop\n * for more performant animations and interactions\n */\n context.visualElement = useVisualElement(Component, visualState, configAndProps, createVisualElement);\n /**\n * Load Motion gesture and animation features. These are rendered as renderless\n * components so each feature can optionally make use of React lifecycle methods.\n */\n const initialLayoutGroupConfig = useContext(SwitchLayoutGroupContext);\n const isStrict = useContext(LazyContext).strict;\n if (context.visualElement) {\n MeasureLayout = context.visualElement.loadFeatures(\n // Note: Pass the full new combined props to correctly re-render dynamic feature components.\n configAndProps, isStrict, preloadedFeatures, initialLayoutGroupConfig);\n }\n }\n /**\n * The mount order and hierarchy is specific to ensure our element ref\n * is hydrated by the time features fire their effects.\n */\n return (React.createElement(MotionContext.Provider, { value: context },\n MeasureLayout && context.visualElement ? (React.createElement(MeasureLayout, { visualElement: context.visualElement, ...configAndProps })) : null,\n useRender(Component, props, useMotionRef(visualState, context.visualElement, externalRef), visualState, isStatic, context.visualElement)));\n }\n const ForwardRefComponent = forwardRef(MotionComponent);\n ForwardRefComponent[motionComponentSymbol] = Component;\n return ForwardRefComponent;\n}\nfunction useLayoutId({ layoutId }) {\n const layoutGroupId = useContext(LayoutGroupContext).id;\n return layoutGroupId && layoutId !== undefined\n ? layoutGroupId + \"-\" + layoutId\n : layoutId;\n}\n\nexport { createMotionComponent };\n","import { featureDefinitions } from './definitions.mjs';\n\nfunction loadFeatures(features) {\n for (const key in features) {\n featureDefinitions[key] = {\n ...featureDefinitions[key],\n ...features[key],\n };\n }\n}\n\nexport { loadFeatures };\n","import { useContext, useRef, useInsertionEffect, useEffect } from 'react';\nimport { PresenceContext } from '../../context/PresenceContext.mjs';\nimport { MotionContext } from '../../context/MotionContext/index.mjs';\nimport { useIsomorphicLayoutEffect } from '../../utils/use-isomorphic-effect.mjs';\nimport { LazyContext } from '../../context/LazyContext.mjs';\nimport { MotionConfigContext } from '../../context/MotionConfigContext.mjs';\nimport { optimizedAppearDataAttribute } from '../../animation/optimized-appear/data-id.mjs';\n\nfunction useVisualElement(Component, visualState, props, createVisualElement) {\n const { visualElement: parent } = useContext(MotionContext);\n const lazyContext = useContext(LazyContext);\n const presenceContext = useContext(PresenceContext);\n const reducedMotionConfig = useContext(MotionConfigContext).reducedMotion;\n const visualElementRef = useRef();\n /**\n * If we haven't preloaded a renderer, check to see if we have one lazy-loaded\n */\n createVisualElement = createVisualElement || lazyContext.renderer;\n if (!visualElementRef.current && createVisualElement) {\n visualElementRef.current = createVisualElement(Component, {\n visualState,\n parent,\n props,\n presenceContext,\n blockInitialAnimation: presenceContext\n ? presenceContext.initial === false\n : false,\n reducedMotionConfig,\n });\n }\n const visualElement = visualElementRef.current;\n useInsertionEffect(() => {\n visualElement && visualElement.update(props, presenceContext);\n });\n /**\n * Cache this value as we want to know whether HandoffAppearAnimations\n * was present on initial render - it will be deleted after this.\n */\n const wantsHandoff = useRef(Boolean(props[optimizedAppearDataAttribute] && !window.HandoffComplete));\n useIsomorphicLayoutEffect(() => {\n if (!visualElement)\n return;\n visualElement.render();\n /**\n * Ideally this function would always run in a useEffect.\n *\n * However, if we have optimised appear animations to handoff from,\n * it needs to happen synchronously to ensure there's no flash of\n * incorrect styles in the event of a hydration error.\n *\n * So if we detect a situtation where optimised appear animations\n * are running, we use useLayoutEffect to trigger animations.\n */\n if (wantsHandoff.current && visualElement.animationState) {\n visualElement.animationState.animateChanges();\n }\n });\n useEffect(() => {\n if (!visualElement)\n return;\n visualElement.updateFeatures();\n if (!wantsHandoff.current && visualElement.animationState) {\n visualElement.animationState.animateChanges();\n }\n if (wantsHandoff.current) {\n wantsHandoff.current = false;\n // This ensures all future calls to animateChanges() will run in useEffect\n window.HandoffComplete = true;\n }\n });\n return visualElement;\n}\n\nexport { useVisualElement };\n","import { useCallback } from 'react';\nimport { isRefObject } from '../../utils/is-ref-object.mjs';\n\n/**\n * Creates a ref function that, when called, hydrates the provided\n * external ref and VisualElement.\n */\nfunction useMotionRef(visualState, visualElement, externalRef) {\n return useCallback((instance) => {\n instance && visualState.mount && visualState.mount(instance);\n if (visualElement) {\n instance\n ? visualElement.mount(instance)\n : visualElement.unmount();\n }\n if (externalRef) {\n if (typeof externalRef === \"function\") {\n externalRef(instance);\n }\n else if (isRefObject(externalRef)) {\n externalRef.current = instance;\n }\n }\n }, \n /**\n * Only pass a new ref callback to React if we've received a visual element\n * factory. Otherwise we'll be mounting/remounting every time externalRef\n * or other dependencies change.\n */\n [visualElement]);\n}\n\nexport { useMotionRef };\n","import { createMotionComponent } from '../../motion/index.mjs';\n\n/**\n * Convert any React component into a `motion` component. The provided component\n * **must** use `React.forwardRef` to the underlying DOM component you want to animate.\n *\n * ```jsx\n * const Component = React.forwardRef((props, ref) => {\n * return
\n * })\n *\n * const MotionComponent = motion(Component)\n * ```\n *\n * @public\n */\nfunction createMotionProxy(createConfig) {\n function custom(Component, customMotionComponentConfig = {}) {\n return createMotionComponent(createConfig(Component, customMotionComponentConfig));\n }\n if (typeof Proxy === \"undefined\") {\n return custom;\n }\n /**\n * A cache of generated `motion` components, e.g `motion.div`, `motion.input` etc.\n * Rather than generating them anew every render.\n */\n const componentCache = new Map();\n return new Proxy(custom, {\n /**\n * Called when `motion` is referenced with a prop: `motion.div`, `motion.input` etc.\n * The prop name is passed through as `key` and we can use that to generate a `motion`\n * DOM component with that name.\n */\n get: (_target, key) => {\n /**\n * If this element doesn't exist in the component cache, create it and cache.\n */\n if (!componentCache.has(key)) {\n componentCache.set(key, custom(key));\n }\n return componentCache.get(key);\n },\n });\n}\n\nexport { createMotionProxy };\n","/**\n * We keep these listed seperately as we use the lowercase tag names as part\n * of the runtime bundle to detect SVG components\n */\nconst lowercaseSVGElements = [\n \"animate\",\n \"circle\",\n \"defs\",\n \"desc\",\n \"ellipse\",\n \"g\",\n \"image\",\n \"line\",\n \"filter\",\n \"marker\",\n \"mask\",\n \"metadata\",\n \"path\",\n \"pattern\",\n \"polygon\",\n \"polyline\",\n \"rect\",\n \"stop\",\n \"switch\",\n \"symbol\",\n \"svg\",\n \"text\",\n \"tspan\",\n \"use\",\n \"view\",\n];\n\nexport { lowercaseSVGElements };\n","import { lowercaseSVGElements } from '../../svg/lowercase-elements.mjs';\n\nfunction isSVGComponent(Component) {\n if (\n /**\n * If it's not a string, it's a custom React component. Currently we only support\n * HTML custom React components.\n */\n typeof Component !== \"string\" ||\n /**\n * If it contains a dash, the element is a custom HTML webcomponent.\n */\n Component.includes(\"-\")) {\n return false;\n }\n else if (\n /**\n * If it's in our list of lowercase SVG tags, it's an SVG component\n */\n lowercaseSVGElements.indexOf(Component) > -1 ||\n /**\n * If it contains a capital letter, it's an SVG component\n */\n /[A-Z]/.test(Component)) {\n return true;\n }\n return false;\n}\n\nexport { isSVGComponent };\n","const createHtmlRenderState = () => ({\n style: {},\n transform: {},\n transformOrigin: {},\n vars: {},\n});\n\nexport { createHtmlRenderState };\n","import { useMemo } from 'react';\nimport { isForcedMotionValue } from '../../motion/utils/is-forced-motion-value.mjs';\nimport { isMotionValue } from '../../value/utils/is-motion-value.mjs';\nimport { buildHTMLStyles } from './utils/build-styles.mjs';\nimport { createHtmlRenderState } from './utils/create-render-state.mjs';\n\nfunction copyRawValuesOnly(target, source, props) {\n for (const key in source) {\n if (!isMotionValue(source[key]) && !isForcedMotionValue(key, props)) {\n target[key] = source[key];\n }\n }\n}\nfunction useInitialMotionValues({ transformTemplate }, visualState, isStatic) {\n return useMemo(() => {\n const state = createHtmlRenderState();\n buildHTMLStyles(state, visualState, { enableHardwareAcceleration: !isStatic }, transformTemplate);\n return Object.assign({}, state.vars, state.style);\n }, [visualState]);\n}\nfunction useStyle(props, visualState, isStatic) {\n const styleProp = props.style || {};\n const style = {};\n /**\n * Copy non-Motion Values straight into style\n */\n copyRawValuesOnly(style, styleProp, props);\n Object.assign(style, useInitialMotionValues(props, visualState, isStatic));\n return props.transformValues ? props.transformValues(style) : style;\n}\nfunction useHTMLProps(props, visualState, isStatic) {\n // The `any` isn't ideal but it is the type of createElement props argument\n const htmlProps = {};\n const style = useStyle(props, visualState, isStatic);\n if (props.drag && props.dragListener !== false) {\n // Disable the ghost element when a user drags\n htmlProps.draggable = false;\n // Disable text selection\n style.userSelect =\n style.WebkitUserSelect =\n style.WebkitTouchCallout =\n \"none\";\n // Disable scrolling on the draggable direction\n style.touchAction =\n props.drag === true\n ? \"none\"\n : `pan-${props.drag === \"x\" ? \"y\" : \"x\"}`;\n }\n if (props.tabIndex === undefined &&\n (props.onTap || props.onTapStart || props.whileTap)) {\n htmlProps.tabIndex = 0;\n }\n htmlProps.style = style;\n return htmlProps;\n}\n\nexport { copyRawValuesOnly, useHTMLProps };\n","/**\n * A list of all valid MotionProps.\n *\n * @privateRemarks\n * This doesn't throw if a `MotionProp` name is missing - it should.\n */\nconst validMotionProps = new Set([\n \"animate\",\n \"exit\",\n \"variants\",\n \"initial\",\n \"style\",\n \"values\",\n \"variants\",\n \"transition\",\n \"transformTemplate\",\n \"transformValues\",\n \"custom\",\n \"inherit\",\n \"onBeforeLayoutMeasure\",\n \"onAnimationStart\",\n \"onAnimationComplete\",\n \"onUpdate\",\n \"onDragStart\",\n \"onDrag\",\n \"onDragEnd\",\n \"onMeasureDragConstraints\",\n \"onDirectionLock\",\n \"onDragTransitionEnd\",\n \"_dragX\",\n \"_dragY\",\n \"onHoverStart\",\n \"onHoverEnd\",\n \"onViewportEnter\",\n \"onViewportLeave\",\n \"globalTapTarget\",\n \"ignoreStrict\",\n \"viewport\",\n]);\n/**\n * Check whether a prop name is a valid `MotionProp` key.\n *\n * @param key - Name of the property to check\n * @returns `true` is key is a valid `MotionProp`.\n *\n * @public\n */\nfunction isValidMotionProp(key) {\n return (key.startsWith(\"while\") ||\n (key.startsWith(\"drag\") && key !== \"draggable\") ||\n key.startsWith(\"layout\") ||\n key.startsWith(\"onTap\") ||\n key.startsWith(\"onPan\") ||\n key.startsWith(\"onLayout\") ||\n validMotionProps.has(key));\n}\n\nexport { isValidMotionProp };\n","import { isValidMotionProp } from '../../../motion/utils/valid-prop.mjs';\n\nlet shouldForward = (key) => !isValidMotionProp(key);\nfunction loadExternalIsValidProp(isValidProp) {\n if (!isValidProp)\n return;\n // Explicitly filter our events\n shouldForward = (key) => key.startsWith(\"on\") ? !isValidMotionProp(key) : isValidProp(key);\n}\n/**\n * Emotion and Styled Components both allow users to pass through arbitrary props to their components\n * to dynamically generate CSS. They both use the `@emotion/is-prop-valid` package to determine which\n * of these should be passed to the underlying DOM node.\n *\n * However, when styling a Motion component `styled(motion.div)`, both packages pass through *all* props\n * as it's seen as an arbitrary component rather than a DOM node. Motion only allows arbitrary props\n * passed through the `custom` prop so it doesn't *need* the payload or computational overhead of\n * `@emotion/is-prop-valid`, however to fix this problem we need to use it.\n *\n * By making it an optionalDependency we can offer this functionality only in the situations where it's\n * actually required.\n */\ntry {\n /**\n * We attempt to import this package but require won't be defined in esm environments, in that case\n * isPropValid will have to be provided via `MotionContext`. In a 6.0.0 this should probably be removed\n * in favour of explicit injection.\n */\n loadExternalIsValidProp(require(\"@emotion/is-prop-valid\").default);\n}\ncatch (_a) {\n // We don't need to actually do anything here - the fallback is the existing `isPropValid`.\n}\nfunction filterProps(props, isDom, forwardMotionProps) {\n const filteredProps = {};\n for (const key in props) {\n /**\n * values is considered a valid prop by Emotion, so if it's present\n * this will be rendered out to the DOM unless explicitly filtered.\n *\n * We check the type as it could be used with the `feColorMatrix`\n * element, which we support.\n */\n if (key === \"values\" && typeof props.values === \"object\")\n continue;\n if (shouldForward(key) ||\n (forwardMotionProps === true && isValidMotionProp(key)) ||\n (!isDom && !isValidMotionProp(key)) ||\n // If trying to use native HTML drag events, forward drag listeners\n (props[\"draggable\"] && key.startsWith(\"onDrag\"))) {\n filteredProps[key] = props[key];\n }\n }\n return filteredProps;\n}\n\nexport { filterProps, loadExternalIsValidProp };\n","import { createHtmlRenderState } from '../../html/utils/create-render-state.mjs';\n\nconst createSvgRenderState = () => ({\n ...createHtmlRenderState(),\n attrs: {},\n});\n\nexport { createSvgRenderState };\n","import { useMemo } from 'react';\nimport { copyRawValuesOnly } from '../html/use-props.mjs';\nimport { buildSVGAttrs } from './utils/build-attrs.mjs';\nimport { createSvgRenderState } from './utils/create-render-state.mjs';\nimport { isSVGTag } from './utils/is-svg-tag.mjs';\n\nfunction useSVGProps(props, visualState, _isStatic, Component) {\n const visualProps = useMemo(() => {\n const state = createSvgRenderState();\n buildSVGAttrs(state, visualState, { enableHardwareAcceleration: false }, isSVGTag(Component), props.transformTemplate);\n return {\n ...state.attrs,\n style: { ...state.style },\n };\n }, [visualState]);\n if (props.style) {\n const rawStyles = {};\n copyRawValuesOnly(rawStyles, props.style, props);\n visualProps.style = { ...rawStyles, ...visualProps.style };\n }\n return visualProps;\n}\n\nexport { useSVGProps };\n","import { useMemo, createElement } from 'react';\nimport { useHTMLProps } from '../html/use-props.mjs';\nimport { filterProps } from './utils/filter-props.mjs';\nimport { isSVGComponent } from './utils/is-svg-component.mjs';\nimport { useSVGProps } from '../svg/use-props.mjs';\nimport { isMotionValue } from '../../value/utils/is-motion-value.mjs';\n\nfunction createUseRender(forwardMotionProps = false) {\n const useRender = (Component, props, ref, { latestValues }, isStatic) => {\n const useVisualProps = isSVGComponent(Component)\n ? useSVGProps\n : useHTMLProps;\n const visualProps = useVisualProps(props, latestValues, isStatic, Component);\n const filteredProps = filterProps(props, typeof Component === \"string\", forwardMotionProps);\n const elementProps = {\n ...filteredProps,\n ...visualProps,\n ref,\n };\n /**\n * If component has been handed a motion value as its child,\n * memoise its initial value and render that. Subsequent updates\n * will be handled by the onChange handler\n */\n const { children } = props;\n const renderedChildren = useMemo(() => (isMotionValue(children) ? children.get() : children), [children]);\n return createElement(Component, {\n ...elementProps,\n children: renderedChildren,\n });\n };\n return useRender;\n}\n\nexport { createUseRender };\n","import { isCustomValue } from '../../utils/resolve-value.mjs';\nimport { isMotionValue } from './is-motion-value.mjs';\n\n/**\n * If the provided value is a MotionValue, this returns the actual value, otherwise just the value itself\n *\n * TODO: Remove and move to library\n */\nfunction resolveMotionValue(value) {\n const unwrappedValue = isMotionValue(value) ? value.get() : value;\n return isCustomValue(unwrappedValue)\n ? unwrappedValue.toValue()\n : unwrappedValue;\n}\n\nexport { resolveMotionValue };\n","import { useContext } from 'react';\nimport { isAnimationControls } from '../../animation/utils/is-animation-controls.mjs';\nimport { PresenceContext } from '../../context/PresenceContext.mjs';\nimport { resolveVariantFromProps } from '../../render/utils/resolve-variants.mjs';\nimport { useConstant } from '../../utils/use-constant.mjs';\nimport { resolveMotionValue } from '../../value/utils/resolve-motion-value.mjs';\nimport { MotionContext } from '../../context/MotionContext/index.mjs';\nimport { isControllingVariants, isVariantNode } from '../../render/utils/is-controlling-variants.mjs';\n\nfunction makeState({ scrapeMotionValuesFromProps, createRenderState, onMount, }, props, context, presenceContext) {\n const state = {\n latestValues: makeLatestValues(props, context, presenceContext, scrapeMotionValuesFromProps),\n renderState: createRenderState(),\n };\n if (onMount) {\n state.mount = (instance) => onMount(props, instance, state);\n }\n return state;\n}\nconst makeUseVisualState = (config) => (props, isStatic) => {\n const context = useContext(MotionContext);\n const presenceContext = useContext(PresenceContext);\n const make = () => makeState(config, props, context, presenceContext);\n return isStatic ? make() : useConstant(make);\n};\nfunction makeLatestValues(props, context, presenceContext, scrapeMotionValues) {\n const values = {};\n const motionValues = scrapeMotionValues(props, {});\n for (const key in motionValues) {\n values[key] = resolveMotionValue(motionValues[key]);\n }\n let { initial, animate } = props;\n const isControllingVariants$1 = isControllingVariants(props);\n const isVariantNode$1 = isVariantNode(props);\n if (context &&\n isVariantNode$1 &&\n !isControllingVariants$1 &&\n props.inherit !== false) {\n if (initial === undefined)\n initial = context.initial;\n if (animate === undefined)\n animate = context.animate;\n }\n let isInitialAnimationBlocked = presenceContext\n ? presenceContext.initial === false\n : false;\n isInitialAnimationBlocked = isInitialAnimationBlocked || initial === false;\n const variantToSet = isInitialAnimationBlocked ? animate : initial;\n if (variantToSet &&\n typeof variantToSet !== \"boolean\" &&\n !isAnimationControls(variantToSet)) {\n const list = Array.isArray(variantToSet) ? variantToSet : [variantToSet];\n list.forEach((definition) => {\n const resolved = resolveVariantFromProps(props, definition);\n if (!resolved)\n return;\n const { transitionEnd, transition, ...target } = resolved;\n for (const key in target) {\n let valueTarget = target[key];\n if (Array.isArray(valueTarget)) {\n /**\n * Take final keyframe if the initial animation is blocked because\n * we want to initialise at the end of that blocked animation.\n */\n const index = isInitialAnimationBlocked\n ? valueTarget.length - 1\n : 0;\n valueTarget = valueTarget[index];\n }\n if (valueTarget !== null) {\n values[key] = valueTarget;\n }\n }\n for (const key in transitionEnd)\n values[key] = transitionEnd[key];\n });\n }\n return values;\n}\n\nexport { makeUseVisualState };\n","import { renderSVG } from './utils/render.mjs';\nimport { scrapeMotionValuesFromProps } from './utils/scrape-motion-values.mjs';\nimport { makeUseVisualState } from '../../motion/utils/use-visual-state.mjs';\nimport { createSvgRenderState } from './utils/create-render-state.mjs';\nimport { buildSVGAttrs } from './utils/build-attrs.mjs';\nimport { isSVGTag } from './utils/is-svg-tag.mjs';\nimport { frame } from '../../frameloop/frame.mjs';\n\nconst svgMotionConfig = {\n useVisualState: makeUseVisualState({\n scrapeMotionValuesFromProps: scrapeMotionValuesFromProps,\n createRenderState: createSvgRenderState,\n onMount: (props, instance, { renderState, latestValues }) => {\n frame.read(() => {\n try {\n renderState.dimensions =\n typeof instance.getBBox ===\n \"function\"\n ? instance.getBBox()\n : instance.getBoundingClientRect();\n }\n catch (e) {\n // Most likely trying to measure an unrendered element under Firefox\n renderState.dimensions = {\n x: 0,\n y: 0,\n width: 0,\n height: 0,\n };\n }\n });\n frame.render(() => {\n buildSVGAttrs(renderState, latestValues, { enableHardwareAcceleration: false }, isSVGTag(instance.tagName), props.transformTemplate);\n renderSVG(instance, renderState);\n });\n },\n }),\n};\n\nexport { svgMotionConfig };\n","import { makeUseVisualState } from '../../motion/utils/use-visual-state.mjs';\nimport { scrapeMotionValuesFromProps } from './utils/scrape-motion-values.mjs';\nimport { createHtmlRenderState } from './utils/create-render-state.mjs';\n\nconst htmlMotionConfig = {\n useVisualState: makeUseVisualState({\n scrapeMotionValuesFromProps,\n createRenderState: createHtmlRenderState,\n }),\n};\n\nexport { htmlMotionConfig };\n","function addDomEvent(target, eventName, handler, options = { passive: true }) {\n target.addEventListener(eventName, handler, options);\n return () => target.removeEventListener(eventName, handler);\n}\n\nexport { addDomEvent };\n","const isPrimaryPointer = (event) => {\n if (event.pointerType === \"mouse\") {\n return typeof event.button !== \"number\" || event.button <= 0;\n }\n else {\n /**\n * isPrimary is true for all mice buttons, whereas every touch point\n * is regarded as its own input. So subsequent concurrent touch points\n * will be false.\n *\n * Specifically match against false here as incomplete versions of\n * PointerEvents in very old browser might have it set as undefined.\n */\n return event.isPrimary !== false;\n }\n};\n\nexport { isPrimaryPointer };\n","import { isPrimaryPointer } from './utils/is-primary-pointer.mjs';\n\nfunction extractEventInfo(event, pointType = \"page\") {\n return {\n point: {\n x: event[pointType + \"X\"],\n y: event[pointType + \"Y\"],\n },\n };\n}\nconst addPointerInfo = (handler) => {\n return (event) => isPrimaryPointer(event) && handler(event, extractEventInfo(event));\n};\n\nexport { addPointerInfo, extractEventInfo };\n","import { addDomEvent } from './add-dom-event.mjs';\nimport { addPointerInfo } from './event-info.mjs';\n\nfunction addPointerEvent(target, eventName, handler, options) {\n return addDomEvent(target, eventName, addPointerInfo(handler), options);\n}\n\nexport { addPointerEvent };\n","function createLock(name) {\n let lock = null;\n return () => {\n const openLock = () => {\n lock = null;\n };\n if (lock === null) {\n lock = name;\n return openLock;\n }\n return false;\n };\n}\nconst globalHorizontalLock = createLock(\"dragHorizontal\");\nconst globalVerticalLock = createLock(\"dragVertical\");\nfunction getGlobalLock(drag) {\n let lock = false;\n if (drag === \"y\") {\n lock = globalVerticalLock();\n }\n else if (drag === \"x\") {\n lock = globalHorizontalLock();\n }\n else {\n const openHorizontal = globalHorizontalLock();\n const openVertical = globalVerticalLock();\n if (openHorizontal && openVertical) {\n lock = () => {\n openHorizontal();\n openVertical();\n };\n }\n else {\n // Release the locks because we don't use them\n if (openHorizontal)\n openHorizontal();\n if (openVertical)\n openVertical();\n }\n }\n return lock;\n}\nfunction isDragActive() {\n // Check the gesture lock - if we get it, it means no drag gesture is active\n // and we can safely fire the tap gesture.\n const openGestureLock = getGlobalLock(true);\n if (!openGestureLock)\n return true;\n openGestureLock();\n return false;\n}\n\nexport { createLock, getGlobalLock, isDragActive };\n","class Feature {\n constructor(node) {\n this.isMounted = false;\n this.node = node;\n }\n update() { }\n}\n\nexport { Feature };\n","import { addPointerEvent } from '../events/add-pointer-event.mjs';\nimport { pipe } from '../utils/pipe.mjs';\nimport { isDragActive } from './drag/utils/lock.mjs';\nimport { Feature } from '../motion/features/Feature.mjs';\nimport { frame } from '../frameloop/frame.mjs';\n\nfunction addHoverEvent(node, isActive) {\n const eventName = \"pointer\" + (isActive ? \"enter\" : \"leave\");\n const callbackName = \"onHover\" + (isActive ? \"Start\" : \"End\");\n const handleEvent = (event, info) => {\n if (event.pointerType === \"touch\" || isDragActive())\n return;\n const props = node.getProps();\n if (node.animationState && props.whileHover) {\n node.animationState.setActive(\"whileHover\", isActive);\n }\n if (props[callbackName]) {\n frame.update(() => props[callbackName](event, info));\n }\n };\n return addPointerEvent(node.current, eventName, handleEvent, {\n passive: !node.getProps()[callbackName],\n });\n}\nclass HoverGesture extends Feature {\n mount() {\n this.unmount = pipe(addHoverEvent(this.node, true), addHoverEvent(this.node, false));\n }\n unmount() { }\n}\n\nexport { HoverGesture };\n","/**\n * Recursively traverse up the tree to check whether the provided child node\n * is the parent or a descendant of it.\n *\n * @param parent - Element to find\n * @param child - Element to test against parent\n */\nconst isNodeOrChild = (parent, child) => {\n if (!child) {\n return false;\n }\n else if (parent === child) {\n return true;\n }\n else {\n return isNodeOrChild(parent, child.parentElement);\n }\n};\n\nexport { isNodeOrChild };\n","import { extractEventInfo } from '../events/event-info.mjs';\nimport { addDomEvent } from '../events/add-dom-event.mjs';\nimport { addPointerEvent } from '../events/add-pointer-event.mjs';\nimport { Feature } from '../motion/features/Feature.mjs';\nimport { pipe } from '../utils/pipe.mjs';\nimport { isDragActive } from './drag/utils/lock.mjs';\nimport { isNodeOrChild } from './utils/is-node-or-child.mjs';\nimport { noop } from '../utils/noop.mjs';\nimport { frame } from '../frameloop/frame.mjs';\n\nfunction fireSyntheticPointerEvent(name, handler) {\n if (!handler)\n return;\n const syntheticPointerEvent = new PointerEvent(\"pointer\" + name);\n handler(syntheticPointerEvent, extractEventInfo(syntheticPointerEvent));\n}\nclass PressGesture extends Feature {\n constructor() {\n super(...arguments);\n this.removeStartListeners = noop;\n this.removeEndListeners = noop;\n this.removeAccessibleListeners = noop;\n this.startPointerPress = (startEvent, startInfo) => {\n if (this.isPressing)\n return;\n this.removeEndListeners();\n const props = this.node.getProps();\n const endPointerPress = (endEvent, endInfo) => {\n if (!this.checkPressEnd())\n return;\n const { onTap, onTapCancel, globalTapTarget } = this.node.getProps();\n frame.update(() => {\n /**\n * We only count this as a tap gesture if the event.target is the same\n * as, or a child of, this component's element\n */\n !globalTapTarget &&\n !isNodeOrChild(this.node.current, endEvent.target)\n ? onTapCancel && onTapCancel(endEvent, endInfo)\n : onTap && onTap(endEvent, endInfo);\n });\n };\n const removePointerUpListener = addPointerEvent(window, \"pointerup\", endPointerPress, { passive: !(props.onTap || props[\"onPointerUp\"]) });\n const removePointerCancelListener = addPointerEvent(window, \"pointercancel\", (cancelEvent, cancelInfo) => this.cancelPress(cancelEvent, cancelInfo), { passive: !(props.onTapCancel || props[\"onPointerCancel\"]) });\n this.removeEndListeners = pipe(removePointerUpListener, removePointerCancelListener);\n this.startPress(startEvent, startInfo);\n };\n this.startAccessiblePress = () => {\n const handleKeydown = (keydownEvent) => {\n if (keydownEvent.key !== \"Enter\" || this.isPressing)\n return;\n const handleKeyup = (keyupEvent) => {\n if (keyupEvent.key !== \"Enter\" || !this.checkPressEnd())\n return;\n fireSyntheticPointerEvent(\"up\", (event, info) => {\n const { onTap } = this.node.getProps();\n if (onTap) {\n frame.update(() => onTap(event, info));\n }\n });\n };\n this.removeEndListeners();\n this.removeEndListeners = addDomEvent(this.node.current, \"keyup\", handleKeyup);\n fireSyntheticPointerEvent(\"down\", (event, info) => {\n this.startPress(event, info);\n });\n };\n const removeKeydownListener = addDomEvent(this.node.current, \"keydown\", handleKeydown);\n const handleBlur = () => {\n if (!this.isPressing)\n return;\n fireSyntheticPointerEvent(\"cancel\", (cancelEvent, cancelInfo) => this.cancelPress(cancelEvent, cancelInfo));\n };\n const removeBlurListener = addDomEvent(this.node.current, \"blur\", handleBlur);\n this.removeAccessibleListeners = pipe(removeKeydownListener, removeBlurListener);\n };\n }\n startPress(event, info) {\n this.isPressing = true;\n const { onTapStart, whileTap } = this.node.getProps();\n /**\n * Ensure we trigger animations before firing event callback\n */\n if (whileTap && this.node.animationState) {\n this.node.animationState.setActive(\"whileTap\", true);\n }\n if (onTapStart) {\n frame.update(() => onTapStart(event, info));\n }\n }\n checkPressEnd() {\n this.removeEndListeners();\n this.isPressing = false;\n const props = this.node.getProps();\n if (props.whileTap && this.node.animationState) {\n this.node.animationState.setActive(\"whileTap\", false);\n }\n return !isDragActive();\n }\n cancelPress(event, info) {\n if (!this.checkPressEnd())\n return;\n const { onTapCancel } = this.node.getProps();\n if (onTapCancel) {\n frame.update(() => onTapCancel(event, info));\n }\n }\n mount() {\n const props = this.node.getProps();\n const removePointerListener = addPointerEvent(props.globalTapTarget ? window : this.node.current, \"pointerdown\", this.startPointerPress, { passive: !(props.onTapStart || props[\"onPointerStart\"]) });\n const removeFocusListener = addDomEvent(this.node.current, \"focus\", this.startAccessiblePress);\n this.removeStartListeners = pipe(removePointerListener, removeFocusListener);\n }\n unmount() {\n this.removeStartListeners();\n this.removeEndListeners();\n this.removeAccessibleListeners();\n }\n}\n\nexport { PressGesture };\n","/**\n * Map an IntersectionHandler callback to an element. We only ever make one handler for one\n * element, so even though these handlers might all be triggered by different\n * observers, we can keep them in the same map.\n */\nconst observerCallbacks = new WeakMap();\n/**\n * Multiple observers can be created for multiple element/document roots. Each with\n * different settings. So here we store dictionaries of observers to each root,\n * using serialised settings (threshold/margin) as lookup keys.\n */\nconst observers = new WeakMap();\nconst fireObserverCallback = (entry) => {\n const callback = observerCallbacks.get(entry.target);\n callback && callback(entry);\n};\nconst fireAllObserverCallbacks = (entries) => {\n entries.forEach(fireObserverCallback);\n};\nfunction initIntersectionObserver({ root, ...options }) {\n const lookupRoot = root || document;\n /**\n * If we don't have an observer lookup map for this root, create one.\n */\n if (!observers.has(lookupRoot)) {\n observers.set(lookupRoot, {});\n }\n const rootObservers = observers.get(lookupRoot);\n const key = JSON.stringify(options);\n /**\n * If we don't have an observer for this combination of root and settings,\n * create one.\n */\n if (!rootObservers[key]) {\n rootObservers[key] = new IntersectionObserver(fireAllObserverCallbacks, { root, ...options });\n }\n return rootObservers[key];\n}\nfunction observeIntersection(element, options, callback) {\n const rootInteresectionObserver = initIntersectionObserver(options);\n observerCallbacks.set(element, callback);\n rootInteresectionObserver.observe(element);\n return () => {\n observerCallbacks.delete(element);\n rootInteresectionObserver.unobserve(element);\n };\n}\n\nexport { observeIntersection };\n","import { Feature } from '../Feature.mjs';\nimport { observeIntersection } from './observers.mjs';\n\nconst thresholdNames = {\n some: 0,\n all: 1,\n};\nclass InViewFeature extends Feature {\n constructor() {\n super(...arguments);\n this.hasEnteredView = false;\n this.isInView = false;\n }\n startObserver() {\n this.unmount();\n const { viewport = {} } = this.node.getProps();\n const { root, margin: rootMargin, amount = \"some\", once } = viewport;\n const options = {\n root: root ? root.current : undefined,\n rootMargin,\n threshold: typeof amount === \"number\" ? amount : thresholdNames[amount],\n };\n const onIntersectionUpdate = (entry) => {\n const { isIntersecting } = entry;\n /**\n * If there's been no change in the viewport state, early return.\n */\n if (this.isInView === isIntersecting)\n return;\n this.isInView = isIntersecting;\n /**\n * Handle hasEnteredView. If this is only meant to run once, and\n * element isn't visible, early return. Otherwise set hasEnteredView to true.\n */\n if (once && !isIntersecting && this.hasEnteredView) {\n return;\n }\n else if (isIntersecting) {\n this.hasEnteredView = true;\n }\n if (this.node.animationState) {\n this.node.animationState.setActive(\"whileInView\", isIntersecting);\n }\n /**\n * Use the latest committed props rather than the ones in scope\n * when this observer is created\n */\n const { onViewportEnter, onViewportLeave } = this.node.getProps();\n const callback = isIntersecting ? onViewportEnter : onViewportLeave;\n callback && callback(entry);\n };\n return observeIntersection(this.node.current, options, onIntersectionUpdate);\n }\n mount() {\n this.startObserver();\n }\n update() {\n if (typeof IntersectionObserver === \"undefined\")\n return;\n const { props, prevProps } = this.node;\n const hasOptionsChanged = [\"amount\", \"margin\", \"root\"].some(hasViewportOptionChanged(props, prevProps));\n if (hasOptionsChanged) {\n this.startObserver();\n }\n }\n unmount() { }\n}\nfunction hasViewportOptionChanged({ viewport = {} }, { viewport: prevViewport = {} } = {}) {\n return (name) => viewport[name] !== prevViewport[name];\n}\n\nexport { InViewFeature };\n","import { HoverGesture } from '../../gestures/hover.mjs';\nimport { FocusGesture } from '../../gestures/focus.mjs';\nimport { PressGesture } from '../../gestures/press.mjs';\nimport { InViewFeature } from './viewport/index.mjs';\n\nconst gestureAnimations = {\n inView: {\n Feature: InViewFeature,\n },\n tap: {\n Feature: PressGesture,\n },\n focus: {\n Feature: FocusGesture,\n },\n hover: {\n Feature: HoverGesture,\n },\n};\n\nexport { gestureAnimations };\n","import { addDomEvent } from '../events/add-dom-event.mjs';\nimport { Feature } from '../motion/features/Feature.mjs';\nimport { pipe } from '../utils/pipe.mjs';\n\nclass FocusGesture extends Feature {\n constructor() {\n super(...arguments);\n this.isActive = false;\n }\n onFocus() {\n let isFocusVisible = false;\n /**\n * If this element doesn't match focus-visible then don't\n * apply whileHover. But, if matches throws that focus-visible\n * is not a valid selector then in that browser outline styles will be applied\n * to the element by default and we want to match that behaviour with whileFocus.\n */\n try {\n isFocusVisible = this.node.current.matches(\":focus-visible\");\n }\n catch (e) {\n isFocusVisible = true;\n }\n if (!isFocusVisible || !this.node.animationState)\n return;\n this.node.animationState.setActive(\"whileFocus\", true);\n this.isActive = true;\n }\n onBlur() {\n if (!this.isActive || !this.node.animationState)\n return;\n this.node.animationState.setActive(\"whileFocus\", false);\n this.isActive = false;\n }\n mount() {\n this.unmount = pipe(addDomEvent(this.node.current, \"focus\", () => this.onFocus()), addDomEvent(this.node.current, \"blur\", () => this.onBlur()));\n }\n unmount() { }\n}\n\nexport { FocusGesture };\n","function shallowCompare(next, prev) {\n if (!Array.isArray(prev))\n return false;\n const prevLength = prev.length;\n if (prevLength !== next.length)\n return false;\n for (let i = 0; i < prevLength; i++) {\n if (prev[i] !== next[i])\n return false;\n }\n return true;\n}\n\nexport { shallowCompare };\n","import { resolveVariant } from '../../render/utils/resolve-dynamic-variants.mjs';\nimport { animateTarget } from './visual-element-target.mjs';\n\nfunction animateVariant(visualElement, variant, options = {}) {\n const resolved = resolveVariant(visualElement, variant, options.custom);\n let { transition = visualElement.getDefaultTransition() || {} } = resolved || {};\n if (options.transitionOverride) {\n transition = options.transitionOverride;\n }\n /**\n * If we have a variant, create a callback that runs it as an animation.\n * Otherwise, we resolve a Promise immediately for a composable no-op.\n */\n const getAnimation = resolved\n ? () => Promise.all(animateTarget(visualElement, resolved, options))\n : () => Promise.resolve();\n /**\n * If we have children, create a callback that runs all their animations.\n * Otherwise, we resolve a Promise immediately for a composable no-op.\n */\n const getChildAnimations = visualElement.variantChildren && visualElement.variantChildren.size\n ? (forwardDelay = 0) => {\n const { delayChildren = 0, staggerChildren, staggerDirection, } = transition;\n return animateChildren(visualElement, variant, delayChildren + forwardDelay, staggerChildren, staggerDirection, options);\n }\n : () => Promise.resolve();\n /**\n * If the transition explicitly defines a \"when\" option, we need to resolve either\n * this animation or all children animations before playing the other.\n */\n const { when } = transition;\n if (when) {\n const [first, last] = when === \"beforeChildren\"\n ? [getAnimation, getChildAnimations]\n : [getChildAnimations, getAnimation];\n return first().then(() => last());\n }\n else {\n return Promise.all([getAnimation(), getChildAnimations(options.delay)]);\n }\n}\nfunction animateChildren(visualElement, variant, delayChildren = 0, staggerChildren = 0, staggerDirection = 1, options) {\n const animations = [];\n const maxStaggerDuration = (visualElement.variantChildren.size - 1) * staggerChildren;\n const generateStaggerDuration = staggerDirection === 1\n ? (i = 0) => i * staggerChildren\n : (i = 0) => maxStaggerDuration - i * staggerChildren;\n Array.from(visualElement.variantChildren)\n .sort(sortByTreeOrder)\n .forEach((child, i) => {\n child.notify(\"AnimationStart\", variant);\n animations.push(animateVariant(child, variant, {\n ...options,\n delay: delayChildren + generateStaggerDuration(i),\n }).then(() => child.notify(\"AnimationComplete\", variant)));\n });\n return Promise.all(animations);\n}\nfunction sortByTreeOrder(a, b) {\n return a.sortNodePosition(b);\n}\n\nexport { animateVariant, sortByTreeOrder };\n","import { isAnimationControls } from '../../animation/utils/is-animation-controls.mjs';\nimport { isKeyframesTarget } from '../../animation/utils/is-keyframes-target.mjs';\nimport { shallowCompare } from '../../utils/shallow-compare.mjs';\nimport { isVariantLabel } from './is-variant-label.mjs';\nimport { resolveVariant } from './resolve-dynamic-variants.mjs';\nimport { variantPriorityOrder } from './variant-props.mjs';\nimport { animateVisualElement } from '../../animation/interfaces/visual-element.mjs';\n\nconst reversePriorityOrder = [...variantPriorityOrder].reverse();\nconst numAnimationTypes = variantPriorityOrder.length;\nfunction animateList(visualElement) {\n return (animations) => Promise.all(animations.map(({ animation, options }) => animateVisualElement(visualElement, animation, options)));\n}\nfunction createAnimationState(visualElement) {\n let animate = animateList(visualElement);\n const state = createState();\n let isInitialRender = true;\n /**\n * This function will be used to reduce the animation definitions for\n * each active animation type into an object of resolved values for it.\n */\n const buildResolvedTypeValues = (acc, definition) => {\n const resolved = resolveVariant(visualElement, definition);\n if (resolved) {\n const { transition, transitionEnd, ...target } = resolved;\n acc = { ...acc, ...target, ...transitionEnd };\n }\n return acc;\n };\n /**\n * This just allows us to inject mocked animation functions\n * @internal\n */\n function setAnimateFunction(makeAnimator) {\n animate = makeAnimator(visualElement);\n }\n /**\n * When we receive new props, we need to:\n * 1. Create a list of protected keys for each type. This is a directory of\n * value keys that are currently being \"handled\" by types of a higher priority\n * so that whenever an animation is played of a given type, these values are\n * protected from being animated.\n * 2. Determine if an animation type needs animating.\n * 3. Determine if any values have been removed from a type and figure out\n * what to animate those to.\n */\n function animateChanges(options, changedActiveType) {\n const props = visualElement.getProps();\n const context = visualElement.getVariantContext(true) || {};\n /**\n * A list of animations that we'll build into as we iterate through the animation\n * types. This will get executed at the end of the function.\n */\n const animations = [];\n /**\n * Keep track of which values have been removed. Then, as we hit lower priority\n * animation types, we can check if they contain removed values and animate to that.\n */\n const removedKeys = new Set();\n /**\n * A dictionary of all encountered keys. This is an object to let us build into and\n * copy it without iteration. Each time we hit an animation type we set its protected\n * keys - the keys its not allowed to animate - to the latest version of this object.\n */\n let encounteredKeys = {};\n /**\n * If a variant has been removed at a given index, and this component is controlling\n * variant animations, we want to ensure lower-priority variants are forced to animate.\n */\n let removedVariantIndex = Infinity;\n /**\n * Iterate through all animation types in reverse priority order. For each, we want to\n * detect which values it's handling and whether or not they've changed (and therefore\n * need to be animated). If any values have been removed, we want to detect those in\n * lower priority props and flag for animation.\n */\n for (let i = 0; i < numAnimationTypes; i++) {\n const type = reversePriorityOrder[i];\n const typeState = state[type];\n const prop = props[type] !== undefined ? props[type] : context[type];\n const propIsVariant = isVariantLabel(prop);\n /**\n * If this type has *just* changed isActive status, set activeDelta\n * to that status. Otherwise set to null.\n */\n const activeDelta = type === changedActiveType ? typeState.isActive : null;\n if (activeDelta === false)\n removedVariantIndex = i;\n /**\n * If this prop is an inherited variant, rather than been set directly on the\n * component itself, we want to make sure we allow the parent to trigger animations.\n *\n * TODO: Can probably change this to a !isControllingVariants check\n */\n let isInherited = prop === context[type] && prop !== props[type] && propIsVariant;\n /**\n *\n */\n if (isInherited &&\n isInitialRender &&\n visualElement.manuallyAnimateOnMount) {\n isInherited = false;\n }\n /**\n * Set all encountered keys so far as the protected keys for this type. This will\n * be any key that has been animated or otherwise handled by active, higher-priortiy types.\n */\n typeState.protectedKeys = { ...encounteredKeys };\n // Check if we can skip analysing this prop early\n if (\n // If it isn't active and hasn't *just* been set as inactive\n (!typeState.isActive && activeDelta === null) ||\n // If we didn't and don't have any defined prop for this animation type\n (!prop && !typeState.prevProp) ||\n // Or if the prop doesn't define an animation\n isAnimationControls(prop) ||\n typeof prop === \"boolean\") {\n continue;\n }\n /**\n * As we go look through the values defined on this type, if we detect\n * a changed value or a value that was removed in a higher priority, we set\n * this to true and add this prop to the animation list.\n */\n const variantDidChange = checkVariantsDidChange(typeState.prevProp, prop);\n let shouldAnimateType = variantDidChange ||\n // If we're making this variant active, we want to always make it active\n (type === changedActiveType &&\n typeState.isActive &&\n !isInherited &&\n propIsVariant) ||\n // If we removed a higher-priority variant (i is in reverse order)\n (i > removedVariantIndex && propIsVariant);\n let handledRemovedValues = false;\n /**\n * As animations can be set as variant lists, variants or target objects, we\n * coerce everything to an array if it isn't one already\n */\n const definitionList = Array.isArray(prop) ? prop : [prop];\n /**\n * Build an object of all the resolved values. We'll use this in the subsequent\n * animateChanges calls to determine whether a value has changed.\n */\n let resolvedValues = definitionList.reduce(buildResolvedTypeValues, {});\n if (activeDelta === false)\n resolvedValues = {};\n /**\n * Now we need to loop through all the keys in the prev prop and this prop,\n * and decide:\n * 1. If the value has changed, and needs animating\n * 2. If it has been removed, and needs adding to the removedKeys set\n * 3. If it has been removed in a higher priority type and needs animating\n * 4. If it hasn't been removed in a higher priority but hasn't changed, and\n * needs adding to the type's protectedKeys list.\n */\n const { prevResolvedValues = {} } = typeState;\n const allKeys = {\n ...prevResolvedValues,\n ...resolvedValues,\n };\n const markToAnimate = (key) => {\n shouldAnimateType = true;\n if (removedKeys.has(key)) {\n handledRemovedValues = true;\n removedKeys.delete(key);\n }\n typeState.needsAnimating[key] = true;\n };\n for (const key in allKeys) {\n const next = resolvedValues[key];\n const prev = prevResolvedValues[key];\n // If we've already handled this we can just skip ahead\n if (encounteredKeys.hasOwnProperty(key))\n continue;\n /**\n * If the value has changed, we probably want to animate it.\n */\n let valueHasChanged = false;\n if (isKeyframesTarget(next) && isKeyframesTarget(prev)) {\n valueHasChanged = !shallowCompare(next, prev);\n }\n else {\n valueHasChanged = next !== prev;\n }\n if (valueHasChanged) {\n if (next !== undefined) {\n // If next is defined and doesn't equal prev, it needs animating\n markToAnimate(key);\n }\n else {\n // If it's undefined, it's been removed.\n removedKeys.add(key);\n }\n }\n else if (next !== undefined && removedKeys.has(key)) {\n /**\n * If next hasn't changed and it isn't undefined, we want to check if it's\n * been removed by a higher priority\n */\n markToAnimate(key);\n }\n else {\n /**\n * If it hasn't changed, we add it to the list of protected values\n * to ensure it doesn't get animated.\n */\n typeState.protectedKeys[key] = true;\n }\n }\n /**\n * Update the typeState so next time animateChanges is called we can compare the\n * latest prop and resolvedValues to these.\n */\n typeState.prevProp = prop;\n typeState.prevResolvedValues = resolvedValues;\n /**\n *\n */\n if (typeState.isActive) {\n encounteredKeys = { ...encounteredKeys, ...resolvedValues };\n }\n if (isInitialRender && visualElement.blockInitialAnimation) {\n shouldAnimateType = false;\n }\n /**\n * If this is an inherited prop we want to hard-block animations\n */\n if (shouldAnimateType && (!isInherited || handledRemovedValues)) {\n animations.push(...definitionList.map((animation) => ({\n animation: animation,\n options: { type, ...options },\n })));\n }\n }\n /**\n * If there are some removed value that haven't been dealt with,\n * we need to create a new animation that falls back either to the value\n * defined in the style prop, or the last read value.\n */\n if (removedKeys.size) {\n const fallbackAnimation = {};\n removedKeys.forEach((key) => {\n const fallbackTarget = visualElement.getBaseTarget(key);\n if (fallbackTarget !== undefined) {\n fallbackAnimation[key] = fallbackTarget;\n }\n });\n animations.push({ animation: fallbackAnimation });\n }\n let shouldAnimate = Boolean(animations.length);\n if (isInitialRender &&\n (props.initial === false || props.initial === props.animate) &&\n !visualElement.manuallyAnimateOnMount) {\n shouldAnimate = false;\n }\n isInitialRender = false;\n return shouldAnimate ? animate(animations) : Promise.resolve();\n }\n /**\n * Change whether a certain animation type is active.\n */\n function setActive(type, isActive, options) {\n var _a;\n // If the active state hasn't changed, we can safely do nothing here\n if (state[type].isActive === isActive)\n return Promise.resolve();\n // Propagate active change to children\n (_a = visualElement.variantChildren) === null || _a === void 0 ? void 0 : _a.forEach((child) => { var _a; return (_a = child.animationState) === null || _a === void 0 ? void 0 : _a.setActive(type, isActive); });\n state[type].isActive = isActive;\n const animations = animateChanges(options, type);\n for (const key in state) {\n state[key].protectedKeys = {};\n }\n return animations;\n }\n return {\n animateChanges,\n setActive,\n setAnimateFunction,\n getState: () => state,\n };\n}\nfunction checkVariantsDidChange(prev, next) {\n if (typeof next === \"string\") {\n return next !== prev;\n }\n else if (Array.isArray(next)) {\n return !shallowCompare(next, prev);\n }\n return false;\n}\nfunction createTypeState(isActive = false) {\n return {\n isActive,\n protectedKeys: {},\n needsAnimating: {},\n prevResolvedValues: {},\n };\n}\nfunction createState() {\n return {\n animate: createTypeState(true),\n whileInView: createTypeState(),\n whileHover: createTypeState(),\n whileTap: createTypeState(),\n whileDrag: createTypeState(),\n whileFocus: createTypeState(),\n exit: createTypeState(),\n };\n}\n\nexport { checkVariantsDidChange, createAnimationState };\n","import { resolveVariant } from '../../render/utils/resolve-dynamic-variants.mjs';\nimport { animateTarget } from './visual-element-target.mjs';\nimport { animateVariant } from './visual-element-variant.mjs';\n\nfunction animateVisualElement(visualElement, definition, options = {}) {\n visualElement.notify(\"AnimationStart\", definition);\n let animation;\n if (Array.isArray(definition)) {\n const animations = definition.map((variant) => animateVariant(visualElement, variant, options));\n animation = Promise.all(animations);\n }\n else if (typeof definition === \"string\") {\n animation = animateVariant(visualElement, definition, options);\n }\n else {\n const resolvedDefinition = typeof definition === \"function\"\n ? resolveVariant(visualElement, definition, options.custom)\n : definition;\n animation = Promise.all(animateTarget(visualElement, resolvedDefinition, options));\n }\n return animation.then(() => visualElement.notify(\"AnimationComplete\", definition));\n}\n\nexport { animateVisualElement };\n","import { Feature } from '../Feature.mjs';\n\nlet id = 0;\nclass ExitAnimationFeature extends Feature {\n constructor() {\n super(...arguments);\n this.id = id++;\n }\n update() {\n if (!this.node.presenceContext)\n return;\n const { isPresent, onExitComplete, custom } = this.node.presenceContext;\n const { isPresent: prevIsPresent } = this.node.prevPresenceContext || {};\n if (!this.node.animationState || isPresent === prevIsPresent) {\n return;\n }\n const exitAnimation = this.node.animationState.setActive(\"exit\", !isPresent, { custom: custom !== null && custom !== void 0 ? custom : this.node.getProps().custom });\n if (onExitComplete && !isPresent) {\n exitAnimation.then(() => onExitComplete(this.id));\n }\n }\n mount() {\n const { register } = this.node.presenceContext || {};\n if (register) {\n this.unmount = register(this.id);\n }\n }\n unmount() { }\n}\n\nexport { ExitAnimationFeature };\n","import { AnimationFeature } from './animation/index.mjs';\nimport { ExitAnimationFeature } from './animation/exit.mjs';\n\nconst animations = {\n animation: {\n Feature: AnimationFeature,\n },\n exit: {\n Feature: ExitAnimationFeature,\n },\n};\n\nexport { animations };\n","import { isAnimationControls } from '../../../animation/utils/is-animation-controls.mjs';\nimport { createAnimationState } from '../../../render/utils/animation-state.mjs';\nimport { Feature } from '../Feature.mjs';\n\nclass AnimationFeature extends Feature {\n /**\n * We dynamically generate the AnimationState manager as it contains a reference\n * to the underlying animation library. We only want to load that if we load this,\n * so people can optionally code split it out using the `m` component.\n */\n constructor(node) {\n super(node);\n node.animationState || (node.animationState = createAnimationState(node));\n }\n updateAnimationControlsSubscription() {\n const { animate } = this.node.getProps();\n this.unmount();\n if (isAnimationControls(animate)) {\n this.unmount = animate.subscribe(this.node);\n }\n }\n /**\n * Subscribe any provided AnimationControls to the component's VisualElement\n */\n mount() {\n this.updateAnimationControlsSubscription();\n }\n update() {\n const { animate } = this.node.getProps();\n const { animate: prevAnimate } = this.node.prevProps || {};\n if (animate !== prevAnimate) {\n this.updateAnimationControlsSubscription();\n }\n }\n unmount() { }\n}\n\nexport { AnimationFeature };\n","const distance = (a, b) => Math.abs(a - b);\nfunction distance2D(a, b) {\n // Multi-dimensional\n const xDelta = distance(a.x, b.x);\n const yDelta = distance(a.y, b.y);\n return Math.sqrt(xDelta ** 2 + yDelta ** 2);\n}\n\nexport { distance, distance2D };\n","import { extractEventInfo } from '../../events/event-info.mjs';\nimport { secondsToMilliseconds, millisecondsToSeconds } from '../../utils/time-conversion.mjs';\nimport { addPointerEvent } from '../../events/add-pointer-event.mjs';\nimport { pipe } from '../../utils/pipe.mjs';\nimport { distance2D } from '../../utils/distance.mjs';\nimport { isPrimaryPointer } from '../../events/utils/is-primary-pointer.mjs';\nimport { frame, cancelFrame, frameData } from '../../frameloop/frame.mjs';\n\n/**\n * @internal\n */\nclass PanSession {\n constructor(event, handlers, { transformPagePoint, contextWindow, dragSnapToOrigin = false } = {}) {\n /**\n * @internal\n */\n this.startEvent = null;\n /**\n * @internal\n */\n this.lastMoveEvent = null;\n /**\n * @internal\n */\n this.lastMoveEventInfo = null;\n /**\n * @internal\n */\n this.handlers = {};\n /**\n * @internal\n */\n this.contextWindow = window;\n this.updatePoint = () => {\n if (!(this.lastMoveEvent && this.lastMoveEventInfo))\n return;\n const info = getPanInfo(this.lastMoveEventInfo, this.history);\n const isPanStarted = this.startEvent !== null;\n // Only start panning if the offset is larger than 3 pixels. If we make it\n // any larger than this we'll want to reset the pointer history\n // on the first update to avoid visual snapping to the cursoe.\n const isDistancePastThreshold = distance2D(info.offset, { x: 0, y: 0 }) >= 3;\n if (!isPanStarted && !isDistancePastThreshold)\n return;\n const { point } = info;\n const { timestamp } = frameData;\n this.history.push({ ...point, timestamp });\n const { onStart, onMove } = this.handlers;\n if (!isPanStarted) {\n onStart && onStart(this.lastMoveEvent, info);\n this.startEvent = this.lastMoveEvent;\n }\n onMove && onMove(this.lastMoveEvent, info);\n };\n this.handlePointerMove = (event, info) => {\n this.lastMoveEvent = event;\n this.lastMoveEventInfo = transformPoint(info, this.transformPagePoint);\n // Throttle mouse move event to once per frame\n frame.update(this.updatePoint, true);\n };\n this.handlePointerUp = (event, info) => {\n this.end();\n const { onEnd, onSessionEnd, resumeAnimation } = this.handlers;\n if (this.dragSnapToOrigin)\n resumeAnimation && resumeAnimation();\n if (!(this.lastMoveEvent && this.lastMoveEventInfo))\n return;\n const panInfo = getPanInfo(event.type === \"pointercancel\"\n ? this.lastMoveEventInfo\n : transformPoint(info, this.transformPagePoint), this.history);\n if (this.startEvent && onEnd) {\n onEnd(event, panInfo);\n }\n onSessionEnd && onSessionEnd(event, panInfo);\n };\n // If we have more than one touch, don't start detecting this gesture\n if (!isPrimaryPointer(event))\n return;\n this.dragSnapToOrigin = dragSnapToOrigin;\n this.handlers = handlers;\n this.transformPagePoint = transformPagePoint;\n this.contextWindow = contextWindow || window;\n const info = extractEventInfo(event);\n const initialInfo = transformPoint(info, this.transformPagePoint);\n const { point } = initialInfo;\n const { timestamp } = frameData;\n this.history = [{ ...point, timestamp }];\n const { onSessionStart } = handlers;\n onSessionStart &&\n onSessionStart(event, getPanInfo(initialInfo, this.history));\n this.removeListeners = pipe(addPointerEvent(this.contextWindow, \"pointermove\", this.handlePointerMove), addPointerEvent(this.contextWindow, \"pointerup\", this.handlePointerUp), addPointerEvent(this.contextWindow, \"pointercancel\", this.handlePointerUp));\n }\n updateHandlers(handlers) {\n this.handlers = handlers;\n }\n end() {\n this.removeListeners && this.removeListeners();\n cancelFrame(this.updatePoint);\n }\n}\nfunction transformPoint(info, transformPagePoint) {\n return transformPagePoint ? { point: transformPagePoint(info.point) } : info;\n}\nfunction subtractPoint(a, b) {\n return { x: a.x - b.x, y: a.y - b.y };\n}\nfunction getPanInfo({ point }, history) {\n return {\n point,\n delta: subtractPoint(point, lastDevicePoint(history)),\n offset: subtractPoint(point, startDevicePoint(history)),\n velocity: getVelocity(history, 0.1),\n };\n}\nfunction startDevicePoint(history) {\n return history[0];\n}\nfunction lastDevicePoint(history) {\n return history[history.length - 1];\n}\nfunction getVelocity(history, timeDelta) {\n if (history.length < 2) {\n return { x: 0, y: 0 };\n }\n let i = history.length - 1;\n let timestampedPoint = null;\n const lastPoint = lastDevicePoint(history);\n while (i >= 0) {\n timestampedPoint = history[i];\n if (lastPoint.timestamp - timestampedPoint.timestamp >\n secondsToMilliseconds(timeDelta)) {\n break;\n }\n i--;\n }\n if (!timestampedPoint) {\n return { x: 0, y: 0 };\n }\n const time = millisecondsToSeconds(lastPoint.timestamp - timestampedPoint.timestamp);\n if (time === 0) {\n return { x: 0, y: 0 };\n }\n const currentVelocity = {\n x: (lastPoint.x - timestampedPoint.x) / time,\n y: (lastPoint.y - timestampedPoint.y) / time,\n };\n if (currentVelocity.x === Infinity) {\n currentVelocity.x = 0;\n }\n if (currentVelocity.y === Infinity) {\n currentVelocity.y = 0;\n }\n return currentVelocity;\n}\n\nexport { PanSession };\n","import { mix } from '../../utils/mix.mjs';\n\nfunction calcLength(axis) {\n return axis.max - axis.min;\n}\nfunction isNear(value, target = 0, maxDistance = 0.01) {\n return Math.abs(value - target) <= maxDistance;\n}\nfunction calcAxisDelta(delta, source, target, origin = 0.5) {\n delta.origin = origin;\n delta.originPoint = mix(source.min, source.max, delta.origin);\n delta.scale = calcLength(target) / calcLength(source);\n if (isNear(delta.scale, 1, 0.0001) || isNaN(delta.scale))\n delta.scale = 1;\n delta.translate =\n mix(target.min, target.max, delta.origin) - delta.originPoint;\n if (isNear(delta.translate) || isNaN(delta.translate))\n delta.translate = 0;\n}\nfunction calcBoxDelta(delta, source, target, origin) {\n calcAxisDelta(delta.x, source.x, target.x, origin ? origin.originX : undefined);\n calcAxisDelta(delta.y, source.y, target.y, origin ? origin.originY : undefined);\n}\nfunction calcRelativeAxis(target, relative, parent) {\n target.min = parent.min + relative.min;\n target.max = target.min + calcLength(relative);\n}\nfunction calcRelativeBox(target, relative, parent) {\n calcRelativeAxis(target.x, relative.x, parent.x);\n calcRelativeAxis(target.y, relative.y, parent.y);\n}\nfunction calcRelativeAxisPosition(target, layout, parent) {\n target.min = layout.min - parent.min;\n target.max = target.min + calcLength(layout);\n}\nfunction calcRelativePosition(target, layout, parent) {\n calcRelativeAxisPosition(target.x, layout.x, parent.x);\n calcRelativeAxisPosition(target.y, layout.y, parent.y);\n}\n\nexport { calcAxisDelta, calcBoxDelta, calcLength, calcRelativeAxis, calcRelativeAxisPosition, calcRelativeBox, calcRelativePosition, isNear };\n","import { progress } from '../../../utils/progress.mjs';\nimport { calcLength } from '../../../projection/geometry/delta-calc.mjs';\nimport { clamp } from '../../../utils/clamp.mjs';\nimport { mix } from '../../../utils/mix.mjs';\n\n/**\n * Apply constraints to a point. These constraints are both physical along an\n * axis, and an elastic factor that determines how much to constrain the point\n * by if it does lie outside the defined parameters.\n */\nfunction applyConstraints(point, { min, max }, elastic) {\n if (min !== undefined && point < min) {\n // If we have a min point defined, and this is outside of that, constrain\n point = elastic ? mix(min, point, elastic.min) : Math.max(point, min);\n }\n else if (max !== undefined && point > max) {\n // If we have a max point defined, and this is outside of that, constrain\n point = elastic ? mix(max, point, elastic.max) : Math.min(point, max);\n }\n return point;\n}\n/**\n * Calculate constraints in terms of the viewport when defined relatively to the\n * measured axis. This is measured from the nearest edge, so a max constraint of 200\n * on an axis with a max value of 300 would return a constraint of 500 - axis length\n */\nfunction calcRelativeAxisConstraints(axis, min, max) {\n return {\n min: min !== undefined ? axis.min + min : undefined,\n max: max !== undefined\n ? axis.max + max - (axis.max - axis.min)\n : undefined,\n };\n}\n/**\n * Calculate constraints in terms of the viewport when\n * defined relatively to the measured bounding box.\n */\nfunction calcRelativeConstraints(layoutBox, { top, left, bottom, right }) {\n return {\n x: calcRelativeAxisConstraints(layoutBox.x, left, right),\n y: calcRelativeAxisConstraints(layoutBox.y, top, bottom),\n };\n}\n/**\n * Calculate viewport constraints when defined as another viewport-relative axis\n */\nfunction calcViewportAxisConstraints(layoutAxis, constraintsAxis) {\n let min = constraintsAxis.min - layoutAxis.min;\n let max = constraintsAxis.max - layoutAxis.max;\n // If the constraints axis is actually smaller than the layout axis then we can\n // flip the constraints\n if (constraintsAxis.max - constraintsAxis.min <\n layoutAxis.max - layoutAxis.min) {\n [min, max] = [max, min];\n }\n return { min, max };\n}\n/**\n * Calculate viewport constraints when defined as another viewport-relative box\n */\nfunction calcViewportConstraints(layoutBox, constraintsBox) {\n return {\n x: calcViewportAxisConstraints(layoutBox.x, constraintsBox.x),\n y: calcViewportAxisConstraints(layoutBox.y, constraintsBox.y),\n };\n}\n/**\n * Calculate a transform origin relative to the source axis, between 0-1, that results\n * in an asthetically pleasing scale/transform needed to project from source to target.\n */\nfunction calcOrigin(source, target) {\n let origin = 0.5;\n const sourceLength = calcLength(source);\n const targetLength = calcLength(target);\n if (targetLength > sourceLength) {\n origin = progress(target.min, target.max - sourceLength, source.min);\n }\n else if (sourceLength > targetLength) {\n origin = progress(source.min, source.max - targetLength, target.min);\n }\n return clamp(0, 1, origin);\n}\n/**\n * Rebase the calculated viewport constraints relative to the layout.min point.\n */\nfunction rebaseAxisConstraints(layout, constraints) {\n const relativeConstraints = {};\n if (constraints.min !== undefined) {\n relativeConstraints.min = constraints.min - layout.min;\n }\n if (constraints.max !== undefined) {\n relativeConstraints.max = constraints.max - layout.min;\n }\n return relativeConstraints;\n}\nconst defaultElastic = 0.35;\n/**\n * Accepts a dragElastic prop and returns resolved elastic values for each axis.\n */\nfunction resolveDragElastic(dragElastic = defaultElastic) {\n if (dragElastic === false) {\n dragElastic = 0;\n }\n else if (dragElastic === true) {\n dragElastic = defaultElastic;\n }\n return {\n x: resolveAxisElastic(dragElastic, \"left\", \"right\"),\n y: resolveAxisElastic(dragElastic, \"top\", \"bottom\"),\n };\n}\nfunction resolveAxisElastic(dragElastic, minLabel, maxLabel) {\n return {\n min: resolvePointElastic(dragElastic, minLabel),\n max: resolvePointElastic(dragElastic, maxLabel),\n };\n}\nfunction resolvePointElastic(dragElastic, label) {\n return typeof dragElastic === \"number\"\n ? dragElastic\n : dragElastic[label] || 0;\n}\n\nexport { applyConstraints, calcOrigin, calcRelativeAxisConstraints, calcRelativeConstraints, calcViewportAxisConstraints, calcViewportConstraints, defaultElastic, rebaseAxisConstraints, resolveAxisElastic, resolveDragElastic, resolvePointElastic };\n","function eachAxis(callback) {\n return [callback(\"x\"), callback(\"y\")];\n}\n\nexport { eachAxis };\n","// Fixes https://github.com/framer/motion/issues/2270\nconst getContextWindow = ({ current }) => {\n return current ? current.ownerDocument.defaultView : null;\n};\n\nexport { getContextWindow };\n","import { invariant } from '../../utils/errors.mjs';\nimport { PanSession } from '../pan/PanSession.mjs';\nimport { getGlobalLock } from './utils/lock.mjs';\nimport { isRefObject } from '../../utils/is-ref-object.mjs';\nimport { addPointerEvent } from '../../events/add-pointer-event.mjs';\nimport { applyConstraints, calcRelativeConstraints, resolveDragElastic, calcViewportConstraints, defaultElastic, rebaseAxisConstraints, calcOrigin } from './utils/constraints.mjs';\nimport { createBox } from '../../projection/geometry/models.mjs';\nimport { eachAxis } from '../../projection/utils/each-axis.mjs';\nimport { measurePageBox } from '../../projection/utils/measure.mjs';\nimport { extractEventInfo } from '../../events/event-info.mjs';\nimport { convertBoxToBoundingBox, convertBoundingBoxToBox } from '../../projection/geometry/conversion.mjs';\nimport { addDomEvent } from '../../events/add-dom-event.mjs';\nimport { calcLength } from '../../projection/geometry/delta-calc.mjs';\nimport { mix } from '../../utils/mix.mjs';\nimport { percent } from '../../value/types/numbers/units.mjs';\nimport { animateMotionValue } from '../../animation/interfaces/motion-value.mjs';\nimport { getContextWindow } from '../../utils/get-context-window.mjs';\nimport { frame } from '../../frameloop/frame.mjs';\n\nconst elementDragControls = new WeakMap();\n/**\n *\n */\n// let latestPointerEvent: PointerEvent\nclass VisualElementDragControls {\n constructor(visualElement) {\n // This is a reference to the global drag gesture lock, ensuring only one component\n // can \"capture\" the drag of one or both axes.\n // TODO: Look into moving this into pansession?\n this.openGlobalLock = null;\n this.isDragging = false;\n this.currentDirection = null;\n this.originPoint = { x: 0, y: 0 };\n /**\n * The permitted boundaries of travel, in pixels.\n */\n this.constraints = false;\n this.hasMutatedConstraints = false;\n /**\n * The per-axis resolved elastic values.\n */\n this.elastic = createBox();\n this.visualElement = visualElement;\n }\n start(originEvent, { snapToCursor = false } = {}) {\n /**\n * Don't start dragging if this component is exiting\n */\n const { presenceContext } = this.visualElement;\n if (presenceContext && presenceContext.isPresent === false)\n return;\n const onSessionStart = (event) => {\n const { dragSnapToOrigin } = this.getProps();\n // Stop or pause any animations on both axis values immediately. This allows the user to throw and catch\n // the component.\n dragSnapToOrigin ? this.pauseAnimation() : this.stopAnimation();\n if (snapToCursor) {\n this.snapToCursor(extractEventInfo(event, \"page\").point);\n }\n };\n const onStart = (event, info) => {\n // Attempt to grab the global drag gesture lock - maybe make this part of PanSession\n const { drag, dragPropagation, onDragStart } = this.getProps();\n if (drag && !dragPropagation) {\n if (this.openGlobalLock)\n this.openGlobalLock();\n this.openGlobalLock = getGlobalLock(drag);\n // If we don 't have the lock, don't start dragging\n if (!this.openGlobalLock)\n return;\n }\n this.isDragging = true;\n this.currentDirection = null;\n this.resolveConstraints();\n if (this.visualElement.projection) {\n this.visualElement.projection.isAnimationBlocked = true;\n this.visualElement.projection.target = undefined;\n }\n /**\n * Record gesture origin\n */\n eachAxis((axis) => {\n let current = this.getAxisMotionValue(axis).get() || 0;\n /**\n * If the MotionValue is a percentage value convert to px\n */\n if (percent.test(current)) {\n const { projection } = this.visualElement;\n if (projection && projection.layout) {\n const measuredAxis = projection.layout.layoutBox[axis];\n if (measuredAxis) {\n const length = calcLength(measuredAxis);\n current = length * (parseFloat(current) / 100);\n }\n }\n }\n this.originPoint[axis] = current;\n });\n // Fire onDragStart event\n if (onDragStart) {\n frame.update(() => onDragStart(event, info), false, true);\n }\n const { animationState } = this.visualElement;\n animationState && animationState.setActive(\"whileDrag\", true);\n };\n const onMove = (event, info) => {\n // latestPointerEvent = event\n const { dragPropagation, dragDirectionLock, onDirectionLock, onDrag, } = this.getProps();\n // If we didn't successfully receive the gesture lock, early return.\n if (!dragPropagation && !this.openGlobalLock)\n return;\n const { offset } = info;\n // Attempt to detect drag direction if directionLock is true\n if (dragDirectionLock && this.currentDirection === null) {\n this.currentDirection = getCurrentDirection(offset);\n // If we've successfully set a direction, notify listener\n if (this.currentDirection !== null) {\n onDirectionLock && onDirectionLock(this.currentDirection);\n }\n return;\n }\n // Update each point with the latest position\n this.updateAxis(\"x\", info.point, offset);\n this.updateAxis(\"y\", info.point, offset);\n /**\n * Ideally we would leave the renderer to fire naturally at the end of\n * this frame but if the element is about to change layout as the result\n * of a re-render we want to ensure the browser can read the latest\n * bounding box to ensure the pointer and element don't fall out of sync.\n */\n this.visualElement.render();\n /**\n * This must fire after the render call as it might trigger a state\n * change which itself might trigger a layout update.\n */\n onDrag && onDrag(event, info);\n };\n const onSessionEnd = (event, info) => this.stop(event, info);\n const resumeAnimation = () => eachAxis((axis) => {\n var _a;\n return this.getAnimationState(axis) === \"paused\" &&\n ((_a = this.getAxisMotionValue(axis).animation) === null || _a === void 0 ? void 0 : _a.play());\n });\n const { dragSnapToOrigin } = this.getProps();\n this.panSession = new PanSession(originEvent, {\n onSessionStart,\n onStart,\n onMove,\n onSessionEnd,\n resumeAnimation,\n }, {\n transformPagePoint: this.visualElement.getTransformPagePoint(),\n dragSnapToOrigin,\n contextWindow: getContextWindow(this.visualElement),\n });\n }\n stop(event, info) {\n const isDragging = this.isDragging;\n this.cancel();\n if (!isDragging)\n return;\n const { velocity } = info;\n this.startAnimation(velocity);\n const { onDragEnd } = this.getProps();\n if (onDragEnd) {\n frame.update(() => onDragEnd(event, info));\n }\n }\n cancel() {\n this.isDragging = false;\n const { projection, animationState } = this.visualElement;\n if (projection) {\n projection.isAnimationBlocked = false;\n }\n this.panSession && this.panSession.end();\n this.panSession = undefined;\n const { dragPropagation } = this.getProps();\n if (!dragPropagation && this.openGlobalLock) {\n this.openGlobalLock();\n this.openGlobalLock = null;\n }\n animationState && animationState.setActive(\"whileDrag\", false);\n }\n updateAxis(axis, _point, offset) {\n const { drag } = this.getProps();\n // If we're not dragging this axis, do an early return.\n if (!offset || !shouldDrag(axis, drag, this.currentDirection))\n return;\n const axisValue = this.getAxisMotionValue(axis);\n let next = this.originPoint[axis] + offset[axis];\n // Apply constraints\n if (this.constraints && this.constraints[axis]) {\n next = applyConstraints(next, this.constraints[axis], this.elastic[axis]);\n }\n axisValue.set(next);\n }\n resolveConstraints() {\n var _a;\n const { dragConstraints, dragElastic } = this.getProps();\n const layout = this.visualElement.projection &&\n !this.visualElement.projection.layout\n ? this.visualElement.projection.measure(false)\n : (_a = this.visualElement.projection) === null || _a === void 0 ? void 0 : _a.layout;\n const prevConstraints = this.constraints;\n if (dragConstraints && isRefObject(dragConstraints)) {\n if (!this.constraints) {\n this.constraints = this.resolveRefConstraints();\n }\n }\n else {\n if (dragConstraints && layout) {\n this.constraints = calcRelativeConstraints(layout.layoutBox, dragConstraints);\n }\n else {\n this.constraints = false;\n }\n }\n this.elastic = resolveDragElastic(dragElastic);\n /**\n * If we're outputting to external MotionValues, we want to rebase the measured constraints\n * from viewport-relative to component-relative.\n */\n if (prevConstraints !== this.constraints &&\n layout &&\n this.constraints &&\n !this.hasMutatedConstraints) {\n eachAxis((axis) => {\n if (this.getAxisMotionValue(axis)) {\n this.constraints[axis] = rebaseAxisConstraints(layout.layoutBox[axis], this.constraints[axis]);\n }\n });\n }\n }\n resolveRefConstraints() {\n const { dragConstraints: constraints, onMeasureDragConstraints } = this.getProps();\n if (!constraints || !isRefObject(constraints))\n return false;\n const constraintsElement = constraints.current;\n invariant(constraintsElement !== null, \"If `dragConstraints` is set as a React ref, that ref must be passed to another component's `ref` prop.\");\n const { projection } = this.visualElement;\n // TODO\n if (!projection || !projection.layout)\n return false;\n const constraintsBox = measurePageBox(constraintsElement, projection.root, this.visualElement.getTransformPagePoint());\n let measuredConstraints = calcViewportConstraints(projection.layout.layoutBox, constraintsBox);\n /**\n * If there's an onMeasureDragConstraints listener we call it and\n * if different constraints are returned, set constraints to that\n */\n if (onMeasureDragConstraints) {\n const userConstraints = onMeasureDragConstraints(convertBoxToBoundingBox(measuredConstraints));\n this.hasMutatedConstraints = !!userConstraints;\n if (userConstraints) {\n measuredConstraints = convertBoundingBoxToBox(userConstraints);\n }\n }\n return measuredConstraints;\n }\n startAnimation(velocity) {\n const { drag, dragMomentum, dragElastic, dragTransition, dragSnapToOrigin, onDragTransitionEnd, } = this.getProps();\n const constraints = this.constraints || {};\n const momentumAnimations = eachAxis((axis) => {\n if (!shouldDrag(axis, drag, this.currentDirection)) {\n return;\n }\n let transition = (constraints && constraints[axis]) || {};\n if (dragSnapToOrigin)\n transition = { min: 0, max: 0 };\n /**\n * Overdamp the boundary spring if `dragElastic` is disabled. There's still a frame\n * of spring animations so we should look into adding a disable spring option to `inertia`.\n * We could do something here where we affect the `bounceStiffness` and `bounceDamping`\n * using the value of `dragElastic`.\n */\n const bounceStiffness = dragElastic ? 200 : 1000000;\n const bounceDamping = dragElastic ? 40 : 10000000;\n const inertia = {\n type: \"inertia\",\n velocity: dragMomentum ? velocity[axis] : 0,\n bounceStiffness,\n bounceDamping,\n timeConstant: 750,\n restDelta: 1,\n restSpeed: 10,\n ...dragTransition,\n ...transition,\n };\n // If we're not animating on an externally-provided `MotionValue` we can use the\n // component's animation controls which will handle interactions with whileHover (etc),\n // otherwise we just have to animate the `MotionValue` itself.\n return this.startAxisValueAnimation(axis, inertia);\n });\n // Run all animations and then resolve the new drag constraints.\n return Promise.all(momentumAnimations).then(onDragTransitionEnd);\n }\n startAxisValueAnimation(axis, transition) {\n const axisValue = this.getAxisMotionValue(axis);\n return axisValue.start(animateMotionValue(axis, axisValue, 0, transition));\n }\n stopAnimation() {\n eachAxis((axis) => this.getAxisMotionValue(axis).stop());\n }\n pauseAnimation() {\n eachAxis((axis) => { var _a; return (_a = this.getAxisMotionValue(axis).animation) === null || _a === void 0 ? void 0 : _a.pause(); });\n }\n getAnimationState(axis) {\n var _a;\n return (_a = this.getAxisMotionValue(axis).animation) === null || _a === void 0 ? void 0 : _a.state;\n }\n /**\n * Drag works differently depending on which props are provided.\n *\n * - If _dragX and _dragY are provided, we output the gesture delta directly to those motion values.\n * - Otherwise, we apply the delta to the x/y motion values.\n */\n getAxisMotionValue(axis) {\n const dragKey = \"_drag\" + axis.toUpperCase();\n const props = this.visualElement.getProps();\n const externalMotionValue = props[dragKey];\n return externalMotionValue\n ? externalMotionValue\n : this.visualElement.getValue(axis, (props.initial ? props.initial[axis] : undefined) || 0);\n }\n snapToCursor(point) {\n eachAxis((axis) => {\n const { drag } = this.getProps();\n // If we're not dragging this axis, do an early return.\n if (!shouldDrag(axis, drag, this.currentDirection))\n return;\n const { projection } = this.visualElement;\n const axisValue = this.getAxisMotionValue(axis);\n if (projection && projection.layout) {\n const { min, max } = projection.layout.layoutBox[axis];\n axisValue.set(point[axis] - mix(min, max, 0.5));\n }\n });\n }\n /**\n * When the viewport resizes we want to check if the measured constraints\n * have changed and, if so, reposition the element within those new constraints\n * relative to where it was before the resize.\n */\n scalePositionWithinConstraints() {\n if (!this.visualElement.current)\n return;\n const { drag, dragConstraints } = this.getProps();\n const { projection } = this.visualElement;\n if (!isRefObject(dragConstraints) || !projection || !this.constraints)\n return;\n /**\n * Stop current animations as there can be visual glitching if we try to do\n * this mid-animation\n */\n this.stopAnimation();\n /**\n * Record the relative position of the dragged element relative to the\n * constraints box and save as a progress value.\n */\n const boxProgress = { x: 0, y: 0 };\n eachAxis((axis) => {\n const axisValue = this.getAxisMotionValue(axis);\n if (axisValue) {\n const latest = axisValue.get();\n boxProgress[axis] = calcOrigin({ min: latest, max: latest }, this.constraints[axis]);\n }\n });\n /**\n * Update the layout of this element and resolve the latest drag constraints\n */\n const { transformTemplate } = this.visualElement.getProps();\n this.visualElement.current.style.transform = transformTemplate\n ? transformTemplate({}, \"\")\n : \"none\";\n projection.root && projection.root.updateScroll();\n projection.updateLayout();\n this.resolveConstraints();\n /**\n * For each axis, calculate the current progress of the layout axis\n * within the new constraints.\n */\n eachAxis((axis) => {\n if (!shouldDrag(axis, drag, null))\n return;\n /**\n * Calculate a new transform based on the previous box progress\n */\n const axisValue = this.getAxisMotionValue(axis);\n const { min, max } = this.constraints[axis];\n axisValue.set(mix(min, max, boxProgress[axis]));\n });\n }\n addListeners() {\n if (!this.visualElement.current)\n return;\n elementDragControls.set(this.visualElement, this);\n const element = this.visualElement.current;\n /**\n * Attach a pointerdown event listener on this DOM element to initiate drag tracking.\n */\n const stopPointerListener = addPointerEvent(element, \"pointerdown\", (event) => {\n const { drag, dragListener = true } = this.getProps();\n drag && dragListener && this.start(event);\n });\n const measureDragConstraints = () => {\n const { dragConstraints } = this.getProps();\n if (isRefObject(dragConstraints)) {\n this.constraints = this.resolveRefConstraints();\n }\n };\n const { projection } = this.visualElement;\n const stopMeasureLayoutListener = projection.addEventListener(\"measure\", measureDragConstraints);\n if (projection && !projection.layout) {\n projection.root && projection.root.updateScroll();\n projection.updateLayout();\n }\n measureDragConstraints();\n /**\n * Attach a window resize listener to scale the draggable target within its defined\n * constraints as the window resizes.\n */\n const stopResizeListener = addDomEvent(window, \"resize\", () => this.scalePositionWithinConstraints());\n /**\n * If the element's layout changes, calculate the delta and apply that to\n * the drag gesture's origin point.\n */\n const stopLayoutUpdateListener = projection.addEventListener(\"didUpdate\", (({ delta, hasLayoutChanged }) => {\n if (this.isDragging && hasLayoutChanged) {\n eachAxis((axis) => {\n const motionValue = this.getAxisMotionValue(axis);\n if (!motionValue)\n return;\n this.originPoint[axis] += delta[axis].translate;\n motionValue.set(motionValue.get() + delta[axis].translate);\n });\n this.visualElement.render();\n }\n }));\n return () => {\n stopResizeListener();\n stopPointerListener();\n stopMeasureLayoutListener();\n stopLayoutUpdateListener && stopLayoutUpdateListener();\n };\n }\n getProps() {\n const props = this.visualElement.getProps();\n const { drag = false, dragDirectionLock = false, dragPropagation = false, dragConstraints = false, dragElastic = defaultElastic, dragMomentum = true, } = props;\n return {\n ...props,\n drag,\n dragDirectionLock,\n dragPropagation,\n dragConstraints,\n dragElastic,\n dragMomentum,\n };\n }\n}\nfunction shouldDrag(direction, drag, currentDirection) {\n return ((drag === true || drag === direction) &&\n (currentDirection === null || currentDirection === direction));\n}\n/**\n * Based on an x/y offset determine the current drag direction. If both axis' offsets are lower\n * than the provided threshold, return `null`.\n *\n * @param offset - The x/y offset from origin.\n * @param lockThreshold - (Optional) - the minimum absolute offset before we can determine a drag direction.\n */\nfunction getCurrentDirection(offset, lockThreshold = 10) {\n let direction = null;\n if (Math.abs(offset.y) > lockThreshold) {\n direction = \"y\";\n }\n else if (Math.abs(offset.x) > lockThreshold) {\n direction = \"x\";\n }\n return direction;\n}\n\nexport { VisualElementDragControls, elementDragControls };\n","import { PanSession } from './PanSession.mjs';\nimport { addPointerEvent } from '../../events/add-pointer-event.mjs';\nimport { Feature } from '../../motion/features/Feature.mjs';\nimport { noop } from '../../utils/noop.mjs';\nimport { getContextWindow } from '../../utils/get-context-window.mjs';\nimport { frame } from '../../frameloop/frame.mjs';\n\nconst asyncHandler = (handler) => (event, info) => {\n if (handler) {\n frame.update(() => handler(event, info));\n }\n};\nclass PanGesture extends Feature {\n constructor() {\n super(...arguments);\n this.removePointerDownListener = noop;\n }\n onPointerDown(pointerDownEvent) {\n this.session = new PanSession(pointerDownEvent, this.createPanHandlers(), {\n transformPagePoint: this.node.getTransformPagePoint(),\n contextWindow: getContextWindow(this.node),\n });\n }\n createPanHandlers() {\n const { onPanSessionStart, onPanStart, onPan, onPanEnd } = this.node.getProps();\n return {\n onSessionStart: asyncHandler(onPanSessionStart),\n onStart: asyncHandler(onPanStart),\n onMove: onPan,\n onEnd: (event, info) => {\n delete this.session;\n if (onPanEnd) {\n frame.update(() => onPanEnd(event, info));\n }\n },\n };\n }\n mount() {\n this.removePointerDownListener = addPointerEvent(this.node.current, \"pointerdown\", (event) => this.onPointerDown(event));\n }\n update() {\n this.session && this.session.updateHandlers(this.createPanHandlers());\n }\n unmount() {\n this.removePointerDownListener();\n this.session && this.session.end();\n }\n}\n\nexport { PanGesture };\n","/**\n * This should only ever be modified on the client otherwise it'll\n * persist through server requests. If we need instanced states we\n * could lazy-init via root.\n */\nconst globalProjectionState = {\n /**\n * Global flag as to whether the tree has animated since the last time\n * we resized the window\n */\n hasAnimatedSinceResize: true,\n /**\n * We set this to true once, on the first update. Any nodes added to the tree beyond that\n * update will be given a `data-projection-id` attribute.\n */\n hasEverUpdated: false,\n};\n\nexport { globalProjectionState };\n","import { px } from '../../value/types/numbers/units.mjs';\n\nfunction pixelsToPercent(pixels, axis) {\n if (axis.max === axis.min)\n return 0;\n return (pixels / (axis.max - axis.min)) * 100;\n}\n/**\n * We always correct borderRadius as a percentage rather than pixels to reduce paints.\n * For example, if you are projecting a box that is 100px wide with a 10px borderRadius\n * into a box that is 200px wide with a 20px borderRadius, that is actually a 10%\n * borderRadius in both states. If we animate between the two in pixels that will trigger\n * a paint each time. If we animate between the two in percentage we'll avoid a paint.\n */\nconst correctBorderRadius = {\n correct: (latest, node) => {\n if (!node.target)\n return latest;\n /**\n * If latest is a string, if it's a percentage we can return immediately as it's\n * going to be stretched appropriately. Otherwise, if it's a pixel, convert it to a number.\n */\n if (typeof latest === \"string\") {\n if (px.test(latest)) {\n latest = parseFloat(latest);\n }\n else {\n return latest;\n }\n }\n /**\n * If latest is a number, it's a pixel value. We use the current viewportBox to calculate that\n * pixel value as a percentage of each axis\n */\n const x = pixelsToPercent(latest, node.target.x);\n const y = pixelsToPercent(latest, node.target.y);\n return `${x}% ${y}%`;\n },\n};\n\nexport { correctBorderRadius, pixelsToPercent };\n","import { mix } from '../../utils/mix.mjs';\nimport { complex } from '../../value/types/complex/index.mjs';\n\nconst correctBoxShadow = {\n correct: (latest, { treeScale, projectionDelta }) => {\n const original = latest;\n const shadow = complex.parse(latest);\n // TODO: Doesn't support multiple shadows\n if (shadow.length > 5)\n return original;\n const template = complex.createTransformer(latest);\n const offset = typeof shadow[0] !== \"number\" ? 1 : 0;\n // Calculate the overall context scale\n const xScale = projectionDelta.x.scale * treeScale.x;\n const yScale = projectionDelta.y.scale * treeScale.y;\n shadow[0 + offset] /= xScale;\n shadow[1 + offset] /= yScale;\n /**\n * Ideally we'd correct x and y scales individually, but because blur and\n * spread apply to both we have to take a scale average and apply that instead.\n * We could potentially improve the outcome of this by incorporating the ratio between\n * the two scales.\n */\n const averageScale = mix(xScale, yScale, 0.5);\n // Blur\n if (typeof shadow[2 + offset] === \"number\")\n shadow[2 + offset] /= averageScale;\n // Spread\n if (typeof shadow[3 + offset] === \"number\")\n shadow[3 + offset] /= averageScale;\n return template(shadow);\n },\n};\n\nexport { correctBoxShadow };\n","import React__default, { useContext } from 'react';\nimport { usePresence } from '../../../components/AnimatePresence/use-presence.mjs';\nimport { LayoutGroupContext } from '../../../context/LayoutGroupContext.mjs';\nimport { SwitchLayoutGroupContext } from '../../../context/SwitchLayoutGroupContext.mjs';\nimport { globalProjectionState } from '../../../projection/node/state.mjs';\nimport { correctBorderRadius } from '../../../projection/styles/scale-border-radius.mjs';\nimport { correctBoxShadow } from '../../../projection/styles/scale-box-shadow.mjs';\nimport { addScaleCorrector } from '../../../projection/styles/scale-correction.mjs';\nimport { frame } from '../../../frameloop/frame.mjs';\n\nclass MeasureLayoutWithContext extends React__default.Component {\n /**\n * This only mounts projection nodes for components that\n * need measuring, we might want to do it for all components\n * in order to incorporate transforms\n */\n componentDidMount() {\n const { visualElement, layoutGroup, switchLayoutGroup, layoutId } = this.props;\n const { projection } = visualElement;\n addScaleCorrector(defaultScaleCorrectors);\n if (projection) {\n if (layoutGroup.group)\n layoutGroup.group.add(projection);\n if (switchLayoutGroup && switchLayoutGroup.register && layoutId) {\n switchLayoutGroup.register(projection);\n }\n projection.root.didUpdate();\n projection.addEventListener(\"animationComplete\", () => {\n this.safeToRemove();\n });\n projection.setOptions({\n ...projection.options,\n onExitComplete: () => this.safeToRemove(),\n });\n }\n globalProjectionState.hasEverUpdated = true;\n }\n getSnapshotBeforeUpdate(prevProps) {\n const { layoutDependency, visualElement, drag, isPresent } = this.props;\n const projection = visualElement.projection;\n if (!projection)\n return null;\n /**\n * TODO: We use this data in relegate to determine whether to\n * promote a previous element. There's no guarantee its presence data\n * will have updated by this point - if a bug like this arises it will\n * have to be that we markForRelegation and then find a new lead some other way,\n * perhaps in didUpdate\n */\n projection.isPresent = isPresent;\n if (drag ||\n prevProps.layoutDependency !== layoutDependency ||\n layoutDependency === undefined) {\n projection.willUpdate();\n }\n else {\n this.safeToRemove();\n }\n if (prevProps.isPresent !== isPresent) {\n if (isPresent) {\n projection.promote();\n }\n else if (!projection.relegate()) {\n /**\n * If there's another stack member taking over from this one,\n * it's in charge of the exit animation and therefore should\n * be in charge of the safe to remove. Otherwise we call it here.\n */\n frame.postRender(() => {\n const stack = projection.getStack();\n if (!stack || !stack.members.length) {\n this.safeToRemove();\n }\n });\n }\n }\n return null;\n }\n componentDidUpdate() {\n const { projection } = this.props.visualElement;\n if (projection) {\n projection.root.didUpdate();\n queueMicrotask(() => {\n if (!projection.currentAnimation && projection.isLead()) {\n this.safeToRemove();\n }\n });\n }\n }\n componentWillUnmount() {\n const { visualElement, layoutGroup, switchLayoutGroup: promoteContext, } = this.props;\n const { projection } = visualElement;\n if (projection) {\n projection.scheduleCheckAfterUnmount();\n if (layoutGroup && layoutGroup.group)\n layoutGroup.group.remove(projection);\n if (promoteContext && promoteContext.deregister)\n promoteContext.deregister(projection);\n }\n }\n safeToRemove() {\n const { safeToRemove } = this.props;\n safeToRemove && safeToRemove();\n }\n render() {\n return null;\n }\n}\nfunction MeasureLayout(props) {\n const [isPresent, safeToRemove] = usePresence();\n const layoutGroup = useContext(LayoutGroupContext);\n return (React__default.createElement(MeasureLayoutWithContext, { ...props, layoutGroup: layoutGroup, switchLayoutGroup: useContext(SwitchLayoutGroupContext), isPresent: isPresent, safeToRemove: safeToRemove }));\n}\nconst defaultScaleCorrectors = {\n borderRadius: {\n ...correctBorderRadius,\n applyTo: [\n \"borderTopLeftRadius\",\n \"borderTopRightRadius\",\n \"borderBottomLeftRadius\",\n \"borderBottomRightRadius\",\n ],\n },\n borderTopLeftRadius: correctBorderRadius,\n borderTopRightRadius: correctBorderRadius,\n borderBottomLeftRadius: correctBorderRadius,\n borderBottomRightRadius: correctBorderRadius,\n boxShadow: correctBoxShadow,\n};\n\nexport { MeasureLayout };\n","import { useContext, useId, useEffect } from 'react';\nimport { PresenceContext } from '../../context/PresenceContext.mjs';\n\n/**\n * When a component is the child of `AnimatePresence`, it can use `usePresence`\n * to access information about whether it's still present in the React tree.\n *\n * ```jsx\n * import { usePresence } from \"framer-motion\"\n *\n * export const Component = () => {\n * const [isPresent, safeToRemove] = usePresence()\n *\n * useEffect(() => {\n * !isPresent && setTimeout(safeToRemove, 1000)\n * }, [isPresent])\n *\n * return \n * }\n * ```\n *\n * If `isPresent` is `false`, it means that a component has been removed the tree, but\n * `AnimatePresence` won't really remove it until `safeToRemove` has been called.\n *\n * @public\n */\nfunction usePresence() {\n const context = useContext(PresenceContext);\n if (context === null)\n return [true, null];\n const { isPresent, onExitComplete, register } = context;\n // It's safe to call the following hooks conditionally (after an early return) because the context will always\n // either be null or non-null for the lifespan of the component.\n const id = useId();\n useEffect(() => register(id), []);\n const safeToRemove = () => onExitComplete && onExitComplete(id);\n return !isPresent && onExitComplete ? [false, safeToRemove] : [true];\n}\n/**\n * Similar to `usePresence`, except `useIsPresent` simply returns whether or not the component is present.\n * There is no `safeToRemove` function.\n *\n * ```jsx\n * import { useIsPresent } from \"framer-motion\"\n *\n * export const Component = () => {\n * const isPresent = useIsPresent()\n *\n * useEffect(() => {\n * !isPresent && console.log(\"I've been removed!\")\n * }, [isPresent])\n *\n * return \n * }\n * ```\n *\n * @public\n */\nfunction useIsPresent() {\n return isPresent(useContext(PresenceContext));\n}\nfunction isPresent(context) {\n return context === null ? true : context.isPresent;\n}\n\nexport { isPresent, useIsPresent, usePresence };\n","import { circOut } from '../../easing/circ.mjs';\nimport { progress } from '../../utils/progress.mjs';\nimport { mix } from '../../utils/mix.mjs';\nimport { noop } from '../../utils/noop.mjs';\nimport { percent, px } from '../../value/types/numbers/units.mjs';\n\nconst borders = [\"TopLeft\", \"TopRight\", \"BottomLeft\", \"BottomRight\"];\nconst numBorders = borders.length;\nconst asNumber = (value) => typeof value === \"string\" ? parseFloat(value) : value;\nconst isPx = (value) => typeof value === \"number\" || px.test(value);\nfunction mixValues(target, follow, lead, progress, shouldCrossfadeOpacity, isOnlyMember) {\n if (shouldCrossfadeOpacity) {\n target.opacity = mix(0, \n // TODO Reinstate this if only child\n lead.opacity !== undefined ? lead.opacity : 1, easeCrossfadeIn(progress));\n target.opacityExit = mix(follow.opacity !== undefined ? follow.opacity : 1, 0, easeCrossfadeOut(progress));\n }\n else if (isOnlyMember) {\n target.opacity = mix(follow.opacity !== undefined ? follow.opacity : 1, lead.opacity !== undefined ? lead.opacity : 1, progress);\n }\n /**\n * Mix border radius\n */\n for (let i = 0; i < numBorders; i++) {\n const borderLabel = `border${borders[i]}Radius`;\n let followRadius = getRadius(follow, borderLabel);\n let leadRadius = getRadius(lead, borderLabel);\n if (followRadius === undefined && leadRadius === undefined)\n continue;\n followRadius || (followRadius = 0);\n leadRadius || (leadRadius = 0);\n const canMix = followRadius === 0 ||\n leadRadius === 0 ||\n isPx(followRadius) === isPx(leadRadius);\n if (canMix) {\n target[borderLabel] = Math.max(mix(asNumber(followRadius), asNumber(leadRadius), progress), 0);\n if (percent.test(leadRadius) || percent.test(followRadius)) {\n target[borderLabel] += \"%\";\n }\n }\n else {\n target[borderLabel] = leadRadius;\n }\n }\n /**\n * Mix rotation\n */\n if (follow.rotate || lead.rotate) {\n target.rotate = mix(follow.rotate || 0, lead.rotate || 0, progress);\n }\n}\nfunction getRadius(values, radiusName) {\n return values[radiusName] !== undefined\n ? values[radiusName]\n : values.borderRadius;\n}\n// /**\n// * We only want to mix the background color if there's a follow element\n// * that we're not crossfading opacity between. For instance with switch\n// * AnimateSharedLayout animations, this helps the illusion of a continuous\n// * element being animated but also cuts down on the number of paints triggered\n// * for elements where opacity is doing that work for us.\n// */\n// if (\n// !hasFollowElement &&\n// latestLeadValues.backgroundColor &&\n// latestFollowValues.backgroundColor\n// ) {\n// /**\n// * This isn't ideal performance-wise as mixColor is creating a new function every frame.\n// * We could probably create a mixer that runs at the start of the animation but\n// * the idea behind the crossfader is that it runs dynamically between two potentially\n// * changing targets (ie opacity or borderRadius may be animating independently via variants)\n// */\n// leadState.backgroundColor = followState.backgroundColor = mixColor(\n// latestFollowValues.backgroundColor as string,\n// latestLeadValues.backgroundColor as string\n// )(p)\n// }\nconst easeCrossfadeIn = compress(0, 0.5, circOut);\nconst easeCrossfadeOut = compress(0.5, 0.95, noop);\nfunction compress(min, max, easing) {\n return (p) => {\n // Could replace ifs with clamp\n if (p < min)\n return 0;\n if (p > max)\n return 1;\n return easing(progress(min, max, p));\n };\n}\n\nexport { mixValues };\n","/**\n * Reset an axis to the provided origin box.\n *\n * This is a mutative operation.\n */\nfunction copyAxisInto(axis, originAxis) {\n axis.min = originAxis.min;\n axis.max = originAxis.max;\n}\n/**\n * Reset a box to the provided origin box.\n *\n * This is a mutative operation.\n */\nfunction copyBoxInto(box, originBox) {\n copyAxisInto(box.x, originBox.x);\n copyAxisInto(box.y, originBox.y);\n}\n\nexport { copyAxisInto, copyBoxInto };\n","import { mix } from '../../utils/mix.mjs';\nimport { percent } from '../../value/types/numbers/units.mjs';\nimport { scalePoint } from './delta-apply.mjs';\n\n/**\n * Remove a delta from a point. This is essentially the steps of applyPointDelta in reverse\n */\nfunction removePointDelta(point, translate, scale, originPoint, boxScale) {\n point -= translate;\n point = scalePoint(point, 1 / scale, originPoint);\n if (boxScale !== undefined) {\n point = scalePoint(point, 1 / boxScale, originPoint);\n }\n return point;\n}\n/**\n * Remove a delta from an axis. This is essentially the steps of applyAxisDelta in reverse\n */\nfunction removeAxisDelta(axis, translate = 0, scale = 1, origin = 0.5, boxScale, originAxis = axis, sourceAxis = axis) {\n if (percent.test(translate)) {\n translate = parseFloat(translate);\n const relativeProgress = mix(sourceAxis.min, sourceAxis.max, translate / 100);\n translate = relativeProgress - sourceAxis.min;\n }\n if (typeof translate !== \"number\")\n return;\n let originPoint = mix(originAxis.min, originAxis.max, origin);\n if (axis === originAxis)\n originPoint -= translate;\n axis.min = removePointDelta(axis.min, translate, scale, originPoint, boxScale);\n axis.max = removePointDelta(axis.max, translate, scale, originPoint, boxScale);\n}\n/**\n * Remove a transforms from an axis. This is essentially the steps of applyAxisTransforms in reverse\n * and acts as a bridge between motion values and removeAxisDelta\n */\nfunction removeAxisTransforms(axis, transforms, [key, scaleKey, originKey], origin, sourceAxis) {\n removeAxisDelta(axis, transforms[key], transforms[scaleKey], transforms[originKey], transforms.scale, origin, sourceAxis);\n}\n/**\n * The names of the motion values we want to apply as translation, scale and origin.\n */\nconst xKeys = [\"x\", \"scaleX\", \"originX\"];\nconst yKeys = [\"y\", \"scaleY\", \"originY\"];\n/**\n * Remove a transforms from an box. This is essentially the steps of applyAxisBox in reverse\n * and acts as a bridge between motion values and removeAxisDelta\n */\nfunction removeBoxTransforms(box, transforms, originBox, sourceBox) {\n removeAxisTransforms(box.x, transforms, xKeys, originBox ? originBox.x : undefined, sourceBox ? sourceBox.x : undefined);\n removeAxisTransforms(box.y, transforms, yKeys, originBox ? originBox.y : undefined, sourceBox ? sourceBox.y : undefined);\n}\n\nexport { removeAxisDelta, removeAxisTransforms, removeBoxTransforms, removePointDelta };\n","import { calcLength } from './delta-calc.mjs';\n\nfunction isAxisDeltaZero(delta) {\n return delta.translate === 0 && delta.scale === 1;\n}\nfunction isDeltaZero(delta) {\n return isAxisDeltaZero(delta.x) && isAxisDeltaZero(delta.y);\n}\nfunction boxEquals(a, b) {\n return (a.x.min === b.x.min &&\n a.x.max === b.x.max &&\n a.y.min === b.y.min &&\n a.y.max === b.y.max);\n}\nfunction boxEqualsRounded(a, b) {\n return (Math.round(a.x.min) === Math.round(b.x.min) &&\n Math.round(a.x.max) === Math.round(b.x.max) &&\n Math.round(a.y.min) === Math.round(b.y.min) &&\n Math.round(a.y.max) === Math.round(b.y.max));\n}\nfunction aspectRatio(box) {\n return calcLength(box.x) / calcLength(box.y);\n}\n\nexport { aspectRatio, boxEquals, boxEqualsRounded, isDeltaZero };\n","import { addUniqueItem, removeItem } from '../../utils/array.mjs';\n\nclass NodeStack {\n constructor() {\n this.members = [];\n }\n add(node) {\n addUniqueItem(this.members, node);\n node.scheduleRender();\n }\n remove(node) {\n removeItem(this.members, node);\n if (node === this.prevLead) {\n this.prevLead = undefined;\n }\n if (node === this.lead) {\n const prevLead = this.members[this.members.length - 1];\n if (prevLead) {\n this.promote(prevLead);\n }\n }\n }\n relegate(node) {\n const indexOfNode = this.members.findIndex((member) => node === member);\n if (indexOfNode === 0)\n return false;\n /**\n * Find the next projection node that is present\n */\n let prevLead;\n for (let i = indexOfNode; i >= 0; i--) {\n const member = this.members[i];\n if (member.isPresent !== false) {\n prevLead = member;\n break;\n }\n }\n if (prevLead) {\n this.promote(prevLead);\n return true;\n }\n else {\n return false;\n }\n }\n promote(node, preserveFollowOpacity) {\n const prevLead = this.lead;\n if (node === prevLead)\n return;\n this.prevLead = prevLead;\n this.lead = node;\n node.show();\n if (prevLead) {\n prevLead.instance && prevLead.scheduleRender();\n node.scheduleRender();\n node.resumeFrom = prevLead;\n if (preserveFollowOpacity) {\n node.resumeFrom.preserveOpacity = true;\n }\n if (prevLead.snapshot) {\n node.snapshot = prevLead.snapshot;\n node.snapshot.latestValues =\n prevLead.animationValues || prevLead.latestValues;\n }\n if (node.root && node.root.isUpdating) {\n node.isLayoutDirty = true;\n }\n const { crossfade } = node.options;\n if (crossfade === false) {\n prevLead.hide();\n }\n /**\n * TODO:\n * - Test border radius when previous node was deleted\n * - boxShadow mixing\n * - Shared between element A in scrolled container and element B (scroll stays the same or changes)\n * - Shared between element A in transformed container and element B (transform stays the same or changes)\n * - Shared between element A in scrolled page and element B (scroll stays the same or changes)\n * ---\n * - Crossfade opacity of root nodes\n * - layoutId changes after animation\n * - layoutId changes mid animation\n */\n }\n }\n exitAnimationComplete() {\n this.members.forEach((node) => {\n const { options, resumingFrom } = node;\n options.onExitComplete && options.onExitComplete();\n if (resumingFrom) {\n resumingFrom.options.onExitComplete &&\n resumingFrom.options.onExitComplete();\n }\n });\n }\n scheduleRender() {\n this.members.forEach((node) => {\n node.instance && node.scheduleRender(false);\n });\n }\n /**\n * Clear any leads that have been removed this render to prevent them from being\n * used in future animations and to prevent memory leaks\n */\n removeLeadSnapshot() {\n if (this.lead && this.lead.snapshot) {\n this.lead.snapshot = undefined;\n }\n }\n}\n\nexport { NodeStack };\n","function buildProjectionTransform(delta, treeScale, latestTransform) {\n let transform = \"\";\n /**\n * The translations we use to calculate are always relative to the viewport coordinate space.\n * But when we apply scales, we also scale the coordinate space of an element and its children.\n * For instance if we have a treeScale (the culmination of all parent scales) of 0.5 and we need\n * to move an element 100 pixels, we actually need to move it 200 in within that scaled space.\n */\n const xTranslate = delta.x.translate / treeScale.x;\n const yTranslate = delta.y.translate / treeScale.y;\n if (xTranslate || yTranslate) {\n transform = `translate3d(${xTranslate}px, ${yTranslate}px, 0) `;\n }\n /**\n * Apply scale correction for the tree transform.\n * This will apply scale to the screen-orientated axes.\n */\n if (treeScale.x !== 1 || treeScale.y !== 1) {\n transform += `scale(${1 / treeScale.x}, ${1 / treeScale.y}) `;\n }\n if (latestTransform) {\n const { rotate, rotateX, rotateY } = latestTransform;\n if (rotate)\n transform += `rotate(${rotate}deg) `;\n if (rotateX)\n transform += `rotateX(${rotateX}deg) `;\n if (rotateY)\n transform += `rotateY(${rotateY}deg) `;\n }\n /**\n * Apply scale to match the size of the element to the size we want it.\n * This will apply scale to the element-orientated axes.\n */\n const elementScaleX = delta.x.scale * treeScale.x;\n const elementScaleY = delta.y.scale * treeScale.y;\n if (elementScaleX !== 1 || elementScaleY !== 1) {\n transform += `scale(${elementScaleX}, ${elementScaleY})`;\n }\n return transform || \"none\";\n}\n\nexport { buildProjectionTransform };\n","const compareByDepth = (a, b) => a.depth - b.depth;\n\nexport { compareByDepth };\n","import { addUniqueItem, removeItem } from '../../utils/array.mjs';\nimport { compareByDepth } from './compare-by-depth.mjs';\n\nclass FlatTree {\n constructor() {\n this.children = [];\n this.isDirty = false;\n }\n add(child) {\n addUniqueItem(this.children, child);\n this.isDirty = true;\n }\n remove(child) {\n removeItem(this.children, child);\n this.isDirty = true;\n }\n forEach(callback) {\n this.isDirty && this.children.sort(compareByDepth);\n this.isDirty = false;\n this.children.forEach(callback);\n }\n}\n\nexport { FlatTree };\n","import { SubscriptionManager } from '../../utils/subscription-manager.mjs';\nimport { mixValues } from '../animation/mix-values.mjs';\nimport { copyBoxInto } from '../geometry/copy.mjs';\nimport { translateAxis, transformBox, applyBoxDelta, applyTreeDeltas } from '../geometry/delta-apply.mjs';\nimport { calcRelativePosition, calcRelativeBox, calcBoxDelta, calcLength, isNear } from '../geometry/delta-calc.mjs';\nimport { removeBoxTransforms } from '../geometry/delta-remove.mjs';\nimport { createBox, createDelta } from '../geometry/models.mjs';\nimport { getValueTransition } from '../../animation/utils/transitions.mjs';\nimport { boxEqualsRounded, isDeltaZero, aspectRatio, boxEquals } from '../geometry/utils.mjs';\nimport { NodeStack } from '../shared/stack.mjs';\nimport { scaleCorrectors } from '../styles/scale-correction.mjs';\nimport { buildProjectionTransform } from '../styles/transform.mjs';\nimport { eachAxis } from '../utils/each-axis.mjs';\nimport { hasTransform, hasScale, has2DTranslate } from '../utils/has-transform.mjs';\nimport { FlatTree } from '../../render/utils/flat-tree.mjs';\nimport { resolveMotionValue } from '../../value/utils/resolve-motion-value.mjs';\nimport { globalProjectionState } from './state.mjs';\nimport { delay } from '../../utils/delay.mjs';\nimport { mix } from '../../utils/mix.mjs';\nimport { record } from '../../debug/record.mjs';\nimport { isSVGElement } from '../../render/dom/utils/is-svg-element.mjs';\nimport { animateSingleValue } from '../../animation/interfaces/single-value.mjs';\nimport { clamp } from '../../utils/clamp.mjs';\nimport { cancelFrame, frameData, steps, frame } from '../../frameloop/frame.mjs';\nimport { noop } from '../../utils/noop.mjs';\n\nconst transformAxes = [\"\", \"X\", \"Y\", \"Z\"];\nconst hiddenVisibility = { visibility: \"hidden\" };\n/**\n * We use 1000 as the animation target as 0-1000 maps better to pixels than 0-1\n * which has a noticeable difference in spring animations\n */\nconst animationTarget = 1000;\nlet id = 0;\n/**\n * Use a mutable data object for debug data so as to not create a new\n * object every frame.\n */\nconst projectionFrameData = {\n type: \"projectionFrame\",\n totalNodes: 0,\n resolvedTargetDeltas: 0,\n recalculatedProjection: 0,\n};\nfunction createProjectionNode({ attachResizeListener, defaultParent, measureScroll, checkIsScrollRoot, resetTransform, }) {\n return class ProjectionNode {\n constructor(latestValues = {}, parent = defaultParent === null || defaultParent === void 0 ? void 0 : defaultParent()) {\n /**\n * A unique ID generated for every projection node.\n */\n this.id = id++;\n /**\n * An id that represents a unique session instigated by startUpdate.\n */\n this.animationId = 0;\n /**\n * A Set containing all this component's children. This is used to iterate\n * through the children.\n *\n * TODO: This could be faster to iterate as a flat array stored on the root node.\n */\n this.children = new Set();\n /**\n * Options for the node. We use this to configure what kind of layout animations\n * we should perform (if any).\n */\n this.options = {};\n /**\n * We use this to detect when its safe to shut down part of a projection tree.\n * We have to keep projecting children for scale correction and relative projection\n * until all their parents stop performing layout animations.\n */\n this.isTreeAnimating = false;\n this.isAnimationBlocked = false;\n /**\n * Flag to true if we think this layout has been changed. We can't always know this,\n * currently we set it to true every time a component renders, or if it has a layoutDependency\n * if that has changed between renders. Additionally, components can be grouped by LayoutGroup\n * and if one node is dirtied, they all are.\n */\n this.isLayoutDirty = false;\n /**\n * Flag to true if we think the projection calculations for this node needs\n * recalculating as a result of an updated transform or layout animation.\n */\n this.isProjectionDirty = false;\n /**\n * Flag to true if the layout *or* transform has changed. This then gets propagated\n * throughout the projection tree, forcing any element below to recalculate on the next frame.\n */\n this.isSharedProjectionDirty = false;\n /**\n * Flag transform dirty. This gets propagated throughout the whole tree but is only\n * respected by shared nodes.\n */\n this.isTransformDirty = false;\n /**\n * Block layout updates for instant layout transitions throughout the tree.\n */\n this.updateManuallyBlocked = false;\n this.updateBlockedByResize = false;\n /**\n * Set to true between the start of the first `willUpdate` call and the end of the `didUpdate`\n * call.\n */\n this.isUpdating = false;\n /**\n * If this is an SVG element we currently disable projection transforms\n */\n this.isSVG = false;\n /**\n * Flag to true (during promotion) if a node doing an instant layout transition needs to reset\n * its projection styles.\n */\n this.needsReset = false;\n /**\n * Flags whether this node should have its transform reset prior to measuring.\n */\n this.shouldResetTransform = false;\n /**\n * An object representing the calculated contextual/accumulated/tree scale.\n * This will be used to scale calculcated projection transforms, as these are\n * calculated in screen-space but need to be scaled for elements to layoutly\n * make it to their calculated destinations.\n *\n * TODO: Lazy-init\n */\n this.treeScale = { x: 1, y: 1 };\n /**\n *\n */\n this.eventHandlers = new Map();\n this.hasTreeAnimated = false;\n // Note: Currently only running on root node\n this.updateScheduled = false;\n this.projectionUpdateScheduled = false;\n this.checkUpdateFailed = () => {\n if (this.isUpdating) {\n this.isUpdating = false;\n this.clearAllSnapshots();\n }\n };\n /**\n * This is a multi-step process as shared nodes might be of different depths. Nodes\n * are sorted by depth order, so we need to resolve the entire tree before moving to\n * the next step.\n */\n this.updateProjection = () => {\n this.projectionUpdateScheduled = false;\n /**\n * Reset debug counts. Manually resetting rather than creating a new\n * object each frame.\n */\n projectionFrameData.totalNodes =\n projectionFrameData.resolvedTargetDeltas =\n projectionFrameData.recalculatedProjection =\n 0;\n this.nodes.forEach(propagateDirtyNodes);\n this.nodes.forEach(resolveTargetDelta);\n this.nodes.forEach(calcProjection);\n this.nodes.forEach(cleanDirtyNodes);\n record(projectionFrameData);\n };\n this.hasProjected = false;\n this.isVisible = true;\n this.animationProgress = 0;\n /**\n * Shared layout\n */\n // TODO Only running on root node\n this.sharedNodes = new Map();\n this.latestValues = latestValues;\n this.root = parent ? parent.root || parent : this;\n this.path = parent ? [...parent.path, parent] : [];\n this.parent = parent;\n this.depth = parent ? parent.depth + 1 : 0;\n for (let i = 0; i < this.path.length; i++) {\n this.path[i].shouldResetTransform = true;\n }\n if (this.root === this)\n this.nodes = new FlatTree();\n }\n addEventListener(name, handler) {\n if (!this.eventHandlers.has(name)) {\n this.eventHandlers.set(name, new SubscriptionManager());\n }\n return this.eventHandlers.get(name).add(handler);\n }\n notifyListeners(name, ...args) {\n const subscriptionManager = this.eventHandlers.get(name);\n subscriptionManager && subscriptionManager.notify(...args);\n }\n hasListeners(name) {\n return this.eventHandlers.has(name);\n }\n /**\n * Lifecycles\n */\n mount(instance, isLayoutDirty = this.root.hasTreeAnimated) {\n if (this.instance)\n return;\n this.isSVG = isSVGElement(instance);\n this.instance = instance;\n const { layoutId, layout, visualElement } = this.options;\n if (visualElement && !visualElement.current) {\n visualElement.mount(instance);\n }\n this.root.nodes.add(this);\n this.parent && this.parent.children.add(this);\n if (isLayoutDirty && (layout || layoutId)) {\n this.isLayoutDirty = true;\n }\n if (attachResizeListener) {\n let cancelDelay;\n const resizeUnblockUpdate = () => (this.root.updateBlockedByResize = false);\n attachResizeListener(instance, () => {\n this.root.updateBlockedByResize = true;\n cancelDelay && cancelDelay();\n cancelDelay = delay(resizeUnblockUpdate, 250);\n if (globalProjectionState.hasAnimatedSinceResize) {\n globalProjectionState.hasAnimatedSinceResize = false;\n this.nodes.forEach(finishAnimation);\n }\n });\n }\n if (layoutId) {\n this.root.registerSharedNode(layoutId, this);\n }\n // Only register the handler if it requires layout animation\n if (this.options.animate !== false &&\n visualElement &&\n (layoutId || layout)) {\n this.addEventListener(\"didUpdate\", ({ delta, hasLayoutChanged, hasRelativeTargetChanged, layout: newLayout, }) => {\n if (this.isTreeAnimationBlocked()) {\n this.target = undefined;\n this.relativeTarget = undefined;\n return;\n }\n // TODO: Check here if an animation exists\n const layoutTransition = this.options.transition ||\n visualElement.getDefaultTransition() ||\n defaultLayoutTransition;\n const { onLayoutAnimationStart, onLayoutAnimationComplete, } = visualElement.getProps();\n /**\n * The target layout of the element might stay the same,\n * but its position relative to its parent has changed.\n */\n const targetChanged = !this.targetLayout ||\n !boxEqualsRounded(this.targetLayout, newLayout) ||\n hasRelativeTargetChanged;\n /**\n * If the layout hasn't seemed to have changed, it might be that the\n * element is visually in the same place in the document but its position\n * relative to its parent has indeed changed. So here we check for that.\n */\n const hasOnlyRelativeTargetChanged = !hasLayoutChanged && hasRelativeTargetChanged;\n if (this.options.layoutRoot ||\n (this.resumeFrom && this.resumeFrom.instance) ||\n hasOnlyRelativeTargetChanged ||\n (hasLayoutChanged &&\n (targetChanged || !this.currentAnimation))) {\n if (this.resumeFrom) {\n this.resumingFrom = this.resumeFrom;\n this.resumingFrom.resumingFrom = undefined;\n }\n this.setAnimationOrigin(delta, hasOnlyRelativeTargetChanged);\n const animationOptions = {\n ...getValueTransition(layoutTransition, \"layout\"),\n onPlay: onLayoutAnimationStart,\n onComplete: onLayoutAnimationComplete,\n };\n if (visualElement.shouldReduceMotion ||\n this.options.layoutRoot) {\n animationOptions.delay = 0;\n animationOptions.type = false;\n }\n this.startAnimation(animationOptions);\n }\n else {\n /**\n * If the layout hasn't changed and we have an animation that hasn't started yet,\n * finish it immediately. Otherwise it will be animating from a location\n * that was probably never commited to screen and look like a jumpy box.\n */\n if (!hasLayoutChanged) {\n finishAnimation(this);\n }\n if (this.isLead() && this.options.onExitComplete) {\n this.options.onExitComplete();\n }\n }\n this.targetLayout = newLayout;\n });\n }\n }\n unmount() {\n this.options.layoutId && this.willUpdate();\n this.root.nodes.remove(this);\n const stack = this.getStack();\n stack && stack.remove(this);\n this.parent && this.parent.children.delete(this);\n this.instance = undefined;\n cancelFrame(this.updateProjection);\n }\n // only on the root\n blockUpdate() {\n this.updateManuallyBlocked = true;\n }\n unblockUpdate() {\n this.updateManuallyBlocked = false;\n }\n isUpdateBlocked() {\n return this.updateManuallyBlocked || this.updateBlockedByResize;\n }\n isTreeAnimationBlocked() {\n return (this.isAnimationBlocked ||\n (this.parent && this.parent.isTreeAnimationBlocked()) ||\n false);\n }\n // Note: currently only running on root node\n startUpdate() {\n if (this.isUpdateBlocked())\n return;\n this.isUpdating = true;\n this.nodes && this.nodes.forEach(resetRotation);\n this.animationId++;\n }\n getTransformTemplate() {\n const { visualElement } = this.options;\n return visualElement && visualElement.getProps().transformTemplate;\n }\n willUpdate(shouldNotifyListeners = true) {\n this.root.hasTreeAnimated = true;\n if (this.root.isUpdateBlocked()) {\n this.options.onExitComplete && this.options.onExitComplete();\n return;\n }\n !this.root.isUpdating && this.root.startUpdate();\n if (this.isLayoutDirty)\n return;\n this.isLayoutDirty = true;\n for (let i = 0; i < this.path.length; i++) {\n const node = this.path[i];\n node.shouldResetTransform = true;\n node.updateScroll(\"snapshot\");\n if (node.options.layoutRoot) {\n node.willUpdate(false);\n }\n }\n const { layoutId, layout } = this.options;\n if (layoutId === undefined && !layout)\n return;\n const transformTemplate = this.getTransformTemplate();\n this.prevTransformTemplateValue = transformTemplate\n ? transformTemplate(this.latestValues, \"\")\n : undefined;\n this.updateSnapshot();\n shouldNotifyListeners && this.notifyListeners(\"willUpdate\");\n }\n update() {\n this.updateScheduled = false;\n const updateWasBlocked = this.isUpdateBlocked();\n // When doing an instant transition, we skip the layout update,\n // but should still clean up the measurements so that the next\n // snapshot could be taken correctly.\n if (updateWasBlocked) {\n this.unblockUpdate();\n this.clearAllSnapshots();\n this.nodes.forEach(clearMeasurements);\n return;\n }\n if (!this.isUpdating) {\n this.nodes.forEach(clearIsLayoutDirty);\n }\n this.isUpdating = false;\n /**\n * Write\n */\n this.nodes.forEach(resetTransformStyle);\n /**\n * Read ==================\n */\n // Update layout measurements of updated children\n this.nodes.forEach(updateLayout);\n /**\n * Write\n */\n // Notify listeners that the layout is updated\n this.nodes.forEach(notifyLayoutUpdate);\n this.clearAllSnapshots();\n /**\n * Manually flush any pending updates. Ideally\n * we could leave this to the following requestAnimationFrame but this seems\n * to leave a flash of incorrectly styled content.\n */\n const now = performance.now();\n frameData.delta = clamp(0, 1000 / 60, now - frameData.timestamp);\n frameData.timestamp = now;\n frameData.isProcessing = true;\n steps.update.process(frameData);\n steps.preRender.process(frameData);\n steps.render.process(frameData);\n frameData.isProcessing = false;\n }\n didUpdate() {\n if (!this.updateScheduled) {\n this.updateScheduled = true;\n queueMicrotask(() => this.update());\n }\n }\n clearAllSnapshots() {\n this.nodes.forEach(clearSnapshot);\n this.sharedNodes.forEach(removeLeadSnapshots);\n }\n scheduleUpdateProjection() {\n if (!this.projectionUpdateScheduled) {\n this.projectionUpdateScheduled = true;\n frame.preRender(this.updateProjection, false, true);\n }\n }\n scheduleCheckAfterUnmount() {\n /**\n * If the unmounting node is in a layoutGroup and did trigger a willUpdate,\n * we manually call didUpdate to give a chance to the siblings to animate.\n * Otherwise, cleanup all snapshots to prevents future nodes from reusing them.\n */\n frame.postRender(() => {\n if (this.isLayoutDirty) {\n this.root.didUpdate();\n }\n else {\n this.root.checkUpdateFailed();\n }\n });\n }\n /**\n * Update measurements\n */\n updateSnapshot() {\n if (this.snapshot || !this.instance)\n return;\n this.snapshot = this.measure();\n }\n updateLayout() {\n if (!this.instance)\n return;\n // TODO: Incorporate into a forwarded scroll offset\n this.updateScroll();\n if (!(this.options.alwaysMeasureLayout && this.isLead()) &&\n !this.isLayoutDirty) {\n return;\n }\n /**\n * When a node is mounted, it simply resumes from the prevLead's\n * snapshot instead of taking a new one, but the ancestors scroll\n * might have updated while the prevLead is unmounted. We need to\n * update the scroll again to make sure the layout we measure is\n * up to date.\n */\n if (this.resumeFrom && !this.resumeFrom.instance) {\n for (let i = 0; i < this.path.length; i++) {\n const node = this.path[i];\n node.updateScroll();\n }\n }\n const prevLayout = this.layout;\n this.layout = this.measure(false);\n this.layoutCorrected = createBox();\n this.isLayoutDirty = false;\n this.projectionDelta = undefined;\n this.notifyListeners(\"measure\", this.layout.layoutBox);\n const { visualElement } = this.options;\n visualElement &&\n visualElement.notify(\"LayoutMeasure\", this.layout.layoutBox, prevLayout ? prevLayout.layoutBox : undefined);\n }\n updateScroll(phase = \"measure\") {\n let needsMeasurement = Boolean(this.options.layoutScroll && this.instance);\n if (this.scroll &&\n this.scroll.animationId === this.root.animationId &&\n this.scroll.phase === phase) {\n needsMeasurement = false;\n }\n if (needsMeasurement) {\n this.scroll = {\n animationId: this.root.animationId,\n phase,\n isRoot: checkIsScrollRoot(this.instance),\n offset: measureScroll(this.instance),\n };\n }\n }\n resetTransform() {\n if (!resetTransform)\n return;\n const isResetRequested = this.isLayoutDirty || this.shouldResetTransform;\n const hasProjection = this.projectionDelta && !isDeltaZero(this.projectionDelta);\n const transformTemplate = this.getTransformTemplate();\n const transformTemplateValue = transformTemplate\n ? transformTemplate(this.latestValues, \"\")\n : undefined;\n const transformTemplateHasChanged = transformTemplateValue !== this.prevTransformTemplateValue;\n if (isResetRequested &&\n (hasProjection ||\n hasTransform(this.latestValues) ||\n transformTemplateHasChanged)) {\n resetTransform(this.instance, transformTemplateValue);\n this.shouldResetTransform = false;\n this.scheduleRender();\n }\n }\n measure(removeTransform = true) {\n const pageBox = this.measurePageBox();\n let layoutBox = this.removeElementScroll(pageBox);\n /**\n * Measurements taken during the pre-render stage\n * still have transforms applied so we remove them\n * via calculation.\n */\n if (removeTransform) {\n layoutBox = this.removeTransform(layoutBox);\n }\n roundBox(layoutBox);\n return {\n animationId: this.root.animationId,\n measuredBox: pageBox,\n layoutBox,\n latestValues: {},\n source: this.id,\n };\n }\n measurePageBox() {\n const { visualElement } = this.options;\n if (!visualElement)\n return createBox();\n const box = visualElement.measureViewportBox();\n // Remove viewport scroll to give page-relative coordinates\n const { scroll } = this.root;\n if (scroll) {\n translateAxis(box.x, scroll.offset.x);\n translateAxis(box.y, scroll.offset.y);\n }\n return box;\n }\n removeElementScroll(box) {\n const boxWithoutScroll = createBox();\n copyBoxInto(boxWithoutScroll, box);\n /**\n * Performance TODO: Keep a cumulative scroll offset down the tree\n * rather than loop back up the path.\n */\n for (let i = 0; i < this.path.length; i++) {\n const node = this.path[i];\n const { scroll, options } = node;\n if (node !== this.root && scroll && options.layoutScroll) {\n /**\n * If this is a new scroll root, we want to remove all previous scrolls\n * from the viewport box.\n */\n if (scroll.isRoot) {\n copyBoxInto(boxWithoutScroll, box);\n const { scroll: rootScroll } = this.root;\n /**\n * Undo the application of page scroll that was originally added\n * to the measured bounding box.\n */\n if (rootScroll) {\n translateAxis(boxWithoutScroll.x, -rootScroll.offset.x);\n translateAxis(boxWithoutScroll.y, -rootScroll.offset.y);\n }\n }\n translateAxis(boxWithoutScroll.x, scroll.offset.x);\n translateAxis(boxWithoutScroll.y, scroll.offset.y);\n }\n }\n return boxWithoutScroll;\n }\n applyTransform(box, transformOnly = false) {\n const withTransforms = createBox();\n copyBoxInto(withTransforms, box);\n for (let i = 0; i < this.path.length; i++) {\n const node = this.path[i];\n if (!transformOnly &&\n node.options.layoutScroll &&\n node.scroll &&\n node !== node.root) {\n transformBox(withTransforms, {\n x: -node.scroll.offset.x,\n y: -node.scroll.offset.y,\n });\n }\n if (!hasTransform(node.latestValues))\n continue;\n transformBox(withTransforms, node.latestValues);\n }\n if (hasTransform(this.latestValues)) {\n transformBox(withTransforms, this.latestValues);\n }\n return withTransforms;\n }\n removeTransform(box) {\n const boxWithoutTransform = createBox();\n copyBoxInto(boxWithoutTransform, box);\n for (let i = 0; i < this.path.length; i++) {\n const node = this.path[i];\n if (!node.instance)\n continue;\n if (!hasTransform(node.latestValues))\n continue;\n hasScale(node.latestValues) && node.updateSnapshot();\n const sourceBox = createBox();\n const nodeBox = node.measurePageBox();\n copyBoxInto(sourceBox, nodeBox);\n removeBoxTransforms(boxWithoutTransform, node.latestValues, node.snapshot ? node.snapshot.layoutBox : undefined, sourceBox);\n }\n if (hasTransform(this.latestValues)) {\n removeBoxTransforms(boxWithoutTransform, this.latestValues);\n }\n return boxWithoutTransform;\n }\n setTargetDelta(delta) {\n this.targetDelta = delta;\n this.root.scheduleUpdateProjection();\n this.isProjectionDirty = true;\n }\n setOptions(options) {\n this.options = {\n ...this.options,\n ...options,\n crossfade: options.crossfade !== undefined ? options.crossfade : true,\n };\n }\n clearMeasurements() {\n this.scroll = undefined;\n this.layout = undefined;\n this.snapshot = undefined;\n this.prevTransformTemplateValue = undefined;\n this.targetDelta = undefined;\n this.target = undefined;\n this.isLayoutDirty = false;\n }\n forceRelativeParentToResolveTarget() {\n if (!this.relativeParent)\n return;\n /**\n * If the parent target isn't up-to-date, force it to update.\n * This is an unfortunate de-optimisation as it means any updating relative\n * projection will cause all the relative parents to recalculate back\n * up the tree.\n */\n if (this.relativeParent.resolvedRelativeTargetAt !==\n frameData.timestamp) {\n this.relativeParent.resolveTargetDelta(true);\n }\n }\n resolveTargetDelta(forceRecalculation = false) {\n var _a;\n /**\n * Once the dirty status of nodes has been spread through the tree, we also\n * need to check if we have a shared node of a different depth that has itself\n * been dirtied.\n */\n const lead = this.getLead();\n this.isProjectionDirty || (this.isProjectionDirty = lead.isProjectionDirty);\n this.isTransformDirty || (this.isTransformDirty = lead.isTransformDirty);\n this.isSharedProjectionDirty || (this.isSharedProjectionDirty = lead.isSharedProjectionDirty);\n const isShared = Boolean(this.resumingFrom) || this !== lead;\n /**\n * We don't use transform for this step of processing so we don't\n * need to check whether any nodes have changed transform.\n */\n const canSkip = !(forceRecalculation ||\n (isShared && this.isSharedProjectionDirty) ||\n this.isProjectionDirty ||\n ((_a = this.parent) === null || _a === void 0 ? void 0 : _a.isProjectionDirty) ||\n this.attemptToResolveRelativeTarget);\n if (canSkip)\n return;\n const { layout, layoutId } = this.options;\n /**\n * If we have no layout, we can't perform projection, so early return\n */\n if (!this.layout || !(layout || layoutId))\n return;\n this.resolvedRelativeTargetAt = frameData.timestamp;\n /**\n * If we don't have a targetDelta but do have a layout, we can attempt to resolve\n * a relativeParent. This will allow a component to perform scale correction\n * even if no animation has started.\n */\n // TODO If this is unsuccessful this currently happens every frame\n if (!this.targetDelta && !this.relativeTarget) {\n // TODO: This is a semi-repetition of further down this function, make DRY\n const relativeParent = this.getClosestProjectingParent();\n if (relativeParent &&\n relativeParent.layout &&\n this.animationProgress !== 1) {\n this.relativeParent = relativeParent;\n this.forceRelativeParentToResolveTarget();\n this.relativeTarget = createBox();\n this.relativeTargetOrigin = createBox();\n calcRelativePosition(this.relativeTargetOrigin, this.layout.layoutBox, relativeParent.layout.layoutBox);\n copyBoxInto(this.relativeTarget, this.relativeTargetOrigin);\n }\n else {\n this.relativeParent = this.relativeTarget = undefined;\n }\n }\n /**\n * If we have no relative target or no target delta our target isn't valid\n * for this frame.\n */\n if (!this.relativeTarget && !this.targetDelta)\n return;\n /**\n * Lazy-init target data structure\n */\n if (!this.target) {\n this.target = createBox();\n this.targetWithTransforms = createBox();\n }\n /**\n * If we've got a relative box for this component, resolve it into a target relative to the parent.\n */\n if (this.relativeTarget &&\n this.relativeTargetOrigin &&\n this.relativeParent &&\n this.relativeParent.target) {\n this.forceRelativeParentToResolveTarget();\n calcRelativeBox(this.target, this.relativeTarget, this.relativeParent.target);\n /**\n * If we've only got a targetDelta, resolve it into a target\n */\n }\n else if (this.targetDelta) {\n if (Boolean(this.resumingFrom)) {\n // TODO: This is creating a new object every frame\n this.target = this.applyTransform(this.layout.layoutBox);\n }\n else {\n copyBoxInto(this.target, this.layout.layoutBox);\n }\n applyBoxDelta(this.target, this.targetDelta);\n }\n else {\n /**\n * If no target, use own layout as target\n */\n copyBoxInto(this.target, this.layout.layoutBox);\n }\n /**\n * If we've been told to attempt to resolve a relative target, do so.\n */\n if (this.attemptToResolveRelativeTarget) {\n this.attemptToResolveRelativeTarget = false;\n const relativeParent = this.getClosestProjectingParent();\n if (relativeParent &&\n Boolean(relativeParent.resumingFrom) ===\n Boolean(this.resumingFrom) &&\n !relativeParent.options.layoutScroll &&\n relativeParent.target &&\n this.animationProgress !== 1) {\n this.relativeParent = relativeParent;\n this.forceRelativeParentToResolveTarget();\n this.relativeTarget = createBox();\n this.relativeTargetOrigin = createBox();\n calcRelativePosition(this.relativeTargetOrigin, this.target, relativeParent.target);\n copyBoxInto(this.relativeTarget, this.relativeTargetOrigin);\n }\n else {\n this.relativeParent = this.relativeTarget = undefined;\n }\n }\n /**\n * Increase debug counter for resolved target deltas\n */\n projectionFrameData.resolvedTargetDeltas++;\n }\n getClosestProjectingParent() {\n if (!this.parent ||\n hasScale(this.parent.latestValues) ||\n has2DTranslate(this.parent.latestValues)) {\n return undefined;\n }\n if (this.parent.isProjecting()) {\n return this.parent;\n }\n else {\n return this.parent.getClosestProjectingParent();\n }\n }\n isProjecting() {\n return Boolean((this.relativeTarget ||\n this.targetDelta ||\n this.options.layoutRoot) &&\n this.layout);\n }\n calcProjection() {\n var _a;\n const lead = this.getLead();\n const isShared = Boolean(this.resumingFrom) || this !== lead;\n let canSkip = true;\n /**\n * If this is a normal layout animation and neither this node nor its nearest projecting\n * is dirty then we can't skip.\n */\n if (this.isProjectionDirty || ((_a = this.parent) === null || _a === void 0 ? void 0 : _a.isProjectionDirty)) {\n canSkip = false;\n }\n /**\n * If this is a shared layout animation and this node's shared projection is dirty then\n * we can't skip.\n */\n if (isShared &&\n (this.isSharedProjectionDirty || this.isTransformDirty)) {\n canSkip = false;\n }\n /**\n * If we have resolved the target this frame we must recalculate the\n * projection to ensure it visually represents the internal calculations.\n */\n if (this.resolvedRelativeTargetAt === frameData.timestamp) {\n canSkip = false;\n }\n if (canSkip)\n return;\n const { layout, layoutId } = this.options;\n /**\n * If this section of the tree isn't animating we can\n * delete our target sources for the following frame.\n */\n this.isTreeAnimating = Boolean((this.parent && this.parent.isTreeAnimating) ||\n this.currentAnimation ||\n this.pendingAnimation);\n if (!this.isTreeAnimating) {\n this.targetDelta = this.relativeTarget = undefined;\n }\n if (!this.layout || !(layout || layoutId))\n return;\n /**\n * Reset the corrected box with the latest values from box, as we're then going\n * to perform mutative operations on it.\n */\n copyBoxInto(this.layoutCorrected, this.layout.layoutBox);\n /**\n * Record previous tree scales before updating.\n */\n const prevTreeScaleX = this.treeScale.x;\n const prevTreeScaleY = this.treeScale.y;\n /**\n * Apply all the parent deltas to this box to produce the corrected box. This\n * is the layout box, as it will appear on screen as a result of the transforms of its parents.\n */\n applyTreeDeltas(this.layoutCorrected, this.treeScale, this.path, isShared);\n /**\n * If this layer needs to perform scale correction but doesn't have a target,\n * use the layout as the target.\n */\n if (lead.layout &&\n !lead.target &&\n (this.treeScale.x !== 1 || this.treeScale.y !== 1)) {\n lead.target = lead.layout.layoutBox;\n }\n const { target } = lead;\n if (!target) {\n /**\n * If we don't have a target to project into, but we were previously\n * projecting, we want to remove the stored transform and schedule\n * a render to ensure the elements reflect the removed transform.\n */\n if (this.projectionTransform) {\n this.projectionDelta = createDelta();\n this.projectionTransform = \"none\";\n this.scheduleRender();\n }\n return;\n }\n if (!this.projectionDelta) {\n this.projectionDelta = createDelta();\n this.projectionDeltaWithTransform = createDelta();\n }\n const prevProjectionTransform = this.projectionTransform;\n /**\n * Update the delta between the corrected box and the target box before user-set transforms were applied.\n * This will allow us to calculate the corrected borderRadius and boxShadow to compensate\n * for our layout reprojection, but still allow them to be scaled correctly by the user.\n * It might be that to simplify this we may want to accept that user-set scale is also corrected\n * and we wouldn't have to keep and calc both deltas, OR we could support a user setting\n * to allow people to choose whether these styles are corrected based on just the\n * layout reprojection or the final bounding box.\n */\n calcBoxDelta(this.projectionDelta, this.layoutCorrected, target, this.latestValues);\n this.projectionTransform = buildProjectionTransform(this.projectionDelta, this.treeScale);\n if (this.projectionTransform !== prevProjectionTransform ||\n this.treeScale.x !== prevTreeScaleX ||\n this.treeScale.y !== prevTreeScaleY) {\n this.hasProjected = true;\n this.scheduleRender();\n this.notifyListeners(\"projectionUpdate\", target);\n }\n /**\n * Increase debug counter for recalculated projections\n */\n projectionFrameData.recalculatedProjection++;\n }\n hide() {\n this.isVisible = false;\n // TODO: Schedule render\n }\n show() {\n this.isVisible = true;\n // TODO: Schedule render\n }\n scheduleRender(notifyAll = true) {\n this.options.scheduleRender && this.options.scheduleRender();\n if (notifyAll) {\n const stack = this.getStack();\n stack && stack.scheduleRender();\n }\n if (this.resumingFrom && !this.resumingFrom.instance) {\n this.resumingFrom = undefined;\n }\n }\n setAnimationOrigin(delta, hasOnlyRelativeTargetChanged = false) {\n const snapshot = this.snapshot;\n const snapshotLatestValues = snapshot\n ? snapshot.latestValues\n : {};\n const mixedValues = { ...this.latestValues };\n const targetDelta = createDelta();\n if (!this.relativeParent ||\n !this.relativeParent.options.layoutRoot) {\n this.relativeTarget = this.relativeTargetOrigin = undefined;\n }\n this.attemptToResolveRelativeTarget = !hasOnlyRelativeTargetChanged;\n const relativeLayout = createBox();\n const snapshotSource = snapshot ? snapshot.source : undefined;\n const layoutSource = this.layout ? this.layout.source : undefined;\n const isSharedLayoutAnimation = snapshotSource !== layoutSource;\n const stack = this.getStack();\n const isOnlyMember = !stack || stack.members.length <= 1;\n const shouldCrossfadeOpacity = Boolean(isSharedLayoutAnimation &&\n !isOnlyMember &&\n this.options.crossfade === true &&\n !this.path.some(hasOpacityCrossfade));\n this.animationProgress = 0;\n let prevRelativeTarget;\n this.mixTargetDelta = (latest) => {\n const progress = latest / 1000;\n mixAxisDelta(targetDelta.x, delta.x, progress);\n mixAxisDelta(targetDelta.y, delta.y, progress);\n this.setTargetDelta(targetDelta);\n if (this.relativeTarget &&\n this.relativeTargetOrigin &&\n this.layout &&\n this.relativeParent &&\n this.relativeParent.layout) {\n calcRelativePosition(relativeLayout, this.layout.layoutBox, this.relativeParent.layout.layoutBox);\n mixBox(this.relativeTarget, this.relativeTargetOrigin, relativeLayout, progress);\n /**\n * If this is an unchanged relative target we can consider the\n * projection not dirty.\n */\n if (prevRelativeTarget &&\n boxEquals(this.relativeTarget, prevRelativeTarget)) {\n this.isProjectionDirty = false;\n }\n if (!prevRelativeTarget)\n prevRelativeTarget = createBox();\n copyBoxInto(prevRelativeTarget, this.relativeTarget);\n }\n if (isSharedLayoutAnimation) {\n this.animationValues = mixedValues;\n mixValues(mixedValues, snapshotLatestValues, this.latestValues, progress, shouldCrossfadeOpacity, isOnlyMember);\n }\n this.root.scheduleUpdateProjection();\n this.scheduleRender();\n this.animationProgress = progress;\n };\n this.mixTargetDelta(this.options.layoutRoot ? 1000 : 0);\n }\n startAnimation(options) {\n this.notifyListeners(\"animationStart\");\n this.currentAnimation && this.currentAnimation.stop();\n if (this.resumingFrom && this.resumingFrom.currentAnimation) {\n this.resumingFrom.currentAnimation.stop();\n }\n if (this.pendingAnimation) {\n cancelFrame(this.pendingAnimation);\n this.pendingAnimation = undefined;\n }\n /**\n * Start the animation in the next frame to have a frame with progress 0,\n * where the target is the same as when the animation started, so we can\n * calculate the relative positions correctly for instant transitions.\n */\n this.pendingAnimation = frame.update(() => {\n globalProjectionState.hasAnimatedSinceResize = true;\n this.currentAnimation = animateSingleValue(0, animationTarget, {\n ...options,\n onUpdate: (latest) => {\n this.mixTargetDelta(latest);\n options.onUpdate && options.onUpdate(latest);\n },\n onComplete: () => {\n options.onComplete && options.onComplete();\n this.completeAnimation();\n },\n });\n if (this.resumingFrom) {\n this.resumingFrom.currentAnimation = this.currentAnimation;\n }\n this.pendingAnimation = undefined;\n });\n }\n completeAnimation() {\n if (this.resumingFrom) {\n this.resumingFrom.currentAnimation = undefined;\n this.resumingFrom.preserveOpacity = undefined;\n }\n const stack = this.getStack();\n stack && stack.exitAnimationComplete();\n this.resumingFrom =\n this.currentAnimation =\n this.animationValues =\n undefined;\n this.notifyListeners(\"animationComplete\");\n }\n finishAnimation() {\n if (this.currentAnimation) {\n this.mixTargetDelta && this.mixTargetDelta(animationTarget);\n this.currentAnimation.stop();\n }\n this.completeAnimation();\n }\n applyTransformsToTarget() {\n const lead = this.getLead();\n let { targetWithTransforms, target, layout, latestValues } = lead;\n if (!targetWithTransforms || !target || !layout)\n return;\n /**\n * If we're only animating position, and this element isn't the lead element,\n * then instead of projecting into the lead box we instead want to calculate\n * a new target that aligns the two boxes but maintains the layout shape.\n */\n if (this !== lead &&\n this.layout &&\n layout &&\n shouldAnimatePositionOnly(this.options.animationType, this.layout.layoutBox, layout.layoutBox)) {\n target = this.target || createBox();\n const xLength = calcLength(this.layout.layoutBox.x);\n target.x.min = lead.target.x.min;\n target.x.max = target.x.min + xLength;\n const yLength = calcLength(this.layout.layoutBox.y);\n target.y.min = lead.target.y.min;\n target.y.max = target.y.min + yLength;\n }\n copyBoxInto(targetWithTransforms, target);\n /**\n * Apply the latest user-set transforms to the targetBox to produce the targetBoxFinal.\n * This is the final box that we will then project into by calculating a transform delta and\n * applying it to the corrected box.\n */\n transformBox(targetWithTransforms, latestValues);\n /**\n * Update the delta between the corrected box and the final target box, after\n * user-set transforms are applied to it. This will be used by the renderer to\n * create a transform style that will reproject the element from its layout layout\n * into the desired bounding box.\n */\n calcBoxDelta(this.projectionDeltaWithTransform, this.layoutCorrected, targetWithTransforms, latestValues);\n }\n registerSharedNode(layoutId, node) {\n if (!this.sharedNodes.has(layoutId)) {\n this.sharedNodes.set(layoutId, new NodeStack());\n }\n const stack = this.sharedNodes.get(layoutId);\n stack.add(node);\n const config = node.options.initialPromotionConfig;\n node.promote({\n transition: config ? config.transition : undefined,\n preserveFollowOpacity: config && config.shouldPreserveFollowOpacity\n ? config.shouldPreserveFollowOpacity(node)\n : undefined,\n });\n }\n isLead() {\n const stack = this.getStack();\n return stack ? stack.lead === this : true;\n }\n getLead() {\n var _a;\n const { layoutId } = this.options;\n return layoutId ? ((_a = this.getStack()) === null || _a === void 0 ? void 0 : _a.lead) || this : this;\n }\n getPrevLead() {\n var _a;\n const { layoutId } = this.options;\n return layoutId ? (_a = this.getStack()) === null || _a === void 0 ? void 0 : _a.prevLead : undefined;\n }\n getStack() {\n const { layoutId } = this.options;\n if (layoutId)\n return this.root.sharedNodes.get(layoutId);\n }\n promote({ needsReset, transition, preserveFollowOpacity, } = {}) {\n const stack = this.getStack();\n if (stack)\n stack.promote(this, preserveFollowOpacity);\n if (needsReset) {\n this.projectionDelta = undefined;\n this.needsReset = true;\n }\n if (transition)\n this.setOptions({ transition });\n }\n relegate() {\n const stack = this.getStack();\n if (stack) {\n return stack.relegate(this);\n }\n else {\n return false;\n }\n }\n resetRotation() {\n const { visualElement } = this.options;\n if (!visualElement)\n return;\n // If there's no detected rotation values, we can early return without a forced render.\n let hasRotate = false;\n /**\n * An unrolled check for rotation values. Most elements don't have any rotation and\n * skipping the nested loop and new object creation is 50% faster.\n */\n const { latestValues } = visualElement;\n if (latestValues.rotate ||\n latestValues.rotateX ||\n latestValues.rotateY ||\n latestValues.rotateZ) {\n hasRotate = true;\n }\n // If there's no rotation values, we don't need to do any more.\n if (!hasRotate)\n return;\n const resetValues = {};\n // Check the rotate value of all axes and reset to 0\n for (let i = 0; i < transformAxes.length; i++) {\n const key = \"rotate\" + transformAxes[i];\n // Record the rotation and then temporarily set it to 0\n if (latestValues[key]) {\n resetValues[key] = latestValues[key];\n visualElement.setStaticValue(key, 0);\n }\n }\n // Force a render of this element to apply the transform with all rotations\n // set to 0.\n visualElement.render();\n // Put back all the values we reset\n for (const key in resetValues) {\n visualElement.setStaticValue(key, resetValues[key]);\n }\n // Schedule a render for the next frame. This ensures we won't visually\n // see the element with the reset rotate value applied.\n visualElement.scheduleRender();\n }\n getProjectionStyles(styleProp) {\n var _a, _b;\n if (!this.instance || this.isSVG)\n return undefined;\n if (!this.isVisible) {\n return hiddenVisibility;\n }\n const styles = {\n visibility: \"\",\n };\n const transformTemplate = this.getTransformTemplate();\n if (this.needsReset) {\n this.needsReset = false;\n styles.opacity = \"\";\n styles.pointerEvents =\n resolveMotionValue(styleProp === null || styleProp === void 0 ? void 0 : styleProp.pointerEvents) || \"\";\n styles.transform = transformTemplate\n ? transformTemplate(this.latestValues, \"\")\n : \"none\";\n return styles;\n }\n const lead = this.getLead();\n if (!this.projectionDelta || !this.layout || !lead.target) {\n const emptyStyles = {};\n if (this.options.layoutId) {\n emptyStyles.opacity =\n this.latestValues.opacity !== undefined\n ? this.latestValues.opacity\n : 1;\n emptyStyles.pointerEvents =\n resolveMotionValue(styleProp === null || styleProp === void 0 ? void 0 : styleProp.pointerEvents) || \"\";\n }\n if (this.hasProjected && !hasTransform(this.latestValues)) {\n emptyStyles.transform = transformTemplate\n ? transformTemplate({}, \"\")\n : \"none\";\n this.hasProjected = false;\n }\n return emptyStyles;\n }\n const valuesToRender = lead.animationValues || lead.latestValues;\n this.applyTransformsToTarget();\n styles.transform = buildProjectionTransform(this.projectionDeltaWithTransform, this.treeScale, valuesToRender);\n if (transformTemplate) {\n styles.transform = transformTemplate(valuesToRender, styles.transform);\n }\n const { x, y } = this.projectionDelta;\n styles.transformOrigin = `${x.origin * 100}% ${y.origin * 100}% 0`;\n if (lead.animationValues) {\n /**\n * If the lead component is animating, assign this either the entering/leaving\n * opacity\n */\n styles.opacity =\n lead === this\n ? (_b = (_a = valuesToRender.opacity) !== null && _a !== void 0 ? _a : this.latestValues.opacity) !== null && _b !== void 0 ? _b : 1\n : this.preserveOpacity\n ? this.latestValues.opacity\n : valuesToRender.opacityExit;\n }\n else {\n /**\n * Or we're not animating at all, set the lead component to its layout\n * opacity and other components to hidden.\n */\n styles.opacity =\n lead === this\n ? valuesToRender.opacity !== undefined\n ? valuesToRender.opacity\n : \"\"\n : valuesToRender.opacityExit !== undefined\n ? valuesToRender.opacityExit\n : 0;\n }\n /**\n * Apply scale correction\n */\n for (const key in scaleCorrectors) {\n if (valuesToRender[key] === undefined)\n continue;\n const { correct, applyTo } = scaleCorrectors[key];\n /**\n * Only apply scale correction to the value if we have an\n * active projection transform. Otherwise these values become\n * vulnerable to distortion if the element changes size without\n * a corresponding layout animation.\n */\n const corrected = styles.transform === \"none\"\n ? valuesToRender[key]\n : correct(valuesToRender[key], lead);\n if (applyTo) {\n const num = applyTo.length;\n for (let i = 0; i < num; i++) {\n styles[applyTo[i]] = corrected;\n }\n }\n else {\n styles[key] = corrected;\n }\n }\n /**\n * Disable pointer events on follow components. This is to ensure\n * that if a follow component covers a lead component it doesn't block\n * pointer events on the lead.\n */\n if (this.options.layoutId) {\n styles.pointerEvents =\n lead === this\n ? resolveMotionValue(styleProp === null || styleProp === void 0 ? void 0 : styleProp.pointerEvents) || \"\"\n : \"none\";\n }\n return styles;\n }\n clearSnapshot() {\n this.resumeFrom = this.snapshot = undefined;\n }\n // Only run on root\n resetTree() {\n this.root.nodes.forEach((node) => { var _a; return (_a = node.currentAnimation) === null || _a === void 0 ? void 0 : _a.stop(); });\n this.root.nodes.forEach(clearMeasurements);\n this.root.sharedNodes.clear();\n }\n };\n}\nfunction updateLayout(node) {\n node.updateLayout();\n}\nfunction notifyLayoutUpdate(node) {\n var _a;\n const snapshot = ((_a = node.resumeFrom) === null || _a === void 0 ? void 0 : _a.snapshot) || node.snapshot;\n if (node.isLead() &&\n node.layout &&\n snapshot &&\n node.hasListeners(\"didUpdate\")) {\n const { layoutBox: layout, measuredBox: measuredLayout } = node.layout;\n const { animationType } = node.options;\n const isShared = snapshot.source !== node.layout.source;\n // TODO Maybe we want to also resize the layout snapshot so we don't trigger\n // animations for instance if layout=\"size\" and an element has only changed position\n if (animationType === \"size\") {\n eachAxis((axis) => {\n const axisSnapshot = isShared\n ? snapshot.measuredBox[axis]\n : snapshot.layoutBox[axis];\n const length = calcLength(axisSnapshot);\n axisSnapshot.min = layout[axis].min;\n axisSnapshot.max = axisSnapshot.min + length;\n });\n }\n else if (shouldAnimatePositionOnly(animationType, snapshot.layoutBox, layout)) {\n eachAxis((axis) => {\n const axisSnapshot = isShared\n ? snapshot.measuredBox[axis]\n : snapshot.layoutBox[axis];\n const length = calcLength(layout[axis]);\n axisSnapshot.max = axisSnapshot.min + length;\n /**\n * Ensure relative target gets resized and rerendererd\n */\n if (node.relativeTarget && !node.currentAnimation) {\n node.isProjectionDirty = true;\n node.relativeTarget[axis].max =\n node.relativeTarget[axis].min + length;\n }\n });\n }\n const layoutDelta = createDelta();\n calcBoxDelta(layoutDelta, layout, snapshot.layoutBox);\n const visualDelta = createDelta();\n if (isShared) {\n calcBoxDelta(visualDelta, node.applyTransform(measuredLayout, true), snapshot.measuredBox);\n }\n else {\n calcBoxDelta(visualDelta, layout, snapshot.layoutBox);\n }\n const hasLayoutChanged = !isDeltaZero(layoutDelta);\n let hasRelativeTargetChanged = false;\n if (!node.resumeFrom) {\n const relativeParent = node.getClosestProjectingParent();\n /**\n * If the relativeParent is itself resuming from a different element then\n * the relative snapshot is not relavent\n */\n if (relativeParent && !relativeParent.resumeFrom) {\n const { snapshot: parentSnapshot, layout: parentLayout } = relativeParent;\n if (parentSnapshot && parentLayout) {\n const relativeSnapshot = createBox();\n calcRelativePosition(relativeSnapshot, snapshot.layoutBox, parentSnapshot.layoutBox);\n const relativeLayout = createBox();\n calcRelativePosition(relativeLayout, layout, parentLayout.layoutBox);\n if (!boxEqualsRounded(relativeSnapshot, relativeLayout)) {\n hasRelativeTargetChanged = true;\n }\n if (relativeParent.options.layoutRoot) {\n node.relativeTarget = relativeLayout;\n node.relativeTargetOrigin = relativeSnapshot;\n node.relativeParent = relativeParent;\n }\n }\n }\n }\n node.notifyListeners(\"didUpdate\", {\n layout,\n snapshot,\n delta: visualDelta,\n layoutDelta,\n hasLayoutChanged,\n hasRelativeTargetChanged,\n });\n }\n else if (node.isLead()) {\n const { onExitComplete } = node.options;\n onExitComplete && onExitComplete();\n }\n /**\n * Clearing transition\n * TODO: Investigate why this transition is being passed in as {type: false } from Framer\n * and why we need it at all\n */\n node.options.transition = undefined;\n}\nfunction propagateDirtyNodes(node) {\n /**\n * Increase debug counter for nodes encountered this frame\n */\n projectionFrameData.totalNodes++;\n if (!node.parent)\n return;\n /**\n * If this node isn't projecting, propagate isProjectionDirty. It will have\n * no performance impact but it will allow the next child that *is* projecting\n * but *isn't* dirty to just check its parent to see if *any* ancestor needs\n * correcting.\n */\n if (!node.isProjecting()) {\n node.isProjectionDirty = node.parent.isProjectionDirty;\n }\n /**\n * Propagate isSharedProjectionDirty and isTransformDirty\n * throughout the whole tree. A future revision can take another look at\n * this but for safety we still recalcualte shared nodes.\n */\n node.isSharedProjectionDirty || (node.isSharedProjectionDirty = Boolean(node.isProjectionDirty ||\n node.parent.isProjectionDirty ||\n node.parent.isSharedProjectionDirty));\n node.isTransformDirty || (node.isTransformDirty = node.parent.isTransformDirty);\n}\nfunction cleanDirtyNodes(node) {\n node.isProjectionDirty =\n node.isSharedProjectionDirty =\n node.isTransformDirty =\n false;\n}\nfunction clearSnapshot(node) {\n node.clearSnapshot();\n}\nfunction clearMeasurements(node) {\n node.clearMeasurements();\n}\nfunction clearIsLayoutDirty(node) {\n node.isLayoutDirty = false;\n}\nfunction resetTransformStyle(node) {\n const { visualElement } = node.options;\n if (visualElement && visualElement.getProps().onBeforeLayoutMeasure) {\n visualElement.notify(\"BeforeLayoutMeasure\");\n }\n node.resetTransform();\n}\nfunction finishAnimation(node) {\n node.finishAnimation();\n node.targetDelta = node.relativeTarget = node.target = undefined;\n node.isProjectionDirty = true;\n}\nfunction resolveTargetDelta(node) {\n node.resolveTargetDelta();\n}\nfunction calcProjection(node) {\n node.calcProjection();\n}\nfunction resetRotation(node) {\n node.resetRotation();\n}\nfunction removeLeadSnapshots(stack) {\n stack.removeLeadSnapshot();\n}\nfunction mixAxisDelta(output, delta, p) {\n output.translate = mix(delta.translate, 0, p);\n output.scale = mix(delta.scale, 1, p);\n output.origin = delta.origin;\n output.originPoint = delta.originPoint;\n}\nfunction mixAxis(output, from, to, p) {\n output.min = mix(from.min, to.min, p);\n output.max = mix(from.max, to.max, p);\n}\nfunction mixBox(output, from, to, p) {\n mixAxis(output.x, from.x, to.x, p);\n mixAxis(output.y, from.y, to.y, p);\n}\nfunction hasOpacityCrossfade(node) {\n return (node.animationValues && node.animationValues.opacityExit !== undefined);\n}\nconst defaultLayoutTransition = {\n duration: 0.45,\n ease: [0.4, 0, 0.1, 1],\n};\nconst userAgentContains = (string) => typeof navigator !== \"undefined\" &&\n navigator.userAgent.toLowerCase().includes(string);\n/**\n * Measured bounding boxes must be rounded in Safari and\n * left untouched in Chrome, otherwise non-integer layouts within scaled-up elements\n * can appear to jump.\n */\nconst roundPoint = userAgentContains(\"applewebkit/\") && !userAgentContains(\"chrome/\")\n ? Math.round\n : noop;\nfunction roundAxis(axis) {\n // Round to the nearest .5 pixels to support subpixel layouts\n axis.min = roundPoint(axis.min);\n axis.max = roundPoint(axis.max);\n}\nfunction roundBox(box) {\n roundAxis(box.x);\n roundAxis(box.y);\n}\nfunction shouldAnimatePositionOnly(animationType, snapshot, layout) {\n return (animationType === \"position\" ||\n (animationType === \"preserve-aspect\" &&\n !isNear(aspectRatio(snapshot), aspectRatio(layout), 0.2)));\n}\n\nexport { cleanDirtyNodes, createProjectionNode, mixAxis, mixAxisDelta, mixBox, propagateDirtyNodes };\n","function record(data) {\n if (window.MotionDebug) {\n window.MotionDebug.record(data);\n }\n}\n\nexport { record };\n","import { frame, cancelFrame } from '../frameloop/frame.mjs';\n\n/**\n * Timeout defined in ms\n */\nfunction delay(callback, timeout) {\n const start = performance.now();\n const checkElapsed = ({ timestamp }) => {\n const elapsed = timestamp - start;\n if (elapsed >= timeout) {\n cancelFrame(checkElapsed);\n callback(elapsed - timeout);\n }\n };\n frame.read(checkElapsed, true);\n return () => cancelFrame(checkElapsed);\n}\n\nexport { delay };\n","import { createProjectionNode } from './create-projection-node.mjs';\nimport { addDomEvent } from '../../events/add-dom-event.mjs';\n\nconst DocumentProjectionNode = createProjectionNode({\n attachResizeListener: (ref, notify) => addDomEvent(ref, \"resize\", notify),\n measureScroll: () => ({\n x: document.documentElement.scrollLeft || document.body.scrollLeft,\n y: document.documentElement.scrollTop || document.body.scrollTop,\n }),\n checkIsScrollRoot: () => true,\n});\n\nexport { DocumentProjectionNode };\n","import { createProjectionNode } from './create-projection-node.mjs';\nimport { DocumentProjectionNode } from './DocumentProjectionNode.mjs';\n\nconst rootProjectionNode = {\n current: undefined,\n};\nconst HTMLProjectionNode = createProjectionNode({\n measureScroll: (instance) => ({\n x: instance.scrollLeft,\n y: instance.scrollTop,\n }),\n defaultParent: () => {\n if (!rootProjectionNode.current) {\n const documentNode = new DocumentProjectionNode({});\n documentNode.mount(window);\n documentNode.setOptions({ layoutScroll: true });\n rootProjectionNode.current = documentNode;\n }\n return rootProjectionNode.current;\n },\n resetTransform: (instance, value) => {\n instance.style.transform = value !== undefined ? value : \"none\";\n },\n checkIsScrollRoot: (instance) => Boolean(window.getComputedStyle(instance).position === \"fixed\"),\n});\n\nexport { HTMLProjectionNode, rootProjectionNode };\n","import { DragGesture } from '../../gestures/drag/index.mjs';\nimport { PanGesture } from '../../gestures/pan/index.mjs';\nimport { MeasureLayout } from './layout/MeasureLayout.mjs';\nimport { HTMLProjectionNode } from '../../projection/node/HTMLProjectionNode.mjs';\n\nconst drag = {\n pan: {\n Feature: PanGesture,\n },\n drag: {\n Feature: DragGesture,\n ProjectionNode: HTMLProjectionNode,\n MeasureLayout,\n },\n};\n\nexport { drag };\n","import { Feature } from '../../motion/features/Feature.mjs';\nimport { noop } from '../../utils/noop.mjs';\nimport { VisualElementDragControls } from './VisualElementDragControls.mjs';\n\nclass DragGesture extends Feature {\n constructor(node) {\n super(node);\n this.removeGroupControls = noop;\n this.removeListeners = noop;\n this.controls = new VisualElementDragControls(node);\n }\n mount() {\n // If we've been provided a DragControls for manual control over the drag gesture,\n // subscribe this component to it on mount.\n const { dragControls } = this.node.getProps();\n if (dragControls) {\n this.removeGroupControls = dragControls.subscribe(this.controls);\n }\n this.removeListeners = this.controls.addListeners() || noop;\n }\n unmount() {\n this.removeGroupControls();\n this.removeListeners();\n }\n}\n\nexport { DragGesture };\n","import { HTMLVisualElement } from '../html/HTMLVisualElement.mjs';\nimport { SVGVisualElement } from '../svg/SVGVisualElement.mjs';\nimport { isSVGComponent } from './utils/is-svg-component.mjs';\n\nconst createDomVisualElement = (Component, options) => {\n return isSVGComponent(Component)\n ? new SVGVisualElement(options, { enableHardwareAcceleration: false })\n : new HTMLVisualElement(options, { enableHardwareAcceleration: true });\n};\n\nexport { createDomVisualElement };\n","import { createMotionComponent } from '../../motion/index.mjs';\nimport { createMotionProxy } from './motion-proxy.mjs';\nimport { createDomMotionConfig } from './utils/create-config.mjs';\nimport { gestureAnimations } from '../../motion/features/gestures.mjs';\nimport { animations } from '../../motion/features/animations.mjs';\nimport { drag } from '../../motion/features/drag.mjs';\nimport { createDomVisualElement } from './create-visual-element.mjs';\nimport { layout } from '../../motion/features/layout.mjs';\n\nconst preloadedFeatures = {\n ...animations,\n ...gestureAnimations,\n ...drag,\n ...layout,\n};\n/**\n * HTML & SVG components, optimised for use with gestures and animation. These can be used as\n * drop-in replacements for any HTML & SVG component, all CSS & SVG properties are supported.\n *\n * @public\n */\nconst motion = /*@__PURE__*/ createMotionProxy((Component, config) => createDomMotionConfig(Component, config, preloadedFeatures, createDomVisualElement));\n/**\n * Create a DOM `motion` component with the provided string. This is primarily intended\n * as a full alternative to `motion` for consumers who have to support environments that don't\n * support `Proxy`.\n *\n * ```javascript\n * import { createDomMotionComponent } from \"framer-motion\"\n *\n * const motion = {\n * div: createDomMotionComponent('div')\n * }\n * ```\n *\n * @public\n */\nfunction createDomMotionComponent(key) {\n return createMotionComponent(createDomMotionConfig(key, { forwardMotionProps: false }, preloadedFeatures, createDomVisualElement));\n}\n\nexport { createDomMotionComponent, motion };\n","import { HTMLProjectionNode } from '../../projection/node/HTMLProjectionNode.mjs';\nimport { MeasureLayout } from './layout/MeasureLayout.mjs';\n\nconst layout = {\n layout: {\n ProjectionNode: HTMLProjectionNode,\n MeasureLayout,\n },\n};\n\nexport { layout };\n","import { isSVGComponent } from './is-svg-component.mjs';\nimport { createUseRender } from '../use-render.mjs';\nimport { svgMotionConfig } from '../../svg/config-motion.mjs';\nimport { htmlMotionConfig } from '../../html/config-motion.mjs';\n\nfunction createDomMotionConfig(Component, { forwardMotionProps = false }, preloadedFeatures, createVisualElement) {\n const baseConfig = isSVGComponent(Component)\n ? svgMotionConfig\n : htmlMotionConfig;\n return {\n ...baseConfig,\n preloadedFeatures,\n useRender: createUseRender(forwardMotionProps),\n createVisualElement,\n Component,\n };\n}\n\nexport { createDomMotionConfig };\n","/**\n * Convert camelCase to dash-case properties.\n */\nconst camelToDash = (str) => str.replace(/([a-z])([A-Z])/g, \"$1-$2\").toLowerCase();\n\nexport { camelToDash };\n","const checkStringStartsWith = (token) => (key) => typeof key === \"string\" && key.startsWith(token);\nconst isCSSVariableName = checkStringStartsWith(\"--\");\nconst isCSSVariableToken = checkStringStartsWith(\"var(--\");\nconst cssVariableRegex = /var\\s*\\(\\s*--[\\w-]+(\\s*,\\s*(?:(?:[^)(]|\\((?:[^)(]+|\\([^)(]*\\))*\\))*)+)?\\s*\\)/g;\n\nexport { cssVariableRegex, isCSSVariableName, isCSSVariableToken };\n","function isSVGElement(element) {\n return element instanceof SVGElement && element.tagName !== \"svg\";\n}\n\nexport { isSVGElement };\n","import { complex } from '../../../value/types/complex/index.mjs';\nimport { filter } from '../../../value/types/complex/filter.mjs';\nimport { getDefaultValueType } from './defaults.mjs';\n\nfunction getAnimatableNone(key, value) {\n let defaultValueType = getDefaultValueType(key);\n if (defaultValueType !== filter)\n defaultValueType = complex;\n // If value is not recognised as animatable, ie \"none\", create an animatable version origin based on the target\n return defaultValueType.getAnimatableNone\n ? defaultValueType.getAnimatableNone(value)\n : undefined;\n}\n\nexport { getAnimatableNone };\n","import { color } from '../../../value/types/color/index.mjs';\nimport { filter } from '../../../value/types/complex/filter.mjs';\nimport { numberValueTypes } from './number.mjs';\n\n/**\n * A map of default value types for common values\n */\nconst defaultValueTypes = {\n ...numberValueTypes,\n // Color props\n color,\n backgroundColor: color,\n outlineColor: color,\n fill: color,\n stroke: color,\n // Border props\n borderColor: color,\n borderTopColor: color,\n borderRightColor: color,\n borderBottomColor: color,\n borderLeftColor: color,\n filter,\n WebkitFilter: filter,\n};\n/**\n * Gets the default ValueType for the provided value key\n */\nconst getDefaultValueType = (key) => defaultValueTypes[key];\n\nexport { defaultValueTypes, getDefaultValueType };\n","/**\n * ValueType for \"auto\"\n */\nconst auto = {\n test: (v) => v === \"auto\",\n parse: (v) => v,\n};\n\nexport { auto };\n","import { number } from '../../../value/types/numbers/index.mjs';\nimport { px, percent, degrees, vw, vh } from '../../../value/types/numbers/units.mjs';\nimport { testValueType } from './test.mjs';\nimport { auto } from './type-auto.mjs';\n\n/**\n * A list of value types commonly used for dimensions\n */\nconst dimensionValueTypes = [number, px, percent, degrees, vw, vh, auto];\n/**\n * Tests a dimensional value against the list of dimension ValueTypes\n */\nconst findDimensionValueType = (v) => dimensionValueTypes.find(testValueType(v));\n\nexport { dimensionValueTypes, findDimensionValueType };\n","import { number } from '../../../value/types/numbers/index.mjs';\n\nconst int = {\n ...number,\n transform: Math.round,\n};\n\nexport { int };\n","import { scale, alpha } from '../../../value/types/numbers/index.mjs';\nimport { px, degrees, progressPercentage } from '../../../value/types/numbers/units.mjs';\nimport { int } from './type-int.mjs';\n\nconst numberValueTypes = {\n // Border props\n borderWidth: px,\n borderTopWidth: px,\n borderRightWidth: px,\n borderBottomWidth: px,\n borderLeftWidth: px,\n borderRadius: px,\n radius: px,\n borderTopLeftRadius: px,\n borderTopRightRadius: px,\n borderBottomRightRadius: px,\n borderBottomLeftRadius: px,\n // Positioning props\n width: px,\n maxWidth: px,\n height: px,\n maxHeight: px,\n size: px,\n top: px,\n right: px,\n bottom: px,\n left: px,\n // Spacing props\n padding: px,\n paddingTop: px,\n paddingRight: px,\n paddingBottom: px,\n paddingLeft: px,\n margin: px,\n marginTop: px,\n marginRight: px,\n marginBottom: px,\n marginLeft: px,\n // Transform props\n rotate: degrees,\n rotateX: degrees,\n rotateY: degrees,\n rotateZ: degrees,\n scale,\n scaleX: scale,\n scaleY: scale,\n scaleZ: scale,\n skew: degrees,\n skewX: degrees,\n skewY: degrees,\n distance: px,\n translateX: px,\n translateY: px,\n translateZ: px,\n x: px,\n y: px,\n z: px,\n perspective: px,\n transformPerspective: px,\n opacity: alpha,\n originX: progressPercentage,\n originY: progressPercentage,\n originZ: px,\n // Misc\n zIndex: int,\n // SVG\n fillOpacity: alpha,\n strokeOpacity: alpha,\n numOctaves: int,\n};\n\nexport { numberValueTypes };\n","/**\n * Tests a provided value against a ValueType\n */\nconst testValueType = (v) => (type) => type.test(v);\n\nexport { testValueType };\n","import { buildHTMLStyles } from './utils/build-styles.mjs';\nimport { isCSSVariableName } from '../dom/utils/is-css-variable.mjs';\nimport { transformProps } from './utils/transform.mjs';\nimport { scrapeMotionValuesFromProps } from './utils/scrape-motion-values.mjs';\nimport { renderHTML } from './utils/render.mjs';\nimport { getDefaultValueType } from '../dom/value-types/defaults.mjs';\nimport { measureViewportBox } from '../../projection/utils/measure.mjs';\nimport { DOMVisualElement } from '../dom/DOMVisualElement.mjs';\nimport { isMotionValue } from '../../value/utils/is-motion-value.mjs';\n\nfunction getComputedStyle(element) {\n return window.getComputedStyle(element);\n}\nclass HTMLVisualElement extends DOMVisualElement {\n constructor() {\n super(...arguments);\n this.type = \"html\";\n }\n readValueFromInstance(instance, key) {\n if (transformProps.has(key)) {\n const defaultType = getDefaultValueType(key);\n return defaultType ? defaultType.default || 0 : 0;\n }\n else {\n const computedStyle = getComputedStyle(instance);\n const value = (isCSSVariableName(key)\n ? computedStyle.getPropertyValue(key)\n : computedStyle[key]) || 0;\n return typeof value === \"string\" ? value.trim() : value;\n }\n }\n measureInstanceViewportBox(instance, { transformPagePoint }) {\n return measureViewportBox(instance, transformPagePoint);\n }\n build(renderState, latestValues, options, props) {\n buildHTMLStyles(renderState, latestValues, options, props.transformTemplate);\n }\n scrapeMotionValuesFromProps(props, prevProps) {\n return scrapeMotionValuesFromProps(props, prevProps);\n }\n handleChildMotionValue() {\n if (this.childSubscription) {\n this.childSubscription();\n delete this.childSubscription;\n }\n const { children } = this.props;\n if (isMotionValue(children)) {\n this.childSubscription = children.on(\"change\", (latest) => {\n if (this.current)\n this.current.textContent = `${latest}`;\n });\n }\n }\n renderInstance(instance, renderState, styleProp, projection) {\n renderHTML(instance, renderState, styleProp, projection);\n }\n}\n\nexport { HTMLVisualElement, getComputedStyle };\n","import { transformPropOrder } from './transform.mjs';\n\nconst translateAlias = {\n x: \"translateX\",\n y: \"translateY\",\n z: \"translateZ\",\n transformPerspective: \"perspective\",\n};\nconst numTransforms = transformPropOrder.length;\n/**\n * Build a CSS transform style from individual x/y/scale etc properties.\n *\n * This outputs with a default order of transforms/scales/rotations, this can be customised by\n * providing a transformTemplate function.\n */\nfunction buildTransform(transform, { enableHardwareAcceleration = true, allowTransformNone = true, }, transformIsDefault, transformTemplate) {\n // The transform string we're going to build into.\n let transformString = \"\";\n /**\n * Loop over all possible transforms in order, adding the ones that\n * are present to the transform string.\n */\n for (let i = 0; i < numTransforms; i++) {\n const key = transformPropOrder[i];\n if (transform[key] !== undefined) {\n const transformName = translateAlias[key] || key;\n transformString += `${transformName}(${transform[key]}) `;\n }\n }\n if (enableHardwareAcceleration && !transform.z) {\n transformString += \"translateZ(0)\";\n }\n transformString = transformString.trim();\n // If we have a custom `transform` template, pass our transform values and\n // generated transformString to that before returning\n if (transformTemplate) {\n transformString = transformTemplate(transform, transformIsDefault ? \"\" : transformString);\n }\n else if (allowTransformNone && transformIsDefault) {\n transformString = \"none\";\n }\n return transformString;\n}\n\nexport { buildTransform };\n","/**\n * Provided a value and a ValueType, returns the value as that value type.\n */\nconst getValueAsType = (value, type) => {\n return type && typeof value === \"number\"\n ? type.transform(value)\n : value;\n};\n\nexport { getValueAsType };\n","import { buildTransform } from './build-transform.mjs';\nimport { isCSSVariableName } from '../../dom/utils/is-css-variable.mjs';\nimport { transformProps } from './transform.mjs';\nimport { getValueAsType } from '../../dom/value-types/get-as-type.mjs';\nimport { numberValueTypes } from '../../dom/value-types/number.mjs';\n\nfunction buildHTMLStyles(state, latestValues, options, transformTemplate) {\n const { style, vars, transform, transformOrigin } = state;\n // Track whether we encounter any transform or transformOrigin values.\n let hasTransform = false;\n let hasTransformOrigin = false;\n // Does the calculated transform essentially equal \"none\"?\n let transformIsNone = true;\n /**\n * Loop over all our latest animated values and decide whether to handle them\n * as a style or CSS variable.\n *\n * Transforms and transform origins are kept seperately for further processing.\n */\n for (const key in latestValues) {\n const value = latestValues[key];\n /**\n * If this is a CSS variable we don't do any further processing.\n */\n if (isCSSVariableName(key)) {\n vars[key] = value;\n continue;\n }\n // Convert the value to its default value type, ie 0 -> \"0px\"\n const valueType = numberValueTypes[key];\n const valueAsType = getValueAsType(value, valueType);\n if (transformProps.has(key)) {\n // If this is a transform, flag to enable further transform processing\n hasTransform = true;\n transform[key] = valueAsType;\n // If we already know we have a non-default transform, early return\n if (!transformIsNone)\n continue;\n // Otherwise check to see if this is a default transform\n if (value !== (valueType.default || 0))\n transformIsNone = false;\n }\n else if (key.startsWith(\"origin\")) {\n // If this is a transform origin, flag and enable further transform-origin processing\n hasTransformOrigin = true;\n transformOrigin[key] = valueAsType;\n }\n else {\n style[key] = valueAsType;\n }\n }\n if (!latestValues.transform) {\n if (hasTransform || transformTemplate) {\n style.transform = buildTransform(state.transform, options, transformIsNone, transformTemplate);\n }\n else if (style.transform) {\n /**\n * If we have previously created a transform but currently don't have any,\n * reset transform style to none.\n */\n style.transform = \"none\";\n }\n }\n /**\n * Build a transformOrigin style. Uses the same defaults as the browser for\n * undefined origins.\n */\n if (hasTransformOrigin) {\n const { originX = \"50%\", originY = \"50%\", originZ = 0, } = transformOrigin;\n style.transformOrigin = `${originX} ${originY} ${originZ}`;\n }\n}\n\nexport { buildHTMLStyles };\n","function renderHTML(element, { style, vars }, styleProp, projection) {\n Object.assign(element.style, style, projection && projection.getProjectionStyles(styleProp));\n // Loop over any CSS variables and assign those.\n for (const key in vars) {\n element.style.setProperty(key, vars[key]);\n }\n}\n\nexport { renderHTML };\n","import { isForcedMotionValue } from '../../../motion/utils/is-forced-motion-value.mjs';\nimport { isMotionValue } from '../../../value/utils/is-motion-value.mjs';\n\nfunction scrapeMotionValuesFromProps(props, prevProps) {\n const { style } = props;\n const newValues = {};\n for (const key in style) {\n if (isMotionValue(style[key]) ||\n (prevProps.style && isMotionValue(prevProps.style[key])) ||\n isForcedMotionValue(key, props)) {\n newValues[key] = style[key];\n }\n }\n return newValues;\n}\n\nexport { scrapeMotionValuesFromProps };\n","/**\n * Generate a list of every possible transform key.\n */\nconst transformPropOrder = [\n \"transformPerspective\",\n \"x\",\n \"y\",\n \"z\",\n \"translateX\",\n \"translateY\",\n \"translateZ\",\n \"scale\",\n \"scaleX\",\n \"scaleY\",\n \"rotate\",\n \"rotateX\",\n \"rotateY\",\n \"rotateZ\",\n \"skew\",\n \"skewX\",\n \"skewY\",\n];\n/**\n * A quick lookup for transform props.\n */\nconst transformProps = new Set(transformPropOrder);\n\nexport { transformPropOrder, transformProps };\n","const visualElementStore = new WeakMap();\n\nexport { visualElementStore };\n","import { scrapeMotionValuesFromProps } from './utils/scrape-motion-values.mjs';\nimport { DOMVisualElement } from '../dom/DOMVisualElement.mjs';\nimport { buildSVGAttrs } from './utils/build-attrs.mjs';\nimport { camelToDash } from '../dom/utils/camel-to-dash.mjs';\nimport { camelCaseAttributes } from './utils/camel-case-attrs.mjs';\nimport { transformProps } from '../html/utils/transform.mjs';\nimport { renderSVG } from './utils/render.mjs';\nimport { getDefaultValueType } from '../dom/value-types/defaults.mjs';\nimport { createBox } from '../../projection/geometry/models.mjs';\nimport { isSVGTag } from './utils/is-svg-tag.mjs';\n\nclass SVGVisualElement extends DOMVisualElement {\n constructor() {\n super(...arguments);\n this.type = \"svg\";\n this.isSVGTag = false;\n }\n getBaseTargetFromProps(props, key) {\n return props[key];\n }\n readValueFromInstance(instance, key) {\n if (transformProps.has(key)) {\n const defaultType = getDefaultValueType(key);\n return defaultType ? defaultType.default || 0 : 0;\n }\n key = !camelCaseAttributes.has(key) ? camelToDash(key) : key;\n return instance.getAttribute(key);\n }\n measureInstanceViewportBox() {\n return createBox();\n }\n scrapeMotionValuesFromProps(props, prevProps) {\n return scrapeMotionValuesFromProps(props, prevProps);\n }\n build(renderState, latestValues, options, props) {\n buildSVGAttrs(renderState, latestValues, options, this.isSVGTag, props.transformTemplate);\n }\n renderInstance(instance, renderState, styleProp, projection) {\n renderSVG(instance, renderState, styleProp, projection);\n }\n mount(instance) {\n this.isSVGTag = isSVGTag(instance.tagName);\n super.mount(instance);\n }\n}\n\nexport { SVGVisualElement };\n","import { px } from '../../../value/types/numbers/units.mjs';\n\nfunction calcOrigin(origin, offset, size) {\n return typeof origin === \"string\"\n ? origin\n : px.transform(offset + size * origin);\n}\n/**\n * The SVG transform origin defaults are different to CSS and is less intuitive,\n * so we use the measured dimensions of the SVG to reconcile these.\n */\nfunction calcSVGTransformOrigin(dimensions, originX, originY) {\n const pxOriginX = calcOrigin(originX, dimensions.x, dimensions.width);\n const pxOriginY = calcOrigin(originY, dimensions.y, dimensions.height);\n return `${pxOriginX} ${pxOriginY}`;\n}\n\nexport { calcSVGTransformOrigin };\n","import { px } from '../../../value/types/numbers/units.mjs';\n\nconst dashKeys = {\n offset: \"stroke-dashoffset\",\n array: \"stroke-dasharray\",\n};\nconst camelKeys = {\n offset: \"strokeDashoffset\",\n array: \"strokeDasharray\",\n};\n/**\n * Build SVG path properties. Uses the path's measured length to convert\n * our custom pathLength, pathSpacing and pathOffset into stroke-dashoffset\n * and stroke-dasharray attributes.\n *\n * This function is mutative to reduce per-frame GC.\n */\nfunction buildSVGPath(attrs, length, spacing = 1, offset = 0, useDashCase = true) {\n // Normalise path length by setting SVG attribute pathLength to 1\n attrs.pathLength = 1;\n // We use dash case when setting attributes directly to the DOM node and camel case\n // when defining props on a React component.\n const keys = useDashCase ? dashKeys : camelKeys;\n // Build the dash offset\n attrs[keys.offset] = px.transform(-offset);\n // Build the dash array\n const pathLength = px.transform(length);\n const pathSpacing = px.transform(spacing);\n attrs[keys.array] = `${pathLength} ${pathSpacing}`;\n}\n\nexport { buildSVGPath };\n","import { buildHTMLStyles } from '../../html/utils/build-styles.mjs';\nimport { calcSVGTransformOrigin } from './transform-origin.mjs';\nimport { buildSVGPath } from './path.mjs';\n\n/**\n * Build SVG visual attrbutes, like cx and style.transform\n */\nfunction buildSVGAttrs(state, { attrX, attrY, attrScale, originX, originY, pathLength, pathSpacing = 1, pathOffset = 0, \n// This is object creation, which we try to avoid per-frame.\n...latest }, options, isSVGTag, transformTemplate) {\n buildHTMLStyles(state, latest, options, transformTemplate);\n /**\n * For svg tags we just want to make sure viewBox is animatable and treat all the styles\n * as normal HTML tags.\n */\n if (isSVGTag) {\n if (state.style.viewBox) {\n state.attrs.viewBox = state.style.viewBox;\n }\n return;\n }\n state.attrs = state.style;\n state.style = {};\n const { attrs, style, dimensions } = state;\n /**\n * However, we apply transforms as CSS transforms. So if we detect a transform we take it from attrs\n * and copy it into style.\n */\n if (attrs.transform) {\n if (dimensions)\n style.transform = attrs.transform;\n delete attrs.transform;\n }\n // Parse transformOrigin\n if (dimensions &&\n (originX !== undefined || originY !== undefined || style.transform)) {\n style.transformOrigin = calcSVGTransformOrigin(dimensions, originX !== undefined ? originX : 0.5, originY !== undefined ? originY : 0.5);\n }\n // Render attrX/attrY/attrScale as attributes\n if (attrX !== undefined)\n attrs.x = attrX;\n if (attrY !== undefined)\n attrs.y = attrY;\n if (attrScale !== undefined)\n attrs.scale = attrScale;\n // Build SVG path if one has been defined\n if (pathLength !== undefined) {\n buildSVGPath(attrs, pathLength, pathSpacing, pathOffset, false);\n }\n}\n\nexport { buildSVGAttrs };\n","/**\n * A set of attribute names that are always read/written as camel case.\n */\nconst camelCaseAttributes = new Set([\n \"baseFrequency\",\n \"diffuseConstant\",\n \"kernelMatrix\",\n \"kernelUnitLength\",\n \"keySplines\",\n \"keyTimes\",\n \"limitingConeAngle\",\n \"markerHeight\",\n \"markerWidth\",\n \"numOctaves\",\n \"targetX\",\n \"targetY\",\n \"surfaceScale\",\n \"specularConstant\",\n \"specularExponent\",\n \"stdDeviation\",\n \"tableValues\",\n \"viewBox\",\n \"gradientTransform\",\n \"pathLength\",\n \"startOffset\",\n \"textLength\",\n \"lengthAdjust\",\n]);\n\nexport { camelCaseAttributes };\n","const isSVGTag = (tag) => typeof tag === \"string\" && tag.toLowerCase() === \"svg\";\n\nexport { isSVGTag };\n","import { camelToDash } from '../../dom/utils/camel-to-dash.mjs';\nimport { renderHTML } from '../../html/utils/render.mjs';\nimport { camelCaseAttributes } from './camel-case-attrs.mjs';\n\nfunction renderSVG(element, renderState, _styleProp, projection) {\n renderHTML(element, renderState, undefined, projection);\n for (const key in renderState.attrs) {\n element.setAttribute(!camelCaseAttributes.has(key) ? camelToDash(key) : key, renderState.attrs[key]);\n }\n}\n\nexport { renderSVG };\n","import { isMotionValue } from '../../../value/utils/is-motion-value.mjs';\nimport { scrapeMotionValuesFromProps as scrapeMotionValuesFromProps$1 } from '../../html/utils/scrape-motion-values.mjs';\nimport { transformPropOrder } from '../../html/utils/transform.mjs';\n\nfunction scrapeMotionValuesFromProps(props, prevProps) {\n const newValues = scrapeMotionValuesFromProps$1(props, prevProps);\n for (const key in props) {\n if (isMotionValue(props[key]) || isMotionValue(prevProps[key])) {\n const targetKey = transformPropOrder.indexOf(key) !== -1\n ? \"attr\" + key.charAt(0).toUpperCase() + key.substring(1)\n : key;\n newValues[targetKey] = props[key];\n }\n }\n return newValues;\n}\n\nexport { scrapeMotionValuesFromProps };\n","import { isAnimationControls } from '../../animation/utils/is-animation-controls.mjs';\nimport { isVariantLabel } from './is-variant-label.mjs';\nimport { variantProps } from './variant-props.mjs';\n\nfunction isControllingVariants(props) {\n return (isAnimationControls(props.animate) ||\n variantProps.some((name) => isVariantLabel(props[name])));\n}\nfunction isVariantNode(props) {\n return Boolean(isControllingVariants(props) || props.variants);\n}\n\nexport { isControllingVariants, isVariantNode };\n","/**\n * Decides if the supplied variable is variant label\n */\nfunction isVariantLabel(v) {\n return typeof v === \"string\" || Array.isArray(v);\n}\n\nexport { isVariantLabel };\n","import { resolveVariantFromProps } from './resolve-variants.mjs';\n\n/**\n * Creates an object containing the latest state of every MotionValue on a VisualElement\n */\nfunction getCurrent(visualElement) {\n const current = {};\n visualElement.values.forEach((value, key) => (current[key] = value.get()));\n return current;\n}\n/**\n * Creates an object containing the latest velocity of every MotionValue on a VisualElement\n */\nfunction getVelocity(visualElement) {\n const velocity = {};\n visualElement.values.forEach((value, key) => (velocity[key] = value.getVelocity()));\n return velocity;\n}\nfunction resolveVariant(visualElement, definition, custom) {\n const props = visualElement.getProps();\n return resolveVariantFromProps(props, definition, custom !== undefined ? custom : props.custom, getCurrent(visualElement), getVelocity(visualElement));\n}\n\nexport { resolveVariant };\n","function resolveVariantFromProps(props, definition, custom, currentValues = {}, currentVelocity = {}) {\n /**\n * If the variant definition is a function, resolve.\n */\n if (typeof definition === \"function\") {\n definition = definition(custom !== undefined ? custom : props.custom, currentValues, currentVelocity);\n }\n /**\n * If the variant definition is a variant label, or\n * the function returned a variant label, resolve.\n */\n if (typeof definition === \"string\") {\n definition = props.variants && props.variants[definition];\n }\n /**\n * At this point we've resolved both functions and variant labels,\n * but the resolved variant label might itself have been a function.\n * If so, resolve. This can only have returned a valid target object.\n */\n if (typeof definition === \"function\") {\n definition = definition(custom !== undefined ? custom : props.custom, currentValues, currentVelocity);\n }\n return definition;\n}\n\nexport { resolveVariantFromProps };\n","import { color } from '../../../value/types/color/index.mjs';\nimport { complex } from '../../../value/types/complex/index.mjs';\nimport { dimensionValueTypes } from './dimensions.mjs';\nimport { testValueType } from './test.mjs';\n\n/**\n * A list of all ValueTypes\n */\nconst valueTypes = [...dimensionValueTypes, color, complex];\n/**\n * Tests a value against the list of ValueTypes\n */\nconst findValueType = (v) => valueTypes.find(testValueType(v));\n\nexport { findValueType };\n","import { isNumericalString } from '../../utils/is-numerical-string.mjs';\nimport { isZeroValueString } from '../../utils/is-zero-value-string.mjs';\nimport { resolveFinalValueInKeyframes } from '../../utils/resolve-value.mjs';\nimport { motionValue } from '../../value/index.mjs';\nimport { complex } from '../../value/types/complex/index.mjs';\nimport { getAnimatableNone } from '../dom/value-types/animatable-none.mjs';\nimport { findValueType } from '../dom/value-types/find.mjs';\nimport { resolveVariant } from './resolve-dynamic-variants.mjs';\n\n/**\n * Set VisualElement's MotionValue, creating a new MotionValue for it if\n * it doesn't exist.\n */\nfunction setMotionValue(visualElement, key, value) {\n if (visualElement.hasValue(key)) {\n visualElement.getValue(key).set(value);\n }\n else {\n visualElement.addValue(key, motionValue(value));\n }\n}\nfunction setTarget(visualElement, definition) {\n const resolved = resolveVariant(visualElement, definition);\n let { transitionEnd = {}, transition = {}, ...target } = resolved ? visualElement.makeTargetAnimatable(resolved, false) : {};\n target = { ...target, ...transitionEnd };\n for (const key in target) {\n const value = resolveFinalValueInKeyframes(target[key]);\n setMotionValue(visualElement, key, value);\n }\n}\nfunction setVariants(visualElement, variantLabels) {\n const reversedLabels = [...variantLabels].reverse();\n reversedLabels.forEach((key) => {\n const variant = visualElement.getVariant(key);\n variant && setTarget(visualElement, variant);\n if (visualElement.variantChildren) {\n visualElement.variantChildren.forEach((child) => {\n setVariants(child, variantLabels);\n });\n }\n });\n}\nfunction setValues(visualElement, definition) {\n if (Array.isArray(definition)) {\n return setVariants(visualElement, definition);\n }\n else if (typeof definition === \"string\") {\n return setVariants(visualElement, [definition]);\n }\n else {\n setTarget(visualElement, definition);\n }\n}\nfunction checkTargetForNewValues(visualElement, target, origin) {\n var _a, _b;\n const newValueKeys = Object.keys(target).filter((key) => !visualElement.hasValue(key));\n const numNewValues = newValueKeys.length;\n if (!numNewValues)\n return;\n for (let i = 0; i < numNewValues; i++) {\n const key = newValueKeys[i];\n const targetValue = target[key];\n let value = null;\n /**\n * If the target is a series of keyframes, we can use the first value\n * in the array. If this first value is null, we'll still need to read from the DOM.\n */\n if (Array.isArray(targetValue)) {\n value = targetValue[0];\n }\n /**\n * If the target isn't keyframes, or the first keyframe was null, we need to\n * first check if an origin value was explicitly defined in the transition as \"from\",\n * if not read the value from the DOM. As an absolute fallback, take the defined target value.\n */\n if (value === null) {\n value = (_b = (_a = origin[key]) !== null && _a !== void 0 ? _a : visualElement.readValue(key)) !== null && _b !== void 0 ? _b : target[key];\n }\n /**\n * If value is still undefined or null, ignore it. Preferably this would throw,\n * but this was causing issues in Framer.\n */\n if (value === undefined || value === null)\n continue;\n if (typeof value === \"string\" &&\n (isNumericalString(value) || isZeroValueString(value))) {\n // If this is a number read as a string, ie \"0\" or \"200\", convert it to a number\n value = parseFloat(value);\n }\n else if (!findValueType(value) && complex.test(targetValue)) {\n value = getAnimatableNone(key, targetValue);\n }\n visualElement.addValue(key, motionValue(value, { owner: visualElement }));\n if (origin[key] === undefined) {\n origin[key] = value;\n }\n if (value !== null)\n visualElement.setBaseTarget(key, value);\n }\n}\nfunction getOriginFromTransition(key, transition) {\n if (!transition)\n return;\n const valueTransition = transition[key] || transition[\"default\"] || transition;\n return valueTransition.from;\n}\nfunction getOrigin(target, transition, visualElement) {\n const origin = {};\n for (const key in target) {\n const transitionOrigin = getOriginFromTransition(key, transition);\n if (transitionOrigin !== undefined) {\n origin[key] = transitionOrigin;\n }\n else {\n const value = visualElement.getValue(key);\n if (value) {\n origin[key] = value.get();\n }\n }\n }\n return origin;\n}\n\nexport { checkTargetForNewValues, getOrigin, getOriginFromTransition, setTarget, setValues };\n","const variantPriorityOrder = [\n \"animate\",\n \"whileInView\",\n \"whileFocus\",\n \"whileHover\",\n \"whileTap\",\n \"whileDrag\",\n \"exit\",\n];\nconst variantProps = [\"initial\", ...variantPriorityOrder];\n\nexport { variantPriorityOrder, variantProps };\n","function addUniqueItem(arr, item) {\n if (arr.indexOf(item) === -1)\n arr.push(item);\n}\nfunction removeItem(arr, item) {\n const index = arr.indexOf(item);\n if (index > -1)\n arr.splice(index, 1);\n}\n// Adapted from array-move\nfunction moveItem([...arr], fromIndex, toIndex) {\n const startIndex = fromIndex < 0 ? arr.length + fromIndex : fromIndex;\n if (startIndex >= 0 && startIndex < arr.length) {\n const endIndex = toIndex < 0 ? arr.length + toIndex : toIndex;\n const [item] = arr.splice(fromIndex, 1);\n arr.splice(endIndex, 0, item);\n }\n return arr;\n}\n\nexport { addUniqueItem, moveItem, removeItem };\n","const clamp = (min, max, v) => Math.min(Math.max(v, min), max);\n\nexport { clamp };\n","import { noop } from './noop.mjs';\n\nlet warning = noop;\nlet invariant = noop;\nif (process.env.NODE_ENV !== \"production\") {\n warning = (check, message) => {\n if (!check && typeof console !== \"undefined\") {\n console.warn(message);\n }\n };\n invariant = (check, message) => {\n if (!check) {\n throw new Error(message);\n }\n };\n}\n\nexport { invariant, warning };\n","// Adapted from https://gist.github.com/mjackson/5311256\nfunction hueToRgb(p, q, t) {\n if (t < 0)\n t += 1;\n if (t > 1)\n t -= 1;\n if (t < 1 / 6)\n return p + (q - p) * 6 * t;\n if (t < 1 / 2)\n return q;\n if (t < 2 / 3)\n return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n}\nfunction hslaToRgba({ hue, saturation, lightness, alpha }) {\n hue /= 360;\n saturation /= 100;\n lightness /= 100;\n let red = 0;\n let green = 0;\n let blue = 0;\n if (!saturation) {\n red = green = blue = lightness;\n }\n else {\n const q = lightness < 0.5\n ? lightness * (1 + saturation)\n : lightness + saturation - lightness * saturation;\n const p = 2 * lightness - q;\n red = hueToRgb(p, q, hue + 1 / 3);\n green = hueToRgb(p, q, hue);\n blue = hueToRgb(p, q, hue - 1 / 3);\n }\n return {\n red: Math.round(red * 255),\n green: Math.round(green * 255),\n blue: Math.round(blue * 255),\n alpha,\n };\n}\n\nexport { hslaToRgba };\n","import { mix } from './mix.mjs';\nimport { invariant } from './errors.mjs';\nimport { hslaToRgba } from './hsla-to-rgba.mjs';\nimport { hex } from '../value/types/color/hex.mjs';\nimport { rgba } from '../value/types/color/rgba.mjs';\nimport { hsla } from '../value/types/color/hsla.mjs';\n\n// Linear color space blending\n// Explained https://www.youtube.com/watch?v=LKnqECcg6Gw\n// Demonstrated http://codepen.io/osublake/pen/xGVVaN\nconst mixLinearColor = (from, to, v) => {\n const fromExpo = from * from;\n return Math.sqrt(Math.max(0, v * (to * to - fromExpo) + fromExpo));\n};\nconst colorTypes = [hex, rgba, hsla];\nconst getColorType = (v) => colorTypes.find((type) => type.test(v));\nfunction asRGBA(color) {\n const type = getColorType(color);\n invariant(Boolean(type), `'${color}' is not an animatable color. Use the equivalent color code instead.`);\n let model = type.parse(color);\n if (type === hsla) {\n // TODO Remove this cast - needed since Framer Motion's stricter typing\n model = hslaToRgba(model);\n }\n return model;\n}\nconst mixColor = (from, to) => {\n const fromRGBA = asRGBA(from);\n const toRGBA = asRGBA(to);\n const blended = { ...fromRGBA };\n return (v) => {\n blended.red = mixLinearColor(fromRGBA.red, toRGBA.red, v);\n blended.green = mixLinearColor(fromRGBA.green, toRGBA.green, v);\n blended.blue = mixLinearColor(fromRGBA.blue, toRGBA.blue, v);\n blended.alpha = mix(fromRGBA.alpha, toRGBA.alpha, v);\n return rgba.transform(blended);\n };\n};\n\nexport { mixColor, mixLinearColor };\n","import { mix } from './mix.mjs';\nimport { mixColor } from './mix-color.mjs';\nimport { pipe } from './pipe.mjs';\nimport { warning } from './errors.mjs';\nimport { color } from '../value/types/color/index.mjs';\nimport { complex, analyseComplexValue } from '../value/types/complex/index.mjs';\n\nconst mixImmediate = (origin, target) => (p) => `${p > 0 ? target : origin}`;\nfunction getMixer(origin, target) {\n if (typeof origin === \"number\") {\n return (v) => mix(origin, target, v);\n }\n else if (color.test(origin)) {\n return mixColor(origin, target);\n }\n else {\n return origin.startsWith(\"var(\")\n ? mixImmediate(origin, target)\n : mixComplex(origin, target);\n }\n}\nconst mixArray = (from, to) => {\n const output = [...from];\n const numValues = output.length;\n const blendValue = from.map((fromThis, i) => getMixer(fromThis, to[i]));\n return (v) => {\n for (let i = 0; i < numValues; i++) {\n output[i] = blendValue[i](v);\n }\n return output;\n };\n};\nconst mixObject = (origin, target) => {\n const output = { ...origin, ...target };\n const blendValue = {};\n for (const key in output) {\n if (origin[key] !== undefined && target[key] !== undefined) {\n blendValue[key] = getMixer(origin[key], target[key]);\n }\n }\n return (v) => {\n for (const key in blendValue) {\n output[key] = blendValue[key](v);\n }\n return output;\n };\n};\nconst mixComplex = (origin, target) => {\n const template = complex.createTransformer(target);\n const originStats = analyseComplexValue(origin);\n const targetStats = analyseComplexValue(target);\n const canInterpolate = originStats.numVars === targetStats.numVars &&\n originStats.numColors === targetStats.numColors &&\n originStats.numNumbers >= targetStats.numNumbers;\n if (canInterpolate) {\n return pipe(mixArray(originStats.values, targetStats.values), template);\n }\n else {\n warning(true, `Complex values '${origin}' and '${target}' too different to mix. Ensure all colors are of the same type, and that each contains the same quantity of number and color values. Falling back to instant transition.`);\n return mixImmediate(origin, target);\n }\n};\n\nexport { mixArray, mixComplex, mixObject };\n","import { invariant } from './errors.mjs';\nimport { color } from '../value/types/color/index.mjs';\nimport { clamp } from './clamp.mjs';\nimport { mix } from './mix.mjs';\nimport { mixColor } from './mix-color.mjs';\nimport { mixComplex, mixArray, mixObject } from './mix-complex.mjs';\nimport { pipe } from './pipe.mjs';\nimport { progress } from './progress.mjs';\nimport { noop } from './noop.mjs';\n\nconst mixNumber = (from, to) => (p) => mix(from, to, p);\nfunction detectMixerFactory(v) {\n if (typeof v === \"number\") {\n return mixNumber;\n }\n else if (typeof v === \"string\") {\n return color.test(v) ? mixColor : mixComplex;\n }\n else if (Array.isArray(v)) {\n return mixArray;\n }\n else if (typeof v === \"object\") {\n return mixObject;\n }\n return mixNumber;\n}\nfunction createMixers(output, ease, customMixer) {\n const mixers = [];\n const mixerFactory = customMixer || detectMixerFactory(output[0]);\n const numMixers = output.length - 1;\n for (let i = 0; i < numMixers; i++) {\n let mixer = mixerFactory(output[i], output[i + 1]);\n if (ease) {\n const easingFunction = Array.isArray(ease) ? ease[i] || noop : ease;\n mixer = pipe(easingFunction, mixer);\n }\n mixers.push(mixer);\n }\n return mixers;\n}\n/**\n * Create a function that maps from a numerical input array to a generic output array.\n *\n * Accepts:\n * - Numbers\n * - Colors (hex, hsl, hsla, rgb, rgba)\n * - Complex (combinations of one or more numbers or strings)\n *\n * ```jsx\n * const mixColor = interpolate([0, 1], ['#fff', '#000'])\n *\n * mixColor(0.5) // 'rgba(128, 128, 128, 1)'\n * ```\n *\n * TODO Revist this approach once we've moved to data models for values,\n * probably not needed to pregenerate mixer functions.\n *\n * @public\n */\nfunction interpolate(input, output, { clamp: isClamp = true, ease, mixer } = {}) {\n const inputLength = input.length;\n invariant(inputLength === output.length, \"Both input and output ranges must be the same length\");\n /**\n * If we're only provided a single input, we can just make a function\n * that returns the output.\n */\n if (inputLength === 1)\n return () => output[0];\n // If input runs highest -> lowest, reverse both arrays\n if (input[0] > input[inputLength - 1]) {\n input = [...input].reverse();\n output = [...output].reverse();\n }\n const mixers = createMixers(output, ease, mixer);\n const numMixers = mixers.length;\n const interpolator = (v) => {\n let i = 0;\n if (numMixers > 1) {\n for (; i < input.length - 2; i++) {\n if (v < input[i + 1])\n break;\n }\n }\n const progressInRange = progress(input[i], input[i + 1], v);\n return mixers[i](progressInRange);\n };\n return isClamp\n ? (v) => interpolator(clamp(input[0], input[inputLength - 1], v))\n : interpolator;\n}\n\nexport { interpolate };\n","const isBrowser = typeof document !== \"undefined\";\n\nexport { isBrowser };\n","/**\n * Check if value is a numerical string, ie a string that is purely a number eg \"100\" or \"-100.1\"\n */\nconst isNumericalString = (v) => /^\\-?\\d*\\.?\\d+$/.test(v);\n\nexport { isNumericalString };\n","function isRefObject(ref) {\n return (ref &&\n typeof ref === \"object\" &&\n Object.prototype.hasOwnProperty.call(ref, \"current\"));\n}\n\nexport { isRefObject };\n","/**\n * Check if the value is a zero value string like \"0px\" or \"0%\"\n */\nconst isZeroValueString = (v) => /^0[^.\\s]+$/.test(v);\n\nexport { isZeroValueString };\n","function memo(callback) {\n let result;\n return () => {\n if (result === undefined)\n result = callback();\n return result;\n };\n}\n\nexport { memo };\n","/*\n Value in range from progress\n\n Given a lower limit and an upper limit, we return the value within\n that range as expressed by progress (usually a number from 0 to 1)\n\n So progress = 0.5 would change\n\n from -------- to\n\n to\n\n from ---- to\n\n E.g. from = 10, to = 20, progress = 0.5 => 15\n\n @param [number]: Lower limit of range\n @param [number]: Upper limit of range\n @param [number]: The progress between lower and upper limits expressed 0-1\n @return [number]: Value as calculated from progress within range (not limited within range)\n*/\nconst mix = (from, to, progress) => -progress * from + progress * to + from;\n\nexport { mix };\n","const noop = (any) => any;\n\nexport { noop };\n","import { fillOffset } from './fill.mjs';\n\nfunction defaultOffset(arr) {\n const offset = [0];\n fillOffset(offset, arr.length - 1);\n return offset;\n}\n\nexport { defaultOffset };\n","import { mix } from '../mix.mjs';\nimport { progress } from '../progress.mjs';\n\nfunction fillOffset(offset, remaining) {\n const min = offset[offset.length - 1];\n for (let i = 1; i <= remaining; i++) {\n const offsetProgress = progress(0, remaining, i);\n offset.push(mix(min, 1, offsetProgress));\n }\n}\n\nexport { fillOffset };\n","/**\n * Pipe\n * Compose other transformers to run linearily\n * pipe(min(20), max(40))\n * @param {...functions} transformers\n * @return {function}\n */\nconst combineFunctions = (a, b) => (v) => b(a(v));\nconst pipe = (...transformers) => transformers.reduce(combineFunctions);\n\nexport { pipe };\n","/*\n Progress within given range\n\n Given a lower limit and an upper limit, we return the progress\n (expressed as a number 0-1) represented by the given value, and\n limit that progress to within 0-1.\n\n @param [number]: Lower limit\n @param [number]: Upper limit\n @param [number]: Value to find progress within given range\n @return [number]: Progress of value within range as expressed 0-1\n*/\nconst progress = (from, to, value) => {\n const toFromDifference = to - from;\n return toFromDifference === 0 ? 1 : (value - from) / toFromDifference;\n};\n\nexport { progress };\n","import { isKeyframesTarget } from '../animation/utils/is-keyframes-target.mjs';\n\nconst isCustomValue = (v) => {\n return Boolean(v && typeof v === \"object\" && v.mix && v.toValue);\n};\nconst resolveFinalValueInKeyframes = (v) => {\n // TODO maybe throw if v.length - 1 is placeholder token?\n return isKeyframesTarget(v) ? v[v.length - 1] || 0 : v;\n};\n\nexport { isCustomValue, resolveFinalValueInKeyframes };\n","import { addUniqueItem, removeItem } from './array.mjs';\n\nclass SubscriptionManager {\n constructor() {\n this.subscriptions = [];\n }\n add(handler) {\n addUniqueItem(this.subscriptions, handler);\n return () => removeItem(this.subscriptions, handler);\n }\n notify(a, b, c) {\n const numSubscriptions = this.subscriptions.length;\n if (!numSubscriptions)\n return;\n if (numSubscriptions === 1) {\n /**\n * If there's only a single handler we can just call it without invoking a loop.\n */\n this.subscriptions[0](a, b, c);\n }\n else {\n for (let i = 0; i < numSubscriptions; i++) {\n /**\n * Check whether the handler exists before firing as it's possible\n * the subscriptions were modified during this loop running.\n */\n const handler = this.subscriptions[i];\n handler && handler(a, b, c);\n }\n }\n }\n getSize() {\n return this.subscriptions.length;\n }\n clear() {\n this.subscriptions.length = 0;\n }\n}\n\nexport { SubscriptionManager };\n","/**\n * Converts seconds to milliseconds\n *\n * @param seconds - Time in seconds.\n * @return milliseconds - Converted time in milliseconds.\n */\nconst secondsToMilliseconds = (seconds) => seconds * 1000;\nconst millisecondsToSeconds = (milliseconds) => milliseconds / 1000;\n\nexport { millisecondsToSeconds, secondsToMilliseconds };\n","import { useRef } from 'react';\n\n/**\n * Creates a constant value over the lifecycle of a component.\n *\n * Even if `useMemo` is provided an empty array as its final argument, it doesn't offer\n * a guarantee that it won't re-run for performance reasons later on. By using `useConstant`\n * you can ensure that initialisers don't execute twice or more.\n */\nfunction useConstant(init) {\n const ref = useRef(null);\n if (ref.current === null) {\n ref.current = init();\n }\n return ref.current;\n}\n\nexport { useConstant };\n","import { useLayoutEffect, useEffect } from 'react';\nimport { isBrowser } from './is-browser.mjs';\n\nconst useIsomorphicLayoutEffect = isBrowser ? useLayoutEffect : useEffect;\n\nexport { useIsomorphicLayoutEffect };\n","/*\n Convert velocity into velocity per second\n\n @param [number]: Unit per frame\n @param [number]: Frame duration in ms\n*/\nfunction velocityPerSecond(velocity, frameDuration) {\n return frameDuration ? velocity * (1000 / frameDuration) : 0;\n}\n\nexport { velocityPerSecond };\n","import { SubscriptionManager } from '../utils/subscription-manager.mjs';\nimport { velocityPerSecond } from '../utils/velocity-per-second.mjs';\nimport { warnOnce } from '../utils/warn-once.mjs';\nimport { frame, frameData } from '../frameloop/frame.mjs';\n\nconst isFloat = (value) => {\n return !isNaN(parseFloat(value));\n};\nconst collectMotionValues = {\n current: undefined,\n};\n/**\n * `MotionValue` is used to track the state and velocity of motion values.\n *\n * @public\n */\nclass MotionValue {\n /**\n * @param init - The initiating value\n * @param config - Optional configuration options\n *\n * - `transformer`: A function to transform incoming values with.\n *\n * @internal\n */\n constructor(init, options = {}) {\n /**\n * This will be replaced by the build step with the latest version number.\n * When MotionValues are provided to motion components, warn if versions are mixed.\n */\n this.version = \"10.18.0\";\n /**\n * Duration, in milliseconds, since last updating frame.\n *\n * @internal\n */\n this.timeDelta = 0;\n /**\n * Timestamp of the last time this `MotionValue` was updated.\n *\n * @internal\n */\n this.lastUpdated = 0;\n /**\n * Tracks whether this value can output a velocity. Currently this is only true\n * if the value is numerical, but we might be able to widen the scope here and support\n * other value types.\n *\n * @internal\n */\n this.canTrackVelocity = false;\n /**\n * An object containing a SubscriptionManager for each active event.\n */\n this.events = {};\n this.updateAndNotify = (v, render = true) => {\n this.prev = this.current;\n this.current = v;\n // Update timestamp\n const { delta, timestamp } = frameData;\n if (this.lastUpdated !== timestamp) {\n this.timeDelta = delta;\n this.lastUpdated = timestamp;\n frame.postRender(this.scheduleVelocityCheck);\n }\n // Update update subscribers\n if (this.prev !== this.current && this.events.change) {\n this.events.change.notify(this.current);\n }\n // Update velocity subscribers\n if (this.events.velocityChange) {\n this.events.velocityChange.notify(this.getVelocity());\n }\n // Update render subscribers\n if (render && this.events.renderRequest) {\n this.events.renderRequest.notify(this.current);\n }\n };\n /**\n * Schedule a velocity check for the next frame.\n *\n * This is an instanced and bound function to prevent generating a new\n * function once per frame.\n *\n * @internal\n */\n this.scheduleVelocityCheck = () => frame.postRender(this.velocityCheck);\n /**\n * Updates `prev` with `current` if the value hasn't been updated this frame.\n * This ensures velocity calculations return `0`.\n *\n * This is an instanced and bound function to prevent generating a new\n * function once per frame.\n *\n * @internal\n */\n this.velocityCheck = ({ timestamp }) => {\n if (timestamp !== this.lastUpdated) {\n this.prev = this.current;\n if (this.events.velocityChange) {\n this.events.velocityChange.notify(this.getVelocity());\n }\n }\n };\n this.hasAnimated = false;\n this.prev = this.current = init;\n this.canTrackVelocity = isFloat(this.current);\n this.owner = options.owner;\n }\n /**\n * Adds a function that will be notified when the `MotionValue` is updated.\n *\n * It returns a function that, when called, will cancel the subscription.\n *\n * When calling `onChange` inside a React component, it should be wrapped with the\n * `useEffect` hook. As it returns an unsubscribe function, this should be returned\n * from the `useEffect` function to ensure you don't add duplicate subscribers..\n *\n * ```jsx\n * export const MyComponent = () => {\n * const x = useMotionValue(0)\n * const y = useMotionValue(0)\n * const opacity = useMotionValue(1)\n *\n * useEffect(() => {\n * function updateOpacity() {\n * const maxXY = Math.max(x.get(), y.get())\n * const newOpacity = transform(maxXY, [0, 100], [1, 0])\n * opacity.set(newOpacity)\n * }\n *\n * const unsubscribeX = x.on(\"change\", updateOpacity)\n * const unsubscribeY = y.on(\"change\", updateOpacity)\n *\n * return () => {\n * unsubscribeX()\n * unsubscribeY()\n * }\n * }, [])\n *\n * return