{"version":3,"file":"791-f9b886a9a75928e1c1c9.digested.js","mappings":"0FAAA;AACA;AACA;AACA;AACA;AAo0BA,SAASA,EAAeC,EAAS,CAC7B,OAAO,IAAID,EAAc,OAAQC,CAAQ,CAC7C,EAEC,SAAUC,EAAG,CAaVA,EAAE,QAAU,CACR,WAAY,QACZ,MAAO,SAAS,IAAK,EAAE,EACvB,MAAO,SAAS,IAAK,EAAE,EACvB,SAAU,SAAS,IAAK,EAAE,CAC9B,EAQA,IAAIC,EAAa,CACT,mBAA0B,UAC1B,kBAA0B,SAC1B,kBAA0B,SAC1B,oBAA0B,WAC1B,yBAA0B,WAC1B,mBAA0B,UAC1B,iBAA0B,QAC1B,gBAA0B,OAC1B,kBAA0B,SAC1B,kBAA0B,QAC9B,EAEAC,EAAc,OAAO,UAAU,SAC/BC,EAAc,OAAO,UAAU,eAQnCH,EAAE,WAAa,SAAUI,EAAM,CAC3B,OAAOJ,EAAE,KAAKI,CAAG,IAAM,UAC3B,EAQAJ,EAAE,QAAU,MAAM,SAAW,SAAUI,EAAM,CACzC,OAAOJ,EAAE,KAAKI,CAAG,IAAM,OAC3B,EAUAJ,EAAE,SAAW,SAAUI,EAAM,CACzB,OAAOA,GAAO,OAAOA,GAAQ,UAAY,gBAAiBA,CAC9D,EASAJ,EAAE,KAAO,SAAUI,EAAM,CACrB,OAASA,GAAQ,KACb,OAAQA,CAAI,EACZH,EAAYC,EAAS,KAAKE,CAAG,CAAE,GAAK,QAC5C,EASAJ,EAAE,cAAgB,SAAUI,EAAM,CAS9B,GALK,CAACA,GAAON,EAAc,KAAKM,CAAG,IAAM,UAAYA,EAAI,UAAYJ,EAAE,SAAUI,CAAI,GAKhFA,EAAI,aACL,CAACD,EAAO,KAAKC,EAAK,aAAa,GAC/B,CAACD,EAAO,KAAKC,EAAI,YAAY,UAAW,eAAe,EACvD,MAAO,GAMX,IAAIC,EACJ,QAASC,KAAOF,EACZC,EAAUC,EAGd,OAAOD,IAAY,QAAaF,EAAO,KAAMC,EAAKC,CAAQ,CAC9D,EASAL,EAAE,cAAgB,SAAUI,EAAM,CAC9B,QAAUG,KAAQH,EACd,MAAO,GAEX,MAAO,EACX,EAOAJ,EAAE,aAAe,SAASI,EAAK,CAC3B,OAAI,OAAO,OACPJ,EAAE,aAAe,OAAO,OAExBA,EAAE,aAAe,SAASI,EAAK,CAC3B,OAAOA,CACX,EAEGJ,EAAE,aAAaI,CAAG,CAC7B,EAOAJ,EAAE,eAAkB,UAAY,CAC5B,IAAIQ,EAAgB,SAAS,cAAe,QAAS,EACrD,MAAO,CAAC,EAAGR,EAAE,WAAYQ,EAAc,UAAW,GACtCA,EAAc,WAAY,IAAK,EAC/C,EAAE,EAOFR,EAAE,gBAAkB,SAASS,EAAQ,CACjC,IAAIC,EAAY,GAChB,GAAI,CAGAD,EAAO,WAAW,IAAI,EAAE,aAAa,EAAG,EAAG,EAAG,CAAC,CACnD,OAASE,EAAG,CACRD,EAAY,EAChB,CACA,OAAOA,CACX,EAOAV,EAAE,yBAA4B,UAAY,CACtC,MAAO,CAAC,EAAE,SAAS,gBAAgB,kBAAoB,SAAS,iBACpE,EAAE,EAOFA,EAAE,4BAA+B,UAAY,CACzC,MAAO,CAAC,EAAE,SAAS,gBAAgB,qBAAuB,SAAS,oBACvE,EAAE,EAOFA,EAAE,6BAAgC,UAAY,CAC1C,IAAIY,EAAY,EAEhB,GAAKZ,EAAE,yBACH,GAAI,CACA,IAAID,EAAU,CACV,IAAI,SAAU,CACV,OAAAa,IACO,EACX,EACA,IAAI,MAAO,CACP,OAAAA,IACO,EACX,EACA,IAAI,SAAU,CACV,OAAAA,IACO,EACX,CACJ,EACA,OAAO,iBAAiB,OAAQ,KAAMb,CAAO,EAC7C,OAAO,oBAAoB,OAAQ,KAAMA,CAAO,CACpD,OAAUY,EAAI,CACVC,EAAY,CAChB,CAGJ,OAAOA,GAAa,CACxB,EAAE,EASFZ,EAAE,4BAA8B,UAAW,CACvC,GAAKA,EAAE,eAAiB,CACpB,IAAIa,EAAU,SAAS,cAAc,QAAQ,EAAE,WAAW,IAAI,EAC1DC,EAAmB,OAAO,kBAAoB,EAC9CC,EAAoBF,EAAQ,8BACRA,EAAQ,2BACRA,EAAQ,0BACRA,EAAQ,yBACRA,EAAQ,wBAA0B,EAC1D,OAAO,KAAK,IAAIC,EAAkB,CAAC,EAAIC,CAC3C,KACI,OAAO,EAEf,EAQAf,EAAE,kBAAoBA,EAAE,4BAA4B,CAExD,GAAGF,CAAc,EAchB,SAAUE,EAAG,CAQVA,EAAE,OAAS,UAAW,CAClB,IAAID,EACAQ,EACAS,EACAC,EACAC,EACAC,EACAC,EAAU,UAAW,CAAE,GAAK,CAAC,EAC7BC,EAAU,UAAU,OACpBC,EAAU,GACVC,EAAU,EAqBd,IAlBK,OAAOH,GAAW,YACnBE,EAAUF,EACVA,EAAU,UAAW,CAAE,GAAK,CAAC,EAE7BG,EAAI,GAIH,OAAOH,GAAW,UAAY,CAACtB,EAAc,WAAYsB,CAAO,IACjEA,EAAS,CAAC,GAITC,IAAWE,IACZH,EAAS,KACT,EAAEG,GAGEA,EAAIF,EAAQE,IAGhB,GADAxB,EAAU,UAAWwB,CAAE,EAClBxB,IAAY,MAAQA,IAAY,OAEjC,IAAMQ,KAAQR,EAAU,CACpB,IAAIyB,EAAa,OAAO,yBAAyBzB,EAASQ,CAAI,EAE9D,GAAIiB,IAAe,OAAW,CAC1B,GAAIA,EAAW,KAAOA,EAAW,IAAK,CAClC,OAAO,eAAeJ,EAAQb,EAAMiB,CAAU,EAC9C,QACJ,CAEAP,EAAOO,EAAW,KACtB,KAAO,CACHxB,EAAE,QAAQ,KAAK,sCAAwCO,EAAO,IAAI,EAClE,QACJ,CAGKa,IAAWH,IAKXK,GAAQL,IAAUnB,EAAc,cAAemB,CAAK,IAAOC,EAAcpB,EAAc,QAASmB,CAAK,KACtGD,EAAMI,EAAQb,CAAK,EAEdW,GACDA,EAAc,GACdC,EAAQH,GAAOlB,EAAc,QAASkB,CAAI,EAAIA,EAAM,CAAC,GAGrDG,EAAQH,GAAOlB,EAAc,cAAekB,CAAI,EAAIA,EAAM,CAAC,EAI/DI,EAAQb,CAAK,EAAIT,EAAc,OAAQwB,EAAMH,EAAOF,CAAK,GAGjDA,IAAS,SACjBG,EAAQb,CAAK,EAAIU,GAEzB,CAKR,OAAOG,CACX,EAEA,IAAIK,EAAc,UAAY,CAC1B,GAAI,OAAO,WAAc,SACrB,MAAO,GAEX,IAAIC,EAAY,UAAU,UAC1B,OAAI,OAAOA,GAAc,SACd,GAEJA,EAAU,QAAQ,QAAQ,IAAM,IAChCA,EAAU,QAAQ,MAAM,IAAM,IAC9BA,EAAU,QAAQ,MAAM,IAAM,EACzC,EAEA1B,EAAE,OAAQA,EAA8B,CAMpC,iBAAkB,CAEd,QAAwB,KACxB,YAAwB,KACxB,SAAwB,KACxB,YAAwB,EACxB,kBAAwB,GACxB,oBAAwB,GACxB,kBAAwB,GACxB,YAAwB,CAAC,EACzB,qBAAwB,GAGxB,cAAwB,GACxB,YAAwB,GACxB,mBAAwB,GACxB,eAAwB,GACxB,aAAwB,GACxB,gBAAwB,GACxB,cAAwB,GACxB,iBAAwB,EACxB,aAAwB,KACxB,aAAwB,KACxB,gBAAwB,GAGxB,mBAAwB,IACxB,mBAAwB,EACxB,sBAAwB,IACxB,sBAAwB,GACxB,gBAAwB,IACxB,cAAwB,IACxB,qBAAwB,CACpB,UAAW,GACX,aAAc,GACd,YAAa,GACb,eAAgB,GAChB,mBAAoB,GACpB,YAAa,GACb,eAAgB,GAChB,aAAc,GACd,cAAe,IACf,cAAe,IACf,YAAa,EACjB,EACA,qBAAwB,CACpB,UAAW,GACX,aAAc,GACd,YAAa,GACb,eAAgB,GAChB,mBAAoB,GACpB,YAAa,GACb,eAAgB,GAChB,aAAc,GACd,cAAe,IACf,cAAe,IACf,YAAa,EACjB,EACA,mBAAwB,CACpB,UAAW,GACX,aAAc,GACd,YAAa,GACb,eAAgB,GAChB,mBAAoB,GACpB,YAAa,GACb,eAAgB,GAChB,aAAc,GACd,cAAe,IACf,cAAe,IACf,YAAa,EACjB,EACA,uBAAwB,CACpB,UAAW,GACX,aAAc,GACd,YAAa,GACb,eAAgB,GAChB,mBAAoB,GACpB,YAAa,GACb,eAAgB,GAChB,aAAc,GACd,cAAe,IACf,cAAe,IACf,YAAa,EACjB,EACA,aAAwB,EACxB,cAAwB,IACxB,oBAAwB,IACxB,cAAwB,EACxB,UAAwB,EACxB,YAAwB,GACxB,iBAAwB,GACxB,gBAAwB,GACxB,kBAAwB,GACxB,kBAAwB,IACxB,uBAAwB,IACxB,UAAwByB,EAAY,EACpC,mBAAwB,GACxB,oBAAwB,GACxB,WAAwB,GACxB,0BAA2B,GAC3B,mBAAwB,GACxB,kBAAwB,GACxB,iBAAwB,EAGxB,oBAAyB,GACzB,sBAAyB,KACzB,iBAAyB,GACzB,iBAAyB,GACzB,gBAAyB,GACzB,sBAAyB,GACzB,wBAAyB,KACzB,gBAAyB,GACzB,gBAAyB,GACzB,oBAAyB,GACzB,oBAAyB,GACzB,gBAAyB,GACzB,kBAAyB,IACzB,mBAAyB,KACzB,gBAAyB,GAGzB,cAA4B,GAC5B,iBAA4B,KAC5B,YAA4B,KAC5B,kBAA4B,KAC5B,mBAA4B,GAC5B,2BAA4B,GAC5B,aAA4B,KAC5B,cAA4B,KAC5B,gBAA4B,KAC5B,eAA4B,KAC5B,oBAA4B,GAC5B,kBAA4B,GAC5B,gBAA4B,GAC5B,oBAA4B,OAC5B,iBAA4B,GAC5B,qBAA4B,OAC5B,4BAA6B,OAG7B,QAA4B,EAG5B,QAAkC,GAClC,gCAAkC,GAGlC,QAAmC,EACnC,mBAAmC,KAGnC,OAAmC,CAAC,QAAS,SAAU,MAAM,EAE7D,cAAe,CACX,MAAO,CAEP,EACA,OAAQ,CAER,EACA,KAAM,CAEN,EACA,OAAQ,CAER,CACJ,EAGA,QAAmC,GACnC,sBAAmC,GACnC,qBAAmC,KACnC,gCAAmC,KAGnC,mBAA6B,GAC7B,qBAA4B,aAC5B,sBAA6B,KAC7B,qBAA6B,KAC7B,oBAA6B,KAC7B,uBAA6B,cAC7B,wBAA6B,GAG7B,eAAwB,EACxB,kBAAwB,EACxB,iBAAwB,aACxB,eAAwB,GACxB,mBAAwB,IACxB,qBAAwB,GAGxB,iBAAwB,EACxB,mBAAwB,IACxB,QAAwB,IACxB,aAAwB,EACxB,eAAwB,KAGxB,UAAwB,WACxB,UAAW,CACP,OAAQ,CACJ,KAAQ,kBACR,MAAQ,wBACR,MAAQ,mBACR,KAAQ,oBACZ,EACA,QAAS,CACL,KAAQ,mBACR,MAAQ,yBACR,MAAQ,oBACR,KAAQ,qBACZ,EACA,KAAM,CACF,KAAQ,gBACR,MAAQ,sBACR,MAAQ,iBACR,KAAQ,kBACZ,EACA,SAAU,CACN,KAAQ,oBACR,MAAQ,0BACR,MAAQ,qBACR,KAAQ,sBACZ,EACA,WAAY,CACR,KAAQ,sBACR,MAAQ,4BACR,MAAQ,uBACR,KAAQ,wBACZ,EACA,YAAa,CACT,KAAQ,uBACR,MAAQ,6BACR,MAAQ,wBACR,KAAQ,yBACZ,EACA,KAAM,CACF,KAAQ,gBACR,MAAQ,sBACR,MAAQ,iBACR,KAAQ,kBACZ,EACA,SAAU,CACN,KAAQ,oBACR,MAAQ,0BACR,MAAQ,qBACR,KAAQ,sBACZ,EACA,KAAM,CACF,KAAQ,gBACR,MAAQ,sBACR,MAAQ,iBACR,KAAQ,kBACZ,CACJ,EAGA,UAAwB,GACxB,eAAwB,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EAC1H,0BAA2B,EAE/B,EASA,SAAU,SAAUE,EAAQC,EAAS,CACjC,OAAO,UAAU,CACb,IAAIC,EAAO,UACX,OAAKA,IAAS,SACVA,EAAO,CAAC,GAELD,EAAO,MAAOD,EAAQE,CAAK,CACtC,CACJ,EAgBA,SAAU,CACN,QAAY,EACZ,GAAY,EACZ,QAAY,EACZ,OAAY,EACZ,OAAY,EACZ,MAAY,EACZ,KAAY,EACZ,WAAY,CAChB,EAUA,8BAA+B,CAC3B,MAAc,EACd,aAAc,EACd,OAAc,CAClB,EAUA,SAAU,IAAI,IASd,UAAW,SAASC,EAAS,CACzB,OAAO9B,EAAE,SAAS,IAAI,KAAK,WAAW8B,CAAO,CAAC,CAClD,EAQA,WAAY,SAAUA,EAAU,CAC5B,OAAK,OAASA,GAAc,WACxBA,EAAU,SAAS,eAAgBA,CAAQ,GAExCA,CACX,EASA,mBAAoB,SAAUA,EAAU,CACpC,IAAIC,EAAS,IAAI/B,EAAE,MACfgC,EACAC,EAMJ,IAJAH,EAAe9B,EAAE,WAAY8B,CAAQ,EACrCE,EAAehC,EAAE,gBAAiB8B,CAAQ,EAAE,WAAa,QACzDG,EAAeC,EAAiBJ,EAASE,CAAQ,EAEzCC,GAEJF,EAAO,GAAKD,EAAQ,WACpBC,EAAO,GAAKD,EAAQ,UAEfE,IACDD,EAASA,EAAO,KAAM/B,EAAE,cAAc,CAAE,GAG5C8B,EAAUG,EACVD,EAAUhC,EAAE,gBAAiB8B,CAAQ,EAAE,WAAa,QACpDG,EAAeC,EAAiBJ,EAASE,CAAQ,EAGrD,OAAOD,CACX,EASA,iBAAkB,SAAUD,EAAU,CAClCA,EAAU9B,EAAE,WAAY8B,CAAQ,EAEhC,IAAIK,EAAML,GAAWA,EAAQ,cACzBM,EACAC,EACAC,EAAe,CAAE,IAAK,EAAG,KAAM,CAAE,EAErC,OAAMH,GAINC,EAAaD,EAAI,gBAEZ,OAAOL,EAAQ,uBAA0B,cAC1CQ,EAAeR,EAAQ,sBAAsB,GAGjDO,EAAQF,IAAQA,EAAI,OAChBA,EACEA,EAAI,WAAa,EACfA,EAAI,aAAeA,EAAI,aACvB,GAED,IAAInC,EAAE,MACTsC,EAAa,MAASD,EAAI,aAAeD,EAAW,aAAiBA,EAAW,YAAc,GAC9FE,EAAa,KAAQD,EAAI,aAAeD,EAAW,YAAgBA,EAAW,WAAa,EAC/F,GAlBW,IAAIpC,EAAE,KAmBrB,EASA,eAAgB,SAAU8B,EAAU,CAChC,OAAAA,EAAU9B,EAAE,WAAY8B,CAAQ,EAEzB,IAAI9B,EAAE,MACT8B,EAAQ,YACRA,EAAQ,YACZ,CACJ,EASA,gBACI,SAAS,gBAAgB,aACzB,SAAUA,EAAU,CAChB,OAAAA,EAAU9B,EAAE,WAAY8B,CAAQ,EACzBA,EAAQ,YACnB,EACA,SAAUA,EAAU,CAChB,OAAAA,EAAU9B,EAAE,WAAY8B,CAAQ,EACzB,OAAO,iBAAkBA,EAAS,EAAG,CAChD,EAQJ,+BAAgC,SAASS,EAAU,CAC/C,IAAIC,EAAO,CAAC,EAEZ,OAAAxC,EAAE,+BAAiC,SAASuC,EAAU,CAClD,GAAIC,EAAKD,CAAQ,IAAM,OACnB,OAAOC,EAAKD,CAAQ,EAExB,IAAIE,EAAQ,SAAS,cAAc,KAAK,EAAE,MACtCV,EAAS,KACb,GAAIU,EAAMF,CAAQ,IAAM,OACpBR,EAASQ,MAKT,SAHIG,EAAW,CAAC,SAAU,MAAO,KAAM,IACnC,SAAU,MAAO,KAAM,GAAG,EAC1BC,EAAS3C,EAAE,sBAAsBuC,CAAQ,EACpChB,EAAI,EAAGA,EAAImB,EAAS,OAAQnB,IAAK,CACtC,IAAIqB,EAAOF,EAASnB,CAAC,EAAIoB,EACzB,GAAIF,EAAMG,CAAI,IAAM,OAAW,CAC3Bb,EAASa,EACT,KACJ,CACJ,CAEJ,OAAAJ,EAAKD,CAAQ,EAAIR,EACVA,CACX,EACO/B,EAAE,+BAA+BuC,CAAQ,CACpD,EAOA,sBAAuB,SAASM,EAAQ,CACpC,OAAOA,EAAO,OAAO,CAAC,EAAE,YAAY,EAAIA,EAAO,MAAM,CAAC,CAC1D,EASA,eAAgB,SAASC,EAAQC,EAAQ,CACrC,IAAIhB,EAASe,EAASC,EACtB,OAAIhB,EAAS,IACTA,GAAUgB,GAEPhB,CACX,EAUA,eAAgB,SAAUD,EAASkB,EAAQ,CACvClB,EAAU9B,EAAE,WAAY8B,CAAQ,EAChC,IAAImB,EAASjD,EAAE,iBAAkB8B,CAAQ,EACrCoB,EAAOlD,EAAE,eAAgB8B,CAAQ,EACrC,OAAOkB,EAAM,GAAKC,EAAO,GAAKD,EAAM,EAAIC,EAAO,EAAIC,EAAK,GAAKF,EAAM,EAAIC,EAAO,EAAIC,EAAK,GAAKF,EAAM,GAAKC,EAAO,CAClH,EASA,iBAAkB,SAAUE,EAAQ,CAEhC,GAAK,OAASA,EAAM,OAAY,SAC5BnD,EAAE,iBAAmB,SAAUmD,EAAO,CAClC,IAAIpB,EAAS,IAAI/B,EAAE,MAEnB,OAAA+B,EAAO,EAAIoB,EAAM,MACjBpB,EAAO,EAAIoB,EAAM,MAEVpB,CACX,UACQ,OAASoB,EAAM,SAAc,SACrCnD,EAAE,iBAAmB,SAAUmD,EAAO,CAClC,IAAIpB,EAAS,IAAI/B,EAAE,MAEnB,OAAA+B,EAAO,EACHoB,EAAM,QACN,SAAS,KAAK,WACd,SAAS,gBAAgB,WAC7BpB,EAAO,EACHoB,EAAM,QACN,SAAS,KAAK,UACd,SAAS,gBAAgB,UAEtBpB,CACX,MAEA,OAAM,IAAI,MACN,mDACJ,EAGJ,OAAO/B,EAAE,iBAAkBmD,CAAM,CACrC,EAQA,cAAe,UAAW,CACtB,IAAIf,EAAc,SAAS,iBAAmB,CAAC,EAC3CgB,EAAc,SAAS,MAAQ,CAAC,EAEpC,GAAK,OAAS,OAAO,aAAkB,SACnCpD,EAAE,cAAgB,UAAU,CACxB,OAAO,IAAIA,EAAE,MACT,OAAO,YACP,OAAO,WACX,CACJ,UACQoD,EAAK,YAAcA,EAAK,UAChCpD,EAAE,cAAgB,UAAU,CACxB,OAAO,IAAIA,EAAE,MACT,SAAS,KAAK,WACd,SAAS,KAAK,SAClB,CACJ,UACQoC,EAAW,YAAcA,EAAW,UAC5CpC,EAAE,cAAgB,UAAU,CACxB,OAAO,IAAIA,EAAE,MACT,SAAS,gBAAgB,WACzB,SAAS,gBAAgB,SAC7B,CACJ,MAGA,QAAO,IAAIA,EAAE,MAAM,EAAG,CAAC,EAG3B,OAAOA,EAAE,cAAc,CAC3B,EAOA,cAAe,SAAUqD,EAAS,CAC9B,GAAK,OAAS,OAAO,UAAe,YAChCrD,EAAE,cAAgB,SAAUqD,EAAS,CACjC,OAAO,SAAUA,EAAO,EAAGA,EAAO,CAAE,CACxC,MACG,CACH,IAAIC,EAAiBtD,EAAE,cAAc,EACrC,GAAKsD,EAAe,IAAMD,EAAO,GAC7BC,EAAe,IAAMD,EAAO,EAG5B,OAGJ,SAAS,KAAK,WAAaA,EAAO,EAClC,SAAS,KAAK,UAAYA,EAAO,EACjC,IAAIE,EAAgBvD,EAAE,cAAc,EACpC,GAAKuD,EAAc,IAAMD,EAAe,GACpCC,EAAc,IAAMD,EAAe,EAAI,CACvCtD,EAAE,cAAgB,SAAUqD,EAAS,CACjC,SAAS,KAAK,WAAaA,EAAO,EAClC,SAAS,KAAK,UAAYA,EAAO,CACrC,EACA,MACJ,CAKA,GAHA,SAAS,gBAAgB,WAAaA,EAAO,EAC7C,SAAS,gBAAgB,UAAYA,EAAO,EAC5CE,EAAgBvD,EAAE,cAAc,EAC3BuD,EAAc,IAAMD,EAAe,GACpCC,EAAc,IAAMD,EAAe,EAAI,CACvCtD,EAAE,cAAgB,SAAUqD,EAAS,CACjC,SAAS,gBAAgB,WAAaA,EAAO,EAC7C,SAAS,gBAAgB,UAAYA,EAAO,CAChD,EACA,MACJ,CAGArD,EAAE,cAAgB,SAAUqD,EAAS,CACrC,CACJ,CAEArD,EAAE,cAAeqD,CAAO,CAC5B,EAOA,cAAe,UAAW,CACtB,IAAIjB,EAAa,SAAS,iBAAmB,CAAC,EAC1CgB,EAAU,SAAS,MAAQ,CAAC,EAEhC,GAAK,OAAS,OAAO,YAAiB,SAClCpD,EAAE,cAAgB,UAAU,CACxB,OAAO,IAAIA,EAAE,MACT,OAAO,WACP,OAAO,WACX,CACJ,UACQoC,EAAW,aAAeA,EAAW,aAC7CpC,EAAE,cAAgB,UAAU,CACxB,OAAO,IAAIA,EAAE,MACT,SAAS,gBAAgB,YACzB,SAAS,gBAAgB,YAC7B,CACJ,UACQoD,EAAK,aAAeA,EAAK,aACjCpD,EAAE,cAAgB,UAAU,CACxB,OAAO,IAAIA,EAAE,MACT,SAAS,KAAK,YACd,SAAS,KAAK,YAClB,CACJ,MAEA,OAAM,IAAI,MAAM,0CAA0C,EAG9D,OAAOA,EAAE,cAAc,CAC3B,EAUA,iBAAkB,SAAU8B,EAAU,CAElCA,EAAU9B,EAAE,WAAY8B,CAAQ,EAOhC,IAAI0B,EAAW,CACXxD,EAAE,mBAAoB,KAAM,EAC5BA,EAAE,mBAAoB,KAAM,EAC5BA,EAAE,mBAAoB,KAAM,CAChC,EAGA,OAAAA,EAAE,OAAOwD,EAAS,CAAC,EAAE,MAAO,CACxB,QAAS,QACT,OAAQ,OACR,MAAO,MACX,CAAC,EAEDxD,EAAE,OAAOwD,EAAS,CAAC,EAAE,MAAO,CACxB,QAAS,WACb,CAAC,EAEDxD,EAAE,OAAOwD,EAAS,CAAC,EAAE,MAAO,CACxB,QAAS,aACT,cAAe,SACf,UAAW,QACf,CAAC,EAEDA,EAAS,CAAC,EAAE,YAAYA,EAAS,CAAC,CAAC,EACnCA,EAAS,CAAC,EAAE,YAAYA,EAAS,CAAC,CAAC,EACnCA,EAAS,CAAC,EAAE,YAAY1B,CAAO,EAExB0B,EAAS,CAAC,CACrB,EAUA,mBAAoB,SAAUC,EAAU,CACpC,IAAI3B,EAAU,SAAS,cAAe2B,CAAQ,EAC1ChB,EAAUX,EAAQ,MAEtB,OAAAW,EAAM,WAAa,mBACnBA,EAAM,OAAa,OACnBA,EAAM,OAAa,MACnBA,EAAM,QAAa,MACnBA,EAAM,SAAa,SAEZX,CACX,EAOA,IAAK,UAAY,CACb,OAAI,KAAK,IACL9B,EAAE,IAAM,KAAK,IAEbA,EAAE,IAAM,UAAW,CACf,OAAO,IAAI,KAAK,EAAE,QAAQ,CAC9B,EAGGA,EAAE,IAAI,CACjB,EASA,qBAAsB,SAAUgB,EAAM,CAClC,IAAI0C,EAAM1D,EAAE,mBAAoB,KAAM,EAEtC,OAAA0D,EAAI,IAAM1C,EAEH0C,CACX,EAUA,kBAAmB,SAAU5B,EAAS6B,EAASC,EAAY,CAEvD,IAAIC,EACAC,EAEJhC,EAAU9B,EAAE,WAAY8B,CAAQ,EAE3B8B,GAAa,CAAC5D,EAAE,QAAQ,QACzB2D,EAAU,KAAK,MAAOA,CAAQ,GAG7B3D,EAAE,QAAQ,QACX8B,EAAQ,MAAM,QAAU6B,EAAU,EAAIA,EAAU,GAE3CA,EAAU,GACXE,EAAY,KAAK,MAAO,IAAMF,CAAQ,EACtCG,EAAY,iBAAmBD,EAAY,IAC3C/B,EAAQ,MAAM,OAASgC,GAEvBhC,EAAQ,MAAM,OAAS,EAGnC,EAQA,0BAA2B,SAAUA,EAAU,CAC3CA,EAAU9B,EAAE,WAAY8B,CAAQ,EAC3B,OAAOA,EAAQ,MAAM,aAAgB,YACtCA,EAAQ,MAAM,YAAc,OACpB,OAAOA,EAAQ,MAAM,eAAkB,cAC/CA,EAAQ,MAAM,cAAgB,OAEtC,EASA,wBAAyB,SAAUA,EAASiC,EAAQ,CAChDjC,EAAU9B,EAAE,WAAY8B,CAAQ,EAC5B,OAAOA,EAAQ,OAAU,aAAe,OAAOA,EAAQ,MAAM,eAAkB,cAC/EA,EAAQ,MAAM,cAAgBiC,EAEtC,EAQA,4BAA6B,SAAUjC,EAAU,CAC7C9B,EAAE,wBAAyB8B,EAAS,MAAO,CAC/C,EASA,SAAU,SAAUA,EAASkC,EAAY,CACrClC,EAAU9B,EAAE,WAAY8B,CAAQ,EAE3BA,EAAQ,WAEC,IAAMA,EAAQ,UAAY,KACpC,QAAS,IAAMkC,EAAY,GAAI,IAAM,KACrClC,EAAQ,WAAa,IAAMkC,GAH3BlC,EAAQ,UAAYkC,CAK5B,EAeA,QAAS,SAAUC,EAAOC,EAAeC,EAAY,CACjD,OAAK,MAAM,UAAU,QACjB,KAAK,QAAU,SAAUF,EAAOC,EAAeC,EAAY,CACvD,OAAOF,EAAM,QAASC,EAAeC,CAAU,CACnD,EAEA,KAAK,QAAU,SAAUF,EAAOC,EAAeC,EAAY,CACvD,IAAI5C,EACA6C,EAAUD,GAA0B,EACpC9C,EACJ,GAAK,CAAC4C,EACF,MAAM,IAAI,UAId,GADA5C,EAAS4C,EAAM,OACV5C,IAAW,GAAK+C,GAAS/C,EAC1B,MAAO,GAOX,IAJK+C,EAAQ,IACTA,EAAQ/C,EAAS,KAAK,IAAK+C,CAAM,GAG/B7C,EAAI6C,EAAO7C,EAAIF,EAAQE,IACzB,GAAK0C,EAAM1C,CAAC,IAAM2C,EACd,OAAO3C,EAGf,MAAO,EACX,EAEG,KAAK,QAAS0C,EAAOC,EAAeC,CAAU,CACzD,EAQA,YAAa,SAAUrC,EAASkC,EAAY,CACxC,IAAIK,EACAC,EAAa,CAAC,EACd/C,EAIJ,IAFAO,EAAU9B,EAAE,WAAY8B,CAAQ,EAChCuC,EAAavC,EAAQ,UAAU,MAAO,KAAM,EACtCP,EAAI,EAAGA,EAAI8C,EAAW,OAAQ9C,IAC3B8C,EAAY9C,CAAE,GAAK8C,EAAY9C,CAAE,IAAMyC,GACxCM,EAAW,KAAMD,EAAY9C,CAAE,CAAE,EAGzCO,EAAQ,UAAYwC,EAAW,KAAK,GAAG,CAC3C,EAYA,8BAA+B,SAAUvE,EAAS,CAC9C,IAAIwE,EACJ,OAAK,OAAOxE,GAAY,YACf,OAAOA,GAAY,UAEpBwE,EAAOvE,EAAE,6BAA+B,CAAE,QAASD,CAAQ,EAAIA,EAG/DwE,EAAOvE,EAAE,6BAA+BD,EAChC,OAAOA,EAAQ,SAAY,YAAgBA,EAAQ,QAAU,GAKzEwE,EAAOvE,EAAE,6BAA+B,CAAE,QAAS,EAAM,EAAI,GAE1DuE,CACX,EAaA,SAAW,UAAY,CACnB,GAAKvE,EAAE,yBACH,OAAO,SAAW8B,EAAS0C,EAAWC,EAAS1E,EAAU,CACrDA,EAAUC,EAAE,8BAA8BD,CAAO,EACjD+B,EAAU9B,EAAE,WAAY8B,CAAQ,EAChCA,EAAQ,iBAAkB0C,EAAWC,EAAS1E,CAAQ,CAC1D,EACG,GAAK,SAAS,gBAAgB,aAAe,SAAS,YACzD,OAAO,SAAW+B,EAAS0C,EAAWC,EAAU,CAC5C3C,EAAU9B,EAAE,WAAY8B,CAAQ,EAChCA,EAAQ,YAAa,KAAO0C,EAAWC,CAAQ,CACnD,EAEA,MAAM,IAAI,MAAO,uBAAwB,CAEjD,EAAE,EAaF,YAAc,UAAY,CACtB,GAAKzE,EAAE,4BACH,OAAO,SAAW8B,EAAS0C,EAAWC,EAAS1E,EAAU,CACrDA,EAAUC,EAAE,8BAA8BD,CAAO,EACjD+B,EAAU9B,EAAE,WAAY8B,CAAQ,EAChCA,EAAQ,oBAAqB0C,EAAWC,EAAS1E,CAAQ,CAC7D,EACG,GAAK,SAAS,gBAAgB,aAAe,SAAS,YACzD,OAAO,SAAU+B,EAAS0C,EAAWC,EAAU,CAC3C3C,EAAU9B,EAAE,WAAY8B,CAAQ,EAChCA,EAAQ,YAAa,KAAO0C,EAAWC,CAAQ,CACnD,EAEA,MAAM,IAAI,MAAO,uBAAwB,CAEjD,EAAE,EASF,YAAa,SAAUtB,EAAQ,CAC3BA,EAAM,eAAe,CACzB,EASA,gBAAiB,SAAUA,EAAQ,CAC/B,OAAOA,EAAM,gBACjB,EAQA,UAAW,SAAUA,EAAQ,CACzBA,EAAM,gBAAgB,CAC1B,EAGA,eAAgB,SAAUxB,EAAQC,EAAS,CAIvC,QAAQ,MAAM,2HAA2H,EACzI,IAAI8C,EAAc,CAAC,EACfnD,EACJ,IAAMA,EAAI,EAAGA,EAAI,UAAU,OAAQA,IAC/BmD,EAAY,KAAM,UAAWnD,CAAE,CAAE,EAGrC,OAAO,UAAW,CACd,IAAIM,EAAO6C,EAAY,OAAQ,CAAC,CAAE,EAC9BnD,EACJ,IAAMA,EAAI,EAAGA,EAAI,UAAU,OAAQA,IAC/BM,EAAK,KAAM,UAAWN,CAAE,CAAE,EAG9B,OAAOK,EAAO,MAAOD,EAAQE,CAAK,CACtC,CACJ,EASA,gBAAiB,SAAUvB,EAAM,CAE7B,IAAIyD,EAAQY,EAAWrE,CAAI,EAC3B,OAAOyD,GAAgB,IAC3B,EAUA,eAAgB,SAAUa,EAAM,CAC5B,IAAIC,EAAQD,EAAI,MAAM,iBAAiB,EACvC,OAAKC,IAAU,KAEJ,OAAO,SAAS,SAEpBA,EAAM,CAAC,EAAE,YAAY,CAChC,EAQA,kBAAmB,UAAW,CAC1B,GAAK,OAAO,eACR,OAAA7E,EAAE,kBAAoB,UAAW,CAC7B,OAAO,IAAI,cACf,EACO,IAAI,eAEX,MAAM,IAAI,MAAO,yCAA0C,CAEnE,EAgBA,gBAAiB,SAAU4E,EAAKE,EAAWC,EAAU,CACjD,IAAIC,EACAC,EACAC,EACAC,EAIAnF,EAAE,cAAe4E,CAAI,IACrBE,EAAYF,EAAI,QAChBG,EAAUH,EAAI,MACdI,EAAkBJ,EAAI,gBACtBK,EAAUL,EAAI,QACdM,EAAeN,EAAI,cAAgB,KACnCO,EAAWP,EAAI,UAAY,KAC3BA,EAAMA,EAAI,KAGd,IAAIQ,EAAWpF,EAAE,eAAgB4E,CAAI,EACjCS,EAAUrF,EAAE,kBAAkB,EAElC,GAAK,CAACA,EAAE,WAAY8E,CAAU,EAC1B,MAAM,IAAI,MAAO,6CAA8C,EAGnEO,EAAQ,mBAAqB,UAAW,CAE/BA,EAAQ,aAAe,IACxBA,EAAQ,mBAAqB,UAAU,CAAC,EAIlCA,EAAQ,QAAU,KAAOA,EAAQ,OAAS,KAC1CA,EAAQ,SAAW,GACnBD,IAAa,SACbA,IAAa,SACfN,EAAWO,CAAQ,EAEdrF,EAAE,WAAY+E,CAAQ,EACvBA,EAASM,CAAQ,EAEjBrF,EAAE,QAAQ,MAAO,+BAAgCqF,EAAQ,OAAQT,CAAI,EAIrF,EAEA,IAAIhD,EAASuD,EAAW,OAAS,MACjC,GAAI,CAOA,GANAE,EAAQ,KAAMzD,EAAQgD,EAAK,EAAK,EAE5BM,IACAG,EAAQ,aAAeH,GAGvBD,EACA,QAASK,KAAcL,EACf,OAAO,UAAU,eAAe,KAAKA,EAASK,CAAU,GAAKL,EAAQK,CAAU,GAC/ED,EAAQ,iBAAiBC,EAAYL,EAAQK,CAAU,CAAC,EAKhEN,IACAK,EAAQ,gBAAkB,IAG9BA,EAAQ,KAAKF,CAAQ,CACzB,OAASxE,EAAG,CACRX,EAAE,QAAQ,MAAO,mCAAoCW,EAAE,KAAMA,EAAE,OAAQ,EAEvE0E,EAAQ,mBAAqB,UAAU,CAAC,EAEnCrF,EAAE,WAAY+E,CAAQ,GACvBA,EAASM,EAAS1E,CAAE,CAE5B,CAEA,OAAO0E,CACX,EAaA,MAAO,SAAUtF,EAAS,CACtB,IAAIwF,EACAX,EAAU7E,EAAQ,IAClByF,EAAU,SAAS,MACf,SAAS,qBAAsB,MAAO,EAAG,CAAE,GAC3C,SAAS,gBACbC,EAAgB1F,EAAQ,cAAgB,gBAAkBC,EAAE,IAAI,EAChE0F,EAAgB,OAAQD,CAAc,EACtCE,EAAgB,KAAOF,EAAgB,KACvCG,EAAgB7F,EAAQ,OAAS,WACjC8F,EAAgB9F,EAAQ,SAE5B6E,EAAMA,EAAI,QAAS,mBAAoBe,CAAQ,EAE/Cf,IAAQ,KAAK,KAAMA,CAAI,EAAI,IAAM,KAAOgB,EAAgB,IAAMH,EAG9D,OAAQA,CAAc,EAAI,SAAUK,EAAW,CAC3C,GAAMJ,EAOF,OAAQD,CAAc,EAAIC,MAN1B,IAAG,CACC,OAAO,OAAQD,CAAc,CACjC,OAAO9E,EAAE,CAET,CAIAkF,GAAY7F,EAAE,WAAY6F,CAAS,GACnCA,EAAUC,CAAS,CAE3B,EAEAP,EAAS,SAAS,cAAe,QAAS,GAGxBxF,EAAQ,QAAtB,QAAyCA,EAAQ,QAAlB,MAC/BwF,EAAO,MAAQ,SAGdxF,EAAQ,gBACTwF,EAAO,QAAUxF,EAAQ,eAG7BwF,EAAO,IAAMX,EAGbW,EAAO,OAASA,EAAO,mBAAqB,SAAUQ,EAAGC,EAAU,EAE1DA,GAAW,CAACT,EAAO,YAAc,kBAAkB,KAAMA,EAAO,UAAW,KAG5EA,EAAO,OAASA,EAAO,mBAAqB,KAGvCC,GAAQD,EAAO,YAChBC,EAAK,YAAaD,CAAO,EAI7BA,EAAS,OAEjB,EAGAC,EAAK,aAAcD,EAAQC,EAAK,UAAW,CAE/C,EAQA,cAAe,UAAW,CACtB,KAAM,6DACV,EAQA,SAAU,SAAU3C,EAAS,CACzB,GAAK,OAAO,UAER7C,EAAE,SAAW,SAAU6C,EAAS,CAC5B,IAAIoD,EAAS,KACTC,EAEJ,OAAAA,EAAS,IAAI,UACbD,EAASC,EAAO,gBAAiBrD,EAAQ,UAAW,EAC7CoD,CACX,MAGA,OAAM,IAAI,MAAO,kCAAmC,EAGxD,OAAOjG,EAAE,SAAU6C,CAAO,CAC9B,EAQA,UAAW,SAASA,EAAQ,CACxB,OAAA7C,EAAE,UAAY,OAAO,KAAK,MACnBA,EAAE,UAAU6C,CAAM,CAC7B,EASA,qBAAsB,SAAUsD,EAAY,CACxC,OAAAA,EAAYA,GAAwB,GAE7B,CAAC,CAACC,EAAaD,EAAU,YAAY,CAAE,CAClD,EAwBA,yBAA0B,SAASE,EAAS,CAExCrG,EAAE,OAAOoG,EAAaC,CAAO,CACjC,CAEJ,CAAC,EAcD,IAAIC,EAAe,SAAUC,EAAK,CAElC,EAEAvG,EAAE,QAAU,OAAO,SAAW,CAC1B,IAAQsG,EACR,MAAQA,EACR,KAAQA,EACR,KAAQA,EACR,MAAQA,EACR,OAAQA,CACZ,EAaAtG,EAAE,QAAU,CACR,OAAYA,EAAE,SAAS,QACvB,QAAY,EACZ,MAAY,EAChB,EAGA,IAAIoG,EAAc,CACV,KAAM,GACN,IAAM,GACN,KAAM,GACN,IAAM,GACN,IAAM,GACN,IAAM,GACN,IAAM,GACN,KAAM,EACV,EACAzB,EAAY,CAAC,GAEhB,UAAW,CAGR,IAAI6B,EAAM,UAAU,WAChBC,EAAM,UAAU,UAChBC,EAUJ,OAAQ,UAAU,QAAS,CACvB,IAAK,8BACK,OAAO,aACP,OAAO,gBAET1G,EAAE,QAAQ,OAASA,EAAE,SAAS,GAC9BA,EAAE,QAAQ,QAAU,WAChByG,EAAG,UACCA,EAAG,QAAS,MAAO,EAAI,EACvBA,EAAG,QAAS,IAAKA,EAAG,QAAS,MAAO,CAAE,CAAE,CAC5C,GAER,MACJ,IAAK,WACG,OAAO,mBACFA,EAAG,QAAS,MAAO,GAAK,GACzBzG,EAAE,QAAQ,OAASA,EAAE,SAAS,KAC9BA,EAAE,QAAQ,QAAU,WAChByG,EAAG,UAAWA,EAAG,QAAS,MAAO,EAAI,CAAE,CAC3C,GACQA,EAAG,QAAS,KAAM,GAAK,GAC/BzG,EAAE,QAAQ,OAASA,EAAE,SAAS,WAC9BA,EAAE,QAAQ,QAAU,WAChByG,EAAG,UAAWA,EAAG,QAAS,KAAM,EAAI,CAAE,CAC1C,GACQA,EAAG,QAAS,SAAU,GAAK,GACnCzG,EAAE,QAAQ,OAASA,EAAE,SAAS,QAC9BA,EAAE,QAAQ,QAAU,WAChByG,EAAG,UAAWA,EAAG,QAAS,SAAU,EAAI,CAAE,CAC9C,GACQA,EAAG,QAAS,QAAS,GAAK,GAClCzG,EAAE,QAAQ,OAASyG,EAAG,QAAS,QAAS,GAAK,EACzCzG,EAAE,SAAS,OACXA,EAAE,SAAS,OACfA,EAAE,QAAQ,QAAU,WAChByG,EAAG,UACCA,EAAG,UAAW,EAAGA,EAAG,QAAS,QAAS,CAAE,EAAE,YAAa,GAAI,EAAI,EAC/DA,EAAG,QAAS,QAAS,CACzB,CACJ,IAEAC,EAAQ,IAAI,OAAQ,oCAAoC,EACnDA,EAAM,KAAMD,CAAG,IAAM,OACtBzG,EAAE,QAAQ,OAASA,EAAE,SAAS,GAC9BA,EAAE,QAAQ,QAAU,WAAY,OAAO,EAAG,KAItD,MACJ,IAAK,QACDA,EAAE,QAAQ,OAASA,EAAE,SAAS,MAC9BA,EAAE,QAAQ,QAAU,WAAYwG,CAAI,EACpC,KACR,CAGA,IAAIG,EAAQ,OAAO,SAAS,OAAO,UAAW,CAAE,EAC5CC,EAAQD,EAAM,MAAM,GAAG,EACvBE,EACAC,EACAvF,EAEJ,IAAMA,EAAI,EAAGA,EAAIqF,EAAM,OAAQrF,IAI3B,GAHAsF,EAAOD,EAAOrF,CAAE,EAChBuF,EAAOD,EAAK,QAAS,GAAI,EAEpBC,EAAM,EAAI,CACX,IAAIxG,EAAMuG,EAAK,UAAW,EAAGC,CAAI,EAC7B/C,EAAQ8C,EAAK,UAAWC,EAAM,CAAE,EACpC,GAAI,CACAnC,EAAWrE,CAAI,EAAI,mBAAoByD,CAAM,CACjD,OAASpD,EAAG,CACRX,EAAE,QAAQ,MAAO,0CAA2CM,EAAKyD,CAAM,CAC3E,CACJ,CAIJ/D,EAAE,QAAQ,MAAQ,EACdA,EAAE,QAAQ,SAAWA,EAAE,SAAS,QAAUA,EAAE,QAAQ,QAAU,GAIlEA,EAAE,QAAQ,QAAU,GAEfA,EAAE,QAAQ,SAAWA,EAAE,SAAS,IACjCA,EAAE,QAAQ,MAAM,qDAAqD,CAE7E,GAAG,EAMF,SAAU+G,EAAI,CAGX,IAAIC,EAAwBD,EAAE,uBAC1BA,EAAE,0BACFA,EAAE,6BACFA,EAAE,wBAEFE,EAAuBF,EAAE,sBACzBA,EAAE,yBACFA,EAAE,4BACFA,EAAE,uBAGN,GAAKC,GAAyBC,EAG1BjH,EAAE,sBAAwB,UAAU,CAChC,OAAOgH,EAAsB,MAAOD,EAAG,SAAU,CACrD,EACA/G,EAAE,qBAAuB,UAAU,CAC/B,OAAOiH,EAAqB,MAAOF,EAAG,SAAU,CACpD,MACG,CACH,IAAIG,EAAa,CAAC,EACdC,EAAa,CAAC,EACdC,EAAa,EACbC,EAGJrH,EAAE,sBAAwB,SAAU6F,EAAW,CAC3C,OAAAqB,EAAW,KAAM,CAAE,EAAEE,EAAYvB,CAAS,CAAE,EAEtCwB,IACFA,EAAc,YAAa,UAAW,CAClC,GAAKH,EAAW,OAAS,CACrB,IAAII,EAAOtH,EAAE,IAAI,EAMbuH,EAAOJ,EAGX,IAFAA,EAAaD,EACbA,EAAaK,EACLJ,EAAW,QACfA,EAAW,MAAM,EAAG,CAAE,EAAGG,CAAK,CAEtC,MAEI,cAAeD,CAAY,EAC3BA,EAAc,MAEtB,EAAG,IAAO,EAAE,GAGTD,CACX,EAGApH,EAAE,qBAAuB,SAAUwH,EAAY,CAE3C,IAAIjG,EAAGkG,EACP,IAAMlG,EAAI,EAAGkG,EAAIP,EAAW,OAAQ3F,EAAIkG,EAAGlG,GAAK,EAC5C,GAAK2F,EAAY3F,CAAE,EAAG,CAAE,IAAMiG,EAAY,CACtCN,EAAW,OAAQ3F,EAAG,CAAE,EACxB,MACJ,CAMJ,IAAMA,EAAI,EAAGkG,EAAIN,EAAW,OAAQ5F,EAAIkG,EAAGlG,GAAK,EAC5C,GAAK4F,EAAY5F,CAAE,EAAG,CAAE,IAAMiG,EAAY,CACtCL,EAAW,OAAQ5F,EAAG,CAAE,EACxB,MACJ,CAER,CACJ,CACJ,EAAI,MAAO,EAUX,SAASW,EAAiBJ,EAASE,EAAU,CACzC,OAAKA,GAAWF,IAAY,SAAS,KAC1B,SAAS,KAETA,EAAQ,YAEvB,CAEJ,EAAEhC,CAAa,EAId,SAAU4H,EAAMC,EAAS,CAGlB,GAAO,CAAC,EAAG,GAAAA,EAAO,wEAQ1B,EAAE,KAAM,UAAY,CAChB,OAAO7H,CACX,CAAC,EA0EA,SAAUE,EAAG,CAgBd,MAAM4H,CAAI,CACN,YAAYC,EAAO,CACXA,IACAA,EAAS,CACL,EAAG,EAAG,EACN,EAAG,EAAG,EACN,EAAG,EAAG,CACV,GAEJ,KAAK,OAASA,CAClB,CAQA,OAAO,cAAc,CACjB,OAAO,IAAID,EAAK,CACZ,EAAG,EAAG,EACN,EAAG,EAAG,EACN,EAAG,EAAG,CACV,CAAC,CACL,CAUA,OAAO,gBAAgBE,EAAIC,EAAI,CAC3B,OAAO,IAAIH,EAAK,CACZ,EAAG,EAAG,EACN,EAAG,EAAG,EACNE,EAAIC,EAAI,CACZ,CAAC,CACL,CASA,OAAO,aAAaC,EAAgB,CAChC,IAAIC,EAAI,KAAK,IAAID,CAAc,EAC3BE,EAAI,KAAK,IAAIF,CAAc,EAC/B,OAAO,IAAIJ,EAAK,CACZK,EAAG,CAACC,EAAG,EACPA,EAAGD,EAAG,EACN,EAAG,EAAG,CACV,CAAC,CACL,CAUA,OAAO,YAAYE,EAAIC,EAAI,CACvB,OAAO,IAAIR,EAAK,CACZO,EAAI,EAAG,EACP,EAAGC,EAAI,EACP,EAAG,EAAG,CACV,CAAC,CACL,CAQA,SAASC,EAAO,CACZ,IAAIC,EAAI,KAAK,OACTC,EAAIF,EAAM,OAEd,IAAIG,EAAMF,EAAE,EAAI,EAAI,CAAC,EACjBG,EAAMH,EAAE,EAAI,EAAI,CAAC,EACjBI,EAAMJ,EAAE,EAAI,EAAI,CAAC,EACjBK,EAAML,EAAE,EAAI,EAAI,CAAC,EACjBM,EAAMN,EAAE,EAAI,EAAI,CAAC,EACjBO,EAAMP,EAAE,EAAI,EAAI,CAAC,EACjBQ,EAAMR,EAAE,EAAI,EAAI,CAAC,EACjBS,EAAMT,EAAE,EAAI,EAAI,CAAC,EACjBU,EAAMV,EAAE,EAAI,EAAI,CAAC,EACjBW,EAAMV,EAAE,EAAI,EAAI,CAAC,EACjBW,EAAMX,EAAE,EAAI,EAAI,CAAC,EACjBY,EAAMZ,EAAE,EAAI,EAAI,CAAC,EACjBa,EAAMb,EAAE,EAAI,EAAI,CAAC,EACjBc,EAAMd,EAAE,EAAI,EAAI,CAAC,EACjBe,EAAMf,EAAE,EAAI,EAAI,CAAC,EACjBgB,EAAMhB,EAAE,EAAI,EAAI,CAAC,EACjBiB,EAAMjB,EAAE,EAAI,EAAI,CAAC,EACjBkB,EAAMlB,EAAE,EAAI,EAAI,CAAC,EACrB,OAAO,IAAIX,EAAK,CACZqB,EAAMT,EAAMU,EAAMP,EAAMQ,EAAML,EAC9BG,EAAMR,EAAMS,EAAMN,EAAMO,EAAMJ,EAC9BE,EAAMP,EAAMQ,EAAML,EAAMM,EAAMH,EAC9BI,EAAMZ,EAAMa,EAAMV,EAAMW,EAAMR,EAC9BM,EAAMX,EAAMY,EAAMT,EAAMU,EAAMP,EAC9BK,EAAMV,EAAMW,EAAMR,EAAMS,EAAMN,EAC9BO,EAAMf,EAAMgB,EAAMb,EAAMc,EAAMX,EAC9BS,EAAMd,EAAMe,EAAMZ,EAAMa,EAAMV,EAC9BQ,EAAMb,EAAMc,EAAMX,EAAMY,EAAMT,CAClC,CAAC,CACL,CACJ,CAGAhJ,EAAE,KAAO4H,CAET,EAAG9H,CAAc,EAoChB,SAAUE,EAAI,CAgBX,IAAI0J,EAAgB,CAChB,mBAAoB,GACpB,aAAc,UAAW,CAAE,MAAO,EAAO,EACzC,qBAAsB,UAAW,CAAE,OAAO,IAAM,EAChD,kBAAmB,UAAW,CAAC,EAC/B,eAAgB,UAAW,CAAC,EAC5B,iBAAkB,UAAW,CAAC,EAC9B,oBAAqB,GACrB,yBAA0B,EAC9B,EAGK,SAAS,gBAEVA,EAAc,mBAAqB,GACnCA,EAAc,qBAAuB,UAAW,CAC5C,OAAO,SAAS,iBACpB,EACAA,EAAc,kBAAoB,SAAU5H,EAAU,CAClD,OAAOA,EAAQ,kBAAkB,EAAE,MAAM,SAAUyE,EAAK,CACpDvG,EAAE,QAAQ,MAAM,8BAA+BuG,CAAG,CACtD,CAAC,CACL,EACAmD,EAAc,eAAiB,UAAW,CACtC,SAAS,eAAe,EAAE,MAAM,SAAUnD,EAAK,CAC3CvG,EAAE,QAAQ,MAAM,mCAAoCuG,CAAG,CAC3D,CAAC,CACL,EACAmD,EAAc,oBAAsB,mBACpCA,EAAc,yBAA2B,mBACjC,SAAS,kBAEjBA,EAAc,mBAAqB,GACnCA,EAAc,qBAAuB,UAAW,CAC5C,OAAO,SAAS,mBACpB,EACAA,EAAc,kBAAoB,SAAU5H,EAAU,CAClD,OAAOA,EAAQ,oBAAoB,CACvC,EACA4H,EAAc,eAAiB,UAAW,CACtC,SAAS,iBAAiB,CAC9B,EACAA,EAAc,oBAAsB,qBACpCA,EAAc,yBAA2B,qBACjC,SAAS,sBAEjBA,EAAc,mBAAqB,GACnCA,EAAc,qBAAuB,UAAW,CAC5C,OAAO,SAAS,uBACpB,EACAA,EAAc,kBAAoB,SAAU5H,EAAU,CAClD,OAAOA,EAAQ,wBAAwB,CAC3C,EACA4H,EAAc,eAAiB,UAAW,CACtC,SAAS,qBAAqB,CAClC,EACAA,EAAc,oBAAsB,yBACpCA,EAAc,yBAA2B,yBACjC,SAAS,wBAEjBA,EAAc,mBAAqB,GACnCA,EAAc,qBAAuB,UAAW,CAC5C,OAAO,SAAS,8BACpB,EACAA,EAAc,kBAAoB,SAAU5H,EAAU,CAClD,OAAOA,EAAQ,wBAAwB,CAC3C,EACA4H,EAAc,eAAiB,UAAW,CACtC,SAAS,uBAAuB,CACpC,EACAA,EAAc,oBAAsB,yBACpCA,EAAc,yBAA2B,yBACjC,SAAS,sBAEjBA,EAAc,mBAAqB,GACnCA,EAAc,qBAAuB,UAAW,CAC5C,OAAO,SAAS,oBACpB,EACAA,EAAc,kBAAoB,SAAU5H,EAAU,CAClD,OAAOA,EAAQ,qBAAqB,CACxC,EACA4H,EAAc,eAAiB,UAAW,CACtC,SAAS,oBAAoB,CACjC,EACAA,EAAc,oBAAsB,sBACpCA,EAAc,yBAA2B,sBAE7CA,EAAc,aAAe,UAAW,CACpC,OAAOA,EAAc,qBAAqB,IAAM,IACpD,EACAA,EAAc,iBAAmB,UAAW,CACxC1J,EAAE,QAAQ,MAAM,6DAA6D,EAC7E0J,EAAc,eAAe,CACjC,EAGA1J,EAAE,OAAQA,EAAG0J,CAAc,CAE/B,EAAI5J,CAAc,EAoCjB,SAASE,EAAE,CAiBZA,EAAE,YAAc,UAAW,CACvB,KAAK,OAAS,CAAC,EACf,KAAK,mBAAqB,CAAC,CAC/B,EAGAA,EAAE,YAAY,UAAY,CAgBtB,eAAgB,SAASwE,EAAWC,EAASkF,EAAUC,EAAOC,EAAU,CACpE,IAAIC,EAAO,KACXF,EAAQA,GAAS,EACjB,IAAIG,EAAQ,EACRC,EAAc,SAAS7G,EAAO,CAC9B,OAAA4G,IACIA,IAAUH,GACVE,EAAK,cAActF,EAAWwF,CAAW,EAEtCvF,EAAQtB,CAAK,CACxB,EACA,OAAO,KAAK,WAAWqB,EAAWwF,EAAaL,EAAUE,CAAQ,CACrE,EAWA,WAAY,SAAWrF,EAAWC,EAASkF,EAAUE,EAAW,CAE5D,GAAG,OAAO,UAAU,eAAe,KAAK,KAAK,mBAAoBrF,CAAS,EACtE,OAAAxE,EAAE,QAAQ,MAAM,4BAA4BwE,CAAS,KAAK,KAAK,mBAAmBA,CAAS,CAAC,EAAE,EACvF,GAGX,IAAIyF,EAAS,KAAK,OAAQzF,CAAU,EAIpC,GAHMyF,IACF,KAAK,OAAQzF,CAAU,EAAIyF,EAAS,CAAC,GAEpCxF,GAAWzE,EAAE,WAAYyE,CAAQ,EAAI,CACtC,IAAIyF,EAAQD,EAAO,OACf9G,EAAQ,CAAE,QAASsB,EAAS,SAAUkF,GAAY,KAAM,SAAUE,GAAY,CAAE,EAEpF,IADAI,EAAQC,CAAM,EAAI/G,EACV+G,EAAQ,GAAKD,EAAQC,EAAQ,CAAE,EAAE,SAAWD,EAAQC,CAAM,EAAE,UAChED,EAAQC,CAAM,EAAID,EAAQC,EAAQ,CAAE,EACpCD,EAAQC,EAAQ,CAAE,EAAI/G,EACtB+G,GAER,CACA,MAAO,EACX,EAQA,cAAe,SAAW1F,EAAWC,EAAU,CAC3C,IAAIwF,EAAS,KAAK,OAAQzF,CAAU,EAChC2F,EAAW,CAAC,EACZ5I,EACJ,GAAM0I,GAGDjK,EAAE,QAASiK,CAAO,EAAI,CACvB,IAAM1I,EAAI,EAAGA,EAAI0I,EAAO,OAAQ1I,IACvB0I,EAAO1I,CAAC,EAAE,UAAYkD,GACvB0F,EAAS,KAAMF,EAAQ1I,CAAE,CAAE,EAGnC,KAAK,OAAQiD,CAAU,EAAI2F,CAC/B,CACJ,EAOA,iBAAkB,SAAU3F,EAAW,CACnC,IAAIyF,EAAS,KAAK,OAAQzF,CAAU,EACpC,OAAMyF,EAGCA,EAAO,OAFH,CAGf,EAQA,kBAAmB,SAAUzF,EAAY,CACrC,GAAKA,EACD,KAAK,OAAQA,CAAU,EAAI,CAAC,MAE5B,SAAU4F,KAAa,KAAK,OACxB,KAAK,OAAQA,CAAU,EAAI,CAAC,CAGxC,EAOA,WAAY,SAAW5F,EAAW,CAC9B,IAAIyF,EAAS,KAAK,OAAQzF,CAAU,EACpC,MAAK,CAACyF,GAAU,CAACA,EAAO,OACb,MAEXA,EAASA,EAAO,SAAW,EACvB,CAAEA,EAAQ,CAAE,CAAE,EACd,MAAM,MAAO,KAAMA,CAAO,EACvB,SAAWI,EAAQxI,EAAO,CAC7B,IAAIN,EACAF,EAAS4I,EAAO,OACpB,IAAM1I,EAAI,EAAGA,EAAIF,EAAQE,IAChB0I,EAAQ1I,CAAE,IACXM,EAAK,YAAcwI,EACnBxI,EAAK,SAAWoI,EAAQ1I,CAAE,EAAE,SAC5B0I,EAAQ1I,CAAE,EAAE,QAASM,CAAK,EAGtC,EACJ,EASA,WAAY,SAAU2C,EAAW8F,EAAY,CAIzC,GAAG,OAAO,UAAU,eAAe,KAAK,KAAK,mBAAoB9F,CAAS,EACtE,OAAAxE,EAAE,QAAQ,MAAM,4BAA4BwE,CAAS,KAAK,KAAK,mBAAmBA,CAAS,CAAC,EAAE,EACvF,GAGX,IAAIC,EAAU,KAAK,WAAYD,CAAU,EACzC,OAAKC,GACDA,EAAS,KAAM6F,GAAa,CAAC,CAAE,EAE5B,EACX,EASA,mBAAmB9F,EAAW+F,EAAe,GAAG,CAC5C,KAAK,mBAAmB/F,CAAS,EAAI+F,CACzC,EAQA,kBAAkB/F,EAAU,CACxB,OAAO,KAAK,mBAAmBA,CAAS,CAC5C,CAEJ,CAEA,EAAG1E,CAAc,EAoChB,SAAWE,EAAI,CAGZ,IAAIwK,EAAiB,CAAC,EAGlBC,EAAiB,CAAC,EAmFtBzK,EAAE,aAAe,SAAWD,EAAU,CAElCyK,EAAc,KAAM,IAAK,EAEzB,IAAI3I,EAAO,UAEL7B,EAAE,cAAeD,CAAQ,IAC3BA,EAAU,CACN,QAAoB8B,EAAM,CAAE,EAC5B,mBAAoBA,EAAM,CAAE,EAC5B,mBAAoBA,EAAM,CAAE,CAChC,GAGJ,KAAK,KAAqB,KAAK,OAAO,EAMtC,KAAK,QAAqB7B,EAAE,WAAYD,EAAQ,OAAQ,EAOxD,KAAK,mBAAqBA,EAAQ,oBAAsBC,EAAE,iBAAiB,mBAO3E,KAAK,mBAAqBD,EAAQ,oBAAsBC,EAAE,iBAAiB,mBAO3E,KAAK,sBAAwBD,EAAQ,uBAAyBC,EAAE,iBAAiB,sBAOjF,KAAK,sBAAwBD,EAAQ,uBAAyBC,EAAE,iBAAiB,sBAEjF,KAAK,SAAwBD,EAAQ,UAAqB,KAC1D,KAAK,UAAwBA,EAAQ,WAAqB,GAE1D,KAAK,uBAA2BA,EAAQ,wBAA4B,KACpE,KAAK,mBAA2BA,EAAQ,oBAA4B,KACpE,KAAK,aAA2BA,EAAQ,cAA4B,KACpE,KAAK,aAA2BA,EAAQ,cAA4B,KACpE,KAAK,YAA2BA,EAAQ,aAA4B,KACpE,KAAK,YAA2BA,EAAQ,aAA4B,KACpE,KAAK,WAA2BA,EAAQ,YAA4B,KACpE,KAAK,aAA2BA,EAAQ,cAA4B,KACpE,KAAK,uBAA2BA,EAAQ,wBAA4B,KACpE,KAAK,eAA2BA,EAAQ,gBAA4B,KACpE,KAAK,yBAA2BA,EAAQ,0BAA4B,KACpE,KAAK,YAA2BA,EAAQ,aAA4B,KACpE,KAAK,cAA2BA,EAAQ,eAA4B,KACpE,KAAK,aAA2BA,EAAQ,cAA4B,KACpE,KAAK,gBAA2BA,EAAQ,iBAA4B,KACpE,KAAK,YAA2BA,EAAQ,aAA4B,KACpE,KAAK,eAA2BA,EAAQ,gBAA4B,KACpE,KAAK,aAA2BA,EAAQ,cAA4B,KACpE,KAAK,YAA2BA,EAAQ,aAA4B,KACpE,KAAK,eAA2BA,EAAQ,gBAA4B,KACpE,KAAK,aAA2BA,EAAQ,cAA4B,KACpE,KAAK,WAA2BA,EAAQ,YAA4B,KACpE,KAAK,aAA2BA,EAAQ,cAA4B,KACpE,KAAK,YAA2BA,EAAQ,aAA4B,KAIpE,IAAI2K,EAAQ,KAOZD,EAAM,KAAK,IAAK,EAAI,CAChB,MAAuB,SAAWtH,EAAQ,CAAEwH,EAASD,EAAOvH,CAAM,CAAG,EACrE,SAAuB,SAAWA,EAAQ,CAAEyH,EAAYF,EAAOvH,CAAM,CAAG,EACxE,QAAuB,SAAWA,EAAQ,CAAE0H,EAAWH,EAAOvH,CAAM,CAAG,EACvE,MAAuB,SAAWA,EAAQ,CAAE2H,EAASJ,EAAOvH,CAAM,CAAG,EACrE,SAAuB,SAAWA,EAAQ,CAAE4H,EAAYL,EAAOvH,CAAM,CAAG,EACxE,MAAuB,SAAWA,EAAQ,CAAE6H,EAASN,EAAOvH,CAAM,CAAG,EACrE,KAAuB,SAAWA,EAAQ,CAAE8H,EAAQP,EAAOvH,CAAM,CAAG,EACpE,YAAuB,SAAWA,EAAQ,CAAE+H,EAAeR,EAAOvH,CAAM,CAAG,EAE3E,MAAuB,SAAWA,EAAQ,CAAEgI,EAAST,EAAOvH,CAAM,CAAG,EACrE,WAAuB,SAAWA,EAAQ,CAAEiI,EAAcV,EAAOvH,CAAM,CAAG,EAC1E,eAAuB,SAAWA,EAAQ,CAAEiI,EAAcV,EAAOvH,CAAM,CAAG,EAC1E,oBAAuB,SAAWA,EAAQ,CAAEiI,EAAcV,EAAOvH,CAAM,CAAG,EAE1E,YAAuB,SAAWA,EAAQ,CAAEkI,GAAeX,EAAOvH,CAAM,CAAG,EAE3E,WAAuB,SAAWA,EAAQ,CAAEmI,GAAgBZ,EAAOvH,CAAM,CAAG,EAC5E,WAAuB,SAAWA,EAAQ,CAAEoI,GAAgBb,EAAOvH,CAAM,CAAG,EAC5E,UAAuB,SAAWA,EAAQ,CAAEqI,GAAed,EAAOvH,CAAM,CAAG,EAC3E,SAAuB,SAAWA,EAAQ,CAAEsI,GAAcf,EAAOvH,CAAM,CAAG,EAC1E,UAAuB,SAAWA,EAAQ,CAAEuI,GAAehB,EAAOvH,CAAM,CAAG,EAC3E,QAAuB,SAAWA,EAAQ,CAAEwI,GAAajB,EAAOvH,CAAM,CAAG,EACzE,UAAuB,SAAWA,EAAQ,CAAEyI,GAAelB,EAAOvH,CAAM,CAAG,EAE3E,WAAuB,SAAWA,EAAQ,CAAE0I,GAAcnB,EAAOvH,CAAM,CAAG,EAC1E,SAAuB,SAAWA,EAAQ,CAAE2I,GAAYpB,EAAOvH,CAAM,CAAG,EACxE,UAAuB,SAAWA,EAAQ,CAAE4I,GAAarB,EAAOvH,CAAM,CAAG,EACzE,YAAuB,SAAWA,EAAQ,CAAE6I,GAAetB,EAAOvH,CAAM,CAAG,EAE3E,aAAuB,SAAWA,EAAQ,CAAE8I,GAAgBvB,EAAOvH,CAAM,CAAG,EAC5E,cAAuB,SAAWA,EAAQ,CAAE+I,GAAiBxB,EAAOvH,CAAM,CAAG,EAE7E,kBAAuB,SAAWA,EAAQ,CAAEgJ,GAAqBzB,EAAOvH,CAAM,CAAG,EACjF,mBAAuB,SAAWA,EAAQ,CAAEiJ,EAAsB1B,EAAOvH,CAAM,CAAG,EAClF,aAAuB,SAAWA,EAAQ,CAAEmI,GAAgBZ,EAAOvH,CAAM,CAAG,EAC5E,aAAuB,SAAWA,EAAQ,CAAEoI,GAAgBb,EAAOvH,CAAM,CAAG,EAC5E,YAAuB,SAAWA,EAAQ,CAAEqI,GAAed,EAAOvH,CAAM,CAAG,EAC3E,WAAuB,SAAWA,EAAQ,CAAEsI,GAAcf,EAAOvH,CAAM,CAAG,EAC1E,YAAuB,SAAWA,EAAQ,CAAEuI,GAAehB,EAAOvH,CAAM,CAAG,EAC3E,UAAuB,SAAWA,EAAQ,CAAEwI,GAAajB,EAAOvH,CAAM,CAAG,EACzE,YAAuB,SAAWA,EAAQ,CAAEyI,GAAelB,EAAOvH,CAAM,CAAG,EAC3E,cAAuB,SAAWA,EAAQ,CAAEkJ,GAAiB3B,EAAOvH,CAAM,CAAG,EAC7E,kBAAuB,SAAWA,EAAQ,CAAEmJ,GAAqB5B,EAAOvH,CAAM,CAAG,EACjF,oBAAuB,SAAWA,EAAQ,CAAEoJ,GAAuB7B,EAAOvH,CAAM,CAAG,EAEnF,SAAuB,GAMvB,oBAAuB,CAAC,EAGxB,aAAuB,KACvB,gBAAuB,KAGvB,aAAuB,CAAC,EACxB,cAAuB,EACvB,iBAAuB,EACvB,gBAAuB,KACvB,mBAAuB,KAGvB,cAAuB,EAC3B,EAEA,KAAK,mBAAqB,CAAC,EAAG,KAAK,cAAgB,KAAK,wBAChC,KAAK,gBAAkB,KAAK,0BAC5B,KAAK,cAAgB,KAAK,iBAC1B,KAAK,aAAe,KAAK,gBACzB,KAAK,cAC7B,KAAK,iBAAmB,CAAC,CAAC,KAAK,cAE1BnD,EAAE,aAAa,mBAChBA,EAAE,wBAAyB,KAAK,QAAS,MAAO,EAGhD,KAAK,aACLA,EAAE,QAAQ,MAAM,gFAAgF,EAG9FD,EAAQ,eACV,KAAK,YAAa,EAAK,CAE/B,EAGAC,EAAE,aAAa,UAAY,CAMvB,QAAS,UAAY,CACjB,IAAIuB,EAKJ,IAHAiL,EAAc,IAAK,EACnB,KAAK,QAAU,KAETjL,EAAI,EAAGA,EAAIiJ,EAAc,OAAQjJ,IACnC,GAAKiJ,EAAejJ,CAAE,IAAM,KAAO,CAC/BiJ,EAAc,OAAQjJ,EAAG,CAAE,EAC3B,KACJ,CAGJkJ,EAAM,KAAK,IAAK,EAAI,KACpB,OAAOA,EAAM,KAAK,IAAK,CAC3B,EAQA,WAAY,UAAY,CACpB,OAAOA,EAAM,KAAK,IAAK,EAAE,QAC7B,EAQA,YAAa,SAAWgC,EAAQ,CAC5B,OAAKA,EACDC,EAAe,IAAK,EAEpBF,EAAc,IAAK,EAGhB,IACX,EASA,4BAA6B,SAAWG,EAAO,CAC3C,IAAIC,EAAWnC,EAAM,KAAK,IAAK,EAC3BlJ,EACAsL,EAAMD,EAAWA,EAAS,oBAAoB,OAAS,EACvDE,EAEJ,IAAMvL,EAAI,EAAGA,EAAIsL,EAAKtL,IAClB,GAAKqL,EAAS,oBAAqBrL,CAAE,EAAE,OAASoL,EAC5C,OAAOC,EAAS,oBAAqBrL,CAAE,EAI/C,OAAAuL,EAAO,IAAI9M,EAAE,aAAa,iBAAkB2M,CAAK,EAC9CC,GACCA,EAAS,oBAAoB,KAAME,CAAK,EAErCA,CACX,EAOA,sBAAuB,UAAY,CAC/B,IAAIF,EAAWnC,EAAM,KAAK,IAAK,EAC3BlJ,EACAsL,EAAMD,EAAS,oBAAoB,OACnC7C,EAAQ,EAEZ,IAAMxI,EAAI,EAAGA,EAAIsL,EAAKtL,IAClBwI,GAAS6C,EAAS,oBAAqBrL,CAAE,EAAE,UAAU,EAGzD,OAAOwI,CACX,EAQA,uBAAwB,UAAY,CAAE,EAkBtC,mBAAoB,UAAY,CAAE,EA8BlC,aAAc,UAAY,CAAE,EA+B5B,aAAc,UAAY,CAAE,EA+B5B,YAAa,UAAY,CAAE,EA+B3B,YAAa,UAAY,CAAE,EA+B3B,WAAY,UAAY,CAAE,EAuB1B,aAAc,UAAY,CAAE,EA0B5B,uBAAwB,UAAY,CAAE,EA4BtC,eAAgB,UAAY,CAAE,EA0B9B,yBAA0B,UAAY,CAAE,EAuBxC,YAAa,UAAY,CAAE,EA0B3B,cAAe,UAAY,CAAE,EA0B7B,aAAc,UAAY,CAAE,EAsB5B,gBAAiB,UAAY,CAAE,EA+B/B,YAAa,UAAY,CAAE,EA0B3B,eAAgB,UAAY,CAAE,EA4B9B,aAAc,UAAY,CAAE,EAuB5B,YAAa,UAAY,CAAE,EA0B3B,eAAgB,UAAY,CAAE,EA0B9B,aAAc,UAAY,CAAE,EA0B5B,WAAY,UAAY,CAAE,EAc1B,aAAc,UAAY,CAAE,EAc5B,YAAa,UAAY,CAAE,CAC/B,EASA,IAAIgD,EAAc,UAAW,CACzB,GAAI,CACA,OAAO,OAAO,OAAS,OAAO,GAClC,OAASpM,EAAG,CACR,MAAO,EACX,CACJ,EAAG,EASH,SAASqM,EAAiB5L,EAAQ,CAC9B,GAAI,CACA,OAAOA,EAAO,kBAAoBA,EAAO,mBAC7C,OAAST,EAAG,CACR,MAAO,EACX,CACJ,CAWAX,EAAE,aAAa,4BAA+B,UAAY,CACtD,IAAIiN,EAAgB,CAAC,EACjBC,EAAa,EACbC,EAAW,EAGXC,EAAgB,SAAWC,EAASC,EAAS,CAC7C,OAAOD,EAAQ,KAAK,SAAS,EAAIC,EAAO,KAAOA,EAAO,GAAG,SAAS,CACtE,EAGIC,EAAc,UAAY,CAC1B,IAAIhM,EACAsL,EAAMI,EAAc,OACpBO,GACAF,EACAG,GAAMzN,EAAE,IAAI,EACZ0N,GACAC,GACAC,GAKJ,IAHAF,GAAcD,GAAMN,EACpBA,EAAWM,GAELlM,EAAI,EAAGA,EAAIsL,EAAKtL,IAClBiM,GAAaP,EAAe1L,CAAE,EAC9B+L,EAASE,GAAW,OAGpBF,EAAO,UAAY,KAAK,MAAOA,EAAO,WAAW,EAAIE,GAAW,QAAQ,EAAGF,EAAO,WAAW,EAAIE,GAAW,QAAQ,CAAE,EAEtHG,GAAWH,GAAW,QAAQ,WAAYF,EAAO,UAAW,EAC5DE,GAAW,QAAUF,EAAO,WAC5BM,GAAQ,IAAOD,IAAaD,GAAc,GAE1CJ,EAAO,MAAQ,IAAOM,GAAQ,IAAON,EAAO,KAEpD,EAGIO,EAAW,SAAWR,EAASC,EAAS,CACxC,IAAIQ,GAAOV,EAAeC,EAASC,CAAO,EAE1CL,EAAc,KACV,CACI,KAAMa,GACN,OAAQR,EACR,QAASA,EAAO,UACpB,CAAE,EAGDL,EAAc,SAAW,IAC1BE,EAAWnN,EAAE,IAAI,EACjBkN,EAAa,OAAO,YAAaK,EAAa,EAAG,EAEzD,EAGIQ,EAAc,SAAWV,EAASC,EAAS,CAC3C,IAAIQ,GAAOV,EAAeC,EAASC,CAAO,EACtC/L,EACAsL,GAAMI,EAAc,OACxB,IAAM1L,EAAI,EAAGA,EAAIsL,GAAKtL,IAClB,GAAK0L,EAAe1L,CAAE,EAAE,OAASuM,GAAO,CACpCb,EAAc,OAAQ1L,EAAG,CAAE,EAE3BsL,KACKA,KAAQ,GACT,OAAO,cAAeK,CAAW,EAErC,KACJ,CAER,EAEA,MAAO,CACH,SAAaW,EACb,YAAaE,CACjB,CACJ,EAAI,EAOJ/N,EAAE,aAAa,eAAiB,SAKhCA,EAAE,aAAa,eAAmB,YAAa,SAAS,cAAe,KAAM,EAAM,QACnD,SAAS,eAAiB,OAAY,aACtC,iBAKhCA,EAAE,aAAa,gBAAkB,CAAE,QAAS,WAAY,UAAW,QAAS,WAAY,QAAS,OAAQ,cAAeA,EAAE,aAAa,cAAe,EAElJA,EAAE,aAAa,iBAAmB,kBAElCA,EAAE,aAAa,gBAAgB,KAAM,qBAAsB,EAG1D,OAAO,cAERA,EAAE,aAAa,kBAAoB,GACnCA,EAAE,aAAa,gBAAgB,KAAM,eAAgB,eAAgB,cAAe,aAAc,cAAe,YAAa,cAAe,eAAgB,EAE7JA,EAAE,aAAa,mBAAsB,UAAY,CAC7C,IAAIgO,EAAa,SAAS,cAAe,KAAM,EAC/C,OAAOhO,EAAE,WAAYgO,EAAW,iBAAkB,GAAKhO,EAAE,WAAYgO,EAAW,qBAAsB,CAC1G,EAAE,EACGhO,EAAE,aAAa,oBAChBA,EAAE,aAAa,gBAAgB,KAAM,oBAAqB,oBAAqB,IAInFA,EAAE,aAAa,kBAAoB,GACnCA,EAAE,aAAa,gBAAgB,KAAM,aAAc,aAAc,YAAa,WAAY,YAAa,UAAW,WAAY,EAC9HA,EAAE,aAAa,eAAiB,eAEhCA,EAAE,aAAa,mBAAsB,UAAY,CAC7C,IAAIgO,EAAa,SAAS,cAAe,KAAM,EAC/C,OAAOhO,EAAE,WAAYgO,EAAW,UAAW,GAAKhO,EAAE,WAAYgO,EAAW,cAAe,CAC5F,EAAE,EACGhO,EAAE,aAAa,oBAChBA,EAAE,aAAa,gBAAgB,KAAM,aAAc,EAGlD,iBAAkB,QAKnBA,EAAE,aAAa,gBAAgB,KAAM,aAAc,WAAY,YAAa,aAAc,EAEzF,mBAAoB,QAGrBA,EAAE,aAAa,gBAAgB,KAAM,eAAgB,eAAgB,GAkG7EA,EAAE,aAAa,iBAAmB,SAAW2M,EAAO,CAChD,KAAK,SAAW,CAAC,EAMjB,KAAK,KAAOA,EAOZ,KAAK,QAAU,EAMf,KAAK,SAAW,EAMhB,KAAK,OAAS,EAMd,KAAK,aAAe,CACxB,EAGA3M,EAAE,aAAa,iBAAiB,UAAY,CAKxC,UAAW,UAAY,CACnB,OAAO,KAAK,SAAS,MACzB,EAKA,QAAS,UAAY,CACjB,OAAO,KAAK,QAChB,EAMA,IAAK,SAAWiO,EAAK,CACjB,OAAO,KAAK,SAAS,KAAMA,CAAG,CAClC,EAMA,WAAY,SAAWC,EAAK,CACxB,IAAI3M,EACAsL,EAAM,KAAK,SAAS,OACxB,IAAMtL,EAAI,EAAGA,EAAIsL,EAAKtL,IAClB,GAAK,KAAK,SAAUA,CAAE,EAAE,KAAO2M,EAAK,CAChC,KAAK,SAAS,OAAQ3M,EAAG,CAAE,EAC3B,KACJ,CAEJ,OAAO,KAAK,SAAS,MACzB,EAMA,WAAY,SAAW2I,EAAQ,CAC3B,OAAKA,EAAQ,KAAK,SAAS,OAChB,KAAK,SAAUA,CAAM,EAGzB,IACX,EAMA,QAAS,SAAWgE,EAAK,CACrB,IAAI3M,EACAsL,EAAM,KAAK,SAAS,OACxB,IAAMtL,EAAI,EAAGA,EAAIsL,EAAKtL,IAClB,GAAK,KAAK,SAAUA,CAAE,EAAE,KAAO2M,EAC3B,OAAO,KAAK,SAAU3M,CAAE,EAGhC,OAAO,IACX,EAKA,WAAY,SAAW2M,EAAK,CACxB,IAAI3M,EACAsL,EAAM,KAAK,SAAS,OACxB,IAAMtL,EAAI,EAAGA,EAAIsL,EAAKtL,IAClB,GAAK,KAAK,SAAUA,CAAE,EAAE,UACpB,OAAO,KAAK,SAAUA,CAAE,EAGhC,OAAO,IACX,EAOA,WAAY,UAAW,CACnB,EAAE,KAAK,SAEH,KAAK,SAAW,IAAM,KAAK,OAAS,SAAW,KAAK,OAAS,SAC7DvB,EAAE,QAAQ,KAAK,0DAA0D,EACzE,KAAK,SAAW,EAExB,EAOA,cAAe,UAAW,CACtB,EAAE,KAAK,SAEH,KAAK,SAAW,IAChB,KAAK,SAAW,EAExB,CACJ,EAYA,SAASmO,EAAsBd,EAAU,CACrC,IAAIT,EAAWnC,EAAM4C,EAAQ,IAAK,EAC9B9L,EAAGkG,EACH2G,EACAC,EACAC,EACAC,EAAmB3B,EAAS,oBAAoB,OAEpD,IAAMrL,EAAI,EAAGA,EAAIgN,EAAkBhN,IAG/B,GAFA6M,EAAaxB,EAAS,oBAAqBrL,CAAE,EAExC6M,EAAW,UAAU,EAAI,EAAI,CAK9B,IAFAE,EAAkB,CAAC,EACnBD,EAAUD,EAAW,QAAQ,EACvB3G,EAAI,EAAGA,EAAI4G,EAAQ,OAAQ5G,IAC7B6G,EAAgB,KAAMD,EAAS5G,CAAE,CAAE,EAIvC,IAAMA,EAAI,EAAGA,EAAI6G,EAAgB,OAAQ7G,IACrC+G,EAAqBnB,EAASe,EAAYE,EAAiB7G,CAAE,CAAE,CAEvE,CAGJ,IAAMlG,EAAI,EAAGA,EAAIgN,EAAkBhN,IAC/BqL,EAAS,oBAAoB,IAAI,EAGrCA,EAAS,cAAgB,EAC7B,CAOA,SAASF,EAAeW,EAAU,CAC9B,IAAIT,EAAWnC,EAAM4C,EAAQ,IAAK,EAC9BlK,EACA5B,EAEJ,GAAK,CAACqL,EAAS,SAAW,CACtB,IAAMrL,EAAI,EAAGA,EAAIvB,EAAE,aAAa,gBAAgB,OAAQuB,IACpD4B,EAAQnD,EAAE,aAAa,gBAAiBuB,CAAE,EAC1CvB,EAAE,SACEqN,EAAQ,QACRlK,EACAyJ,EAAUzJ,CAAM,EAChBA,IAAUnD,EAAE,aAAa,eAAiB,CAAE,QAAS,GAAO,QAAS,EAAM,EAAI,EACnF,EAGJmO,EAAsBd,CAAQ,EAE9BT,EAAS,SAAW,EACxB,CACJ,CAOA,SAASJ,EAAca,EAAU,CAC7B,IAAIT,EAAWnC,EAAM4C,EAAQ,IAAK,EAC9BlK,EACA5B,EAEJ,GAAKqL,EAAS,SAAW,CACrB,IAAMrL,EAAI,EAAGA,EAAIvB,EAAE,aAAa,gBAAgB,OAAQuB,IACpD4B,EAAQnD,EAAE,aAAa,gBAAiBuB,CAAE,EAC1CvB,EAAE,YACEqN,EAAQ,QACRlK,EACAyJ,EAAUzJ,CAAM,EAChB,EACJ,EAGJgL,EAAsBd,CAAQ,EAE9BT,EAAS,SAAW,EACxB,CACJ,CAMA,SAAS6B,EAAuBpB,EAASqB,EAAc,CACnD,IAAI9B,EAAWnC,EAAM4C,EAAQ,IAAK,EAElC,GAAKqB,IAAgB,eACjB,MAAO,CACH,OAAQ,YACR,UAAW9B,EAAS,kBACpB,SAAU,cACV,YAAaA,EAAS,mBAC1B,EACG,GAAK8B,IAAgB,QACxB,MAAO,CACH,OAAQ,YACR,UAAW9B,EAAS,kBACpB,SAAU,cACV,YAAaA,EAAS,mBAC1B,EACG,GAAK8B,IAAgB,QACxB,MAAO,CACH,OAAQ,WACR,UAAW9B,EAAS,iBACpB,SAAU,YACV,YAAaA,EAAS,iBAC1B,EAEA,MAAM,IAAI,MAAO,2DAA4D,CAErF,CAOA,SAAS+B,EAAgBtB,EAASC,EAAS,CACvC,IAAIsB,EAEJ,GAAK5O,EAAE,aAAa,mBAChB,GAAKA,EAAE,aAAa,kBAGhB,GAAI,CACAqN,EAAQ,QAAQ,kBAAmBC,EAAO,EAAG,CAEjD,OAAU3M,EAAI,CACVX,EAAE,QAAQ,KAAK,kDAAkD,EACjE,MACJ,MAEAqN,EAAQ,QAAQ,WAAY,EAAK,OAQrCuB,EAAcH,EAAuBpB,EAASrN,EAAE,aAAa,kBAAoB,eAAiBsN,EAAO,IAAK,EAE1GP,GAAcC,EAAgB,OAAO,GAAG,GACxChN,EAAE,SACE,OAAO,IACP4O,EAAY,OACZA,EAAY,UACZ,EACJ,EAEJ5O,EAAE,SACEA,EAAE,aAAa,eACf4O,EAAY,OACZA,EAAY,UACZ,EACJ,EACA5O,EAAE,SACEA,EAAE,aAAa,eACf4O,EAAY,SACZA,EAAY,YACZ,EACJ,EAGJC,EAAuBxB,EAASC,EAAQ,EAAK,CACjD,CAQA,SAASwB,EAAgBzB,EAASC,EAAS,CACvC,IAAIsB,EACAR,EACAW,EAEJ,GAAK/O,EAAE,aAAa,mBAChB,GAAKA,EAAE,aAAa,kBAAoB,CAGpC,GAFAoO,EAAaf,EAAQ,4BAA6BC,EAAO,IAAK,EAC9DyB,EAAeX,EAAW,QAASd,EAAO,EAAG,EACxC,CAACyB,GAAgB,CAACA,EAAa,SAChC,OAIJ,GAAI,CACA1B,EAAQ,QAAQ,sBAAuBC,EAAO,EAAG,CAErD,OAAU3M,EAAI,CAEd,CACJ,MACI0M,EAAQ,QAAQ,eAAe,OAOnCuB,EAAcH,EAAuBpB,EAASrN,EAAE,aAAa,kBAAoB,eAAiBsN,EAAO,IAAK,EAE1GP,GAAcC,EAAgB,OAAO,GAAG,GACxChN,EAAE,YACE,OAAO,IACP4O,EAAY,OACZA,EAAY,UACZ,EACJ,EAEJ5O,EAAE,YACEA,EAAE,aAAa,eACf4O,EAAY,SACZA,EAAY,YACZ,EACJ,EACA5O,EAAE,YACEA,EAAE,aAAa,eACf4O,EAAY,OACZA,EAAY,UACZ,EACJ,EAGJC,EAAuBxB,EAASC,EAAQ,EAAM,CAClD,CASA,SAAS0B,EAAc7L,EAAQ,CAC3B,OAASnD,EAAE,aAAa,kBAAsBmD,EAAM,UAAYnD,EAAE,aAAa,cACnF,CAWA,SAASiP,EAAgB9L,EAAQ,CAC7B,OAAOnD,EAAE,aAAa,mBAAqBmD,EAAM,YAAcA,EAAM,YAAc,OACvF,CASA,SAAS+L,EAAc/L,EAAQ,CAC3B,OAASnD,EAAE,aAAa,kBAAsBmD,EAAM,UAAY,EACpE,CAOA,SAASgM,EAAkBhM,EAAQ,CAC/B,OAAOnD,EAAE,iBAAkBmD,CAAM,CACrC,CAMA,SAASiM,EAAkBjM,EAAOrB,EAAU,CACxC,OAAOuN,EAA4BF,EAAkBhM,CAAM,EAAGrB,CAAQ,CAC1E,CAMA,SAASuN,EAA4BrM,EAAOlB,EAAU,CAClD,IAAImB,EAASjD,EAAE,iBAAkB8B,CAAQ,EACzC,OAAOkB,EAAM,MAAOC,CAAO,CAC/B,CAMA,SAASqM,EAAgBC,EAAQC,EAAS,CACtC,OAAO,IAAIxP,EAAE,OAASuP,EAAO,EAAIC,EAAO,GAAM,GAAKD,EAAO,EAAIC,EAAO,GAAM,CAAE,CACjF,CAWA,SAAS7E,EAAS0C,EAASlK,EAAQ,CAG/B,IAAIsM,EAAY,CACZ,cAAetM,EACf,UAAW,QACX,YAAa,QACb,WAAY,EAChB,EACAuM,EAAiBrC,EAASoC,CAAU,EAE/BA,EAAU,gBAAkB,CAACA,EAAU,kBACxCzP,EAAE,YAAamD,CAAM,EAEpBsM,EAAU,iBACXzP,EAAE,UAAWmD,CAAM,CAE3B,CAOA,SAASyH,EAAYyC,EAASlK,EAAQ,CAGlC,IAAIsM,EAAY,CACZ,cAAetM,EACf,UAAW,WACX,YAAa,QACb,WAAY,EAChB,EACAuM,EAAiBrC,EAASoC,CAAU,EAE/BA,EAAU,gBAAkB,CAACA,EAAU,kBACxCzP,EAAE,YAAamD,CAAM,EAEpBsM,EAAU,iBACXzP,EAAE,UAAWmD,CAAM,CAE3B,CAOA,SAAS0H,EAAWwC,EAASlK,EAAQ,CAEjC,IAAImH,EAAY,KAEZmF,EAAY,CACZ,cAAetM,EACf,UAAW,UACX,YAAa,GACb,WAAY,EAChB,EACAuM,EAAiBrC,EAASoC,CAAU,EAE/BpC,EAAQ,gBAAkB,CAACoC,EAAU,gBAAkB,CAACA,EAAU,mBACnEnF,EAAY,CACR,YAAsB+C,EACtB,QAAsBlK,EAAM,QAAUA,EAAM,QAAUA,EAAM,SAC5D,KAAsBA,EAAM,QAC5B,MAAsBA,EAAM,SAC5B,IAAsBA,EAAM,OAC5B,KAAsBA,EAAM,QAC5B,cAAsBA,EACtB,eAAsBsM,EAAU,gBAAkBA,EAAU,iBAC5D,SAAsBpC,EAAQ,QAClC,EAEAA,EAAQ,eAAgB/C,CAAU,IAG/BA,GAAaA,EAAU,gBAAsBmF,EAAU,gBAAkB,CAACA,EAAU,mBACnFzP,EAAE,YAAamD,CAAM,EAExBsM,EAAU,iBACXzP,EAAE,UAAWmD,CAAM,CAE3B,CAOA,SAAS2H,EAASuC,EAASlK,EAAQ,CAG/B,IAAImH,EAAY,KAEZmF,EAAY,CACZ,cAAetM,EACf,UAAW,QACX,YAAa,GACb,WAAY,EAChB,EACAuM,EAAiBrC,EAASoC,CAAU,EAE/BpC,EAAQ,cAAgB,CAACoC,EAAU,gBAAkB,CAACA,EAAU,mBACjEnF,EAAY,CACR,YAAsB+C,EACtB,QAAsBlK,EAAM,QAAUA,EAAM,QAAUA,EAAM,SAC5D,KAAsBA,EAAM,QAC5B,MAAsBA,EAAM,SAC5B,IAAsBA,EAAM,OAC5B,KAAsBA,EAAM,QAC5B,cAAsBA,EACtB,eAAsBsM,EAAU,gBAAkBA,EAAU,iBAC5D,SAAsBpC,EAAQ,QAClC,EAEAA,EAAQ,aAAc/C,CAAU,IAG7BA,GAAaA,EAAU,gBAAsBmF,EAAU,gBAAkB,CAACA,EAAU,mBACvFzP,EAAE,YAAamD,CAAM,EAEpBsM,EAAU,iBACXzP,EAAE,UAAWmD,CAAM,CAE3B,CAOA,SAAS4H,EAAYsC,EAASlK,EAAQ,CAGlC,IAAImH,EAAY,KAEZmF,EAAY,CACZ,cAAetM,EACf,UAAW,WACX,YAAa,GACb,WAAY,EAChB,EACAuM,EAAiBrC,EAASoC,CAAU,EAE/BpC,EAAQ,YAAc,CAACoC,EAAU,gBAAkB,CAACA,EAAU,mBAC/DnF,EAAY,CACR,YAAsB+C,EACtB,QAAsBlK,EAAM,QAAUA,EAAM,QAAUA,EAAM,SAC5D,KAAsBA,EAAM,QAC5B,MAAsBA,EAAM,SAC5B,IAAsBA,EAAM,OAC5B,KAAsBA,EAAM,QAC5B,cAAsBA,EACtB,eAAsBsM,EAAU,gBAAkBA,EAAU,iBAC5D,SAAsBpC,EAAQ,QAClC,EAEAA,EAAQ,WAAY/C,CAAU,IAG3BA,GAAaA,EAAU,gBAAsBmF,EAAU,gBAAkB,CAACA,EAAU,mBACvFzP,EAAE,YAAamD,CAAM,EAEpBsM,EAAU,iBACXzP,EAAE,UAAWmD,CAAM,CAE3B,CAOA,SAAS6H,EAASqC,EAASlK,EAAQ,CAM/B,IAAIsM,EAAY,CACZ,cAAetM,EACf,UAAW,QACX,YAAa,GACb,WAAY,EAChB,EACAuM,EAAiBrC,EAASoC,CAAU,EAE/BpC,EAAQ,cAAgB,CAACoC,EAAU,gBACpCpC,EAAQ,aACJ,CACI,YAAsBA,EACtB,cAAsBlK,EACtB,SAAsBkK,EAAQ,QAClC,CACJ,CAER,CAOA,SAASpC,EAAQoC,EAASlK,EAAQ,CAM9B,IAAIsM,EAAY,CACZ,cAAetM,EACf,UAAW,OACX,YAAa,GACb,WAAY,EAChB,EACAuM,EAAiBrC,EAASoC,CAAU,EAE/BpC,EAAQ,aAAe,CAACoC,EAAU,gBACnCpC,EAAQ,YACJ,CACI,YAAsBA,EACtB,cAAsBlK,EACtB,SAAsBkK,EAAQ,QAClC,CACJ,CAER,CAOA,SAASnC,EAAemC,EAASlK,EAAQ,CAGrC,IAAImH,EAAY,KAEZmF,EAAY,CACZ,cAAetM,EACf,UAAW,cACX,YAAa,QACb,WAAY,EAChB,EACAuM,EAAiBrC,EAASoC,CAAU,EAG/BpC,EAAQ,oBAAsB,CAACoC,EAAU,gBAAkB,CAACA,EAAU,mBACvEnF,EAAY,CACR,YAAsB+C,EACtB,SAAsBgC,EAA4BF,EAAkBhM,CAAM,EAAGkK,EAAQ,OAAQ,EAC7F,cAAsBoC,EAAU,cAChC,eAAsBA,EAAU,gBAAkBA,EAAU,iBAC5D,SAAsBpC,EAAQ,QAClC,EAEAA,EAAQ,mBAAoB/C,CAAU,IAGnCA,GAAaA,EAAU,gBAAsBmF,EAAU,gBAAkB,CAACA,EAAU,mBACvFzP,EAAE,YAAamD,CAAM,EAEpBsM,EAAU,iBACXzP,EAAE,UAAWmD,CAAM,CAE3B,CASA,SAASgI,EAASkC,EAASlK,EAAQ,CAC/BwM,EAAkBtC,EAASlK,EAAOA,CAAM,CAC5C,CASA,SAASiI,EAAciC,EAASlK,EAAQ,CAEpC,IAAIyM,EAAiB,CACjB,OAAYzM,EAAM,QAAUA,EAAM,WAClC,KAAY,QACZ,SAAYA,EAAM,UAAY,GAC9B,QAAYA,EAAM,QAClB,QAAYA,EAAM,QAClB,MAAYA,EAAM,MAAQA,EAAM,MAAQA,EAAM,QAC9C,MAAYA,EAAM,MAAQA,EAAM,MAAQA,EAAM,QAC9C,UAAYA,EAAM,OAAS,sBAAwB,EAAI,EACvD,OAAY,EACZ,OAAY,CAChB,EAGKnD,EAAE,aAAa,iBAAmB,aACnC4P,EAAe,OAAS,CAACzM,EAAM,WAAanD,EAAE,iBAAiB,mBAE/D4P,EAAe,OAASzM,EAAM,OAGlCwM,EAAkBtC,EAASuC,EAAgBzM,CAAM,CACrD,CAUA,SAASwM,EAAkBtC,EAASlK,EAAO0M,EAAgB,CACvD,IAAIC,EAAS,EACTL,EAEAnF,EAAY,KAOhBwF,EAAS3M,EAAM,OAAUA,EAAM,OAAS,EAAI,EAAI,GAAM,EAEtDsM,EAAY,CACR,cAAetM,EACf,UAAW,QACX,YAAa,QACb,WAAYA,IAAU0M,CAC1B,EACAH,EAAiBrC,EAASoC,CAAU,EAE/BpC,EAAQ,eAAiB,CAACoC,EAAU,gBAAkB,CAACA,EAAU,mBAClEnF,EAAY,CACR,YAAsB+C,EACtB,YAAsB,QACtB,SAAsB+B,EAAkBjM,EAAOkK,EAAQ,OAAQ,EAC/D,OAAsByC,EACtB,MAAsB3M,EAAM,SAC5B,aAAsB,GACtB,cAAsB0M,EACtB,eAAsBJ,EAAU,gBAAkBA,EAAU,iBAC5D,SAAsBpC,EAAQ,QAClC,EAGAA,EAAQ,cAAe/C,CAAU,GAGhCmF,EAAU,iBACXzP,EAAE,UAAW6P,CAAc,GAExBvF,GAAaA,EAAU,gBAAsBmF,EAAU,gBAAkB,CAACA,EAAU,mBACnFzP,EAAE,YAAa6P,CAAc,CAE7C,CAQI,SAASxE,GAAegC,EAASlK,EAAQ,CAGrC,IAAImK,EAAS,CACT,GAAItN,EAAE,aAAa,eACnB,KAAM,OACV,EAEIyP,EAAY,CACZ,cAAetM,EACf,UAAW,qBACX,YAAa,QACb,WAAY,EAChB,EACAuM,EAAiBrC,EAASoC,CAAU,EAE/BtM,EAAM,SAAWkK,EAAQ,SAC1BwB,EAAuBxB,EAASC,EAAQ,EAAM,EAG7CmC,EAAU,iBACXzP,EAAE,UAAWmD,CAAM,CAE3B,CAOA,SAAS0I,GAAcwB,EAASlK,EAAQ,CACpC,IAAImE,EACA/F,EACAwO,EAAa5M,EAAM,eAAe,OAClCmK,EACAc,EAAaf,EAAQ,4BAA6B,OAAQ,EAE9D/F,EAAOtH,EAAE,IAAI,EAIRoO,EAAW,UAAU,EAAIjL,EAAM,QAAQ,OAAS4M,GACjD/P,EAAE,QAAQ,KAAK,gEAAiE,EAGpF,IAAIyP,EAAY,CACZ,cAAetM,EACf,UAAW,cACX,YAAa,QACb,WAAY,EAChB,EAGA,IAFAuM,EAAiBrC,EAASoC,CAAU,EAE9BlO,EAAI,EAAGA,EAAIwO,EAAYxO,IACzB+L,EAAS,CACL,GAAInK,EAAM,eAAgB5B,CAAE,EAAE,WAC9B,KAAM,QAEN,UAAW6M,EAAW,UAAU,IAAM,EACtC,WAAYe,EAAkBhM,EAAM,eAAgB5B,CAAE,CAAE,EACxD,YAAa+F,CACjB,EAGA0I,EAAoB3C,EAASoC,EAAWnC,CAAO,EAE/C2C,EAAmB5C,EAASoC,EAAWnC,EAAQ,CAAE,EAEjDuB,EAAuBxB,EAASC,EAAQ,EAAK,EAG5CmC,EAAU,gBAAkB,CAACA,EAAU,kBACxCzP,EAAE,YAAamD,CAAM,EAEpBsM,EAAU,iBACXzP,EAAE,UAAWmD,CAAM,CAE3B,CAOA,SAAS2I,GAAYuB,EAASlK,EAAQ,CAClC,IAAImE,EACA/F,EACAwO,EAAa5M,EAAM,eAAe,OAClCmK,EAEJhG,EAAOtH,EAAE,IAAI,EAIb,IAAIyP,EAAY,CACZ,cAAetM,EACf,UAAW,YACX,YAAa,QACb,WAAY,EAChB,EAGA,IAFAuM,EAAiBrC,EAASoC,CAAU,EAE9BlO,EAAI,EAAGA,EAAIwO,EAAYxO,IACzB+L,EAAS,CACL,GAAInK,EAAM,eAAgB5B,CAAE,EAAE,WAC9B,KAAM,QACN,WAAY4N,EAAkBhM,EAAM,eAAgB5B,CAAE,CAAE,EACxD,YAAa+F,CACjB,EAEA4I,EAAiB7C,EAASoC,EAAWnC,EAAQ,CAAE,EAE/CuB,EAAuBxB,EAASC,EAAQ,EAAM,EAG9C6C,EAAoB9C,EAASoC,EAAWnC,CAAO,EAG9CmC,EAAU,gBAAkB,CAACA,EAAU,kBACxCzP,EAAE,YAAamD,CAAM,EAEpBsM,EAAU,iBACXzP,EAAE,UAAWmD,CAAM,CAE3B,CAOA,SAAS4I,GAAasB,EAASlK,EAAQ,CACnC,IAAImE,EACA/F,EACAwO,EAAa5M,EAAM,eAAe,OAClCmK,EAEJhG,EAAOtH,EAAE,IAAI,EAEb,IAAIyP,EAAY,CACZ,cAAetM,EACf,UAAW,cACX,YAAa,QACb,WAAY,EAChB,EAGA,IAFAuM,EAAiBrC,EAASoC,CAAU,EAE9BlO,EAAI,EAAGA,EAAIwO,EAAYxO,IACzB+L,EAAS,CACL,GAAInK,EAAM,eAAgB5B,CAAE,EAAE,WAC9B,KAAM,QACN,WAAY4N,EAAkBhM,EAAM,eAAgB5B,CAAE,CAAE,EACxD,YAAa+F,CACjB,EAEA8I,EAAmB/C,EAASoC,EAAWnC,CAAO,EAG7CmC,EAAU,gBAAkB,CAACA,EAAU,kBACxCzP,EAAE,YAAamD,CAAM,EAEpBsM,EAAU,iBACXzP,EAAE,UAAWmD,CAAM,CAE3B,CAOA,SAAS6I,GAAeqB,EAASlK,EAAQ,CACrC,IAAI4M,EAAa5M,EAAM,eAAe,OAClC5B,EACA+L,EAIAmC,EAAY,CACZ,cAAetM,EACf,UAAW,gBACX,YAAa,QACb,WAAY,EAChB,EAGA,IAFAuM,EAAiBrC,EAASoC,CAAU,EAE9BlO,EAAI,EAAGA,EAAIwO,EAAYxO,IACzB+L,EAAS,CACL,GAAInK,EAAM,eAAgB5B,CAAE,EAAE,WAC9B,KAAM,OACV,EAGA8O,EAAqBhD,EAASoC,EAAWnC,CAAO,EAG/CmC,EAAU,iBACXzP,EAAE,UAAWmD,CAAM,CAE3B,CAOA,SAAS8I,GAAgBoB,EAASlK,EAAQ,CACtC,OAAMnD,EAAE,gBAAiBmD,CAAM,GAC3BA,EAAM,eAAe,EAElB,EACX,CAOA,SAAS+I,GAAiBmB,EAASlK,EAAQ,CACvC,OAAMnD,EAAE,gBAAiBmD,CAAM,GAC3BA,EAAM,eAAe,EAElB,EACX,CAOA,SAASgJ,GAAqBkB,EAASlK,EAAQ,CAG3C,IAAIsM,EAAY,CACZ,cAAetM,EACf,UAAW,oBACX,YAAa8L,EAAgB9L,CAAM,EACnC,WAAY,EAChB,EACAuM,EAAiBrC,EAASoC,CAAU,EAE/BtM,EAAM,SAAWkK,EAAQ,SAE1BwB,EAAuBxB,EAAS,CAC5B,GAAIlK,EAAM,UACV,KAAM8L,EAAgB9L,CAAM,CAChC,EAAG,EAAK,EAGPsM,EAAU,iBACXzP,EAAE,UAAWmD,CAAM,CAE3B,CAOA,SAASiJ,EAAsBiB,EAASlK,EAAQ,CAG5C,IAAIsM,EAAY,CACZ,cAAetM,EACf,UAAW,qBACX,YAAa8L,EAAgB9L,CAAM,EACnC,WAAY,EAChB,EACAuM,EAAiBrC,EAASoC,CAAU,EAE/BtM,EAAM,SAAWkK,EAAQ,SAE1BwB,EAAuBxB,EAAS,CAC5B,GAAIlK,EAAM,UACV,KAAM8L,EAAgB9L,CAAM,CAChC,EAAG,EAAM,EAGRsM,EAAU,iBACXzP,EAAE,UAAWmD,CAAM,CAE3B,CAUA,SAASmI,GAAgB+B,EAASlK,EAAQ,CAGtC,IAAImK,EAAS,CACT,GAAI0B,EAAc7L,CAAM,EACxB,KAAM8L,EAAgB9L,CAAM,EAC5B,UAAW+L,EAAc/L,CAAM,EAC/B,WAAYgM,EAAkBhM,CAAM,EACpC,YAAanD,EAAE,IAAI,CACvB,EAKIyP,EAAY,CACZ,cAAetM,EACf,UAAW,eACX,YAAamK,EAAO,KACpB,WAAY,EAChB,EACAoC,EAAiBrC,EAASoC,CAAU,EAEpCO,EAAoB3C,EAASoC,EAAWnC,CAAO,CACnD,CAUA,SAAS/B,GAAgB8B,EAASlK,EAAQ,CAGtC,IAAImK,EAAS,CACT,GAAI0B,EAAc7L,CAAM,EACxB,KAAM8L,EAAgB9L,CAAM,EAC5B,UAAW+L,EAAc/L,CAAM,EAC/B,WAAYgM,EAAkBhM,CAAM,EACpC,YAAanD,EAAE,IAAI,CACvB,EAKIyP,EAAY,CACZ,cAAetM,EACf,UAAW,eACX,YAAamK,EAAO,KACpB,WAAY,EAChB,EACAoC,EAAiBrC,EAASoC,CAAU,EAEpCU,EAAoB9C,EAASoC,EAAWnC,CAAO,CACnD,CAUA,SAAS9B,GAAe6B,EAASlK,EAAQ,CAGrC,IAAImK,EAAS,CACT,GAAI0B,EAAc7L,CAAM,EACxB,KAAM8L,EAAgB9L,CAAM,EAC5B,UAAW+L,EAAc/L,CAAM,EAC/B,WAAYgM,EAAkBhM,CAAM,EACpC,YAAanD,EAAE,IAAI,CACvB,EAEIyP,EAAY,CACZ,cAAetM,EACf,UAAW,cACX,YAAamK,EAAO,KACpB,WAAY,EAChB,EACAoC,EAAiBrC,EAASoC,CAAU,EAEpCa,EAAmBjD,EAASoC,EAAWnC,CAAO,EAEzCmC,EAAU,gBAAkB,CAACA,EAAU,kBACxCzP,EAAE,YAAamD,CAAM,EAEpBsM,EAAU,iBACXzP,EAAE,UAAWmD,CAAM,CAE3B,CAUA,SAASsI,GAAc4B,EAASlK,EAAQ,CAGpC,IAAImK,EAAS,CACT,GAAI0B,EAAc7L,CAAM,EACxB,KAAM8L,EAAgB9L,CAAM,EAC5B,UAAW+L,EAAc/L,CAAM,EAC/B,WAAYgM,EAAkBhM,CAAM,EACpC,YAAanD,EAAE,IAAI,CACvB,EAEIyP,EAAY,CACZ,cAAetM,EACf,UAAW,aACX,YAAamK,EAAO,KACpB,WAAY,EAChB,EACAoC,EAAiBrC,EAASoC,CAAU,EAEpCc,EAAkBlD,EAASoC,EAAWnC,CAAO,EAExCmC,EAAU,gBAAkB,CAACA,EAAU,kBACxCzP,EAAE,YAAamD,CAAM,EAEpBsM,EAAU,iBACXzP,EAAE,UAAWmD,CAAM,CAE3B,CAUA,SAASuI,GAAe2B,EAASlK,EAAQ,CACrC,IAAImK,EAAS,CACT,GAAI0B,EAAc7L,CAAM,EACxB,KAAM8L,EAAgB9L,CAAM,EAC5B,UAAW+L,EAAc/L,CAAM,EAC/B,WAAYgM,EAAkBhM,CAAM,EACpC,YAAanD,EAAE,IAAI,CACvB,EASIwQ,EAAqBxQ,EAAE,aAAa,mBAChBsN,EAAO,OAAS,QAIpCmC,EAAY,CACZ,cAAetM,EACf,UAAW,cACX,YAAamK,EAAO,KACpB,WAAY,EAChB,EACAoC,EAAiBrC,EAASoC,CAAU,EAEpCQ,EAAmB5C,EAASoC,EAAWnC,EAAQnK,EAAM,MAAO,EAEvDsM,EAAU,gBAAkB,CAACA,EAAU,kBACxCzP,EAAE,YAAamD,CAAM,EAEpBsM,EAAU,iBACXzP,EAAE,UAAWmD,CAAM,EAElBsM,EAAU,gBACNe,EACD3B,EAAuBxB,EAASC,EAAQ,EAAK,EAE7CqB,EAAgBtB,EAASC,CAAO,EAG5C,CAUA,SAAS3B,GAAa0B,EAASlK,EAAQ,CACnCsN,GAAiBpD,EAASlK,CAAM,CACpC,CAaA,SAASmJ,GAAqBe,EAASlK,EAAQ,CAC3C,IAAIiL,EAAaf,EAAQ,4BAA6B4B,EAAgB9L,CAAM,CAAE,EACzEiL,EAAW,QAASjL,EAAM,SAAU,GACrCsN,GAAiBpD,EAASlK,CAAM,EAEpCnD,EAAE,UAAWmD,CAAM,CACvB,CAUA,SAASsN,GAAiBpD,EAASlK,EAAQ,CACvC,IAAImK,EAIJA,EAAS,CACL,GAAI0B,EAAc7L,CAAM,EACxB,KAAM8L,EAAgB9L,CAAM,EAC5B,UAAW+L,EAAc/L,CAAM,EAC/B,WAAYgM,EAAkBhM,CAAM,EACpC,YAAanD,EAAE,IAAI,CACvB,EAEA,IAAIyP,EAAY,CACZ,cAAetM,EACf,UAAW,YACX,YAAamK,EAAO,KACpB,WAAY,EAChB,EACAoC,EAAiBrC,EAASoC,CAAU,EAEpCS,EAAiB7C,EAASoC,EAAWnC,EAAQnK,EAAM,MAAO,EAErDsM,EAAU,gBAAkB,CAACA,EAAU,kBACxCzP,EAAE,YAAamD,CAAM,EAEpBsM,EAAU,iBACXzP,EAAE,UAAWmD,CAAM,EAMlBsM,EAAU,uBACNtM,EAAM,SAAWkK,EAAQ,QAC1ByB,EAAgBzB,EAASC,CAAO,EAEhCuB,EAAuBxB,EAASC,EAAQ,EAAM,EAG1D,CAUA,SAAS1B,GAAeyB,EAASlK,EAAQ,CACrCuN,GAAmBrD,EAASlK,CAAM,CACtC,CAaA,SAASoJ,GAAuBc,EAASlK,EAAQ,CAC7C,IAAIiL,EAAaf,EAAQ,4BAA6B4B,EAAgB9L,CAAM,CAAE,EACzEiL,EAAW,QAASjL,EAAM,SAAU,GACrCuN,GAAmBrD,EAASlK,CAAM,EAEtCnD,EAAE,UAAWmD,CAAM,CACvB,CAUA,SAASuN,GAAmBrD,EAASlK,EAAQ,CAGzC,IAAImK,EAAS,CACT,GAAI0B,EAAc7L,CAAM,EACxB,KAAM8L,EAAgB9L,CAAM,EAC5B,UAAW+L,EAAc/L,CAAM,EAC/B,WAAYgM,EAAkBhM,CAAM,EACpC,YAAanD,EAAE,IAAI,CACvB,EAEIyP,EAAY,CACZ,cAAetM,EACf,UAAW,cACX,YAAamK,EAAO,KACpB,WAAY,EAChB,EACAoC,EAAiBrC,EAASoC,CAAU,EAEpCW,EAAmB/C,EAASoC,EAAWnC,CAAO,EAEzCmC,EAAU,gBAAkB,CAACA,EAAU,kBACxCzP,EAAE,YAAamD,CAAM,EAEpBsM,EAAU,iBACXzP,EAAE,UAAWmD,CAAM,CAE3B,CAOA,SAASkJ,GAAiBgB,EAASlK,EAAQ,CAGvC,IAAImK,EAAS,CACT,GAAInK,EAAM,UACV,KAAM8L,EAAgB9L,CAAM,CAChC,EAEIsM,EAAY,CACZ,cAAetM,EACf,UAAW,gBACX,YAAamK,EAAO,KACpB,WAAY,EAChB,EACAoC,EAAiBrC,EAASoC,CAAU,EAGpCY,EAAqBhD,EAASoC,EAAWnC,CAAO,EAE3CmC,EAAU,iBACXzP,EAAE,UAAWmD,CAAM,CAE3B,CAiBA,SAASwN,GAAsBvC,EAAYd,EAAS,CAEhD,OAAAA,EAAO,MAAQ,EACfA,EAAO,UAAY,EACnBA,EAAO,WAAaA,EAAO,WAC3BA,EAAO,YAAcA,EAAO,YAC5BA,EAAO,QAAUA,EAAO,WACxBA,EAAO,SAAWA,EAAO,YAElBc,EAAW,IAAKd,CAAO,CAClC,CAeA,SAASkB,EAAqBnB,EAASe,EAAYd,EAAS,CAExD,IAAIsD,EAEAC,EAAgBzC,EAAW,QAASd,EAAO,EAAG,EAElD,OAAKuD,GACIA,EAAc,WACf7Q,EAAE,QAAQ,KAAK,kDAAkD,EACjE8O,EAAgBzB,EAASwD,CAAc,GAM3CzC,EAAW,cAAc,EAEzBwC,EAAaxC,EAAW,WAAYd,EAAO,EAAG,GAE9CsD,EAAaxC,EAAW,UAAU,EAG/BwC,CACX,CAQA,SAASE,EAAyBzD,EAASoC,EAAY,CACnD,OAASA,EAAU,UAAY,CAC3B,IAAK,cACDA,EAAU,YAAc,GACxBA,EAAU,aAAe,GACzBA,EAAU,eAAiB,GAC3BA,EAAU,eAAiB,CAACpC,EAAQ,mBACpCoC,EAAU,gBAAkB,GAC5B,MACJ,IAAK,cACL,IAAK,aACL,IAAK,cACL,IAAK,UACL,IAAK,QACL,IAAK,WACDA,EAAU,YAAc,GACxBA,EAAU,aAAe,GACzBA,EAAU,eAAiB,GAC3BA,EAAU,eAAiB,GAC3BA,EAAU,gBAAkB,GAC5B,MACJ,IAAK,cACDA,EAAU,YAAc,GACxBA,EAAU,aAAe,GACzBA,EAAU,eAAiB,GAC3BA,EAAU,eAAiB,CAACpC,EAAQ,mBACpCoC,EAAU,gBAAkB,GAC5B,MACJ,IAAK,YACDA,EAAU,YAAc,GACxBA,EAAU,aAAe,GACzBA,EAAU,eAAiB,GAC3BA,EAAU,eAAiB,CAACpC,EAAQ,mBACpCoC,EAAU,gBAAkB,GAC5B,MACJ,IAAK,QACDA,EAAU,YAAc,GACxBA,EAAU,aAAe,GACzBA,EAAU,eAAiB,GAC3BA,EAAU,eAAiB,CAACpC,EAAQ,iBACpCoC,EAAU,gBAAkB,GAC5B,MACJ,IAAK,oBACL,IAAK,qBACL,IAAK,gBACDA,EAAU,YAAc,GACxBA,EAAU,aAAe,GACzBA,EAAU,eAAiB,GAC3BA,EAAU,eAAiB,GAC3BA,EAAU,gBAAkB,GAC5B,MACJ,IAAK,QACDA,EAAU,YAAc,GACxBA,EAAU,aAAe,GACzBA,EAAU,eAAiB,CAAC,CAACpC,EAAQ,aACrCoC,EAAU,eAAiB,GAC3BA,EAAU,gBAAkB,GAC5B,MACJ,IAAK,WACDA,EAAU,YAAc,GACxBA,EAAU,aAAe,GACzBA,EAAU,eAAiB,CAAC,CAACpC,EAAQ,gBACrCoC,EAAU,eAAiB,GAC3BA,EAAU,gBAAkB,GAC5B,MACJ,IAAK,QACL,IAAK,OACL,IAAK,eACL,IAAK,eACL,QACIA,EAAU,YAAc,GACxBA,EAAU,aAAe,GACzBA,EAAU,eAAiB,GAC3BA,EAAU,eAAiB,GAC3BA,EAAU,gBAAkB,GAC5B,KACR,CACJ,CAmBA,SAASC,EAAiBrC,EAASoC,EAAY,CAC3CA,EAAU,YAAcpC,EACxBoC,EAAU,WAAaA,EAAU,eACf,OAAOA,EAAU,cAAc,YAAe,YAC5BA,EAAU,cAAc,WAAkB,EAC9EA,EAAU,iBAAmBzP,EAAE,gBAAiByP,EAAU,aAAc,EACxEA,EAAU,cAAgB,GAC1BA,EAAU,qBAAuB,GACjCA,EAAU,SAAWpC,EAAQ,SAE7ByD,EAAyBzD,EAASoC,CAAU,EAEvCpC,EAAQ,wBACTA,EAAQ,uBAAwBoC,CAAU,CAElD,CAgBA,SAASZ,EAAuBxB,EAASC,EAAQyD,EAAa,CAC1D,IAAI3C,EAAaf,EAAQ,4BAA6BC,EAAO,IAAK,EAC9D0D,EAAe5C,EAAW,QAASd,EAAO,EAAG,EAE5C0D,EACID,GAAc,CAACC,EAAa,UAC7BA,EAAa,SAAW,GACxB5C,EAAW,gBACH,CAAC2C,GAAcC,EAAa,WACpCA,EAAa,SAAW,GACxB5C,EAAW,eACNA,EAAW,aAAe,IAC3BA,EAAW,aAAe,EAC1BpO,EAAE,QAAQ,KAAK,iEAAiE,IAIxFA,EAAE,QAAQ,KAAK,qDAAqD,CAE5E,CAcA,SAASgQ,EAAoB3C,EAASoC,EAAWnC,EAAS,CACtD,IAAIc,EAAaf,EAAQ,4BAA6BC,EAAO,IAAK,EAC9D0D,EAEJA,EAAe5C,EAAW,QAASd,EAAO,EAAG,EAExC0D,GAEDA,EAAa,cAAgB,GAC7BA,EAAa,QAAUA,EAAa,WACpCA,EAAa,SAAWA,EAAa,YACrCA,EAAa,WAAa1D,EAAO,WACjC0D,EAAa,YAAc1D,EAAO,YAElCA,EAAS0D,IAGT1D,EAAO,SAAW,GAClBA,EAAO,qBAAuB,GAC9BA,EAAO,cAAgB,GACvBqD,GAAsBvC,EAAYd,CAAO,GAIxCD,EAAQ,cACTA,EAAQ,aACJ,CACI,YAAsBA,EACtB,YAAsBC,EAAO,KAC7B,SAAsB+B,EAA4B/B,EAAO,WAAYD,EAAQ,OAAQ,EACrF,QAAsBe,EAAW,QACjC,SAAsBf,EAAQ,sBAAsB,EACpD,qBAAsBC,EAAO,qBAC7B,cAAsBc,EAAW,UAAY,EAC7C,aAAsBd,EAAO,OAAS,QACtC,cAAsBmC,EAAU,cAChC,SAAsBpC,EAAQ,QAClC,CACJ,CAER,CAcA,SAAS8C,EAAoB9C,EAASoC,EAAWnC,EAAS,CACtD,IAAIc,EAAaf,EAAQ,4BAA4BC,EAAO,IAAI,EAC5D0D,EACAC,EAEJD,EAAe5C,EAAW,QAASd,EAAO,EAAG,EAExC0D,GAEIA,EAAa,UACdA,EAAa,cAAgB,GAC7BA,EAAa,QAAUA,EAAa,WACpCA,EAAa,SAAWA,EAAa,YACrCA,EAAa,WAAa1D,EAAO,WACjC0D,EAAa,YAAc1D,EAAO,aAElCkB,EAAqBnB,EAASe,EAAY4C,CAAa,EAG3D1D,EAAS0D,IAET1D,EAAO,SAAW,GAClBA,EAAO,qBAAuB,KAK7BD,EAAQ,cAAgBA,EAAQ,eACjC4D,EAAmB,CACf,YAAsB5D,EACtB,YAAsBC,EAAO,KAE7B,SAAsBA,EAAO,YAAc+B,EAA4B/B,EAAO,WAAYD,EAAQ,OAAQ,EAC1G,QAAsBe,EAAW,QACjC,SAAsBf,EAAQ,sBAAsB,EACpD,qBAAsBC,EAAO,qBAC7B,cAAsBc,EAAW,UAAY,EAC7C,aAAsBd,EAAO,OAAS,QACtC,cAAsBmC,EAAU,cAChC,SAAsBpC,EAAQ,QAClC,EAEKA,EAAQ,cACTA,EAAQ,aAAc4D,CAAiB,EAGtC5D,EAAQ,aACTA,EAAQ,YAAa4D,CAAiB,EAGlD,CAcA,SAASX,EAAmBjD,EAASoC,EAAWnC,EAAS,CACrD,IAAIc,EACA4C,EAEJ5C,EAAaf,EAAQ,4BAA6BC,EAAO,IAAK,EAE9D0D,EAAe5C,EAAW,QAASd,EAAO,EAAG,EAExC0D,EACD1D,EAAS0D,GAET1D,EAAO,SAAW,GAClBA,EAAO,qBAAuB,IAI7BD,EAAQ,aAETA,EAAQ,YACJ,CACI,YAAsBA,EACtB,YAAsBC,EAAO,KAC7B,SAAsB+B,EAA4B/B,EAAO,WAAYD,EAAQ,OAAQ,EACrF,QAAsBe,EAAW,QACjC,SAAsBf,EAAQ,sBAAsB,EACpD,qBAAsBC,EAAO,qBAC7B,cAAsBc,EAAW,UAAY,EAC7C,aAAsBd,EAAO,OAAS,QACtC,cAAsBmC,EAAU,cAChC,SAAsBpC,EAAQ,QAClC,CACJ,CAER,CAaA,SAASkD,EAAkBlD,EAASoC,EAAWnC,EAAS,CACpD,IAAIc,EACA4C,EAEJ5C,EAAaf,EAAQ,4BAA4BC,EAAO,IAAI,EAE5D0D,EAAe5C,EAAW,QAASd,EAAO,EAAG,EAExC0D,EACD1D,EAAS0D,GAET1D,EAAO,SAAW,GAClBA,EAAO,qBAAuB,IAI7BD,EAAQ,YAETA,EAAQ,WAAY,CAChB,YAAsBA,EACtB,YAAsBC,EAAO,KAC7B,SAAsBA,EAAO,YAAc+B,EAA4B/B,EAAO,WAAYD,EAAQ,OAAQ,EAC1G,QAAsBe,EAAW,QACjC,SAAsBf,EAAQ,sBAAsB,EACpD,qBAAsBC,EAAO,qBAC7B,cAAsBc,EAAW,UAAY,EAC7C,aAAsBd,EAAO,OAAS,QACtC,cAAsBmC,EAAU,cAChC,SAAsBpC,EAAQ,QAClC,CAAE,CAEV,CAkBA,SAAS4C,EAAmB5C,EAASoC,EAAWnC,EAAQ4D,EAAgB,CACpE,IAAItE,EAAWnC,EAAM4C,EAAQ,IAAK,EAC9Be,EAAaf,EAAQ,4BAA6BC,EAAO,IAAK,EAC9D0D,EA2BJ,GAzBK,OAAOvB,EAAU,cAAc,SAAY,YAC5CrB,EAAW,QAAUqB,EAAU,cAAc,QAExCyB,IAAkB,EAEnB9C,EAAW,SAAW,EACd8C,IAAkB,EAE1B9C,EAAW,SAAW,EACd8C,IAAkB,EAE1B9C,EAAW,SAAW,EACd8C,IAAkB,EAE1B9C,EAAW,SAAW,EACd8C,IAAkB,EAE1B9C,EAAW,SAAW,GACd8C,IAAkB,IAE1B9C,EAAW,SAAW,IAKzB8C,IAAkB,EAAI,CACvBzB,EAAU,cAAgB,GAC1BA,EAAU,qBAAuB,GAG5BpC,EAAQ,wBACO,CAACoC,EAAU,gBACX,CAACA,EAAU,mBAC3BA,EAAU,eAAiB,GAE3BpC,EAAQ,uBACJ,CACI,YAAsBA,EACtB,YAAsBC,EAAO,KAC7B,SAAsB+B,EAA4B/B,EAAO,WAAYD,EAAQ,OAAQ,EACrF,OAAsB6D,EACtB,QAAsB9C,EAAW,QACjC,aAAsBd,EAAO,OAAS,QACtC,cAAsBmC,EAAU,cAChC,SAAsBpC,EAAQ,QAClC,CACJ,GAGJ,MACJ,CAEA2D,EAAe5C,EAAW,QAASd,EAAO,EAAG,EAExC0D,GAGDA,EAAa,qBAAuB,GACpCA,EAAa,cAAgB,GAC7BA,EAAa,eAAiBvB,EAAU,cAAc,OACtDuB,EAAa,WAAa1D,EAAO,WACjC0D,EAAa,YAAc1D,EAAO,YAClC0D,EAAa,QAAUA,EAAa,WACpCA,EAAa,SAAWA,EAAa,YACrCA,EAAa,WAAa1D,EAAO,WACjC0D,EAAa,YAAc1D,EAAO,YAElCA,EAAS0D,IAIT1D,EAAO,SAAW,GAClBA,EAAO,qBAAuB,GAC9BA,EAAO,cAAgB,GACvBA,EAAO,eAAiBmC,EAAU,cAAc,OAChDkB,GAAsBvC,EAAYd,CAAO,GAG7Cc,EAAW,WAAW,EAGjB,CAACqB,EAAU,gBAAkB,CAACA,EAAU,kBACzCA,EAAU,cAAgB,GAC1BA,EAAU,qBAAuB,GACjCA,EAAU,eAAiB,IAEtBpC,EAAQ,aAAeA,EAAQ,gBAAkBA,EAAQ,eAC1DrN,EAAE,aAAa,4BAA4B,SAAUqN,EAASC,CAAO,EAGpEc,EAAW,WAAa,EAEpBf,EAAQ,cAAgB,CAACoC,EAAU,gBACpCpC,EAAQ,aACJ,CACI,YAAsBA,EACtB,YAAsBC,EAAO,KAC7B,SAAsB+B,EAA4B/B,EAAO,WAAYD,EAAQ,OAAQ,EACrF,QAAsBe,EAAW,QACjC,aAAsBd,EAAO,OAAS,QACtC,cAAsBmC,EAAU,cAChC,SAAsBpC,EAAQ,QAClC,CACJ,EAEIe,EAAW,WAAa,GAC3Bf,EAAQ,cAAgBC,EAAO,OAAS,UAEzCV,EAAS,aAAewB,EAAW,QAAQ,EAC3CxB,EAAS,cAAgBA,EAAS,iBAAmBA,EAAS,aAAc,CAAE,EAAE,WAAW,WAAYA,EAAS,aAAc,CAAE,EAAE,UAAW,EAC7IA,EAAS,gBAAkBA,EAAS,mBAAqB0C,EAAgB1C,EAAS,aAAc,CAAE,EAAE,WAAYA,EAAS,aAAc,CAAE,EAAE,UAAW,KAI9J6C,EAAU,cAAgB,GAC1BA,EAAU,qBAAuB,GAEzC,CAkBA,SAASS,EAAiB7C,EAASoC,EAAWnC,EAAQ4D,EAAgB,CAClE,IAAItE,EAAWnC,EAAM4C,EAAQ,IAAK,EAC9Be,EAAaf,EAAQ,4BAA6BC,EAAO,IAAK,EAC9D6D,EACAC,EACAJ,EACAK,GAAc,GACdC,EA6BJ,GA3BK,OAAO7B,EAAU,cAAc,SAAY,YAC5CrB,EAAW,QAAUqB,EAAU,cAAc,QAExCyB,IAAkB,EAEnB9C,EAAW,SAAW,GACd8C,IAAkB,EAE1B9C,EAAW,SAAW,GACd8C,IAAkB,EAE1B9C,EAAW,SAAW,GACd8C,IAAkB,EAE1B9C,EAAW,SAAW,GACd8C,IAAkB,EAE1B9C,EAAW,SAAW,IACd8C,IAAkB,IAE1B9C,EAAW,SAAW,KAI9BqB,EAAU,cAAgB,GAGrByB,IAAkB,EAAI,CACvBzB,EAAU,qBAAuB,GAG5BpC,EAAQ,0BACO,CAACoC,EAAU,gBACX,CAACA,EAAU,mBAC3BA,EAAU,eAAiB,GAE3BpC,EAAQ,yBACJ,CACI,YAAuBA,EACvB,YAAuBC,EAAO,KAC9B,SAAuB+B,EAA2B/B,EAAO,WAAYD,EAAQ,OAAO,EACpF,OAAuB6D,EACvB,QAAuB9C,EAAW,QAClC,aAAuBd,EAAO,OAAS,QACvC,cAAuBmC,EAAU,cACjC,SAAuBpC,EAAQ,QACnC,CACJ,GAGJ,MACJ,CAEA2D,EAAe5C,EAAW,QAASd,EAAO,EAAG,EAExC0D,GACD5C,EAAW,cAAc,EAIpB4C,EAAa,WAEdK,GAAc,IAElBL,EAAa,QAAUA,EAAa,WACpCA,EAAa,SAAWA,EAAa,YACrCA,EAAa,WAAa1D,EAAO,WACjC0D,EAAa,YAAc1D,EAAO,YAC5B0D,EAAa,eACfxC,EAAqBnB,EAASe,EAAY4C,CAAa,EAG3DG,EAAeH,EAAa,WAC5BI,EAAcJ,EAAa,cAI3B1D,EAAO,SAAW,GAClBA,EAAO,qBAAuB,GAC9BA,EAAO,cAAgB,GACvBqD,GAAsBvC,EAAYd,CAAO,EAEzC0D,EAAe1D,GAGd,CAACmC,EAAU,gBAAkB,CAACA,EAAU,mBACpC4B,IAGD5B,EAAU,qBAAuB,GACjCA,EAAU,eAAiB,IAEtBpC,EAAQ,aAAeA,EAAQ,gBAAkBA,EAAQ,eAC1DrN,EAAE,aAAa,4BAA4B,YAAaqN,EAAS2D,CAAa,EAG7E5C,EAAW,WAAa,GAGpBf,EAAQ,gBAAkB8D,GAC3B9D,EAAQ,eACJ,CACI,YAAuBA,EACvB,YAAuB2D,EAAa,KACpC,SAAuB3B,EAA4B8B,EAAc9D,EAAQ,OAAQ,EACjF,QAAuBe,EAAW,QAClC,qBAAuB4C,EAAa,qBACpC,sBAAuBA,EAAa,cACpC,aAAuBA,EAAa,OAAS,QAC7C,cAAuBvB,EAAU,cACjC,SAAuBpC,EAAQ,QACnC,CACJ,EAICA,EAAQ,gBAAkBT,EAAS,eACpCS,EAAQ,eACJ,CACI,YAAsBA,EACtB,YAAsB2D,EAAa,KACnC,SAAsB3B,EAA4B2B,EAAa,WAAY3D,EAAQ,OAAQ,EAC3F,MAAsB2D,EAAa,MACnC,UAAsBA,EAAa,UACnC,MAAsBvB,EAAU,cAAc,SAC9C,aAAsBuB,EAAa,OAAS,QAC5C,cAAsBvB,EAAU,cAChC,SAAsBpC,EAAQ,QAClC,CACJ,EAIJT,EAAS,cAAgB,IAGlBS,EAAQ,cAAgBA,EAAQ,kBAAqB2D,EAAa,gBACrEM,EAAQF,EAAcJ,EAAa,aAAe3D,EAAQ,oBAC1C2D,EAAa,WAAW,WAAYG,CAAa,GAAK9D,EAAQ,mBAGzEA,EAAQ,cACTA,EAAQ,aACJ,CACI,YAAsBA,EACtB,YAAsB2D,EAAa,KACnC,SAAsB3B,EAA4B2B,EAAa,WAAY3D,EAAQ,OAAQ,EAC3F,MAAsBiE,EACtB,MAAsB7B,EAAU,cAAc,SAC9C,aAAsBuB,EAAa,OAAS,QAC5C,cAAsBvB,EAAU,cAChC,eAAsBuB,EAAa,eACnC,SAAsB3D,EAAQ,QAClC,CACJ,EAICA,EAAQ,iBAAmBiE,IAC5BlD,EAAW,SACNA,EAAW,SAAW,GACvBxB,EAAS,aAAeuE,EAExBvE,EAAS,gBAAkB,WAAY,UAAW,CAC9CwB,EAAW,OAAS,CACxB,EAAGf,EAAQ,qBAAsB,GAEzBe,EAAW,SAAW,IAC9B,aAAcxB,EAAS,eAAgB,EACvCwB,EAAW,OAAS,EACfxB,EAAS,aAAa,WAAYuE,CAAa,GAAK9D,EAAQ,uBAC7DA,EAAQ,gBACJ,CACI,YAAsBA,EACtB,YAAsB2D,EAAa,KACnC,SAAsB3B,EAA4B2B,EAAa,WAAY3D,EAAQ,OAAQ,EAC3F,MAAsBoC,EAAU,cAAc,SAC9C,aAAsBuB,EAAa,OAAS,QAC5C,cAAsBvB,EAAU,cAChC,SAAsBpC,EAAQ,QAClC,CACJ,EAEJT,EAAS,aAAe,SAI5BwB,EAAW,WAAa,GAC3Bf,EAAQ,cAAgB2D,EAAa,OAAS,UAE/CpE,EAAS,aAAewB,EAAW,QAAQ,EAC3CxB,EAAS,cAAgBA,EAAS,iBAAmBA,EAAS,aAAc,CAAE,EAAE,WAAW,WAAYA,EAAS,aAAc,CAAE,EAAE,UAAW,EAC7IA,EAAS,gBAAkBA,EAAS,mBAAqB0C,EAAgB1C,EAAS,aAAc,CAAE,EAAE,WAAYA,EAAS,aAAc,CAAE,EAAE,UAAW,KAM9J6C,EAAU,qBAAuB,GAG5BpC,EAAQ,gBAAkB8D,IAC3B9D,EAAQ,eACJ,CACI,YAAuBA,EACvB,YAAuB2D,EAAa,KACpC,SAAuB3B,EAA4B8B,EAAc9D,EAAQ,OAAQ,EACjF,QAAuBe,EAAW,QAClC,qBAAuB4C,EAAa,qBACpC,sBAAuBA,EAAa,cACpC,aAAuBA,EAAa,OAAS,QAC7C,cAAuBvB,EAAU,cACjC,SAAuBpC,EAAQ,QACnC,CACJ,EACAoC,EAAU,eAAiB,KAI3C,CAgBA,SAASW,EAAmB/C,EAASoC,EAAWnC,EAAS,CACrD,IAAIV,EAAWnC,EAAM4C,EAAQ,IAAK,EAC9Be,EAAaf,EAAQ,4BAA6BC,EAAO,IAAK,EAC9D0D,EACAO,EACAC,EAQJ,GANK,OAAO/B,EAAU,cAAc,SAAY,cAC5CrB,EAAW,QAAUqB,EAAU,cAAc,SAGjDuB,EAAe5C,EAAW,QAASd,EAAO,EAAG,EAExC0D,EAEDA,EAAa,QAAUA,EAAa,WACpCA,EAAa,SAAWA,EAAa,YACrCA,EAAa,WAAa1D,EAAO,WACjC0D,EAAa,YAAc1D,EAAO,gBAGlC,QAGJmC,EAAU,cAAgB,GAC1BA,EAAU,qBAAuB,GAG5BpC,EAAQ,aAAeC,EAAO,OAAS,UACxC,aAAcD,EAAQ,WAAY,EAClCA,EAAQ,YAAc,WAAY,UAAW,CACzCoE,EAAmBpE,EAASoC,EAAU,cAAenC,EAAO,IAAK,CACrE,EAAGD,EAAQ,SAAU,GAGpBe,EAAW,WAAa,EAEpBf,EAAQ,aACTA,EAAQ,YACJ,CACI,YAAsBA,EACtB,YAAsBC,EAAO,KAC7B,SAAsB+B,EAA4B/B,EAAO,WAAYD,EAAQ,OAAQ,EACrF,QAAsBe,EAAW,QACjC,aAAsBd,EAAO,OAAS,QACtC,cAAsBmC,EAAU,cAChC,SAAsBpC,EAAQ,QAClC,CACJ,EAEIe,EAAW,WAAa,GAE3Bf,EAAQ,cACT2D,EAAe5C,EAAW,QAAQ,EAAG,CAAE,EACvCf,EAAQ,YACJ,CACI,YAAsBA,EACtB,YAAsB2D,EAAa,KACnC,SAAsB3B,EAA4B2B,EAAa,WAAY3D,EAAQ,OAAQ,EAC3F,QAAsBe,EAAW,QACjC,aAAsB4C,EAAa,OAAS,QAC5C,cAAsBvB,EAAU,cAChC,SAAsBpC,EAAQ,QAClC,CACJ,GAICA,EAAQ,aAAe,CAACoC,EAAU,gBAAkB,CAACA,EAAU,mBAChEuB,EAAe5C,EAAW,QAAQ,EAAG,CAAE,EACvCoD,EAAQR,EAAa,WAAW,MAAOA,EAAa,OAAQ,EAC5D3D,EAAQ,YACJ,CACI,YAAsBA,EACtB,YAAsB2D,EAAa,KACnC,SAAsB3B,EAA4B2B,EAAa,WAAY3D,EAAQ,OAAQ,EAC3F,QAAsBe,EAAW,QACjC,MAAsBoD,EACtB,MAAsBR,EAAa,MACnC,UAAsBA,EAAa,UACnC,MAAsBvB,EAAU,cAAc,SAC9C,aAAsBuB,EAAa,OAAS,QAC5C,cAAsBvB,EAAU,cAChC,SAAsBpC,EAAQ,QAClC,CACJ,EACAoC,EAAU,eAAiB,GAC3B7C,EAAS,cAAgB,KAErBwB,EAAW,WAAa,IAE3Bf,EAAQ,cACTkE,EAAcnD,EAAW,QAAQ,EACjCf,EAAQ,YACJ,CACI,YAAsBA,EACtB,YAAsBkE,EAAa,CAAE,EAAE,KACvC,SAAsBlC,EAA4BC,EAAgBiC,EAAa,CAAE,EAAE,WAAYA,EAAa,CAAE,EAAE,UAAW,EAAGlE,EAAQ,OAAQ,EAC9I,QAAsBe,EAAW,QACjC,aAAsBmD,EAAa,CAAE,EAAE,OAAS,QAChD,cAAsB9B,EAAU,cAChC,SAAsBpC,EAAQ,QAClC,CACJ,GAICA,EAAQ,cAAgBC,EAAO,OAAS,SACzB,CAACmC,EAAU,gBAAkB,CAACA,EAAU,mBACxD+B,EAAQ5E,EAAS,aAAc,CAAE,EAAE,WAAW,WAAYA,EAAS,aAAc,CAAE,EAAE,UAAW,EAC3F4E,IAAU5E,EAAS,mBACpBA,EAAS,cAAgBA,EAAS,iBAClCA,EAAS,iBAAmB4E,EAC5B5E,EAAS,gBAAkBA,EAAS,mBACpCA,EAAS,mBAAqB0C,EAAgB1C,EAAS,aAAc,CAAE,EAAE,WAAYA,EAAS,aAAc,CAAE,EAAE,UAAW,EAC3HS,EAAQ,aACJ,CACI,YAAsBA,EACtB,YAAsB,QACtB,cAAsBT,EAAS,aAC/B,WAAsByC,EAA4BzC,EAAS,gBAAiBS,EAAQ,OAAQ,EAC5F,OAAsBgC,EAA4BzC,EAAS,mBAAoBS,EAAQ,OAAQ,EAC/F,aAAsBT,EAAS,cAC/B,SAAsBA,EAAS,iBAC/B,MAAsB6C,EAAU,cAAc,SAC9C,cAAsBA,EAAU,cAChC,SAAsBpC,EAAQ,QAClC,CACJ,EACAoC,EAAU,eAAiB,KAI3C,CAcA,SAASY,EAAqBhD,EAASoC,EAAWnC,EAAS,CACvD,IAAIc,EAAaf,EAAQ,4BAA6BC,EAAO,IAAK,EAC9D0D,EAEJA,EAAe5C,EAAW,QAASd,EAAO,EAAG,EAExC0D,GACDxC,EAAqBnB,EAASe,EAAY4C,CAAa,CAE/D,CAOA,SAASS,EAAmBpE,EAASqE,EAAmBhD,EAAc,CAC7DrB,EAAQ,aACTA,EAAQ,YAAa,CACjB,YAAsBA,EACtB,YAAsBqB,EACtB,SAAsBU,EAAkBsC,EAAmBrE,EAAQ,OAAQ,EAC3E,QAAsBA,EAAQ,4BAA6BqB,CAAY,EAAE,QACzE,aAAsBA,IAAgB,QACtC,cAAsBgD,EACtB,SAAsBrE,EAAQ,QAClC,CAAE,CAEV,CAEJ,EAAEvN,CAAa,EAoCd,SAAUE,EAAG,CAgBdA,EAAE,cAAgB,CACd,KAAM,EACN,SAAU,EACV,UAAW,EACX,aAAc,EACd,YAAa,EACb,SAAU,CACd,EAkBAA,EAAE,QAAU,SAAW8B,EAAS/B,EAAS4R,EAAY,CAEjD,IAAIC,EAAS9P,EAAQ,WACjB,OAAO/B,GAAY,WAEnBC,EAAE,QAAQ,MAAM,2MAE+E,EAC9FD,EAAU,CAAC,OAAQA,CAAO,GAE/BA,EAAQ,eAAkB,OAAOA,EAAQ,gBAAmB,YAAe,GAAOA,EAAQ,eAM1F,KAAK,SAAY,OAAOA,EAAQ,UAAa,YAAe,GAAOA,EAAQ,SAM3E,KAAK,QAAa+B,EAMlB,KAAK,OAAa/B,EAAQ,OAM1B,KAAK,UAAa4R,EAMb,KAAK,SAAW3R,EAAE,cAAc,UACjC,KAAK,QAAaA,EAAE,mBAAoB,KAAM,EAC9C,KAAK,QAAQ,MAAM,SAAW,WAC9B,KAAK,QAAQ,MAAM,IAAM,OAAQD,EAAQ,KAAS,SAAYA,EAAQ,IAAM,KAAQA,EAAQ,IAC5F,KAAK,QAAQ,MAAM,KAAQ,OAAQA,EAAQ,MAAU,SAAYA,EAAQ,KAAO,KAAQA,EAAQ,KAChG,KAAK,QAAQ,MAAM,OAAS,OAAQA,EAAQ,QAAY,SAAYA,EAAQ,OAAS,KAAQA,EAAQ,OACrG,KAAK,QAAQ,MAAM,MAAS,OAAQA,EAAQ,OAAW,SAAYA,EAAQ,MAAQ,KAAQA,EAAQ,MACnG,KAAK,QAAQ,MAAM,OAAS,MAC5B,KAAK,QAAQ,MAAM,QAAU,MAE7B,KAAK,QAAQ,MAAM,SAAW,WAC9B,KAAK,QAAQ,MAAM,IAAM,MACzB,KAAK,QAAQ,MAAM,KAAO,MAC1B,KAAK,QAAQ,MAAM,OAAS,OAC5B,KAAK,QAAQ,MAAM,MAAQ,SAE3B,KAAK,QAAaC,EAAE,mBAAoB,KAAM,EAC9C,KAAK,QAAQ,MAAM,QAAU,eACxB,KAAK,SAAWA,EAAE,cAAc,OAEjC,KAAK,QAAQ,MAAM,MAAQ,KAAK,QAAQ,MAAM,OAAS,SAG/D,KAAK,QAAQ,YAAa,KAAK,OAAQ,EAEnCD,EAAQ,eACH,KAAK,SAAWC,EAAE,cAAc,WAChC,KAAK,SAAWA,EAAE,cAAc,aACjC,KAAK,UAAU,aACX,KAAK,QACL,KAAK,UAAU,UACnB,EAEA,KAAK,UAAU,YAAa,KAAK,OAAQ,EAG7C4R,EAAO,YAAa,KAAK,OAAQ,CAGzC,EAGA5R,EAAE,QAAQ,UAAY,CAMlB,QAAS,UAAW,CAChB,KAAK,QAAQ,YAAa,KAAK,OAAQ,EACnC,KAAK,SAAWA,EAAE,cAAc,MAChC,KAAK,UAAU,YAAY,KAAK,OAAO,CAE/C,EAOA,UAAW,UAAW,CAClB,OAAO,KAAK,QAAQ,MAAM,UAAY,MAC1C,EAOA,WAAY,SAAU6R,EAAU,CAC5B,KAAK,QAAQ,MAAM,QAAUA,EACvB,KAAK,SAAW7R,EAAE,cAAc,SAAW,QAAU,eACvD,MACR,EAOA,WAAY,SAAU2D,EAAU,CAC5B3D,EAAE,kBAAmB,KAAK,QAAS2D,EAAS,EAAK,CACrD,CACJ,CAEA,EAAG7D,CAAc,EAoChB,SAAUE,EAAG,CAOVA,EAAE,YAAc,SAAUD,EAAS,CAC/B,IAAI+R,EAAU,CAAE,UAAW,WAAY,cAAe,YAAY,EAC9DC,EACAxQ,EAwBJ,IAtBAvB,EAAE,OAAQ,GAAM,KAAM,CAClB,GAAI,eAAiBA,EAAE,IAAI,EAAI,IAAM,KAAK,MAAM,KAAK,OAAO,EAAI,GAAO,EACvE,UAAWA,EAAE,mBAAoB,KAAM,EACvC,SAAU,CAAC,CACf,EAAGD,CAAQ,EAIX,KAAK,UAAU,SAAW,UAAW,CACjC,MAAO,EACX,EAEI,KAAK,UACL,KAAK,QAAUC,EAAE,WAAY,KAAK,OAAQ,EAC1C,KAAK,QAAQ,YAAa,KAAK,SAAU,EACrCA,EAAE,gBAAgB,KAAK,OAAO,EAAE,WAAa,WAC7C,KAAK,QAAQ,MAAM,SAAW,YAElC,KAAK,UAAU,MAAM,MAAQ,OAC7B,KAAK,UAAU,MAAM,OAAS,QAG7BuB,EAAI,EAAGA,EAAIuQ,EAAQ,OAAQvQ,IAC5BwQ,EAASD,EAASvQ,CAAE,EACpB,KAAK,SAAUwQ,CAAO,EAAI/R,EAAE,mBAAoB,KAAM,EACtD,KAAK,SAAU+R,CAAO,EAAE,MAAM,SAAW,WACpCA,EAAO,MAAO,MAAO,IACtB,KAAK,SAAUA,CAAO,EAAE,MAAM,KAAO,OAEpCA,EAAO,MAAO,OAAQ,IACvB,KAAK,SAAUA,CAAO,EAAE,MAAM,MAAQ,OAErCA,EAAO,MAAO,KAAM,IACrB,KAAK,SAAUA,CAAO,EAAE,MAAM,IAAM,OAEnCA,EAAO,MAAO,QAAS,IACxB,KAAK,SAAUA,CAAO,EAAE,MAAM,OAAS,OAI/C,KAAK,UAAU,YAAa,KAAK,SAAS,OAAQ,EAClD,KAAK,UAAU,YAAa,KAAK,SAAS,QAAS,EACnD,KAAK,UAAU,YAAa,KAAK,SAAS,WAAY,EACtD,KAAK,UAAU,YAAa,KAAK,SAAS,UAAW,CACzD,EAGA/R,EAAE,YAAY,UAAY,CAKtB,WAAY,SAAW8B,EAASkQ,EAAiB,CAC7ClQ,EAAU9B,EAAE,WAAY8B,CAAQ,EAChC,IAAImQ,EAAM,KAEV,GAAK,EAAAC,EAAiB,KAAMpQ,CAAQ,GAAK,GAIzC,QAASkQ,EAAe,OAAS,CAC7B,KAAKhS,EAAE,cAAc,UACjBiS,EAAM,KAAK,SAAS,SACpBnQ,EAAQ,MAAM,SAAW,WACzBA,EAAQ,MAAM,aAAe,MAC7BA,EAAQ,MAAM,WAAa,MAC3B,MACJ,KAAK9B,EAAE,cAAc,aACjBiS,EAAM,KAAK,SAAS,YACpBnQ,EAAQ,MAAM,SAAW,WACzBA,EAAQ,MAAM,aAAe,MAC7BA,EAAQ,MAAM,cAAgB,MAC9B,MACJ,KAAK9B,EAAE,cAAc,YACjBiS,EAAM,KAAK,SAAS,WACpBnQ,EAAQ,MAAM,SAAW,WACzBA,EAAQ,MAAM,YAAc,MAC5BA,EAAQ,MAAM,cAAgB,MAC9B,MACJ,KAAK9B,EAAE,cAAc,SACjBiS,EAAM,KAAK,SAAS,QACpBnQ,EAAQ,MAAM,SAAW,WACzBA,EAAQ,MAAM,YAAc,MAC5BA,EAAQ,MAAM,WAAa,MAC3B,MACJ,KAAK9B,EAAE,cAAc,SACjBiS,EAAM,KAAK,UACXnQ,EAAQ,MAAM,OAAS,MACvBA,EAAQ,MAAM,QAAU,MACxB,MACJ,QACA,KAAK9B,EAAE,cAAc,KACjBiS,EAAM,KAAK,UACXnQ,EAAQ,MAAM,OAAS,MACvBA,EAAQ,MAAM,QAAU,MACxB,KACR,CAEA,KAAK,SAAS,KACV,IAAI9B,EAAE,QAAS8B,EAASkQ,EAAgBC,CAAI,CAChD,EACAnQ,EAAQ,MAAM,QAAU,eAC5B,EAOA,cAAe,SAAWA,EAAU,CAChCA,EAAU9B,EAAE,WAAY8B,CAAQ,EAChC,IAAI,EAAIoQ,EAAiB,KAAMpQ,CAAQ,EAEvC,OAAK,GAAK,IACN,KAAK,SAAU,CAAE,EAAE,QAAQ,EAC3B,KAAK,SAAS,OAAQ,EAAG,CAAE,GAGxB,IACX,EAMA,cAAe,UAAY,CACvB,KAAQ,KAAK,SAAS,OAAS,GAC3B,KAAK,SAAS,IAAI,EAAE,QAAQ,EAGhC,OAAO,IACX,EAOA,mBAAoB,UAAY,CAC5B,IAAIP,EAEJ,IAAMA,EAAI,KAAK,SAAS,OAAS,EAAGA,GAAK,EAAGA,IACxC,GAAK,KAAK,SAAUA,CAAE,EAAE,UAAU,EAC9B,MAAO,GAIf,MAAO,EACX,EAOA,mBAAoB,SAAU4Q,EAAU,CACpC,IAAI,EAEJ,IAAM,EAAI,KAAK,SAAS,OAAS,EAAG,GAAK,EAAG,IACxC,KAAK,SAAU,CAAE,EAAE,WAAYA,CAAQ,EAG3C,OAAO,IACX,CAEJ,EAMA,SAASD,EAAiBE,EAAMtQ,EAAU,CACtC,IAAIuQ,EAAWD,EAAK,SAChB7Q,EAEJ,IAAMA,EAAI8Q,EAAS,OAAS,EAAG9Q,GAAK,EAAGA,IACnC,GAAK8Q,EAAU9Q,CAAE,EAAE,UAAYO,EAC3B,OAAOP,EAIf,MAAO,EACX,CAEJ,EAAGzB,CAAc,EAmChB,SAASE,EAAG,CAkBTA,EAAE,UAAYA,EAAE,aAAa,CACzB,OAAc,EACd,SAAc,EACd,IAAc,EACd,UAAc,EACd,MAAc,EACd,aAAc,EACd,OAAc,EACd,YAAc,EACd,KAAc,EACd,WAAY,CACR,EAAG,CACC,OAAQ,GACR,uBAAwB,GACxB,QAAS,GACT,MAAO,GACP,qBAAsB,GACtB,SAAU,EACd,EACA,EAAG,CACC,OAAQ,GACR,uBAAwB,GACxB,QAAS,GACT,MAAO,GACP,qBAAsB,GACtB,SAAU,EACd,EACA,EAAG,CACC,OAAQ,GACR,uBAAwB,GACxB,QAAS,GACT,MAAO,GACP,qBAAsB,GACtB,SAAU,EACd,EACA,EAAG,CACC,OAAQ,GACR,uBAAwB,GACxB,QAAS,GACT,MAAO,GACP,qBAAsB,GACtB,SAAU,EACd,EACA,EAAG,CACC,OAAQ,GACR,uBAAwB,GACxB,QAAS,GACT,MAAO,GACP,qBAAsB,GACtB,SAAU,EACd,EACA,EAAG,CACC,OAAQ,GACR,uBAAwB,GACxB,QAAS,GACT,MAAO,GACP,qBAAsB,GACtB,SAAU,EACd,EACA,EAAG,CACC,OAAQ,GACR,uBAAwB,GACxB,QAAS,GACT,MAAO,GACP,qBAAsB,GACtB,SAAU,EACd,EACA,EAAG,CACC,OAAQ,GACR,uBAAwB,GACxB,QAAS,GACT,MAAO,GACP,qBAAsB,GACtB,SAAU,EACd,EACA,EAAG,CACC,OAAQ,GACR,uBAAwB,GACxB,QAAS,GACT,MAAO,GACP,qBAAsB,GACtB,SAAU,EACd,CACJ,CACJ,CAAC,CAEL,EAAEF,CAAa,EAoCd,SAAUE,EAAG,CAGd,IAAIyK,EAAO,CAAC,EACR6H,EAAW,EA0BftS,EAAE,OAAS,SAAUD,EAAU,CAE3B,IAAI8B,EAAQ,UACR6I,EAAQ,KACRnJ,EAKCvB,EAAE,cAAeD,CAAQ,IAC1BA,EAAU,CACN,GAAoB8B,EAAM,CAAE,EAC5B,QAAoBA,EAAK,OAAS,EAAIA,EAAM,CAAE,EAAI,OAClD,UAAoBA,EAAK,OAAS,EAAIA,EAAM,CAAE,EAAI,OAClD,SAAoBA,EAAK,OAAS,EAAIA,EAAM,CAAE,EAAI,OAClD,SAAoBA,EAAK,OAAS,EAAIA,EAAM,CAAE,EAAI,MACtD,GAMC9B,EAAQ,SACTC,EAAE,OAAQ,GAAMD,EAASA,EAAQ,MAAO,EACxC,OAAOA,EAAQ,QAOnB,IAAIwS,EAAmB,CACf,WACJ,EA6GJ,GA5GAxS,EAAQ,cAAgB,OAAO,OAAO,CAAC,EACnCwS,EAAiB,OAAO,CAACC,EAAeC,KACpCD,EAAcC,CAAM,EAAI1S,EAAQ0S,CAAM,EACtC,OAAO1S,EAAQ0S,CAAM,EACdD,GACR,CAAC,CAAC,EACLzS,EAAQ,aAAa,EAIzBC,EAAE,OAAQ,GAAM,KAAM,CAGlB,GAAgBD,EAAQ,GACxB,KAAgBA,EAAQ,MAAQuS,IAMhC,YAAgB,EAQhB,QAAgB,KAOhB,UAAgB,KAShB,OAAgB,KAGhB,SAAoB,CAAC,EAErB,kBAAoB,KAGpB,aAAgB,CAAC,EAQjB,eAAgB,CAAC,EAMjB,OAAgB,KAMhB,OAAoB,KAMpB,MAAoB,KAMpB,SAAgB,KAKhB,UAAgB,KAIhB,mBAAwB,KACxB,iBAAwB,KAIxB,UAAgB,KAGhB,YAAoB,KAGpB,SAAgB,IAEpB,EAAGtS,EAAE,iBAAkBD,CAAQ,EAE1B,OAAS,KAAK,MAAU,YACzB,MAAM,IAAI,MAAM,0EAA0E,EAEzF,OAAS0K,EAAM,KAAK,IAAK,GAAQ,aAGlCzK,EAAE,QAAQ,KAAK,QAAU,KAAK,KAAO,yBAAyB,EAKlEyK,EAAM,KAAK,IAAK,EAAI,CAChB,cAAmB,IAAIzK,EAAE,MAAO,EAAG,CAAE,EACrC,kBAAmB,KACnB,UAAmB,GACnB,YAAmB,GACnB,YAAmB,GACnB,YAAmB,GACnB,YAAmB,GACnB,MAAmB,KAEnB,QAAmB,GAEnB,WAAmB,KACnB,aAAmB,KACnB,SAAmB,GACnB,mBAAoB,KACpB,cAAe,KACf,eAAgB,EACpB,EAEA,KAAK,eAAiB,EACtB,KAAK,WAAa,GAClB,KAAK,iBAAmB,KACxB,KAAK,WAAa,CAAC,EACnB,KAAK,gBAAkB,CAAC,EACxB,KAAK,6BAA+B,KAEpC,KAAK,gBAAkBA,EAAE,IAAI,EAG7BA,EAAE,YAAY,KAAM,IAAK,EAEzB,KAAK,WAAY,cAAe,SAAWmD,EAAQ,CAC/C,IAAIoD,EAAMvG,EAAE,UAAW,oBAAqBmD,EAAM,YAAaA,EAAM,OAAO,EAC5EuH,EAAM,aAAcnE,CAAI,CAC5B,CAAC,EAEDvG,EAAE,YAAY,KAAM,KAAMD,CAAQ,EAG9B,KAAK,UAEL,KAAK,YAAc,CAAE,KAAK,OAAQ,GAGtC,KAAK,QAAuB,KAAK,SAAW,SAAS,eAAgB,KAAK,EAAG,EAC7E,KAAK,OAAuBC,EAAE,mBAAoB,KAAM,EAExD,KAAK,OAAO,UAAY,uBACvB,SAAUyC,EAAO,CACdA,EAAM,MAAW,OACjBA,EAAM,OAAW,OACjBA,EAAM,SAAW,SACjBA,EAAM,SAAW,WACjBA,EAAM,IAAW,MACjBA,EAAM,KAAW,KACrB,EAAE,KAAK,OAAO,KAAK,EACnBzC,EAAE,0BAA2B,KAAK,MAAO,EACrCD,EAAQ,WAAa,KACrB,KAAK,OAAO,SAAYA,EAAQ,WAAa,OAAY,EAAIA,EAAQ,UAIzE,KAAK,UAAU,UAAY,0BAC1B,SAAU0C,EAAO,CACdA,EAAM,MAAY,OAClBA,EAAM,OAAY,OAClBA,EAAM,SAAY,WAClBA,EAAM,SAAY,SAClBA,EAAM,KAAY,MAClBA,EAAM,IAAY,MAClBA,EAAM,UAAY,MACtB,EAAG,KAAK,UAAU,KAAM,EACxBzC,EAAE,0BAA2B,KAAK,SAAU,EAE5C,KAAK,UAAU,aAAc,KAAK,OAAQ,KAAK,UAAU,UAAW,EACpE,KAAK,QAAQ,YAAa,KAAK,SAAU,EAKzC,KAAK,UAAiB,SAAS,KAAK,MAAM,MAC1C,KAAK,WAAiB,SAAS,KAAK,MAAM,OAC1C,KAAK,aAAiB,SAAS,KAAK,MAAM,SAC1C,KAAK,YAAiB,SAAS,gBAAgB,MAAM,SAErD,KAAK,aAAe,IAAIA,EAAE,aAAa,CACnC,SAA0B,sBAC1B,QAA0B,KAAK,OAC/B,cAA0B,CAAC,KAAK,gBAChC,mBAA0B,KAAK,mBAC/B,mBAA0B,KAAK,mBAC/B,sBAA0B,KAAK,sBAC/B,sBAA0B,KAAK,sBAC/B,mBAA0BA,EAAE,SAAU,KAAM0S,CAAoB,EAChE,eAA0B1S,EAAE,SAAU,KAAM2S,CAAgB,EAC5D,WAA0B3S,EAAE,SAAU,KAAM4S,CAAiB,EAC7D,aAA0B5S,EAAE,SAAU,KAAM6S,CAAc,EAC1D,gBAA0B7S,EAAE,SAAU,KAAM8S,CAAiB,EAC7D,YAA0B9S,EAAE,SAAU,KAAM+S,CAAa,EACzD,eAA0B/S,EAAE,SAAU,KAAMgT,CAAgB,EAC5D,aAA0BhT,EAAE,SAAU,KAAMiT,CAAc,EAC1D,aAA0BjT,EAAE,SAAU,KAAMkT,CAAc,EAC1D,aAA0BlT,EAAE,SAAU,KAAMmT,CAAc,EAC1D,eAA0BnT,EAAE,SAAU,KAAMoT,CAAgB,EAC5D,uBAA0BpT,EAAE,SAAU,KAAMqT,CAAwB,EACpE,yBAA0BrT,EAAE,SAAU,KAAMsT,CAA0B,EACtE,cAA0BtT,EAAE,SAAU,KAAMuT,EAAe,EAC3D,aAA0BvT,EAAE,SAAU,KAAMwT,CAAc,EAC1D,aAA0BxT,EAAE,SAAU,KAAMyT,CAAc,EAC1D,YAA0BzT,EAAE,SAAU,KAAM0T,EAAa,CAC7D,CAAC,EAED,KAAK,aAAe,IAAI1T,EAAE,aAAa,CACnC,SAAuB,sBACvB,QAAuB,KAAK,UAC5B,cAAuB,CAAC,KAAK,gBAC7B,mBAAuB,KAAK,mBAC5B,mBAAuB,KAAK,mBAC5B,sBAAuB,KAAK,sBAC5B,sBAAuB,KAAK,sBAC5B,aAAuBA,EAAE,SAAU,KAAM2T,EAAiB,EAC1D,aAAuB3T,EAAE,SAAU,KAAM4T,EAAiB,CAC9D,CAAC,EAEG,KAAK,UACL,KAAK,QAAU,IAAI5T,EAAE,YAAY,CAAE,QAAS,KAAK,OAAQ,CAAC,GAG9D,KAAK,qBAAqB,EAE1ByK,EAAM,KAAK,IAAK,EAAE,kBAAoBoJ,EAAkB,KAAK,SAAU,EAEpE,OAAO,gBACN,KAAK,mBAAqB,GAC1B,KAAK,gBAAkB,IAAI,eAAe,UAAU,CAChDpJ,EAAKC,EAAM,IAAI,EAAE,YAAc,EACnC,CAAC,EAED,KAAK,gBAAgB,QAAQ,KAAK,UAAW,CAAC,CAAC,GAE/C,KAAK,mBAAqB,GAI9B,KAAK,MAAQ,IAAI1K,EAAE,MAAM,CACrB,OAAQ,IACZ,CAAC,EAED,KAAK,MAAM,WAAW,WAAY,SAASmD,EAAO,CAE9CuH,EAAM,OAASA,EAAM,MAAM,UAAU,CAAC,EAAE,OAExCD,EAAMC,EAAM,IAAK,EAAE,YAAc,GAE5BA,EAAM,mBACPA,EAAM,iBAAmBoJ,EAAgBpJ,EAAOqJ,EAAY,EAEpE,CAAC,EAED,KAAK,MAAM,WAAW,cAAe,SAAS5Q,EAAO,CAE7CuH,EAAM,MAAM,aAAa,EACzBA,EAAM,OAASA,EAAM,MAAM,UAAU,CAAC,EAAE,OAExCA,EAAM,OAAS,KAGnBD,EAAMC,EAAM,IAAK,EAAE,YAAc,EACrC,CAAC,EAED,KAAK,MAAM,WAAW,iBAAkB,SAASvH,EAAO,CAChDuH,EAAM,UACNA,EAAM,SAAS,kBAAkBA,EAAM,MAAM,cAAc,EAAGA,EAAM,MAAM,iBAAiB,CAAC,CAEpG,CAAC,EAED,KAAK,MAAM,WAAW,oBAAqB,SAASvH,EAAO,CAEvDuH,EAAM,OAASA,EAAM,MAAM,UAAU,CAAC,EAAE,MAC5C,CAAC,EAGD,KAAK,SAAW,IAAI1K,EAAE,SAAS,CAC3B,cAAoCyK,EAAM,KAAK,IAAK,EAAE,kBACtD,gBAAoC,KAAK,gBACzC,cAAoC,KAAK,cACzC,kBAAoC,KAAK,kBACzC,kBAAoC,KAAK,kBACzC,gBAAoC,KAAK,gBACzC,eAAoC,KAAK,eACzC,aAAoC,KAAK,aACzC,iBAAoC,KAAK,iBACzC,aAAoC,KAAK,aACzC,aAAoC,KAAK,aACzC,OAAoC,KACpC,QAAoC,KAAK,QACzC,QAAoC,KAAK,QACzC,gCAAoC,KAAK,gCACzC,gBAAoC,KAAK,gBACzC,gBAAoC,KAAK,gBACzC,QAAoC,KAAK,gBACzC,0BAAoC,KAAK,yBAC7C,CAAC,EAED,KAAK,SAAS,kBAAkB,KAAK,MAAM,cAAc,EAAG,KAAK,MAAM,iBAAiB,CAAC,EAGzF,KAAK,YAAc,IAAIzK,EAAE,YAAY,CACjC,SAAU,KAAK,iBACf,QAASD,EAAQ,QACjB,aAAc,KAAK,aACnB,eAAgB,KAAK,cACzB,CAAC,EAGD,KAAK,UAAY,IAAIC,EAAE,UAAU,CAC7B,mBAAoB,KAAK,kBAC7B,CAAC,EAGG,OAAO,UAAU,eAAe,KAAK,KAAK,cAAe,WAAW,IACpEA,EAAE,QAAQ,MAAM,kFAAkF,EAG7F,KAAK,cAAc,YACpB,KAAK,OAASA,EAAE,YAGpB,OAAO,KAAK,cAAc,WAE9B,IAAIgU,EAAmB,MAAM,QAAQ,KAAK,MAAM,EAAI,KAAK,OAAS,CAAC,KAAK,MAAM,EAC1EA,EAAiB,SAAW,IAG5BA,EAAmB,CAAChU,EAAE,iBAAiB,MAAM,EAAE,KAAK,EACpDA,EAAE,QAAQ,KAAK,0DAA0D,GAI7E,KAAK,OAAS,KACd,UAAWiU,KAAmBD,EAE1B,GADc,KAAK,cAAcC,EAAiB,CAAC,WAAY,GAAM,kBAAmB,EAAK,CAAC,EAE1F,MAIR,GAAI,CAAC,KAAK,OACN,MAAAjU,EAAE,QAAQ,MAAM,6BAA6B,EACvC,6CAoEV,IAhEA,KAAK,OAAO,yBAAyB,KAAK,qBAAqB,EAG/D,KAAK,kBAAuBA,EAAE,mBAAoB,KAAM,EACxD,KAAK,OAAO,YAAa,KAAK,iBAAkB,EAG3C,KAAK,OAAO,UAAU,IAEnB,KAAK,aACLuB,EAAI,KAAK,YAAY,QAAQ,QAAQ,KAAK,UAAU,EACpD,KAAK,YAAY,QAAQ,OAAOA,EAAG,CAAC,EACpC,KAAK,YAAY,QAAQ,YAAY,KAAK,WAAW,OAAO,GAE5D,KAAK,cACLA,EAAI,KAAK,YAAY,QAAQ,QAAQ,KAAK,WAAW,EACrD,KAAK,YAAY,QAAQ,OAAOA,EAAG,CAAC,EACpC,KAAK,YAAY,QAAQ,YAAY,KAAK,YAAY,OAAO,IAIrE,KAAK,iCAAiC,EAGjC,KAAK,gBACN,KAAK,UAAY,IAAIvB,EAAE,UAAU,CAC7B,QAAmB,KAAK,iBACxB,GAAmB,KAAK,YACxB,SAAmB,KAAK,kBACxB,UAAmB,KAAK,mBACxB,kBAAmB,KAAK,2BACxB,IAAmB,KAAK,aACxB,KAAmB,KAAK,cACxB,MAAmB,KAAK,eACxB,OAAmB,KAAK,gBACxB,WAAmB,KAAK,oBACxB,SAAmB,KAAK,kBACxB,UAAmB,KAAK,UACxB,OAAmB,KACnB,gBAAmB,KAAK,gBACxB,WAAmB,KAAK,oBACxB,QAAmB,KAAK,iBACxB,YAAmB,KAAK,qBACxB,mBAAoB,KAAK,4BACzB,kBAAmB,KAAK,kBACxB,cAAmB,KAAK,cACxB,OAAmB,KAAK,OAAO,QAAQ,EACvC,kBAAmB,KAAK,kBACxB,YAAmB,KAAK,YACxB,oBAAqB,KAAK,mBAC9B,CAAC,GAID,KAAK,cACL,KAAK,qBAAqB,EAI1B,KAAK,aACL,KAAK,KAAM,KAAK,WAAY,EAI1BuB,EAAI,EAAGA,EAAI,KAAK,eAAe,OAAQA,IACzC,KAAK,WACD,KAAK,eAAgBA,CAAE,EAAE,GACzB,CAAC,OAAQ,KAAK,eAAgBA,CAAE,EAAE,MAAM,CAC5C,EAIJvB,EAAE,sBAAuB,UAAU,CAC/BkU,EAAuBxJ,CAAM,CACjC,CAAE,EAGF1K,EAAE,SAAS,IAAI,KAAK,QAAS,IAAI,CACrC,EAEAA,EAAE,OAAQA,EAAE,OAAO,UAAWA,EAAE,YAAY,UAAWA,EAAE,YAAY,UAAuD,CAOxH,OAAQ,UAAY,CAChB,MAAO,CAAC,CAAC,KAAK,MAAM,aAAa,CACrC,EAGA,QAAS,SAAWmU,EAAM,CACtB,OAAAnU,EAAE,QAAQ,MAAO,0EAA2E,EACrF,KAAK,KAAMmU,CAAI,CAC1B,EAGA,eAAgB,SAAWC,EAAa,CACpC,OAAApU,EAAE,QAAQ,MAAO,iFAAkF,EAC5F,KAAK,KAAMoU,CAAW,CACjC,EAGA,IAAI,SAAW,CACX,OAAApU,EAAE,QAAQ,KAAK,6DAA6D,EACrE,KAAK,WAChB,EAoBA,KAAM,SAAUqU,EAAaC,EAAa,CACtC,IAAI5J,EAAQ,KAIZ,GAFA,KAAK,MAAM,EAEP,CAAC2J,EACD,OAAO,KAGX,GAAI,KAAK,cAAgBrU,EAAE,QAAQqU,CAAW,EAC1C,OAAI,KAAK,iBACL,KAAK,eAAe,QAAQ,EAC5B,KAAK,eAAiB,MAGtB,OAAOC,GAAgB,aAAe,CAAC,MAAMA,CAAW,IAC1D,KAAK,YAAcA,GAGrB,KAAK,YAAcD,EACnB,KAAK,eAAiB,KAAK,IAAI,EAAG,KAAK,IAAI,KAAK,YAAY,OAAS,EAAG,KAAK,WAAW,CAAC,EACrF,KAAK,YAAY,SACjB,KAAK,KAAK,KAAK,YAAY,KAAK,cAAc,CAAC,EAE1C,KAAK,oBACN,KAAK,kBAAkB,GAI/B,KAAK,uBAAwB,KAAK,cAAe,EAC1C,KAOX,GAJKrU,EAAE,QAAQqU,CAAW,IACtBA,EAAc,CAACA,CAAW,GAG1B,CAACA,EAAY,OACb,OAAO,KAGX,KAAK,SAAW,GAqHhB,QAnHIE,EAAWF,EAAY,OACvBG,EAAY,EACZC,EAAW,EACXC,EAEAC,EAAkB,UAAW,CAC7B,GAAIH,EAAYC,IAAaF,EACzB,GAAIC,EAAW,EACP9J,EAAM,YAAc,CAACA,EAAM,oBAC3BA,EAAM,SAAS,OAAQ,EAAK,EAC5BA,EAAM,SAAS,OAAO,GAG1BA,EAAM,WAAa,GAEnB,IAAIL,EAASgK,EAAY,CAAC,EAM1B,GALIhK,EAAO,aACPA,EAASA,EAAO,YAIhBK,EAAM,UAAY,CAACA,EAAM,iBACzB,QAAUnJ,EAAI,EAAGA,EAAImJ,EAAM,SAAS,OAAQnJ,IACxCmJ,EAAM,gBAAiBnJ,CAAE,EAAIqT,EAAkBlK,EAAOA,EAAM,SAAUnJ,CAAE,CAAE,EAIlFmJ,EAAM,cAAc,EACpBA,EAAM,SAAW,GAajBA,EAAM,WAAY,OAAQ,CAAE,OAAQL,CAAO,CAAE,CACjD,MACIK,EAAM,SAAW,GAajBA,EAAM,WAAY,cAAegK,CAAU,CAGvD,EAEIG,EAAQ,SAAS9U,EAAS,EACtB,CAACC,EAAE,cAAcD,CAAO,GAAK,CAACA,EAAQ,cACtCA,EAAU,CACN,WAAYA,CAChB,GAGAA,EAAQ,QAAU,SAClBC,EAAE,QAAQ,MAAM,gFAAgF,EAChG,OAAOD,EAAQ,OAGfA,EAAQ,wBAA0B,SAClCA,EAAQ,sBAAwB,IAGpC,IAAI+U,EAAkB/U,EAAQ,QAC9BA,EAAQ,QAAU,SAASoD,EAAO,CAK9B,GAJAqR,IAIIzU,EAAQ,WAAW,SACnB,QAASwB,EAAI,EAAGA,EAAIxB,EAAQ,WAAW,SAAS,OAAQwB,IACpDmJ,EAAM,WAAW3K,EAAQ,WAAW,SAASwB,CAAC,CAAC,EAInDuT,GACAA,EAAgB3R,CAAK,EAGzBwR,EAAgB,CACpB,EAEA,IAAII,EAAgBhV,EAAQ,MAC5BA,EAAQ,MAAQ,SAASoD,EAAO,CAC5BsR,IAEKC,IACDA,EAAYvR,GAGZ4R,GACAA,EAAc5R,CAAK,EAGvBwR,EAAgB,CACpB,EAEAjK,EAAM,cAAc3K,CAAO,CAC/B,EAGSwB,EAAI,EAAGA,EAAI8S,EAAY,OAAQ9S,IACpCsT,EAAMR,EAAY9S,CAAC,CAAC,EAGxB,OAAO,IACX,EAQA,MAAO,UAAa,CAChB,OAAMkJ,EAAM,KAAK,IAAK,GAKtB,KAAK,SAAW,GAEX,KAAK,WACN,KAAK,UAAU,MAAM,EAGpB,KAAK,mBACN,KAAK,cAAc,EACnB,KAAK,kBAAkB,UAAY,IAGvCA,EAAM,KAAK,IAAK,EAAE,UAAY,GAE9B,KAAK,MAAM,UAAU,EACrB,KAAK,YAAY,MAAM,EAWvB,KAAK,WAAY,OAAQ,EAElB,MA9BI,IA+Bf,EAmBA,QAAS,UAAY,CACjB,GAAMA,EAAM,KAAK,IAAK,EAoDtB,IAtCA,KAAK,WAAY,gBAAiB,EAElC,KAAK,oCAAoC,EAEzC,KAAK,MAAM,EAEX,KAAK,cAAc,EACnB,KAAK,kBAAkB,UAAY,GAK/B,KAAK,iBACL,KAAK,gBAAgB,WAAW,EAGhC,KAAK,iBACL,KAAK,eAAe,QAAQ,EAC5B,KAAK,eAAiB,MAGrB,KAAK,mBAAqB,OAC3BzK,EAAE,qBAAsB,KAAK,gBAAiB,EAC9C,KAAK,iBAAmB,MAGvB,KAAK,QACN,KAAK,OAAO,QAAQ,EAGnB,KAAK,YACN,KAAK,UAAU,QAAQ,EACvByK,EAAM,KAAK,UAAU,IAAK,EAAI,KAC9B,OAAOA,EAAM,KAAK,UAAU,IAAK,EACjC,KAAK,UAAY,MAIjB,KAAK,YACL,KAAK,YAAY,QAAQ,UAClB,KAAK,cACZ,KAAO,KAAK,cAAc,QACtB,KAAK,cAAc,IAAI,EAAE,QAAQ,EAWzC,GAPI,KAAK,QACL,KAAK,OAAO,QAAQ,EAMpB,KAAK,QACL,KAAO,KAAK,QAAQ,YAChB,KAAK,QAAQ,YAAY,KAAK,QAAQ,UAAU,EAIxD,KAAK,UAAU,SAAW,KAC1B,KAAK,cAAc,EAGf,KAAK,cACL,KAAK,aAAa,QAAQ,EAE1B,KAAK,cACL,KAAK,aAAa,QAAQ,EAG9BA,EAAM,KAAK,IAAK,EAAI,KACpB,OAAOA,EAAM,KAAK,IAAK,EAGvB,KAAK,OAAS,KACd,KAAK,UAAY,KAGjBzK,EAAE,SAAS,OAAO,KAAK,OAAO,EAG9B,KAAK,QAAU,KAWf,KAAK,WAAY,SAAU,EAE3B,KAAK,kBAAkB,EAC3B,EAYA,cAAciU,EAAiBlU,EAAQ,CACnC,MAAMiV,EAAc,CAChB,WAAY,GACZ,kBAAmB,GACnB,cAAe,IACnB,EACAjV,EAAUC,EAAE,OAAO,GAAMgV,EAAajV,CAAO,EAC7C,MAAMkV,EAAalV,EAAQ,WACrBmV,EAAoBnV,EAAQ,kBAC5ByS,EAAgBzS,EAAQ,cAExBoV,EAAY,KAAK,OAEvB,IAAIC,EAAS,KAeb,GAZInB,GAAmBA,EAAgB,qBAAqBjU,EAAE,YAC1DoV,EAASnB,EACTA,EAAkB,UACX,OAAOA,GAAoB,WAClCmB,EAASpV,EAAE,gBAAgBiU,CAAe,GAG1CmB,GACApV,EAAE,QAAQ,KAAK,+GAA+G,EAI9HoV,GAAUA,EAAO,YAAY,EAAG,CAG7BD,GAAaF,GACZE,EAAU,QAAQ,EAItB,MAAME,EAAY,IAAID,EAAO,CACzB,OAAoB,KACpB,SAAoB,KAAK,SACzB,QAAoB,KAAK,OACzB,eAAoB,KAAK,eACzB,QAAoB5C,GAAiB,KAAK,cAAcyB,CAAe,CAC3E,CAAC,EAED,OAAGgB,IACC,KAAK,OAASI,EACXH,GACC,KAAK,YAAY,GAIlBG,CACX,CAEA,MAAO,EACX,EAMA,kBAAmB,UAAY,CAC3B,OAAO,KAAK,aAAa,WAAW,CACxC,EAQA,mBAAoB,SAAUlD,EAAS,CACnC,YAAK,aAAa,YAAaA,CAAQ,EACvC,KAAK,aAAa,YAAaA,CAAQ,EAWvC,KAAK,WAAY,gBAAiB,CAAE,QAASA,CAAQ,CAAE,EAChD,IACX,EAOA,mBAAoB,UAAY,CAC5B,IAAIA,EAAU,KAAK,SAAS,OACxB5Q,EACJ,IAAKA,EAAI,EAAGA,EAAI,KAAK,SAAS,OAAQA,IAClC4Q,EAAUA,GAAW,KAAK,SAAU5Q,CAAE,EAAE,UAAU,EAEtD,OAAO4Q,CACX,EAWA,mBAAoB,SAAUA,EAAU,CACpC,OAAIA,EACAmD,EAAuB,IAAK,EAE5BpB,EAAuB,IAAK,EAYhC,KAAK,WAAY,mBAAoB,CAAE,QAAS/B,CAAQ,CAAE,EACnD,IACX,EAQA,aAAc,SAASoD,EAAU,CAE7B,QAAShU,EAAI,EAAGA,EAAI,KAAK,MAAM,aAAa,EAAGA,IAC3C,KAAK,MAAM,UAAUA,CAAC,EAAE,UAAYgU,EAGxC,KAAK,UAAYA,EACjB,KAAK,YAAY,CACrB,EAkBA,eAAgB,SAASC,EAAaC,EAAW,CAI7C,GAHID,IAAgB,OAChBA,EAAc,CAAC,GAEf,CAACxV,EAAE,cAAcwV,CAAW,EAAG,CAC/B,QAAQ,MAAM,0EAA0E,EACxF,MACJ,CAOA,GANIC,IAAc,SACdA,EAAY,IAGhB,KAAK,YAAcD,EAEfC,EAAW,CACX,QAASlU,EAAI,EAAGA,EAAI,KAAK,MAAM,aAAa,EAAGA,IAC3C,KAAK,MAAM,UAAUA,CAAC,EAAE,mBAAmB,EAAI,EAOnD,GAJI,KAAK,WACL,KAAK,UAAU,eAAe,KAAK,YAAa,EAAI,EAGpD,KAAK,gBAAkB,KAAK,eAAe,YAC3C,QAASjB,KAAO,KAAK,eAAe,YAChC,KAAK,eAAe,YAAYA,CAAG,EAAE,eAAe,KAAK,YAAa,EAAI,CAGtF,CACJ,EAQA,UAAW,SAAUoV,EAAQ,CACzB,KAAK,YAAY,UAAUA,CAAM,CACrC,EAMA,WAAY,UAAY,CACpB,OAAOjL,EAAK,KAAK,IAAI,GAAKA,EAAM,KAAK,IAAK,EAAE,QAChD,EAYA,YAAa,SAAUkL,EAAW,CAE9B,IAAIvS,EAAO,SAAS,KAChBwS,EAAYxS,EAAK,MACjByS,EAAW,SAAS,gBAAgB,MACpCnL,EAAQ,KACRoL,EACAvU,EAGJ,GAAKoU,IAAa,KAAK,WAAW,EAC9B,OAAO,KAGX,IAAII,EAAoB,CACpB,SAAUJ,EACV,qBAAsB,EAC1B,EAaA,GADA,KAAK,WAAY,gBAAiBI,CAAkB,EAC/CA,EAAkB,qBACnB,OAAO,KAGX,GAAKJ,GAAY,KAAK,QAAU,CA4C5B,IA1CA,KAAK,YAAc3V,EAAE,eAAgB,KAAK,OAAQ,EAClD,KAAK,WAAaA,EAAE,cAAc,EAElC,KAAK,cAAgB,KAAK,QAAQ,MAAM,OACxC,KAAK,QAAQ,MAAM,OAAS,IAC5B,KAAK,eAAiB,KAAK,QAAQ,MAAM,QACzC,KAAK,QAAQ,MAAM,QAAU,IAE7B,KAAK,WAAa4V,EAAU,OAC5B,KAAK,UAAYC,EAAS,OAC1BD,EAAU,OAAS,IACnBC,EAAS,OAAS,IAElB,KAAK,YAAcD,EAAU,QAC7B,KAAK,WAAaC,EAAS,QAC3BD,EAAU,QAAU,IACpBC,EAAS,QAAU,IAEnB,KAAK,UAAYD,EAAU,MAC3B,KAAK,SAAWC,EAAS,MACzBD,EAAU,MAAQ,OAClBC,EAAS,MAAQ,OAEjB,KAAK,WAAaD,EAAU,OAC5B,KAAK,UAAYC,EAAS,OAC1BD,EAAU,OAAS,OACnBC,EAAS,OAAS,OAElB,KAAK,YAAcD,EAAU,QAC7BA,EAAU,QAAU,QAOpB,KAAK,aAAe,CAAC,EACrBnL,EAAM,KAAK,IAAK,EAAE,kBAAoB,KAAK,QAAQ,WACnDA,EAAM,KAAK,IAAK,EAAE,gBAAkB,KAAK,QAAQ,YACjDA,EAAM,KAAK,IAAK,EAAE,iBAAmB,KAAK,QAAQ,MAAM,MACxDA,EAAM,KAAK,IAAK,EAAE,kBAAoB,KAAK,QAAQ,MAAM,OACzDqL,EAAQ1S,EAAK,WAAW,OAClB7B,EAAI,EAAGA,EAAIuU,EAAOvU,IACpB,KAAK,aAAa,KAAM6B,EAAK,WAAY,CAAE,CAAE,EAC7CA,EAAK,YAAaA,EAAK,WAAY,CAAE,CAAE,EAKtC,KAAK,SAAW,KAAK,QAAQ,UAG9B,KAAK,QAAQ,WAAa,KAAK,QAAQ,QAAQ,WAC/C,KAAK,QAAQ,YAAc,KAAK,QAAQ,QAAQ,YAChDA,EAAK,YAAa,KAAK,QAAQ,OAAQ,EAIvCpD,EAAE,SAAU,KAAK,QAAQ,QAAS,UAAW,GAGjDA,EAAE,SAAU,KAAK,QAAS,UAAW,EACrCoD,EAAK,YAAa,KAAK,OAAQ,EAE/B,KAAK,QAAQ,MAAM,OAAS,QAC5B,KAAK,QAAQ,MAAM,MAAQ,QAEtB,KAAK,SAAW,KAAK,QAAQ,UAC9B,KAAK,QAAQ,MAAM,OACfpD,EAAE,eAAgB,KAAK,OAAQ,EAAE,EAAIA,EAAE,eAAgB,KAAK,QAAQ,OAAQ,EAAE,EAC9E,MAGRyK,EAAM,KAAK,IAAK,EAAE,SAAW,GAG7BzK,EAAE,SAAU,KAAM2T,EAAiB,EAAG,CAAC,CAAE,CAE7C,KAAO,CAqBH,IAnBA,KAAK,QAAQ,MAAM,OAAS,KAAK,cACjC,KAAK,QAAQ,MAAM,QAAU,KAAK,eAElCiC,EAAU,OAAS,KAAK,WACxBC,EAAS,OAAS,KAAK,UAEvBD,EAAU,QAAU,KAAK,YACzBC,EAAS,QAAU,KAAK,WAExBD,EAAU,MAAQ,KAAK,UACvBC,EAAS,MAAQ,KAAK,SAEtBD,EAAU,OAAS,KAAK,WACxBC,EAAS,OAAS,KAAK,UAEvBD,EAAU,QAAU,KAAK,YAEzBxS,EAAK,YAAa,KAAK,OAAQ,EAC/B0S,EAAQ,KAAK,aAAa,OACpBvU,EAAI,EAAGA,EAAIuU,EAAOvU,IACpB6B,EAAK,YAAa,KAAK,aAAa,MAAM,CAAE,EAGhDpD,EAAE,YAAa,KAAK,QAAS,UAAW,EACxCyK,EAAM,KAAK,IAAK,EAAE,kBAAkB,aAChC,KAAK,QACLA,EAAM,KAAK,IAAK,EAAE,eACtB,EAIK,KAAK,SAAW,KAAK,QAAQ,UAC9BrH,EAAK,YAAa,KAAK,QAAQ,OAAQ,EAIvCpD,EAAE,YAAa,KAAK,QAAQ,QAAS,UAAW,EAEhD,KAAK,QAAQ,WAAW,aACpB,KAAK,QAAQ,QACb,KAAK,QAAQ,WACjB,EACA,OAAO,KAAK,QAAQ,WACpB,OAAO,KAAK,QAAQ,aAGxB,KAAK,QAAQ,MAAM,MAAQyK,EAAM,KAAK,IAAK,EAAE,iBAC7C,KAAK,QAAQ,MAAM,OAASA,EAAM,KAAK,IAAK,EAAE,kBAI9C,IAAIuL,EAAuB,EACvBC,EAAgB,UAAW,CAC3BjW,EAAE,cAAe0K,EAAM,UAAW,EAClC,IAAIwL,EAAalW,EAAE,cAAc,EACjCgW,IACIA,EAAuB,KACtBE,EAAW,IAAMxL,EAAM,WAAW,GACnCwL,EAAW,IAAMxL,EAAM,WAAW,IAClC1K,EAAE,sBAAuBiW,CAAc,CAE/C,EACAjW,EAAE,sBAAuBiW,CAAc,EAEvCxL,EAAM,KAAK,IAAK,EAAE,SAAW,GAG7BzK,EAAE,SAAU,KAAM4T,EAAiB,EAAG,CAAE,CAAE,CAE9C,CAEA,OAAK,KAAK,WAAa,KAAK,UACxB,KAAK,UAAU,OAAQ,KAAK,QAAS,EAazC,KAAK,WAAY,YAAa,CAAE,SAAU+B,CAAS,CAAE,EAE9C,IACX,EAWA,cAAe,SAAUQ,EAAa,CAClC,IAAIzL,EAAQ,KAEZ,GAAK,CAAC1K,EAAE,mBACJ,OAAO,KAAK,YAAamW,CAAW,EAGxC,GAAKnW,EAAE,aAAa,IAAMmW,EACtB,OAAO,KAGX,IAAIC,EAAqB,CACrB,WAAYD,EACZ,qBAAsB,EAC1B,EAgBA,GADA,KAAK,WAAY,kBAAmBC,CAAmB,EAClDA,EAAmB,qBACpB,OAAO,KAGX,GAAKD,EAAa,CAKd,GAHA,KAAK,YAAa,EAAK,EAGlB,CAAC,KAAK,WAAW,EAClB,OAAO,KAGX,KAAK,mBAAqB,KAAK,QAAQ,MAAM,MAC7C,KAAK,oBAAsB,KAAK,QAAQ,MAAM,OAC9C,KAAK,QAAQ,MAAM,MAAQ,OAC3B,KAAK,QAAQ,MAAM,OAAS,OAE5B,IAAIE,EAAqB,UAAW,CAChC,IAAIC,EAAetW,EAAE,aAAa,EAC5BsW,IACFtW,EAAE,YAAa,SAAUA,EAAE,oBAAqBqW,CAAmB,EACnErW,EAAE,YAAa,SAAUA,EAAE,yBAA0BqW,CAAmB,EAExE3L,EAAM,YAAa,EAAM,EACpBA,EAAM,WAAW,IAClBA,EAAM,QAAQ,MAAM,MAAQA,EAAM,mBAClCA,EAAM,QAAQ,MAAM,OAASA,EAAM,sBAGtCA,EAAM,WAAaA,EAAM,UAE1B,WAAW,UAAU,CACjBA,EAAM,UAAU,OAAQA,EAAM,QAAS,CAC3C,CAAC,EAYLA,EAAM,WAAY,cAAe,CAAE,WAAY4L,CAAa,CAAE,CAClE,EACAtW,EAAE,SAAU,SAAUA,EAAE,oBAAqBqW,CAAmB,EAChErW,EAAE,SAAU,SAAUA,EAAE,yBAA0BqW,CAAmB,EAErErW,EAAE,kBAAmB,SAAS,IAAK,CAEvC,MACIA,EAAE,eAAe,EAErB,OAAO,IACX,EAMA,UAAW,UAAY,CACnB,OAAO,KAAK,UAAU,MAAM,aAAe,QAC/C,EAQC,aAAc,UAAY,CACvB,OAAOA,EAAE,aAAa,GAAK,KAAK,WAAW,CAC/C,EAQA,WAAY,SAAU6R,EAAS,CAC3B,YAAK,UAAU,MAAM,WAAaA,EAAU,GAAK,SAWjD,KAAK,WAAY,UAAW,CAAE,QAASA,CAAQ,CAAE,EAC1C,IACX,EAkEA,cAAe,SAAU9R,EAAU,CAC/BC,EAAE,QAAQ,OAAOD,EAAS,4CAA4C,EACtEC,EAAE,QAAQ,OAAOD,EAAQ,WAAY,uDAAuD,EAC5FC,EAAE,QAAQ,OAAO,CAACD,EAAQ,SAAYA,EAAQ,MAAQ,IAAMA,EAAQ,MAAQ,KAAK,MAAM,aAAa,EAChG,wGAAwG,EAE5G,IAAI2K,EAAQ,KAER3K,EAAQ,UACRA,EAAQ,YAAc2K,EAAM,MAAM,UAAU3K,EAAQ,KAAK,GAG7D,KAAK,aAAa,EAEdA,EAAQ,uBAAyB,SACjCA,EAAQ,qBAAuB,KAAK,sBAEpCA,EAAQ,UAAY,SACpBA,EAAQ,QAAU,KAAK,SAEvBA,EAAQ,UAAY,SACpBA,EAAQ,QAAU,KAAK,SAEvBA,EAAQ,qBAAuB,SAC/BA,EAAQ,mBAAqB,KAAK,oBAElCA,EAAQ,oBAAsB,SAC9BA,EAAQ,kBAAoBA,EAAQ,WAAW,oBAAsB,OAAYA,EAAQ,WAAW,kBAAoB,KAAK,mBAE7HA,EAAQ,sBAAwB,SAChCA,EAAQ,oBAAsB,KAAK,qBAEnCA,EAAQ,oBAAsB,SAC9BA,EAAQ,kBAAoB,KAAK,mBAEhCC,EAAE,cAAcD,EAAQ,WAAW,IACpCA,EAAQ,YAAc,CAAC,GAG3B,IAAIwW,EAAc,CACd,QAASxW,CACb,EAEA,SAASyW,EAAoBrT,EAAQ,CACjC,QAAS5B,EAAI,EAAGA,EAAImJ,EAAM,WAAW,OAAQnJ,IACzC,GAAImJ,EAAM,WAAWnJ,CAAC,IAAMgV,EAAa,CACrC7L,EAAM,WAAW,OAAOnJ,EAAG,CAAC,EAC5B,KACJ,CAGAmJ,EAAM,WAAW,SAAW,GAC5B+L,EAAaF,CAAW,EAc5B7L,EAAM,WAAY,kBAAmBvH,CAAM,EAEvCpD,EAAQ,OACRA,EAAQ,MAAMoD,CAAK,CAE3B,CAEA,SAASsT,EAAaC,EAAS,CACvBhM,EAAM,iBACNA,EAAM,MAAM,QAAQ,CAChB,YAAagM,EAAQ,QAAQ,sBAC7B,KAAMhM,EAAM,eACZ,QAASA,EAAM,kBACf,OAAQA,EAAM,iBACd,SAAUA,EAAM,mBAChB,WAAYA,EAAM,oBACtB,CAAC,EACDA,EAAM,MAAM,qBAAqB,EAAI,EAE7C,CAEA,GAAI1K,EAAE,QAAQD,EAAQ,UAAU,EAAG,CAC/B,WAAW,UAAW,CAClByW,EAAmB,CACf,QAAS,qFACT,OAAQzW,EAAQ,WAChB,QAASA,CACb,CAAC,CACL,CAAC,EACD,MACJ,CAEA,KAAK,WAAW,KAAKwW,CAAW,EAEhC,SAASI,GAAoB,CAEzB,QADIC,EAAWC,EAAYC,EACpBpM,EAAM,WAAW,SACpBkM,EAAYlM,EAAM,WAAW,CAAC,EAC1B,EAACkM,EAAU,aAFa,CAQ5B,GAFAlM,EAAM,WAAW,OAAO,EAAG,CAAC,EAExBkM,EAAU,QAAQ,QAAS,CAC3B,IAAIG,EAAWrM,EAAM,MAAM,eAAekM,EAAU,QAAQ,WAAW,EACnEG,IAAa,KACbH,EAAU,QAAQ,MAAQG,GAE9BrM,EAAM,MAAM,WAAWkM,EAAU,QAAQ,WAAW,CACxD,CAEAC,EAAa,IAAI7W,EAAE,WAAW,CAC1B,OAAQ0K,EACR,OAAQkM,EAAU,WAClB,SAAUlM,EAAM,SAChB,OAAQA,EAAM,OACd,UAAWA,EAAM,UACjB,YAAaA,EAAM,YACnB,EAAGkM,EAAU,QAAQ,EACrB,EAAGA,EAAU,QAAQ,EACrB,MAAOA,EAAU,QAAQ,MACzB,OAAQA,EAAU,QAAQ,OAC1B,UAAWA,EAAU,QAAQ,UAC7B,mBAAoBA,EAAU,QAAQ,mBACtC,KAAMA,EAAU,QAAQ,KACxB,qBAAsBA,EAAU,QAAQ,qBACxC,QAASA,EAAU,QAAQ,QAC3B,QAASA,EAAU,QAAQ,QAC3B,QAASA,EAAU,QAAQ,QAC3B,QAASA,EAAU,QAAQ,QAC3B,mBAAoBA,EAAU,QAAQ,mBACtC,gBAAiBlM,EAAM,gBACvB,cAAeA,EAAM,cACrB,kBAAmBA,EAAM,kBACzB,eAAgBA,EAAM,eACtB,aAAcA,EAAM,aACpB,iBAAkBA,EAAM,iBACxB,gBAAiBA,EAAM,gBACvB,UAAWA,EAAM,UACjB,YAAaA,EAAM,YACnB,cAAeA,EAAM,cACrB,uBAAwBA,EAAM,uBAC9B,UAAWA,EAAM,UACjB,kBAAmBkM,EAAU,QAAQ,kBACrC,oBAAqBA,EAAU,QAAQ,oBACvC,kBAAmBA,EAAU,QAAQ,kBACrC,YAAaA,EAAU,QAAQ,YAC/B,UAAWlM,EAAM,UACjB,gCAAiCA,EAAM,+BAC3C,CAAC,EAEGA,EAAM,gBACNA,EAAM,MAAM,qBAAqB,EAAK,EAGtCA,EAAM,YACNoM,EAAe9W,EAAE,OAAO,CAAC,EAAG4W,EAAU,QAAS,CAC3C,QAAS,GACT,mBAAoBC,EACpB,WAAYD,EAAU,UAC1B,CAAC,EAEDlM,EAAM,UAAU,cAAcoM,CAAY,GAG9CpM,EAAM,MAAM,QAASmM,EAAY,CAC7B,MAAOD,EAAU,QAAQ,KAC7B,CAAC,EAEGlM,EAAM,WAAW,SAAW,GAE5B+L,EAAaG,CAAS,EAGtBlM,EAAM,MAAM,aAAa,IAAM,GAAK,CAACA,EAAM,kBAC3CA,EAAM,SAAS,OAAO,EAAI,EAG1BkM,EAAU,QAAQ,SAClBA,EAAU,QAAQ,QAAQ,CACtB,KAAMC,CACV,CAAC,CAET,CACJ,CAEAG,EAA6B,KAAMjX,EAAQ,WAAYA,EAAS,SAAUqU,EAAa,CAEnFmC,EAAY,WAAanC,EAGzBuC,EAAkB,CACtB,EAAG,SAAUxT,EAAQ,CACjBA,EAAM,QAAUpD,EAChByW,EAAmBrT,CAAK,EAGxBwT,EAAkB,CACtB,CAAE,CACN,EAaA,eAAgB,SAAS5W,EAAS,CAC9BC,EAAE,QAAQ,OAAOD,EAAS,6CAA6C,EACvEC,EAAE,QAAQ,OAAOD,EAAQ,IAAK,iDAAiD,EAE/E,IAAIwE,EAAOvE,EAAE,OAAO,CAAC,EAAGD,EAAS,CAC7B,WAAY,CACR,KAAM,QACN,IAAMA,EAAQ,GAClB,CACJ,CAAC,EACD,OAAOwE,EAAK,IACZ,KAAK,cAAcA,CAAI,CAC3B,EAGA,SAAU,SAAUxE,EAAU,CAC1B,IAAI2K,EAAQ,KAEZ1K,EAAE,QAAQ,MAAO,oFAAqF,EAEtG,IAAI8W,EAAe9W,EAAE,OAAO,CAAC,EAAGD,EAAS,CACrC,QAAS,SAASoD,EAAO,CACrBuH,EAAM,WAAW,YAAa,CAC1B,QAAS3K,EACT,OAAQoD,EAAM,IAClB,CAAC,CACL,EACA,MAAO,SAASA,EAAO,CACnBuH,EAAM,WAAW,mBAAoBvH,CAAK,CAC9C,CACJ,CAAC,EAED,YAAK,cAAc2T,CAAY,EACxB,IACX,EAGA,gBAAiB,SAAUG,EAAQ,CAC/B,OAAAjX,EAAE,QAAQ,MAAO,sFAAuF,EACjG,KAAK,MAAM,UAAUiX,CAAK,CACrC,EAGA,gBAAiB,SAAUC,EAAS,CAChC,OAAAlX,EAAE,QAAQ,MAAO,2FAA4F,EACtG,KAAK,MAAM,eAAekX,CAAM,CAC3C,EAGA,eAAgB,UAAW,CACvB,OAAAlX,EAAE,QAAQ,MAAO,wFAAyF,EACnG,KAAK,MAAM,aAAa,CACnC,EAGA,cAAe,SAAUkX,EAAQD,EAAQ,CACrC,OAAAjX,EAAE,QAAQ,MAAO,uFAAwF,EAClG,KAAK,MAAM,aAAakX,EAAQD,CAAK,CAChD,EAGA,YAAa,SAAUC,EAAS,CAC5B,OAAAlX,EAAE,QAAQ,MAAO,mFAAoF,EAC9F,KAAK,MAAM,WAAWkX,CAAM,CACvC,EAMA,YAAa,UAAW,CACpB,OAAAzM,EAAM,KAAK,IAAK,EAAE,YAAc,GACzB,IACX,EAKA,YAAa,UAAW,CACpBA,EAAK,KAAK,IAAI,EAAE,YAAc,GAC9BA,EAAK,KAAK,IAAI,EAAE,YAAc,EAClC,EAMA,qBAAsB,UAAU,CAK5B,IAAI0M,EAA0BnX,EAAE,SAAU,KAAMgL,CAAQ,EACpDoM,EAA0BpX,EAAE,SAAU,KAAMiL,CAAO,EACnDoM,EAA0BrX,EAAE,SAAU,KAAM,KAAK,YAAa,EAC9DsX,EAA0BtX,EAAE,SAAU,KAAM,KAAK,gBAAiB,EAClEuX,EAA0B,KAAK,UAC/BC,EAA0B,GAE9B,OAAI,KAAK,uBAED,KAAK,gBAAkB,KAAK,cAG5BA,EAAW,IAGf,KAAK,eAAiB,IAAIxX,EAAE,OAAO,CAC/B,QAAY,KAAK,eAAiBA,EAAE,WAAY,KAAK,cAAe,EAAI,KACxE,mBAAoB,KAAK,mBACzB,mBAAoB,KAAK,mBACzB,QAAYA,EAAE,UAAW,uBAAwB,EACjD,QAAYyX,EAAY,KAAK,UAAWF,EAAU,SAAS,IAAK,EAChE,SAAYE,EAAY,KAAK,UAAWF,EAAU,SAAS,KAAM,EACjE,SAAYE,EAAY,KAAK,UAAWF,EAAU,SAAS,KAAM,EACjE,QAAYE,EAAY,KAAK,UAAWF,EAAU,SAAS,IAAK,EAChE,UAAYD,EACZ,QAAYH,EACZ,OAAYC,CAChB,CAAC,EAED,KAAK,WAAa,IAAIpX,EAAE,OAAO,CAC3B,QAAY,KAAK,WAAaA,EAAE,WAAY,KAAK,UAAW,EAAI,KAChE,mBAAoB,KAAK,mBACzB,mBAAoB,KAAK,mBACzB,QAAYA,EAAE,UAAW,mBAAoB,EAC7C,QAAYyX,EAAY,KAAK,UAAWF,EAAU,KAAK,IAAK,EAC5D,SAAYE,EAAY,KAAK,UAAWF,EAAU,KAAK,KAAM,EAC7D,SAAYE,EAAY,KAAK,UAAWF,EAAU,KAAK,KAAM,EAC7D,QAAYE,EAAY,KAAK,UAAWF,EAAU,KAAK,IAAK,EAC5D,UAAYF,EACZ,QAAYF,EACZ,OAAYC,CAChB,CAAC,EAEI,KAAK,iBACN,KAAK,eAAe,QAAQ,GAG5B,CAAC,KAAK,aAAe,CAAC,KAAK,YAAY,SACvC,KAAK,WAAW,QAAQ,EAGxBI,IACA,KAAK,OAAS,IAAIxX,EAAE,YAAY,CAC5B,QAAS,CACL,KAAK,eACL,KAAK,UACT,EACA,mBAAoB,KAAK,mBACzB,mBAAoB,KAAK,kBAC7B,CAAC,EAED,KAAK,cAAgB,KAAK,OAAO,QAE7B,KAAK,QACL,KAAK,QAAQ,WACT,KAAK,cACL,CAAC,OAAQA,EAAE,cAAc,YAAY,CACzC,EAEA,KAAK,WACD,KAAK,cACL,CAAC,OAAQ,KAAK,uBAAyBA,EAAE,cAAc,QAAQ,CACnE,IAIL,IACX,EAOA,qBAAsB,UAAU,CAI5B,IAAI0X,EAA0B1X,EAAE,SAAU,KAAM2X,EAAe,EAC3DC,EAA0B5X,EAAE,SAAU,KAAM6X,EAAW,EACvDC,EAA0B9X,EAAE,SAAU,KAAM+X,EAAe,EAC3DC,EAA0BhY,EAAE,SAAU,KAAMiY,EAAgB,EAC5DC,EAA0BlY,EAAE,SAAU,KAAMmY,EAAgB,EAC5DC,EAA0BpY,EAAE,SAAU,KAAMqY,EAAO,EACnDC,EAA0BtY,EAAE,SAAU,KAAMuY,EAAa,EACzDC,EAA0BxY,EAAE,SAAU,KAAMyY,EAAa,EACzDC,EAA0B1Y,EAAE,SAAU,KAAM2Y,EAAc,EAC1DC,EAA0B5Y,EAAE,SAAU,KAAM6Y,EAAM,EAClD1B,EAA0BnX,EAAE,SAAU,KAAMgL,CAAQ,EACpDoM,EAA0BpX,EAAE,SAAU,KAAMiL,CAAO,EACnDsM,EAA0B,KAAK,UAC/BuB,EAA0B,CAAC,EAC3BtB,EAA0B,GAG9B,OAAK,KAAK,yBAEF,KAAK,cAAgB,KAAK,eAC1B,KAAK,YAAc,KAAK,gBACxB,KAAK,kBAAoB,KAAK,mBAC9B,KAAK,cAGLA,EAAW,IAGV,KAAK,kBACNsB,EAAQ,KAAM,KAAK,aAAe,IAAI9Y,EAAE,OAAO,CAC3C,QAAY,KAAK,aAAeA,EAAE,WAAY,KAAK,YAAa,EAAI,KACpE,mBAAoB,KAAK,mBACzB,mBAAoB,KAAK,mBACzB,QAAYA,EAAE,UAAW,iBAAkB,EAC3C,QAAYyX,EAAY,KAAK,UAAWF,EAAU,OAAO,IAAK,EAC9D,SAAYE,EAAY,KAAK,UAAWF,EAAU,OAAO,KAAM,EAC/D,SAAYE,EAAY,KAAK,UAAWF,EAAU,OAAO,KAAM,EAC/D,QAAYE,EAAY,KAAK,UAAWF,EAAU,OAAO,IAAK,EAC9D,QAAYG,EACZ,UAAYE,EACZ,QAAYE,EACZ,QAAYJ,EACZ,OAAYE,EACZ,QAAYT,EACZ,OAAYC,CAChB,CAAC,CAAC,EAEF0B,EAAQ,KAAM,KAAK,cAAgB,IAAI9Y,EAAE,OAAO,CAC5C,QAAY,KAAK,cAAgBA,EAAE,WAAY,KAAK,aAAc,EAAI,KACtE,mBAAoB,KAAK,mBACzB,mBAAoB,KAAK,mBACzB,QAAYA,EAAE,UAAW,kBAAmB,EAC5C,QAAYyX,EAAY,KAAK,UAAWF,EAAU,QAAQ,IAAK,EAC/D,SAAYE,EAAY,KAAK,UAAWF,EAAU,QAAQ,KAAM,EAChE,SAAYE,EAAY,KAAK,UAAWF,EAAU,QAAQ,KAAM,EAChE,QAAYE,EAAY,KAAK,UAAWF,EAAU,QAAQ,IAAK,EAC/D,QAAYS,EACZ,UAAYJ,EACZ,QAAYM,EACZ,QAAYF,EACZ,OAAYJ,EACZ,QAAYT,EACZ,OAAYC,CAChB,CAAC,CAAC,GAGD,KAAK,iBACN0B,EAAQ,KAAM,KAAK,WAAa,IAAI9Y,EAAE,OAAO,CACzC,QAAY,KAAK,WAAaA,EAAE,WAAY,KAAK,UAAW,EAAI,KAChE,mBAAoB,KAAK,mBACzB,mBAAoB,KAAK,mBACzB,QAAYA,EAAE,UAAW,eAAgB,EACzC,QAAYyX,EAAY,KAAK,UAAWF,EAAU,KAAK,IAAK,EAC5D,SAAYE,EAAY,KAAK,UAAWF,EAAU,KAAK,KAAM,EAC7D,SAAYE,EAAY,KAAK,UAAWF,EAAU,KAAK,KAAM,EAC7D,QAAYE,EAAY,KAAK,UAAWF,EAAU,KAAK,IAAK,EAC5D,UAAYa,EACZ,QAAYjB,EACZ,OAAYC,CAChB,CAAC,CAAC,EAGD,KAAK,qBACN0B,EAAQ,KAAM,KAAK,eAAiB,IAAI9Y,EAAE,OAAO,CAC7C,QAAY,KAAK,eAAiBA,EAAE,WAAY,KAAK,cAAe,EAAI,KACxE,mBAAoB,KAAK,mBACzB,mBAAoB,KAAK,mBACzB,QAAYA,EAAE,UAAW,mBAAoB,EAC7C,QAAYyX,EAAY,KAAK,UAAWF,EAAU,SAAS,IAAK,EAChE,SAAYE,EAAY,KAAK,UAAWF,EAAU,SAAS,KAAM,EACjE,SAAYE,EAAY,KAAK,UAAWF,EAAU,SAAS,KAAM,EACjE,QAAYE,EAAY,KAAK,UAAWF,EAAU,SAAS,IAAK,EAChE,UAAYe,EACZ,QAAYnB,EACZ,OAAYC,CAChB,CAAC,CAAC,EAGD,KAAK,sBACN0B,EAAQ,KAAM,KAAK,iBAAmB,IAAI9Y,EAAE,OAAO,CAC/C,QAAY,KAAK,iBAAmBA,EAAE,WAAY,KAAK,gBAAiB,EAAI,KAC5E,mBAAoB,KAAK,mBACzB,mBAAoB,KAAK,mBACzB,QAAYA,EAAE,UAAW,qBAAsB,EAC/C,QAAYyX,EAAY,KAAK,UAAWF,EAAU,WAAW,IAAK,EAClE,SAAYE,EAAY,KAAK,UAAWF,EAAU,WAAW,KAAM,EACnE,SAAYE,EAAY,KAAK,UAAWF,EAAU,WAAW,KAAM,EACnE,QAAYE,EAAY,KAAK,UAAWF,EAAU,WAAW,IAAK,EAClE,UAAYiB,EACZ,QAAYrB,EACZ,OAAYC,CAChB,CAAC,CAAC,EAEF0B,EAAQ,KAAM,KAAK,kBAAoB,IAAI9Y,EAAE,OAAO,CAChD,QAAY,KAAK,kBAAoBA,EAAE,WAAY,KAAK,iBAAkB,EAAI,KAC9E,mBAAoB,KAAK,mBACzB,mBAAoB,KAAK,mBACzB,QAAYA,EAAE,UAAW,sBAAuB,EAChD,QAAYyX,EAAY,KAAK,UAAWF,EAAU,YAAY,IAAK,EACnE,SAAYE,EAAY,KAAK,UAAWF,EAAU,YAAY,KAAM,EACpE,SAAYE,EAAY,KAAK,UAAWF,EAAU,YAAY,KAAM,EACpE,QAAYE,EAAY,KAAK,UAAWF,EAAU,YAAY,IAAK,EACnE,UAAYmB,EACZ,QAAYvB,EACZ,OAAYC,CAChB,CAAC,CAAC,GAGD,KAAK,iBACN0B,EAAQ,KAAM,KAAK,WAAa,IAAI9Y,EAAE,OAAO,CACzC,QAAY,KAAK,WAAaA,EAAE,WAAY,KAAK,UAAW,EAAI,KAChE,mBAAoB,KAAK,mBACzB,mBAAoB,KAAK,mBACzB,QAAYA,EAAE,UAAW,eAAgB,EACzC,QAAYyX,EAAY,KAAK,UAAWF,EAAU,KAAK,IAAK,EAC5D,SAAYE,EAAY,KAAK,UAAWF,EAAU,KAAK,KAAM,EAC7D,SAAYE,EAAY,KAAK,UAAWF,EAAU,KAAK,KAAM,EAC7D,QAAYE,EAAY,KAAK,UAAWF,EAAU,KAAK,IAAK,EAC5D,UAAYqB,EACZ,QAAYzB,EACZ,OAAYC,CAChB,CAAC,CAAC,EAGDI,GACD,KAAK,YAAc,IAAIxX,EAAE,YAAY,CACjC,QAAoB8Y,EACpB,mBAAoB,KAAK,mBACzB,mBAAoB,KAAK,kBAC7B,CAAC,EAED,KAAK,WAAc,KAAK,YAAY,QACpC,KAAK,WAAY,OAAQ9Y,EAAE,SAAU,KAAM+Y,EAAQ,CAAE,EAEjD,KAAK,QACL,KAAK,QAAQ,WACT,KAAK,WACL,CAAC,OAAQ,KAAK,yBAA2B/Y,EAAE,cAAc,QAAQ,CACrE,EAEA,KAAK,WACD,KAAK,WACL,CAAC,OAAQ,KAAK,yBAA2BA,EAAE,cAAc,QAAQ,CACrE,GAGJ,KAAK,cAAgB8Y,GAItB,IACX,EAOA,YAAa,UAAW,CACpB,OAAO,KAAK,cAChB,EAOA,SAAU,SAAUE,EAAM,CACtB,OAAI,KAAK,aAAeA,GAAQ,GAAKA,EAAO,KAAK,YAAY,SACzD,KAAK,eAAiBA,EAEtB,KAAK,uBAAwBA,CAAK,EAElC,KAAK,KAAM,KAAK,YAAaA,CAAK,CAAE,EAEhC,KAAK,gBACL,KAAK,eAAe,SAAUA,CAAK,EAavC,KAAK,WAAY,OAAQ,CAAE,KAAMA,CAAK,CAAE,GAGrC,IACX,EAuBA,WAAY,SAAUlX,EAASmX,EAAUC,EAAWC,EAAS,CACzD,IAAIpZ,EAcJ,GAbIC,EAAE,cAAe8B,CAAQ,EACzB/B,EAAU+B,EAEV/B,EAAU,CACN,QAAS+B,EACT,SAAUmX,EACV,UAAWC,EACX,OAAQC,CACZ,EAGJrX,EAAU9B,EAAE,WAAYD,EAAQ,OAAQ,EAEnCqZ,EAAiB,KAAK,gBAAiBtX,CAAQ,GAAK,EAErD,OAAO,KAGX,IAAIuX,EAAUzE,EAAkB,KAAM7U,CAAO,EAC7C,YAAK,gBAAgB,KAAKsZ,CAAO,EACjCA,EAAQ,SAAU,KAAK,kBAAmB,KAAK,QAAS,EAcxD,KAAK,WAAY,cAAe,CAC5B,QAASvX,EACT,SAAU/B,EAAQ,SAClB,UAAWA,EAAQ,SACvB,CAAC,EACM,IACX,EAgBA,cAAe,SAAU+B,EAASmX,EAAUC,EAAY,CACpD,IAAI3X,EAEJ,OAAAO,EAAU9B,EAAE,WAAY8B,CAAQ,EAChCP,EAAI6X,EAAiB,KAAK,gBAAiBtX,CAAQ,EAE9CP,GAAK,IACN,KAAK,gBAAiBA,CAAE,EAAE,OAAQ0X,EAAUC,CAAU,EACtDzO,EAAM,KAAK,IAAK,EAAE,YAAc,GAehC,KAAK,WAAY,iBAAkB,CAC/B,QAAS3I,EACT,SAAUmX,EACV,UAAWC,CACf,CAAC,GAEE,IACX,EAWA,cAAe,SAAUpX,EAAU,CAC/B,IAAIP,EAEJ,OAAAO,EAAU9B,EAAE,WAAY8B,CAAQ,EAChCP,EAAI6X,EAAiB,KAAK,gBAAiBtX,CAAQ,EAE9CP,GAAK,IACN,KAAK,gBAAiBA,CAAE,EAAE,QAAQ,EAClC,KAAK,gBAAgB,OAAQA,EAAG,CAAE,EAClCkJ,EAAM,KAAK,IAAK,EAAE,YAAc,GAahC,KAAK,WAAY,iBAAkB,CAC/B,QAAS3I,CACb,CAAC,GAEE,IACX,EASA,cAAe,UAAW,CACtB,KAAQ,KAAK,gBAAgB,OAAS,GAClC,KAAK,gBAAgB,IAAI,EAAE,QAAQ,EAEvC,OAAA2I,EAAM,KAAK,IAAK,EAAE,YAAc,GAUhC,KAAK,WAAY,gBAAiB,CAAC,CAAE,EAC9B,IACX,EAUA,eAAgB,SAAU3I,EAAU,CAChC,IAAIP,EAKJ,OAHAO,EAAU9B,EAAE,WAAY8B,CAAQ,EAChCP,EAAI6X,EAAiB,KAAK,gBAAiBtX,CAAQ,EAE/CP,GAAK,EACE,KAAK,gBAAgBA,CAAC,EAEtB,IAEf,EAQA,uBAAwB,SAAUyX,EAAO,CAE5B,KAAK,aACH,CAAC,KAAK,aAAe,KAAK,YAAY,OAAS,IAAMA,EAE9C,KAAK,iBACP,KAAK,WAAW,QAAQ,EAG5B,KAAK,WAAW,OAAO,GAG1B,KAAK,iBACDA,EAAO,EAER,KAAK,eAAe,OAAO,EAErB,KAAK,iBACP,KAAK,eAAe,QAAQ,EAI9C,EAQF,aAAc,SAAWM,EAAU,CAC/B,KAAK,aAAa,EAElB,IAAIrH,EAAMjS,EAAE,mBAAoB,KAAM,EACtCiS,EAAI,YAAa,SAAS,eAAgBqH,CAAQ,CAAE,EAEpD,KAAK,WAAatZ,EAAE,iBAAkBiS,CAAI,EAE1CjS,EAAE,SAAS,KAAK,WAAY,uBAAuB,EAEnD,KAAK,UAAU,YAAa,KAAK,UAAW,CAChD,EAOA,aAAc,UAAY,CACtB,IAAIiS,EAAM,KAAK,WACXA,IACAA,EAAI,WAAW,YAAYA,CAAG,EAC9B,OAAO,KAAK,WAEpB,EAQA,4BAA6B,SAAWtF,EAAO,CAC3C,OAASA,EAAO,CACZ,IAAK,QACD,OAAO,KAAK,qBAChB,IAAK,QACD,OAAO,KAAK,qBAChB,IAAK,MACD,OAAO,KAAK,mBAChB,QACI,OAAO,KAAK,sBACpB,CACJ,EAGA,cAAe,UAAW,CACtB,IAAIpL,EACAF,EAAS,KAAK,gBAAgB,OAClC,IAAME,EAAI,EAAGA,EAAIF,EAAQE,IACrB,KAAK,gBAAiBA,CAAE,EAAE,SAAU,KAAK,kBAAmB,KAAK,QAAS,CAElF,EAKA,qBAAsB,UAAW,CAC7B,KAAK,WAAa,CAAC,CACvB,EAMA,qBAAsB,UAAW,CAC7B,KAAK,mBAAqB,GAEtB,KAAK,iBACL,KAAK,eAAe,QAAQ,EAC5B,KAAK,eAAiB,KAE9B,EAOA,kBAAmB,UAAW,CAG1B,GAFA,KAAK,mBAAqB,GAEtB,KAAK,aAAc,CACnB,GAAI,KAAK,eACL,OAGA,KAAK,YAAY,QAAU,KAAK,YAAY,OAAS,IACrD,KAAK,eAAiB,IAAIvB,EAAE,eAAe,CACvC,GAAa,KAAK,sBAClB,SAAa,KAAK,uBAClB,UAAa,KAAK,wBAClB,OAAa,KAAK,qBAClB,OAAa,KAAK,qBAClB,MAAa,KAAK,oBAClB,YAAa,KAAK,YAClB,UAAa,KAAK,UAClB,OAAa,IACjB,CAAC,EAED,KAAK,eAAe,SAAU,KAAK,cAAe,EAE1D,MACIA,EAAE,QAAQ,KAAK,sEAAsE,CAE7F,EAMA,iCAAkC,UAAW,CACzC,KAAK,6BAA+B,KAAK,yBAAyB,KAAK,IAAI,EAC3EA,EAAE,SAAU,OAAQ,SAAU,KAAK,4BAA6B,CACpE,EAMA,oCAAqC,UAAW,CAC5CA,EAAE,YAAa,OAAQ,SAAU,KAAK,4BAA6B,CACvE,EAMC,yBAA0B,UAAW,CAClC,IAAIuZ,EAA2BvZ,EAAE,kBAC7BwZ,EAA2BxZ,EAAE,4BAA4B,EACzDuZ,IAA6BC,IAC7BxZ,EAAE,kBAAoBwZ,EACtB,KAAK,YAAY,EAEzB,EAWA,iBAAkB,UAAY,CAC1B,IAAI9T,EAAW,KAAK,eAAiB,EAClC,KAAK,iBAAmBA,EAAW,IAClCA,GAAY,KAAK,YAAY,QAEjC,KAAK,SAAUA,CAAS,CAC5B,EAUA,aAAc,UAAY,CACtB,IAAI+T,EAAO,KAAK,eAAiB,EAC9B,KAAK,iBAAmBA,GAAQ,KAAK,YAAY,SAChDA,EAAO,GAEX,KAAK,SAAUA,CAAK,CACxB,EAEA,YAAa,UAAY,CACrB,OAAOhP,EAAM,KAAK,IAAK,EAAE,SAC7B,CACJ,CAAC,EASD,SAASoJ,EAAkB6F,EAAU,CACjC,OAAAA,EAAW1Z,EAAE,WAAY0Z,CAAS,EAE3B,IAAI1Z,EAAE,MACR0Z,EAAS,cAAgB,EAAI,EAAIA,EAAS,YAC1CA,EAAS,eAAiB,EAAI,EAAIA,EAAS,YAChD,CACJ,CAOA,SAAS1C,EAA6B2C,EAAQvF,EAAYwF,EAAYC,EAClEC,EAAe,CACf,IAAIpP,EAAQiP,EAGZ,GAAK3Z,EAAE,KAAMoU,CAAW,IAAM,UAE1B,GAAKA,EAAW,MAAO,cAAe,EAClCA,EAAapU,EAAE,SAAUoU,CAAW,UAE5BA,EAAW,MAAM,qBAAsB,EAC/C,GAAI,CACF,IAAI2F,EAAc/Z,EAAE,UAAUoU,CAAU,EACxCA,EAAa2F,CACf,OAASpZ,EAAG,CAEZ,EAIR,SAASqZ,EAAe5F,EAAY6F,EAAoB,CAChD7F,EAAW,MACXyF,EAAgBzF,CAAU,GAE1BA,EAAW,WAAW,QAAS,UAAY,CACvCyF,EAAgBzF,CAAU,CAC9B,CAAC,EACDA,EAAW,WAAW,cAAe,SAAUjR,EAAO,CAClD2W,EAAa,CACT,QAAS3W,EAAM,QACf,OAAQ8W,CACZ,CAAC,CACL,CAAC,EAET,CAEA,WAAY,UAAW,CACnB,GAAKja,EAAE,KAAMoU,CAAW,IAAM,SAE1BA,EAAa,IAAIpU,EAAE,WAAW,CAC1B,IAAKoU,EACL,kBAAmBwF,EAAW,oBAAsB,OAChDA,EAAW,kBAAoBD,EAAO,kBAC1C,oBAAqBA,EAAO,oBAC5B,YAAaC,EAAW,YACpBA,EAAW,YAAcD,EAAO,YACpC,qBAAsBA,EAAO,qBAC7B,QAAS,SAAUxW,EAAQ,CACvB0W,EAAiB1W,EAAM,UAAW,CACtC,CACJ,CAAC,EACDiR,EAAW,WAAY,cAAe,SAAUjR,EAAQ,CACpD2W,EAAc3W,CAAM,CACxB,CAAE,UAEKnD,EAAE,cAAcoU,CAAU,GAAKA,EAAW,SAUjD,GATIA,EAAW,oBAAsB,SAChCwF,EAAW,oBAAsB,QAAaD,EAAO,oBAAsB,UAC5EvF,EAAW,kBAAoBwF,EAAW,oBAAsB,OAC5DA,EAAW,kBAAoBD,EAAO,mBAE1CvF,EAAW,sBAAwB,SACnCA,EAAW,oBAAsBuF,EAAO,qBAGvC3Z,EAAE,WAAYoU,EAAW,UAAW,EAAI,CAEzC,IAAI8F,EAAmB,IAAIla,EAAE,WAAYoU,CAAW,EACpD8F,EAAiB,WAAa9F,EAAW,WACzCyF,EAAiBK,CAAiB,CACtC,KAAO,CAEH,IAAIC,EAAcna,EAAE,WAAW,cAAe0K,EAAO0J,CAAW,EAChE,GAAK,CAAC+F,EAAc,CAChBL,EAAc,CACV,QAAS,4BACT,OAAQ1F,CACZ,CAAC,EACD,MACJ,CACA,IAAIrU,EAAUoa,EAAY,UAAU,UAAU,MAAOzP,EAAO,CAAE0J,CAAW,CAAE,EAC3E4F,EAAe,IAAIG,EAAYpa,CAAO,EAAGqU,CAAU,CACvD,MAGA4F,EAAe5F,EAAYA,CAAU,CAE7C,CAAC,CACL,CAEA,SAASQ,EAAkB+E,EAAQN,EAAU,CACzC,GAAKA,aAAmBrZ,EAAE,QACtB,OAAOqZ,EAGX,IAAIvX,EAAU,KACd,GAAKuX,EAAQ,QACTvX,EAAU9B,EAAE,WAAYqZ,EAAQ,OAAQ,MACrC,CACH,IAAInL,EAAKmL,EAAQ,GACbA,EAAQ,GACR,yBAA2B,KAAK,MAAO,KAAK,OAAO,EAAI,GAAS,EAEpEvX,EAAU9B,EAAE,WAAYqZ,EAAQ,EAAG,EAC7BvX,IACFA,EAAkB,SAAS,cAAe,GAAI,EAC9CA,EAAQ,KAAU,aAAeoM,GAErCpM,EAAQ,GAAKoM,EACblO,EAAE,SAAU8B,EAASuX,EAAQ,UACzBA,EAAQ,UACR,uBACJ,CACJ,CAEA,IAAIJ,EAAWI,EAAQ,SACnBe,EAAQf,EAAQ,MAChBgB,EAAShB,EAAQ,OACrB,GAAI,CAACJ,EAAU,CACX,IAAIqB,EAAIjB,EAAQ,EACZkB,EAAIlB,EAAQ,EAChB,GAAIA,EAAQ,KAAO,OAAW,CAC1B,IAAImB,EAAOb,EAAO,SAAS,yBAAyB,IAAI3Z,EAAE,KACtDqZ,EAAQ,GACRA,EAAQ,GACRe,GAAS,EACTC,GAAU,CAAC,CAAC,EAChBC,EAAIE,EAAK,EACTD,EAAIC,EAAK,EACTJ,EAAQA,IAAU,OAAYI,EAAK,MAAQ,OAC3CH,EAASA,IAAW,OAAYG,EAAK,OAAS,MAClD,CACAvB,EAAW,IAAIjZ,EAAE,MAAMsa,EAAGC,CAAC,CAC/B,CAEA,IAAIrB,EAAYG,EAAQ,UACxB,OAAIH,GAAalZ,EAAE,KAAKkZ,CAAS,IAAM,WACnCA,EAAYlZ,EAAE,UAAUqZ,EAAQ,UAAU,YAAY,CAAC,GAGpD,IAAIrZ,EAAE,QAAQ,CACjB,QAAS8B,EACT,SAAUmX,EACV,UAAWC,EACX,OAAQG,EAAQ,OAChB,YAAaA,EAAQ,YACrB,MAAOe,EACP,OAAQC,EACR,aAAchB,EAAQ,YAC1B,CAAC,CACL,CAOA,SAASD,EAAiBqB,EAAU3Y,EAAU,CAC1C,IAAIP,EACJ,IAAMA,EAAIkZ,EAAS,OAAS,EAAGlZ,GAAK,EAAGA,IACnC,GAAKkZ,EAAUlZ,CAAE,EAAE,UAAYO,EAC3B,OAAOP,EAIf,MAAO,EACX,CAKA,SAASuS,EAAgB6F,EAAQe,EAAY,CACzC,OAAO1a,EAAE,sBAAuB,UAAU,CACtC0a,EAAYf,CAAO,CACvB,CAAE,CACN,CAIA,SAASgB,EAAsBhB,EAAS,CACpC3Z,EAAE,sBAAuB,UAAU,CAC/B4a,EAAoBjB,CAAO,CAC/B,CAAC,CACL,CAIA,SAASzF,EAAuByF,EAAS,CAC/BA,EAAO,mBAGbA,EAAO,mBAAqB,GAC5BA,EAAO,sBACH3Z,EAAE,IAAI,EACN2Z,EAAO,kBAEX,OAAO,WAAY,UAAU,CACzBgB,EAAsBhB,CAAO,CACjC,EAAGA,EAAO,iBAAkB,EAChC,CAIA,SAASiB,EAAoBjB,EAAS,CAClC,IAAIkB,EACAC,EACAnX,EACApC,EACJ,GAAKoY,EAAO,mBAAqB,CAQ7B,IAPAkB,EAAc7a,EAAE,IAAI,EACpB8a,EAAYD,EAAclB,EAAO,sBACjChW,EAAU,EAAMmX,EAAYnB,EAAO,mBAEnChW,EAAU,KAAK,IAAK,EAAKA,CAAQ,EACjCA,EAAU,KAAK,IAAK,EAAKA,CAAQ,EAE3BpC,EAAIoY,EAAO,SAAS,OAAS,EAAGpY,GAAK,EAAGA,IACtCoY,EAAO,SAAUpY,CAAE,EAAE,UACrBoY,EAAO,SAAUpY,CAAE,EAAE,WAAYoC,CAAQ,EAI5CA,EAAU,GAEXgX,EAAsBhB,CAAO,CAErC,CACJ,CAIA,SAASrE,EAAuBqE,EAAS,CACrC,IAAIpY,EAEJ,IADAoY,EAAO,mBAAqB,GACtBpY,EAAIoY,EAAO,SAAS,OAAS,EAAGpY,GAAK,EAAGA,IAC1CoY,EAAO,SAAUpY,CAAE,EAAE,WAAY,CAAI,CAE7C,CAOA,SAASyJ,GAAS,CACdsK,EAAuB,IAAK,CAChC,CAEA,SAASrK,GAAQ,CACbiJ,EAAuB,IAAK,CAEhC,CAEA,SAASxB,EAAqBvP,EAAQ,CAClC,IAAImH,EAAY,CACZ,QAASnH,EAAM,YACf,SAAUA,EAAM,SAChB,cAAeA,EAAM,cACrB,eAAgBA,EAAM,cAC1B,EAeA,KAAK,WAAY,qBAAsBmH,CAAU,EAEjDnH,EAAM,eAAiBmH,EAAU,cACrC,CAEA,SAASqI,EAAiBxP,EAAQ,CAC9B,IAAI4X,EAAyB,CAC3B,cAAe5X,EAAM,cACrB,qBAAsB,GACtB,mBAAoBA,EAAM,oBAAsB,CAAC,KAAK,YACtD,qBAAsBA,EAAM,sBAAwB,CAAC,KAAK,aAC5D,EAkBA,GAFA,KAAK,WAAW,aAAc4X,CAAsB,EAE/C,CAACA,EAAuB,sBAAwB,CAAC5X,EAAM,MAAQ,CAACA,EAAM,KAAO,CAACA,EAAM,KACrF,OAAQA,EAAM,QAAS,CACnB,IAAK,IACI4X,EAAuB,qBACrB5X,EAAM,MACT,KAAK,SAAS,OAAO,GAAG,EAExB,KAAK,SAAS,MAAM,KAAK,SAAS,sBAAsB,IAAInD,EAAE,MAAM,EAAG,CAAC,KAAK,mBAAmB,CAAC,CAAC,EAEpG,KAAK,SAAS,iBAAiB,GAEjCmD,EAAM,eAAiB,GACvB,MACJ,IAAK,IACI4X,EAAuB,qBACrB5X,EAAM,MACT,KAAK,SAAS,OAAO,EAAG,EAExB,KAAK,SAAS,MAAM,KAAK,SAAS,sBAAsB,IAAInD,EAAE,MAAM,EAAG,KAAK,mBAAmB,CAAC,CAAC,EAEnG,KAAK,SAAS,iBAAiB,GAEjCmD,EAAM,eAAiB,GACvB,MACJ,IAAK,IACI4X,EAAuB,uBAC1B,KAAK,SAAS,MAAM,KAAK,SAAS,sBAAsB,IAAI/a,EAAE,MAAM,CAAC,KAAK,oBAAqB,CAAC,CAAC,CAAC,EAClG,KAAK,SAAS,iBAAiB,GAEjCmD,EAAM,eAAiB,GACvB,MACJ,IAAK,IACI4X,EAAuB,uBAC1B,KAAK,SAAS,MAAM,KAAK,SAAS,sBAAsB,IAAI/a,EAAE,MAAM,KAAK,oBAAqB,CAAC,CAAC,CAAC,EACjG,KAAK,SAAS,iBAAiB,GAEjCmD,EAAM,eAAiB,GACvB,MACJ,IAAK,KACD,KAAK,SAAS,OAAO,GAAG,EACxB,KAAK,SAAS,iBAAiB,EAC/BA,EAAM,eAAiB,GACvB,MACJ,IAAK,KACD,KAAK,SAAS,OAAO,EAAG,EACxB,KAAK,SAAS,iBAAiB,EAC/BA,EAAM,eAAiB,GACvB,MACJ,IAAK,IACD,KAAK,SAAS,OAAO,EACrB,KAAK,SAAS,iBAAiB,EAC/BA,EAAM,eAAiB,GACvB,MACJ,IAAK,IACI4X,EAAuB,qBACnB5X,EAAM,MACP,KAAK,SAAS,OAAO,GAAG,EAExB,KAAK,SAAS,MAAM,KAAK,SAAS,sBAAsB,IAAInD,EAAE,MAAM,EAAG,GAAG,CAAC,CAAC,EAEhF,KAAK,SAAS,iBAAiB,GAEnCmD,EAAM,eAAiB,GACvB,MACJ,IAAK,IACI4X,EAAuB,qBACnB5X,EAAM,MACP,KAAK,SAAS,OAAO,EAAG,EAExB,KAAK,SAAS,MAAM,KAAK,SAAS,sBAAsB,IAAInD,EAAE,MAAM,EAAG,EAAE,CAAC,CAAC,EAE/E,KAAK,SAAS,iBAAiB,GAEnCmD,EAAM,eAAiB,GACvB,MACJ,IAAK,IACI4X,EAAuB,uBACxB,KAAK,SAAS,MAAM,KAAK,SAAS,sBAAsB,IAAI/a,EAAE,MAAM,IAAK,CAAC,CAAC,CAAC,EAC5E,KAAK,SAAS,iBAAiB,GAEnCmD,EAAM,eAAiB,GACvB,MACJ,IAAK,IACI4X,EAAuB,uBACxB,KAAK,SAAS,MAAM,KAAK,SAAS,sBAAsB,IAAI/a,EAAE,MAAM,GAAI,CAAC,CAAC,CAAC,EAC3E,KAAK,SAAS,iBAAiB,GAEnCmD,EAAM,eAAiB,GACvB,MACJ,IAAK,IACEA,EAAM,MACF,KAAK,SAAS,QACb,KAAK,SAAS,YAAY,KAAK,SAAS,YAAY,EAAI,KAAK,iBAAiB,EAE9E,KAAK,SAAS,YAAY,KAAK,SAAS,YAAY,EAAI,KAAK,iBAAiB,EAG/E,KAAK,SAAS,QACb,KAAK,SAAS,YAAY,KAAK,SAAS,YAAY,EAAI,KAAK,iBAAiB,EAE9E,KAAK,SAAS,YAAY,KAAK,SAAS,YAAY,EAAI,KAAK,iBAAiB,EAGtF,KAAK,SAAS,iBAAiB,EAC/BA,EAAM,eAAiB,GACvB,MACJ,IAAK,IACD,KAAK,SAAS,WAAW,EACzBA,EAAM,eAAiB,GACvB,MACJ,IAAK,IACD,KAAK,iBAAiB,EACtB,MACJ,IAAK,IACD,KAAK,aAAa,EAClB,MACJ,QAEIA,EAAM,eAAiB,GACvB,KACR,MAEAA,EAAM,eAAiB,EAE/B,CAEA,SAASyP,EAAkBzP,EAAQ,CAC/B,IAAI6X,EAA0B,CAC5B,cAAe7X,EAAM,aACvB,EAaA,KAAK,WAAW,mBAAoB6X,CAAuB,CAC/D,CAEA,SAASnI,EAAe1P,EAAQ,CAC5B,IAAI8X,EAEAC,EAAoB,SAAS,gBAAkB,KAAK,OAGlDA,GACF,KAAK,OAAO,MAAM,EAEnB,KAAK,SAAS,UACb/X,EAAM,SAAS,EAAI,KAAK,SAAS,iBAAiB,EAAE,EAAIA,EAAM,SAAS,GAG3E,IAAIgY,EAAuB,CACvB,QAAShY,EAAM,YACf,SAAUA,EAAM,SAChB,MAAOA,EAAM,MACb,MAAOA,EAAM,MACb,cAAeA,EAAM,cACrB,eAAgBA,EAAM,eACtB,qBAAsB,EAC1B,EAmBA,KAAK,WAAY,eAAgBgY,CAAoB,EAGhD,CAACA,EAAqB,sBAAwB,KAAK,UAAYhY,EAAM,QACtE8X,EAAkB,KAAK,4BAA6B9X,EAAM,WAAY,EAElE8X,EAAgB,cAAgB,KAChC,KAAK,SAAS,OACV9X,EAAM,MAAQ,EAAM,KAAK,aAAe,KAAK,aAC7C8X,EAAgB,eAAiB,KAAK,SAAS,eAAgB9X,EAAM,SAAU,EAAK,EAAI,IAC5F,EACA,KAAK,SAAS,iBAAiB,GAG/B8X,EAAgB,qBACbxQ,EAAM,KAAK,IAAK,EAAE,iBAAmB,IACpCA,EAAM,KAAK,IAAK,EAAE,cAAgB,KAClCA,EAAM,KAAK,IAAK,EAAE,eAAiB,IAGnCA,EAAM,KAAK,IAAK,EAAE,cAAgBzK,EAAE,IAAI,GAKxD,CAEA,SAAS8S,EAAkB3P,EAAQ,CAC/B,IAAI8X,EAEAG,EAA0B,CAC1B,QAASjY,EAAM,YACf,SAAUA,EAAM,SAChB,MAAOA,EAAM,MACb,cAAeA,EAAM,cACrB,qBAAsB,EAC1B,EAgBA,KAAK,WAAY,sBAAuBiY,CAAuB,EAE1D,CAACA,EAAwB,sBAAwB,KAAK,WACvDH,EAAkB,KAAK,4BAA6B9X,EAAM,WAAY,EACjE8X,EAAgB,iBACjB,KAAK,SAAS,OACV9X,EAAM,MAAQ,EAAM,KAAK,aAAe,KAAK,aAC7C8X,EAAgB,eAAiB,KAAK,SAAS,eAAgB9X,EAAM,SAAU,EAAK,EAAI,IAC5F,EACA,KAAK,SAAS,iBAAiB,GAG3C,CAEA,SAAS4P,EAAc5P,EAAQ,CAC3B,IAAI8X,EAEAI,EAAsB,CACtB,QAASlY,EAAM,YACf,YAAaA,EAAM,YACnB,SAAUA,EAAM,SAChB,MAAOA,EAAM,MACb,MAAOA,EAAM,MACb,UAAWA,EAAM,UACjB,MAAOA,EAAM,MACb,cAAeA,EAAM,cACrB,qBAAsB,EAC1B,EAwBA,GAJA,KAAK,WAAY,cAAekY,CAAmB,EAEnDJ,EAAkB,KAAK,4BAA6B9X,EAAM,WAAY,EAEnE,CAACkY,EAAoB,sBAAwB,KAAK,UAEjD,GAAIJ,EAAgB,oBAAsBxQ,EAAM,KAAK,IAAK,EAAE,eAAe,CACvE,IAAI6Q,EAAS,KAAK,IAAK,KAAK,oBAAqBnY,EAAM,MAAM,EAAI,EAAE,EACnE,KAAK,SAAS,OAAOmY,CAAM,CAC/B,SACSL,EAAgB,WAAa,CAACxQ,EAAM,KAAK,IAAK,EAAE,eAAgB,CAWrE,GAVK,KAAK,gBACNtH,EAAM,MAAM,EAAI,GAEf,KAAK,cACNA,EAAM,MAAM,EAAI,GAEjB,KAAK,SAAS,UACbA,EAAM,MAAM,EAAI,CAACA,EAAM,MAAM,GAG7B,KAAK,mBAAoB,CACzB,IAAIqO,EAAQ,KAAK,SAAS,sBAAuBrO,EAAM,MAAM,OAAO,CAAE,EAEtE,KAAK,SAAS,cAAc,OAAO,OAASqO,EAAM,EAClD,KAAK,SAAS,cAAc,OAAO,OAASA,EAAM,EAElD,IAAI+J,EAAoB,KAAK,SAAS,qBAAqB,EAE3D,KAAK,SAAS,cAAc,OAAO,OAAS/J,EAAM,EAClD,KAAK,SAAS,cAAc,OAAO,OAASA,EAAM,EAE9C+J,EAAkB,eAClBpY,EAAM,MAAM,EAAI,GAGhBoY,EAAkB,eAClBpY,EAAM,MAAM,EAAI,EAExB,CACA,KAAK,SAAS,MAAO,KAAK,SAAS,sBAAuBA,EAAM,MAAM,OAAO,CAAE,EAAG8X,EAAgB,cAAgB,CAAC,KAAK,kBAAkB,CAC9I,EAIR,CAEA,SAASjI,EAAiB7P,EAAQ,CAC9B,IAAI8X,EACAO,EAAyB,CACzB,QAASrY,EAAM,YACf,YAAaA,EAAM,YACnB,SAAUA,EAAM,SAChB,MAAOA,EAAM,MACb,UAAWA,EAAM,UACjB,MAAOA,EAAM,MACb,cAAeA,EAAM,cACrB,qBAAsB,EAC1B,EAuBA,GAJC,KAAK,WAAW,kBAAmBqY,CAAsB,EAE1DP,EAAkB,KAAK,4BAA6B9X,EAAM,WAAY,EAElE,CAACqY,EAAuB,sBAAwB,KAAK,SAAU,CAC/D,GAAK,CAAC/Q,EAAM,KAAK,IAAK,EAAE,gBACpBwQ,EAAgB,WAChBA,EAAgB,cAChB9X,EAAM,OAAS8X,EAAgB,cAAe,CAC9C,IAAIQ,EAAa,EACb,KAAK,gBACLA,EAAaR,EAAgB,cAAgB9X,EAAM,MAC/C,KAAK,IAAIA,EAAM,SAAS,GAEhC,IAAIuY,EAAa,EACb,KAAK,cACLA,EAAaT,EAAgB,cAAgB9X,EAAM,MAC/C,KAAK,IAAIA,EAAM,SAAS,GAEhC,IAAIwY,EAAS,KAAK,SAAS,eACvB,KAAK,SAAS,UAAU,EAAI,CAAC,EAC7Bva,EAAS,KAAK,SAAS,eACvB,IAAIpB,EAAE,MAAM2b,EAAO,EAAIF,EAAYE,EAAO,EAAID,CAAU,CAAC,EAC7D,KAAK,SAAS,MAAMta,EAAQ,EAAK,CACrC,CACA,KAAK,SAAS,iBAAiB,CACnC,CAGI6Z,EAAgB,oBAAsBxQ,EAAM,KAAK,IAAK,EAAE,iBAAmB,KAC3EA,EAAM,KAAK,IAAK,EAAE,eAAiB,GAI3C,CAEA,SAASwI,EAAe9P,EAAQ,CAkB5B,KAAK,WAAY,eAAgB,CAC7B,QAASA,EAAM,YACf,YAAaA,EAAM,YACnB,SAAUA,EAAM,SAChB,QAASA,EAAM,QACf,SAAUA,EAAM,SAChB,qBAAsBA,EAAM,qBAC5B,cAAeA,EAAM,cACrB,cAAeA,EAAM,aACzB,CAAC,CACL,CAEA,SAAS+P,EAAe/P,EAAQ,CAkB5B,KAAK,WAAY,cAAe,CAC5B,QAASA,EAAM,YACf,YAAaA,EAAM,YACnB,SAAUA,EAAM,SAChB,QAASA,EAAM,QACf,SAAUA,EAAM,SAChB,qBAAsBA,EAAM,qBAC5B,cAAeA,EAAM,cACrB,cAAeA,EAAM,aACzB,CAAC,CACL,CAEA,SAASgQ,EAAehQ,EAAQ,CAC5B,IAAI8X,EA4BJ,GAXA,KAAK,WAAY,eAAgB,CAC7B,QAAS9X,EAAM,YACf,YAAaA,EAAM,YACnB,SAAUA,EAAM,SAChB,qBAAsBA,EAAM,qBAC5B,sBAAuBA,EAAM,sBAC7B,cAAeA,EAAM,aACzB,CAAC,EAGD8X,EAAkB,KAAK,4BAA6B9X,EAAM,WAAY,EACjE8X,EAAgB,mBAAoB,CACrC,IAAIW,EAAgBnR,EAAM,KAAK,IAAK,EAAE,cAClCoR,EAAgB7b,EAAE,IAAI,EAE1B,GAAK4b,IAAkB,KACnB,OAGCC,EAAgBD,EAAiB,KAAK,wBACvCnR,EAAM,KAAK,IAAK,EAAE,eAAiB,IAGvCA,EAAM,KAAK,IAAK,EAAE,cAAgB,IACtC,CAEJ,CAEA,SAAS2I,EAAiBjQ,EAAQ,CAgB9B,KAAK,WAAY,iBAAkB,CAC/B,QAASA,EAAM,YACf,YAAaA,EAAM,YACnB,SAAUA,EAAM,SAChB,qBAAsBA,EAAM,qBAC5B,sBAAuBA,EAAM,sBAC7B,cAAeA,EAAM,aACzB,CAAC,CACL,CAEA,SAASkQ,EAAyBlQ,EAAQ,CAkBtC,KAAK,WAAY,0BAA2B,CACxC,QAASA,EAAM,YACf,SAAUA,EAAM,SAChB,YAAaA,EAAM,YACnB,OAAQA,EAAM,OACd,QAASA,EAAM,QACf,cAAeA,EAAM,aACzB,CAAC,CACL,CAEA,SAASmQ,EAA2BnQ,EAAQ,CAkBxC,KAAK,WAAY,4BAA6B,CAC1C,QAASA,EAAM,YACf,SAAUA,EAAM,SAChB,YAAaA,EAAM,YACnB,OAAQA,EAAM,OACd,QAASA,EAAM,QACf,cAAeA,EAAM,aACzB,CAAC,CACL,CAEA,SAASqQ,EAAerQ,EAAQ,CAC5B,IAAI8X,EACAa,EACAC,EACAC,EAEAC,EAAuB,CACvB,QAAS9Y,EAAM,YACf,YAAaA,EAAM,YACnB,cAAeA,EAAM,cACrB,WAAYA,EAAM,WAClB,OAAQA,EAAM,OACd,aAAcA,EAAM,aACpB,SAAUA,EAAM,SAChB,MAAOA,EAAM,MACb,cAAeA,EAAM,cACrB,wBAAyB,GACzB,yBAA0B,GAC1B,2BAA4B,EAChC,EAyBA,GAFC,KAAK,WAAW,eAAgB8Y,CAAoB,EAEhD,KAAK,WACNhB,EAAkB,KAAK,4BAA6B9X,EAAM,WAAY,EACjE8X,EAAgB,cACR,CAACgB,EAAqB,yBAA2B,CAACA,EAAqB,4BAChFH,EAAW,KAAK,SAAS,eAAgB3Y,EAAM,OAAQ,EAAK,EACvD8X,EAAgB,gBAAkB,CAACgB,EAAqB,0BACzDF,EAAe,KAAK,SAAS,eAAgB5Y,EAAM,WAAY,EAAK,EACpE6Y,EAAUD,EAAa,MAAOD,CAAS,EAClC,KAAK,gBACNE,EAAQ,EAAI,GAEX,KAAK,cACNA,EAAQ,EAAI,GAEhB,KAAK,SAAS,MAAMA,EAAS,EAAI,GAE/BC,EAAqB,0BACvB,KAAK,SAAS,OAAQ9Y,EAAM,SAAWA,EAAM,aAAc2Y,EAAU,EAAK,EAE9E,KAAK,SAAS,iBAAiB,GAE9Bb,EAAgB,aAAe,CAACgB,EAAqB,4BAA6B,CAEnF,IAAIC,EAAS,KAAK,MAAM/Y,EAAM,cAAc,CAAC,EAAE,WAAW,EAAIA,EAAM,cAAc,CAAC,EAAE,WAAW,EAC5FA,EAAM,cAAc,CAAC,EAAE,WAAW,EAAIA,EAAM,cAAc,CAAC,EAAE,WAAW,CAAC,EACzEgZ,EAAS,KAAK,MAAMhZ,EAAM,cAAc,CAAC,EAAE,QAAQ,EAAIA,EAAM,cAAc,CAAC,EAAE,QAAQ,EACtFA,EAAM,cAAc,CAAC,EAAE,QAAQ,EAAIA,EAAM,cAAc,CAAC,EAAE,QAAQ,CAAC,EACvE2Y,EAAW,KAAK,SAAS,eAAgB3Y,EAAM,OAAQ,EAAK,EAC5D,KAAK,SAAS,SAAS,KAAK,SAAS,YAAY,EAAI,GAAM+Y,EAASC,IAAW,IAAM,KAAK,IAAML,EAAU,EAAI,CAClH,CAER,CAEA,SAASrI,EAAetQ,EAAQ,CAa5B,KAAK,WAAY,eAAgB,CAC7B,QAASA,EAAM,YACf,cAAeA,EAAM,aACzB,CAAC,CACL,CAEA,SAASuQ,GAAcvQ,EAAQ,CAY3B,KAAK,WAAY,cAAe,CAC5B,QAASA,EAAM,YACf,cAAeA,EAAM,aACzB,CAAC,CACL,CAEA,SAASoQ,GAAgBpQ,EAAQ,CAC7B,IAAIiZ,EACAnB,EACAK,EACAe,EACAC,EAKJD,EAAiBrc,EAAE,IAAI,EACvBsc,EAAkBD,EAAiB,KAAK,gBACpCC,EAAkB,KAAK,oBACvB,KAAK,gBAAkBD,EAEvBD,EAAwB,CACpB,QAASjZ,EAAM,YACf,SAAUA,EAAM,SAChB,OAAQA,EAAM,OACd,MAAOA,EAAM,MACb,cAAeA,EAAM,cACrB,qBAAsB,GACtB,eAAgB,EACpB,EAkBC,KAAK,WAAW,gBAAiBiZ,CAAsB,EAEnD,CAACA,EAAsB,sBAAwB,KAAK,WAClD,KAAK,SAAS,UACbjZ,EAAM,SAAS,EAAI,KAAK,SAAS,iBAAiB,EAAE,EAAIA,EAAM,SAAS,GAG3E8X,EAAkB,KAAK,4BAA6B9X,EAAM,WAAY,EACjE8X,EAAgB,eACjBK,EAAS,KAAK,IAAK,KAAK,cAAenY,EAAM,MAAO,EACpD,KAAK,SAAS,OACVmY,EACAL,EAAgB,eAAiB,KAAK,SAAS,eAAgB9X,EAAM,SAAU,EAAK,EAAI,IAC5F,EACA,KAAK,SAAS,iBAAiB,IAIvCA,EAAM,eAAiBiZ,EAAsB,gBAE7CjZ,EAAM,eAAiB,EAE/B,CAEA,SAASwQ,GAAkBxQ,EAAQ,CAC/BsH,EAAM,KAAK,IAAK,EAAE,YAAc,GAChC6K,EAAuB,IAAK,EAkB5B,KAAK,WAAY,kBAAmB,CAChC,QAASnS,EAAM,YACf,YAAaA,EAAM,YACnB,SAAUA,EAAM,SAChB,QAASA,EAAM,QACf,SAAUA,EAAM,SAChB,qBAAsBA,EAAM,qBAC5B,cAAeA,EAAM,cACrB,cAAeA,EAAM,aACzB,CAAC,CACL,CAEA,SAASyQ,GAAkBzQ,EAAQ,CAC1BA,EAAM,SAAW,IAClBsH,EAAM,KAAK,IAAK,EAAE,YAAc,GAC1BA,EAAM,KAAK,IAAK,EAAE,WACpByJ,EAAuB,IAAK,GAoBpC,KAAK,WAAY,iBAAkB,CAC/B,QAAS/Q,EAAM,YACf,YAAaA,EAAM,YACnB,SAAUA,EAAM,SAChB,QAASA,EAAM,QACf,SAAUA,EAAM,SAChB,qBAAsBA,EAAM,qBAC5B,cAAeA,EAAM,cACrB,cAAeA,EAAM,aACzB,CAAC,CACL,CAOA,SAAS4Q,GAAa4F,EAAS,CAC3B4C,GAAY5C,CAAO,EAGdA,EAAO,OAAO,EACfA,EAAO,iBAAmB7F,EAAgB6F,EAAQ5F,EAAY,EAE9D4F,EAAO,iBAAmB,EAElC,CAEA,SAAS6C,GAAe7C,EAAQ8C,EAAc,CAC1C,IAAIC,EAAW/C,EAAO,SAClBgD,EAAOD,EAAS,QAAQ,EACxBf,EAASe,EAAS,UAAU,EAChCA,EAAS,OAAOD,EAAe9C,EAAO,yBAAyB,EAC/D+C,EAAS,MAAMf,EAAQ,EAAI,EAC3B,IAAIiB,EACJ,GAAIjD,EAAO,0BACPiD,EAAcnS,EAAKkP,EAAO,IAAI,EAAE,kBAAkB,EAAI8C,EAAc,MACjE,CACH,IAAII,EAAS,IAAI7c,EAAE,MAAM,EAAG,CAAC,EACzB8c,EAAW,IAAI9c,EAAE,MAAMyK,EAAKkP,EAAO,IAAI,EAAE,kBAAkB,EAAGlP,EAAKkP,EAAO,IAAI,EAAE,kBAAkB,CAAC,EAAE,WAAWkD,CAAM,EACtHE,EAAU,IAAI/c,EAAE,MAAMyc,EAAc,EAAGA,EAAc,CAAC,EAAE,WAAWI,CAAM,EAC7ED,EAAcG,EAAUD,EAAWrS,EAAKkP,EAAO,IAAI,EAAE,kBAAkB,EAAI8C,EAAc,CAC7F,CACAC,EAAS,OAAOC,EAAOC,EAAa,KAAM,EAAI,EAC9CnS,EAAKkP,EAAO,IAAI,EAAE,kBAAoB8C,EACtChS,EAAKkP,EAAO,IAAI,EAAE,YAAc,GAChClP,EAAKkP,EAAO,IAAI,EAAE,YAAc,GAChClP,EAAKkP,EAAO,IAAI,EAAE,YAAc,EACpC,CACA,SAAS4C,GAAY5C,EAAS,CAI1B,GAAI,EAAAA,EAAO,UAAY,CAAClP,EAAKkP,EAAO,IAAI,GAGxC,IAAIA,EAAO,YAAclP,EAAKkP,EAAO,IAAI,EAAE,YAAY,CACnD,IAAI8C,EACJ,GAAG9C,EAAO,mBAAmB,CACzB8C,EAAgB5I,EAAiB8F,EAAO,SAAS,EACjD,IAAIqD,EAAoBvS,EAAKkP,EAAO,IAAI,EAAE,kBACrC8C,EAAc,OAAOO,CAAiB,IACvCvS,EAAKkP,EAAO,IAAI,EAAE,YAAc,GAExC,CACGlP,EAAKkP,EAAO,IAAI,EAAE,aACjB6C,GAAe7C,EAAQ8C,GAAiB5I,EAAiB8F,EAAO,SAAS,CAAC,CAGlF,CAIA,IAAIsD,EAAiBtD,EAAO,SAAS,OAAO,EACxCuD,EAAWvD,EAAO,MAAM,OAAOsD,CAAc,GAAKA,EAElDA,GAWAtD,EAAO,WAAW,iBAAiB,EAGnCA,EAAO,iBACPuD,EAAWvD,EAAO,eAAe,OAAQA,EAAO,QAAS,GAAKuD,GAGlE,IAAIC,EAAmB1S,EAAMkP,EAAO,IAAK,EAAE,UAEtC,CAACwD,GAAoBD,IAUtBvD,EAAO,WAAY,iBAAkB,EACrCrE,EAAuBqE,CAAO,GAGlC,IAAIyD,EAAsBD,GAAoB,CAACD,EAE1CE,IACD3S,EAAMkP,EAAO,IAAK,EAAE,UAAY,KAG/BuD,GAAYE,GAAuB3S,EAAMkP,EAAO,IAAK,EAAE,aAAeA,EAAO,MAAM,UAAU,KAC9F0D,GAAW1D,CAAO,EAClBA,EAAO,cAAc,EACjBA,EAAO,WACTA,EAAO,UAAU,OAAQA,EAAO,QAAS,EAG3ClP,EAAMkP,EAAO,IAAK,EAAE,YAAc,GAE9BuD,GAWAvD,EAAO,WAAY,WAAY,GAIlCyD,IAUDzD,EAAO,WAAY,kBAAmB,EAEhClP,EAAMkP,EAAO,IAAK,EAAE,aACtBzF,EAAuByF,CAAO,GAItClP,EAAMkP,EAAO,IAAK,EAAE,UAAYuD,EAGpC,CAEA,SAASG,GAAW1D,EAAS,CACzBA,EAAO,YAAY,MAAM,EACzBA,EAAO,MAAM,KAAK,EAWlBA,EAAO,WAAY,kBAAmB,CAAC,CAAE,CAC7C,CAKA,SAASlC,EAAY6F,EAAQ1Y,EAAM,CAC/B,OAAO0Y,EAASA,EAAS1Y,EAAMA,CACnC,CAIA,SAAS+S,IAAiB,CACtBlN,EAAM,KAAK,IAAK,EAAE,aAAezK,EAAE,IAAI,EACvCyK,EAAM,KAAK,IAAK,EAAE,WAAa,KAAK,cACpCA,EAAM,KAAK,IAAK,EAAE,QAAU,GAC5B8S,GAAc,IAAK,CACvB,CAGA,SAAStF,IAAkB,CACvBxN,EAAM,KAAK,IAAK,EAAE,aAAezK,EAAE,IAAI,EACvCyK,EAAM,KAAK,IAAK,EAAE,WAAa,EAAM,KAAK,cAC1CA,EAAM,KAAK,IAAK,EAAE,QAAU,GAC5B8S,GAAc,IAAK,CACvB,CAGA,SAAS1F,IAAa,CAClBpN,EAAM,KAAK,IAAK,EAAE,QAAU,EAChC,CAGA,SAAS8S,GAAc5D,EAAS,CAC5B3Z,EAAE,sBAAuBA,EAAE,SAAU2Z,EAAQ6D,EAAO,CAAE,CAC1D,CAGA,SAASA,IAAS,CACd,IAAI3C,EACAC,EACA2C,EAEChT,EAAM,KAAK,IAAK,EAAE,SAAW,KAAK,WACnCoQ,EAAkB7a,EAAE,IAAI,EACxB8a,EAAkBD,EAAcpQ,EAAM,KAAK,IAAK,EAAE,aAClDgT,EAAkB,KAAK,IAAKhT,EAAM,KAAK,IAAK,EAAE,WAAYqQ,EAAY,GAAK,EAE3E,KAAK,SAAS,OAAQ2C,CAAe,EACrC,KAAK,SAAS,iBAAiB,EAC/BhT,EAAM,KAAK,IAAK,EAAE,aAAeoQ,EACjC0C,GAAc,IAAK,EAE3B,CAGA,SAASxF,IAAiB,CACjB,KAAK,WACNtN,EAAM,KAAK,IAAK,EAAE,QAAU,GAC5B,KAAK,SAAS,OACV,KAAK,aAAe,CACxB,EACA,KAAK,SAAS,iBAAiB,EAEvC,CAGA,SAAS0N,IAAkB,CAClB,KAAK,WACN1N,EAAM,KAAK,IAAK,EAAE,QAAU,GAC5B,KAAK,SAAS,OACV,EAAM,KAAK,YACf,EACA,KAAK,SAAS,iBAAiB,EAEvC,CAGA,SAASsO,IAAU,CACX,KAAK,cACL,KAAK,YAAY,aAAa,EAC9B,KAAK,YAAY,aAAa,EAEtC,CAGA,SAASV,IAAS,CACT,KAAK,UACN,KAAK,SAAS,OAAO,CAE7B,CAGA,SAASE,IAAe,CACf,KAAK,WAAW,GAAK,CAACvY,EAAE,aAAa,EAEtC,KAAK,YAAa,EAAM,EAExB,KAAK,cAAe,CAAC,KAAK,WAAW,CAAE,EAGtC,KAAK,aACN,KAAK,YAAY,aAAa,EAElC,KAAK,eAAe,QAAQ,MAAM,EAC7B,KAAK,UACN,KAAK,SAAS,iBAAiB,CAEvC,CAEA,SAASyY,IAAe,CACpB,GAAK,KAAK,SAAW,CACjB,IAAIiF,EAAe,KAAK,SAAS,YAAY,EAExC,KAAK,SAAS,QACjBA,GAAgB,KAAK,kBAErBA,GAAgB,KAAK,kBAEvB,KAAK,SAAS,YAAYA,CAAY,CAC1C,CACJ,CAEA,SAAS/E,IAAgB,CACrB,GAAK,KAAK,SAAW,CACjB,IAAI+E,EAAe,KAAK,SAAS,YAAY,EAExC,KAAK,SAAS,QACjBA,GAAgB,KAAK,kBAErBA,GAAgB,KAAK,kBAEvB,KAAK,SAAS,YAAYA,CAAY,CAC1C,CACJ,CAIA,SAAS7E,IAAS,CACf,KAAK,SAAS,WAAW,CAC5B,CAKA7Y,EAAE,gBAAkB,SAAUkO,EAAI,CAC9B,QAAS3L,KAAYzC,EAAe,CAChC,MAAMoX,EAASpX,EAAeyC,CAAS,EACnCob,EAAQzG,EAAO,UACnB,GAAIyG,GACAA,aAAiB7d,EAAc,YAC/BE,EAAE,WAAY2d,EAAM,OAAQ,GAC5BA,EAAM,QAAQ,KAAMzG,CAAO,IAAMhJ,EAEjC,OAAOgJ,CAEf,CACA,OAAO,IACX,CAEA,EAAGpX,CAAc,EAoChB,SAAUE,EAAG,CAiBdA,EAAE,UAAY,SAAUD,EAAS,CAE7B,IAAI4Z,EAAc5Z,EAAQ,OACtB2K,EAAQ,KACRkT,EACAC,EAIA9d,EAAQ,SAAWA,EAAQ,IACtBA,EAAQ,SACJA,EAAQ,IACTC,EAAE,QAAQ,KAAK,wGAAwG,EAItHD,EAAQ,QAAQ,GACjBA,EAAQ,GAAKA,EAAQ,QAAQ,GAE7BA,EAAQ,GAAK,aAAeC,EAAE,IAAI,EAGtC,KAAK,QAAUD,EAAQ,SAEvB,KAAK,QAAU,SAAS,eAAgBA,EAAQ,EAAG,EAGvDA,EAAQ,eAAkB,CACtB,OAAkBC,EAAE,cAAc,KAClC,eAAkB,GAClB,SAAkB,EACtB,IAEAD,EAAQ,GAAkB,aAAeC,EAAE,IAAI,EAC/C,KAAK,QAAqBA,EAAE,mBAAoB,KAAM,EACtDD,EAAQ,eAAkB,CACtB,OAAkBC,EAAE,cAAc,UAClC,eAAkB,GAClB,SAAkBD,EAAQ,QAC9B,EAEIA,EAAQ,WACeA,EAAQ,WAA3B,eACDA,EAAQ,eAAe,OAASC,EAAE,cAAc,aACtBD,EAAQ,WAA1B,cACRA,EAAQ,eAAe,OAASC,EAAE,cAAc,YACxBD,EAAQ,WAAxB,YACRA,EAAQ,eAAe,OAASC,EAAE,cAAc,UACzBD,EAAQ,WAAvB,WACRA,EAAQ,eAAe,OAASC,EAAE,cAAc,SACzBD,EAAQ,WAAvB,aACRA,EAAQ,eAAe,OAASC,EAAE,cAAc,SAChDD,EAAQ,eAAe,IAAMA,EAAQ,IACrCA,EAAQ,eAAe,KAAOA,EAAQ,KACtCA,EAAQ,eAAe,OAASA,EAAQ,OACxCA,EAAQ,eAAe,MAAQA,EAAQ,SAIlD,KAAK,QAAQ,GAAaA,EAAQ,GAClC,KAAK,QAAQ,WAAc,aAE3BA,EAAUC,EAAE,OAAQ,GAAM,CACtB,UAAeA,EAAE,iBAAiB,kBACtC,EAAGD,EAAS,CACR,QAAwB,KAAK,QAC7B,SAAwB,GAGxB,cAAwB,GACxB,gBAAwB,GACxB,sBAAwB,GACxB,oBAAwB,GACxB,gBAAwB,GACxB,UAAwB,EACxB,cAAwBA,EAAQ,cAEhC,WAAwB,GAExB,kBAAwB,EACxB,WAAwBA,EAAQ,WAChC,QAAwBA,EAAQ,QAChC,YAAwBA,EAAQ,YAChC,mBAAwBA,EAAQ,kBACpC,CAAC,EAEDA,EAAQ,cAAgB,KAAK,cAAgB4Z,EAAO,cAEpD3Z,EAAE,0BAA2B,KAAK,OAAQ,EAE1C,KAAK,YAAc,EAGnB,KAAK,MAAQ,IAAIA,EAAE,MAAM,EAAG,CAAC,EAC7B,KAAK,kBAAoB,IAAIA,EAAE,MAAM,KAAK,YAAc,EAAG,KAAK,YAAc,CAAC,EAAE,MAAM,KAAK,KAAK,EAG5FD,EAAQ,eAAe,SAAWC,EAAE,cAAc,MAClD,SAAUyC,EAAOqb,EAAa,CAC3Brb,EAAM,OAAgB,MACtBA,EAAM,OAAgBqb,EAAc,YAAc/d,EAAQ,YAC1D0C,EAAM,QAAgB,MACtBA,EAAM,WAAgB1C,EAAQ,WAC9B0C,EAAM,QAAgB1C,EAAQ,QAC9B0C,EAAM,SAAgB,QAC1B,EAAG,KAAK,QAAQ,MAAO,KAAK,WAAW,EAG3C,KAAK,cAA0BzC,EAAE,mBAAoB,KAAM,EAC3D,KAAK,cAAc,GAAY,KAAK,QAAQ,GAAK,iBACjD,KAAK,cAAc,UAAY,gBAE9B,SAAUyC,EAAOqb,EAAa,CAC3Brb,EAAM,SAAgB,WACtBA,EAAM,IAAgB,MACtBA,EAAM,KAAgB,MACtBA,EAAM,SAAgB,MACtBA,EAAM,SAAgB,SACtBA,EAAM,OAAgBqb,EAAc,YAAc/d,EAAQ,mBAC1D0C,EAAM,OAAgB,MACtBA,EAAM,QAAgB,MACtBA,EAAM,WAAgB,cAKtBA,EAAM,MAAgB,OAEtBA,EAAM,SAAgB,OACtBA,EAAM,OAAgB,UACtBA,EAAM,OAAgB,UACtBA,EAAM,UAAgB,aAC1B,EAAG,KAAK,cAAc,MAAO,KAAK,WAAY,EAC9CzC,EAAE,4BAA6B,KAAK,aAAc,EAClDA,EAAE,0BAA2B,KAAK,aAAc,EAEhD,KAAK,uBAAyBA,EAAE,mBAAmB,KAAK,EACxD,KAAK,uBAAuB,GAAK,KAAK,QAAQ,GAAK,0BACnD,KAAK,uBAAuB,UAAY,yBACxC,KAAK,uBAAuB,MAAM,MAAQ,OAC1C,KAAK,uBAAuB,MAAM,OAAS,OAC3CA,EAAE,4BAA6B,KAAK,sBAAuB,EAC3DA,EAAE,0BAA2B,KAAK,sBAAuB,EAEzD2Z,EAAO,WACH,KAAK,QACL5Z,EAAQ,cACZ,EAEA,KAAK,kBAAoBA,EAAQ,eAAe,SAAWC,EAAE,cAAc,UACvED,EAAQ,eAAe,SAAWC,EAAE,cAAc,KAElDD,EAAQ,OAASA,EAAQ,QACzB,KAAK,SAASA,EAAQ,KAAK,EAC3B,KAAK,UAAUA,EAAQ,MAAM,GACrB,KAAK,oBACb6d,EAAa5d,EAAE,eAAgB2Z,EAAO,OAAQ,EAC9C,KAAK,QAAQ,MAAM,OAAS,KAAK,MAAOiE,EAAW,EAAI7d,EAAQ,SAAU,EAAI,KAC7E,KAAK,QAAQ,MAAM,MAAS,KAAK,MAAO6d,EAAW,EAAI7d,EAAQ,SAAU,EAAI,KAC7E,KAAK,cAAgB6d,EACrBC,EAAgB7d,EAAE,eAAgB,KAAK,OAAQ,EAC/C,KAAK,YAAc6d,EAAc,EAAIA,EAAc,GAGvD,KAAK,iBAAmB,IAAI7d,EAAE,MAAO,EAAG,CAAE,EAE1CA,EAAE,OAAO,MAAO,KAAM,CAAED,CAAQ,CAAE,EAElC,KAAK,uBAAuB,YAAY,KAAK,aAAa,EAC1D,KAAK,QAAQ,qBAAqB,KAAK,EAAE,CAAC,EAAE,YAAY,KAAK,sBAAsB,EAEnF,SAASge,EAAOC,EAASC,EAAa,CAClCC,EAAoBxT,EAAM,uBAAwBsT,CAAO,EACzDE,EAAoBxT,EAAM,cAAe,CAACsT,CAAO,EACjDtT,EAAM,SAAS,YAAYsT,EAASC,CAAW,CACnD,CACA,GAAIle,EAAQ,gBAAiB,CACzB,IAAIie,EAAUje,EAAQ,OAAO,SACzBA,EAAQ,OAAO,SAAS,YAAY,EACpCA,EAAQ,OAAO,SAAW,EAE9Bge,EAAOC,EAAS,EAAI,EACpBje,EAAQ,OAAO,WAAW,SAAU,SAAU8B,EAAM,CAChDkc,EAAOlc,EAAK,QAASA,EAAK,WAAW,CACzC,CAAC,CACL,CAIA,KAAK,aAAa,QAAQ,EAC1B,KAAK,aAAe,IAAI7B,EAAE,aAAa,CACnC,SAAiB,yBACjB,QAAiB,KAAK,QACtB,YAAiBA,EAAE,SAAU,KAAM+S,CAAa,EAChD,aAAiB/S,EAAE,SAAU,KAAM6S,CAAc,EACjD,eAAiB7S,EAAE,SAAU,KAAMoT,CAAgB,EACnD,cAAiBpT,EAAE,SAAU,KAAMuT,CAAe,EAClD,uBAAwB,SAAU9D,EAAW,CACrCA,EAAU,YAAc,UAGxBA,EAAU,eAAiB,GAEnC,CACJ,CAAC,EACD,KAAK,aAAa,SAAW,yBAO7BzP,EAAE,4BAA6B,KAAK,MAAO,EAC3CA,EAAE,4BAA6B,KAAK,SAAU,EAE9C,KAAK,WAAW,aAAc,UAAW,CACjC0K,EAAM,UACNA,EAAM,SAAS,OAAO,EAAI,CAElC,CAAC,EAEDiP,EAAO,MAAM,WAAW,oBAAqB,SAASxW,EAAO,CACzD,OAAO,WAAW,UAAU,CACxB,IAAIgb,EAAOzT,EAAM,MAAM,UAAUvH,EAAM,aAAa,EACpDuH,EAAM,MAAM,aAAayT,EAAMhb,EAAM,QAAQ,CACjD,EAAG,CAAC,CACR,CAAC,EAEDwW,EAAO,MAAM,WAAW,cAAe,SAASxW,EAAO,CACnD,IAAIib,EAAYjb,EAAM,KAClBkb,EAAS3T,EAAM,iBAAiB0T,CAAS,EACzCC,GACA3T,EAAM,MAAM,WAAW2T,CAAM,CAErC,CAAC,EAED,KAAK,OAAO1E,EAAO,QAAQ,CAC/B,EAEA3Z,EAAE,OAAQA,EAAE,UAAU,UAAWA,EAAE,YAAY,UAAWA,EAAE,OAAO,UAA0D,CAOzH,WAAY,UAAY,CACpB,GAAK,KAAK,SAAW,CACjB,IAAIyc,EAAgB,IAAIzc,EAAE,MACjB,KAAK,UAAU,cAAgB,EAAI,EAAI,KAAK,UAAU,YACtD,KAAK,UAAU,eAAiB,EAAI,EAAI,KAAK,UAAU,YAC5D,EAEEyc,EAAc,OAAQ,KAAK,gBAAiB,IAC9C,KAAK,SAAS,OAAQA,EAAe,EAAK,EAC1C,KAAK,SAAS,OAAO,EAAI,EACzB,KAAK,iBAAmBA,EACxB,KAAK,MAAM,OAAO,EAClB,KAAK,MAAM,KAAK,EAChB,KAAK,OAAO,KAAK,OAAO,QAAQ,EAExC,CACJ,EAMA,SAAU,SAASrC,EAAO,CACtB,KAAK,MAAQA,EACb,KAAK,QAAQ,MAAM,MAAQ,OAAQA,GAAW,SAAYA,EAAQ,KAAQA,EAC1E,KAAK,kBAAoB,GACzB,KAAK,WAAW,CACpB,EAMA,UAAW,SAASC,EAAQ,CACxB,KAAK,OAASA,EACd,KAAK,QAAQ,MAAM,OAAS,OAAQA,GAAY,SAAYA,EAAS,KAAQA,EAC7E,KAAK,kBAAoB,GACzB,KAAK,WAAW,CACpB,EAMA,QAAS,SAASiE,EAAO,CACvB,YAAK,SAAS,QAAQA,CAAK,EAE3B,KAAK,oBAAoB,KAAK,OAAO,SAAS,QAAQ,EAAI,cAAgB,YAAY,EAC/E,IACT,EAEA,oBAAqB,SAASC,EAAM,CAClCC,EAAoB,KAAK,OAAQD,CAAI,EACrCC,EAAoB,KAAK,QAASD,CAAI,CACxC,EAOA,OAAQ,SAAU7B,EAAW,CAEzB,IAAIkB,EACAa,EACAC,EACAC,EACAC,EACAC,EA4BJ,GA1BInC,IACAA,EAAW,KAAK,OAAO,UAG3BkB,EAAa5d,EAAE,eAAgB,KAAK,OAAO,OAAQ,EAC9C,KAAK,mBAAqB4d,EAAW,GAAKA,EAAW,GAAK,CAACA,EAAW,OAAQ,KAAK,aAAc,IAClG,KAAK,cAAgBA,EAEhB,KAAK,mBAAqB,CAAC,KAAK,aACjCa,EAAYb,EAAW,EAAI,KAAK,UAChCc,EAAYd,EAAW,EAAI,KAAK,YAEhCa,EAAW,KAAK,KAAK,KAAK,aAAeb,EAAW,EAAIA,EAAW,EAAE,EACrEc,EAAY,KAAK,YAAcD,GAGnC,KAAK,QAAQ,MAAM,MAAS,KAAK,MAAOA,CAAS,EAAI,KACrD,KAAK,QAAQ,MAAM,OAAS,KAAK,MAAOC,CAAU,EAAI,KAEjD,KAAK,cACN,KAAK,YAAcD,EAAWC,GAGlC,KAAK,WAAW,GAGhBhC,GAAY,KAAK,SAAU,CAM3B,GALAiC,EAAcjC,EAAS,kBAAkB,EAAI,EAC7CkC,EAAc,KAAK,SAAS,uBAAuBD,EAAO,WAAW,EAAG,EAAK,EAC7EE,EAAc,KAAK,SAAS,uBAAuBF,EAAO,eAAe,EAAG,EAAK,EAC5E,MAAO,KAAK,iBAAkB,EAE/B,CAAC,KAAK,gBAAiB,CACvB,IAAIX,EAAUtB,EAAS,YAAY,EAAI,EACvCwB,EAAoB,KAAK,cAAe,CAACF,CAAO,CACpD,CAGA,IAAIvb,EAAQ,KAAK,cAAc,MAC/BA,EAAM,QAAU,KAAK,MAAM,aAAa,EAAI,QAAU,OAEtDA,EAAM,IAAMmc,EAAQ,EAAE,QAAQ,CAAC,EAAI,KACnCnc,EAAM,KAAOmc,EAAQ,EAAE,QAAQ,CAAC,EAAI,KAEpC,IAAIxE,EAAQyE,EAAY,EAAID,EAAQ,EAChCvE,EAASwE,EAAY,EAAID,EAAQ,EAErCnc,EAAM,MAAS,KAAK,MAAO,KAAK,IAAK2X,EAAO,CAAE,CAAE,EAAI,KACpD3X,EAAM,OAAS,KAAK,MAAO,KAAK,IAAK4X,EAAQ,CAAE,CAAE,EAAI,IACzD,CAEJ,EAGA,cAAe,SAASta,EAAS,CAC7B,IAAI2K,EAAQ,KAERoU,EAAW/e,EAAQ,mBACvB,OAAOA,EAAQ,SAEf,IAAI+W,EAAe9W,EAAE,OAAO,CAAC,EAAGD,EAAS,CACrC,QAAS,SAASoD,EAAO,CACrB,IAAIkb,EAASlb,EAAM,KACnBkb,EAAO,sBAAwBS,EAC/BpU,EAAM,aAAa2T,EAAQS,EAAU,EAAI,EACzCpU,EAAM,cAAc2T,EAAQS,CAAQ,EACpCpU,EAAM,yBAAyB2T,EAAQS,CAAQ,EAE/C,SAASC,GAAc,CACnBrU,EAAM,aAAa2T,EAAQS,CAAQ,CACvC,CAEA,SAASE,GAAe,CACpBtU,EAAM,cAAc2T,EAAQS,CAAQ,CACxC,CAEA,SAASG,GAA0B,CAC/BvU,EAAM,yBAAyB2T,EAAQS,CAAQ,CACnD,CAEAA,EAAS,WAAW,gBAAiBC,CAAW,EAChDD,EAAS,WAAW,cAAeC,CAAW,EAC9CD,EAAS,WAAW,iBAAkBE,CAAY,EAClDF,EAAS,WAAW,6BAA8BG,CAAuB,CAC7E,CACJ,CAAC,EAED,OAAOjf,EAAE,OAAO,UAAU,cAAc,MAAM,KAAM,CAAC8W,CAAY,CAAC,CACtE,EAEA,QAAS,UAAW,CAChB,OAAO9W,EAAE,OAAO,UAAU,QAAQ,MAAM,IAAI,CAChD,EAGA,iBAAkB,SAASoe,EAAW,CAGlC,QAFIrU,EAAQ,KAAK,MAAM,aAAa,EAChCoU,EACK5c,EAAI,EAAGA,EAAIwI,EAAOxI,IAEvB,GADA4c,EAAO,KAAK,MAAM,UAAU5c,CAAC,EACzB4c,EAAK,wBAA0BC,EAC/B,OAAOD,EAIf,OAAO,IACX,EAGA,aAAc,SAASE,EAAQD,EAAWH,EAAa,CACnD,IAAIU,EAASP,EAAU,kBAAkB,EACzCC,EAAO,YAAYM,EAAO,WAAW,EAAGV,CAAW,EACnDI,EAAO,SAASM,EAAO,MAAOV,CAAW,EACzCI,EAAO,YAAYD,EAAU,YAAY,EAAGH,CAAW,EACvDI,EAAO,QAAQD,EAAU,QAAQ,CAAC,EAClCC,EAAO,QAAQD,EAAU,QAAQ,CAAC,CACtC,EAGA,cAAe,SAASC,EAAQD,EAAW,CACvCC,EAAO,WAAWD,EAAU,OAAO,CACvC,EAGA,yBAA0B,SAASC,EAAQD,EAAW,CAClDC,EAAO,sBAAsBD,EAAU,kBAAkB,CAC7D,CACJ,CAAC,EAQD,SAASvL,EAAe1P,EAAQ,CAC9B,IAAIgY,EAAuB,CACzB,QAAShY,EAAM,YACf,SAAUA,EAAM,SAChB,MAAOA,EAAM,MACb,MAAOA,EAAM,MACb,cAAeA,EAAM,cACrB,qBAAsB,EACxB,EAmBC,GAFA,KAAK,OAAO,WAAW,kBAAmBgY,CAAoB,EAEzD,CAACA,EAAqB,sBAAwBhY,EAAM,OAAS,KAAK,OAAO,WAAa,KAAK,aAAe,KAAK,eAAgB,CAChI,KAAK,OAAO,SAAS,UACtBA,EAAM,SAAS,EAAI,KAAK,SAAS,iBAAiB,EAAE,EAAIA,EAAM,SAAS,GAEzE,IAAI/B,EAAS,KAAK,SAAS,eAAe+B,EAAM,QAAQ,EACnD,KAAK,YAGE,KAAK,gBAEf/B,EAAO,EAAI,KAAK,OAAO,SAAS,UAAU,EAAI,EAAE,GAHhDA,EAAO,EAAI,KAAK,OAAO,SAAS,UAAU,EAAI,EAAE,EAKlD,KAAK,OAAO,SAAS,MAAMA,CAAM,EACjC,KAAK,OAAO,SAAS,iBAAiB,CACxC,CAEF,CAOA,SAAS2R,EAAc5P,EAAQ,CAC3B,IAAIkY,EAAsB,CACxB,QAASlY,EAAM,YACf,SAAUA,EAAM,SAChB,MAAOA,EAAM,MACb,MAAOA,EAAM,MACb,UAAWA,EAAM,UACjB,MAAOA,EAAM,MACb,cAAeA,EAAM,cACrB,qBAAsB,EACxB,EAkBC,KAAK,OAAO,WAAW,iBAAkBkY,CAAmB,EAEvD,CAACA,EAAoB,sBAAwB,KAAK,OAAO,WACvD,KAAK,gBACLlY,EAAM,MAAM,EAAI,GAEf,KAAK,cACNA,EAAM,MAAM,EAAI,GAGjB,KAAK,OAAO,SAAS,UACpBA,EAAM,MAAM,EAAI,CAACA,EAAM,MAAM,GAGjC,KAAK,OAAO,SAAS,MACjB,KAAK,SAAS,sBACVA,EAAM,KACV,CACJ,EACI,KAAK,OAAO,oBACZ,KAAK,OAAO,SAAS,iBAAiB,EAGlD,CAQA,SAASiQ,EAAiBjQ,EAAQ,CACzBA,EAAM,sBAAwB,KAAK,OAAO,UAC3C,KAAK,OAAO,SAAS,iBAAiB,CAE9C,CAQA,SAASoQ,EAAgBpQ,EAAQ,CAC7B,IAAImH,EAAY,CACZ,QAASnH,EAAM,YACf,SAAUA,EAAM,SAChB,OAAQA,EAAM,OACd,MAAOA,EAAM,MACb,cAAeA,EAAM,cACrB,eAAgBA,EAAM,cAC1B,EAiBA,KAAK,OAAO,WAAY,mBAAoBmH,CAAU,EAEtDnH,EAAM,eAAiBmH,EAAU,cACrC,CAQA,SAAS4T,EAAqBpc,EAASkc,EAAU,CAC/CQ,EAAoB1c,EAAS,UAAYkc,EAAU,MAAM,CAC3D,CAEA,SAASQ,EAAqB1c,EAASyc,EAAO,CAC5Czc,EAAQ,MAAM,gBAAkByc,EAChCzc,EAAQ,MAAM,aAAeyc,EAC7Bzc,EAAQ,MAAM,YAAcyc,EAC5Bzc,EAAQ,MAAM,WAAayc,EAC3Bzc,EAAQ,MAAM,UAAYyc,CAC5B,CAEA,EAAGze,CAAc,EAoChB,SAAUE,EAAG,CAKd,IAAIkf,EAAO,CACP,OAAQ,CACJ,IAAgB,iDAChB,IAAgB,0DAChB,IAAgB,0DAChB,YAAgB,sDAChB,SAAgB,qFAEhB,OAAgB,mDAChB,WAAgB,yBACpB,EAEA,SAAU,CACN,SAAgB,mBAChB,KAAgB,UAChB,OAAgB,UAChB,QAAgB,WAChB,SAAgB,YAChB,aAAgB,gBAChB,WAAgB,cAChB,YAAgB,eAChB,KAAgB,mBACpB,CACJ,EAEAlf,EAAE,OAAQA,EAA8B,CAMpC,UAAW,SAAU4C,EAAO,CAExB,IAAIuc,EAAUvc,EAAK,MAAM,GAAG,EACxBC,EAAU,KACVhB,EAAU,UACV8P,EAAYuN,EACZ3d,EAEJ,IAAKA,EAAI,EAAGA,EAAI4d,EAAM,OAAS,EAAG5d,IAE9BoQ,EAAYA,EAAWwN,EAAO5d,CAAE,CAAE,GAAK,CAAC,EAE5C,OAAAsB,EAAS8O,EAAWwN,EAAO5d,CAAE,CAAE,EAE1B,OAASsB,GAAa,WACvB7C,EAAE,QAAQ,MAAO,8BAA+B4C,CAAK,EACrDC,EAAS,IAGNA,EAAO,QAAQ,WAAY,SAASuc,EAAS,CAChD,IAAI7d,EAAI,SAAU6d,EAAQ,MAAO,KAAM,EAAG,EAAG,EAAI,EACjD,OAAO7d,EAAIM,EAAK,OACZA,EAAMN,CAAE,EACR,EACR,CAAC,CACL,EAOA,UAAW,SAAUqB,EAAMmB,EAAQ,CAE/B,IAAIob,EAAYvc,EAAK,MAAM,GAAG,EAC1B+O,EAAYuN,EACZ3d,EAEJ,IAAMA,EAAI,EAAGA,EAAI4d,EAAM,OAAS,EAAG5d,IACzBoQ,EAAWwN,EAAO5d,CAAE,CAAE,IACxBoQ,EAAWwN,EAAO5d,CAAE,CAAE,EAAI,CAAC,GAE/BoQ,EAAYA,EAAWwN,EAAO5d,CAAE,CAAE,EAGtCoQ,EAAWwN,EAAO5d,CAAE,CAAE,EAAIwC,CAC9B,CAEJ,CAAC,CAED,EAAGjE,CAAc,EAoChB,SAAUE,EAAG,CAYdA,EAAE,MAAQ,SAAUsa,EAAGC,EAAI,CAMvB,KAAK,EAAI,OAASD,GAAQ,SAAWA,EAAI,EAMzC,KAAK,EAAI,OAASC,GAAQ,SAAWA,EAAI,CAC7C,EAGAva,EAAE,MAAM,UAAY,CAKhB,MAAO,UAAW,CACd,OAAO,IAAIA,EAAE,MAAM,KAAK,EAAG,KAAK,CAAC,CACrC,EASA,KAAM,SAAUgD,EAAQ,CACpB,OAAO,IAAIhD,EAAE,MACT,KAAK,EAAIgD,EAAM,EACf,KAAK,EAAIA,EAAM,CACnB,CACJ,EASA,MAAO,SAAUA,EAAQ,CACrB,OAAO,IAAIhD,EAAE,MACT,KAAK,EAAIgD,EAAM,EACf,KAAK,EAAIA,EAAM,CACnB,CACJ,EASA,MAAO,SAAUsY,EAAS,CACtB,OAAO,IAAItb,EAAE,MACT,KAAK,EAAIsb,EACT,KAAK,EAAIA,CACb,CACJ,EASA,OAAQ,SAAUA,EAAS,CACvB,OAAO,IAAItb,EAAE,MACT,KAAK,EAAIsb,EACT,KAAK,EAAIA,CACb,CACJ,EAQA,OAAQ,UAAW,CACf,OAAO,IAAItb,EAAE,MAAO,CAAC,KAAK,EAAG,CAAC,KAAK,CAAE,CACzC,EAQA,WAAY,SAAUgD,EAAQ,CAC1B,OAAO,KAAK,KACR,KAAK,IAAK,KAAK,EAAIA,EAAM,EAAG,CAAE,EAC9B,KAAK,IAAK,KAAK,EAAIA,EAAM,EAAG,CAAE,CAClC,CACJ,EASA,kBAAmB,SAAUA,EAAQ,CACjC,OAAO,KAAK,IAAK,KAAK,EAAIA,EAAM,EAAG,CAAE,EACjC,KAAK,IAAK,KAAK,EAAIA,EAAM,EAAG,CAAE,CACtC,EASA,MAAO,SAAUqc,EAAO,CACpB,OAAO,IAAIrf,EAAE,MAAOqf,EAAM,KAAK,CAAE,EAAGA,EAAM,KAAK,CAAE,CAAE,CACvD,EAQA,OAAQ,SAAUrc,EAAQ,CACtB,OACIA,aAAiBhD,EAAE,OAEnB,KAAK,IAAMgD,EAAM,GAEjB,KAAK,IAAMA,EAAM,CAEzB,EAWA,OAAQ,SAAUgb,EAAS5Z,EAAO,CAC9BA,EAAQA,GAAS,IAAIpE,EAAE,MAAM,EAAG,CAAC,EACjC,IAAIsf,EACAC,EAEJ,GAAIvB,EAAU,KAAO,EAAG,CACpB,IAAIwB,EAAIxf,EAAE,eAAege,EAAS,GAAG,EACrC,OAAQwB,EAAG,CACP,IAAK,GACDF,EAAM,EACNC,EAAM,EACN,MACJ,IAAK,IACDD,EAAM,EACNC,EAAM,EACN,MACJ,IAAK,KACDD,EAAM,GACNC,EAAM,EACN,MACJ,IAAK,KACDD,EAAM,EACNC,EAAM,GACN,KACR,CACJ,KAAO,CACH,IAAIE,EAAQzB,EAAU,KAAK,GAAK,IAChCsB,EAAM,KAAK,IAAIG,CAAK,EACpBF,EAAM,KAAK,IAAIE,CAAK,CACxB,CACA,IAAInF,EAAIgF,GAAO,KAAK,EAAIlb,EAAM,GAAKmb,GAAO,KAAK,EAAInb,EAAM,GAAKA,EAAM,EAChEmW,EAAIgF,GAAO,KAAK,EAAInb,EAAM,GAAKkb,GAAO,KAAK,EAAIlb,EAAM,GAAKA,EAAM,EACpE,OAAO,IAAIpE,EAAE,MAAMsa,EAAGC,CAAC,CAC3B,EAQA,SAAU,UAAW,CACjB,MAAO,IAAO,KAAK,MAAM,KAAK,EAAI,GAAG,EAAI,IAAO,IAAO,KAAK,MAAM,KAAK,EAAI,GAAG,EAAI,IAAO,GAC7F,CACJ,CAEA,EAAGza,CAAc,EAoChB,SAAUE,EAAG,CA4DdA,EAAE,WAAa,SAAUoa,EAAOC,EAAQqF,EAAUC,EAAaC,EAAUC,EAAW,CAChF,IAAInV,EAAQ,KAER7I,EAAO,UACP9B,EACAwB,EAyBJ,GAvBIvB,EAAE,cAAeoa,CAAM,EACvBra,EAAUqa,EAEVra,EAAU,CACN,MAAO8B,EAAK,CAAC,EACb,OAAQA,EAAK,CAAC,EACd,SAAUA,EAAK,CAAC,EAChB,YAAaA,EAAK,CAAC,EACnB,SAAUA,EAAK,CAAC,EAChB,SAAUA,EAAK,CAAC,CACpB,EAKJ7B,EAAE,YAAY,KAAM,IAAK,EAMzBA,EAAE,OAAQ,GAAM,KAAMD,CAAQ,EAE1B,CAAC,KAAK,SAEN,IAAMwB,EAAI,EAAGA,EAAI,UAAU,OAAQA,IAC/B,GAAKvB,EAAE,WAAY,UAAWuB,CAAE,CAAE,EAAI,CAClC,KAAK,QAAU,UAAWA,CAAE,EAE5B,KACJ,EAIJ,KAAK,SACL,KAAK,WAAY,QAAS,SAAW4B,EAAQ,CACzCuH,EAAM,QAASvH,CAAM,CACzB,CAAE,EAkCWnD,EAAE,KAAM,UAAW,CAAE,CAAE,IAApC,WACA,KAAK,IAAM,UAAU,CAAC,GAGtB,KAAK,KAGL,KAAK,YAAc,EACnB,KAAK,WAAc,IAAIA,EAAE,MAAO,GAAI,EAAG,EACvC,KAAK,WAAc,EACnB,KAAK,YAAc,EACnB,KAAK,YAAc,EACnB,KAAK,SAAc,EACnB,KAAK,SAAc,EACnB,KAAK,MAAc,GAGnB,KAAK,aAAc,KAAK,GAAI,IAM5B,KAAK,MAAc,GACnB,KAAK,YAAeD,EAAQ,OAASA,EAAQ,OACxCA,EAAQ,MAAQA,EAAQ,OAAU,EACvC,KAAK,WAAc,IAAIC,EAAE,MAAOD,EAAQ,MAAOA,EAAQ,MAAO,EAEzD,KAAK,UACN,KAAK,WAAa,KAAK,YAAc,KAAK,SAC1C,OAAO,KAAK,WAER,KAAK,WAGL,KAAK,WAAa,KAAK,UACvB,OAAO,KAAK,WAEZ,KAAK,WAAa,EAGlB,KAAK,YAEL,KAAK,YAAc,KAAK,WACxB,OAAO,KAAK,YAEZ,KAAK,YAAc,GAI3B,KAAK,YAAcA,EAAQ,YAAcA,EAAQ,YAAc,EAC/D,KAAK,SAAcA,EAAQ,SAAWA,EAAQ,SAAW,EACzD,KAAK,SAA8BA,EAAQ,WAAtB,QAA2CA,EAAQ,WAAjB,KACnDA,EAAQ,SACFA,EAAQ,OAASA,EAAQ,OAAW,KAAK,KACvC,KAAK,IAAK,KAAK,IAAKA,EAAQ,MAAOA,EAAQ,MAAO,CAAE,EACpD,KAAK,IAAK,CAAE,CAChB,EAAI,EAER,KAAK,SAAWC,EAAE,WAAY,KAAK,OAAQ,GAC3C,KAAK,QAAS,IAAK,EAK/B,EAGAA,EAAE,WAAW,UAAY,CAErB,YAAa,SAAUiX,EAAQ,CAC3B,OAAAjX,EAAE,QAAQ,MACN,8GAEJ,EACO,KAAK,UAChB,EAUA,aAAc,SAAUiX,EAAQ,CAC5B,OAAK,KAAK,WAGH,KAAK,WAFD,KAAK,YAAYA,CAAK,CAGrC,EAUA,cAAe,SAAUA,EAAQ,CAC7B,OAAK,KAAK,YAGH,KAAK,YAFD,KAAK,YAAYA,CAAK,CAGrC,EAUA,YAAa,SAAUA,EAAQ,CAC3B,KAAK,SAAWA,EAChB,KAAK,mBAAmB,CAC5B,EAMA,cAAe,SAAUA,EAAQ,CAG7B,YAAK,mBAAmB,EACjB,KAAK,cAAeA,CAAM,CACrC,EAGA,mBAAoB,UAAW,CAI3B,IAAI6I,EAAkB,CAAC,EACnB,EACJ,IAAK,EAAI,EAAG,GAAK,KAAK,SAAU,IAC5BA,EAAiB,CAAE,EAAI,EAAI,KAAK,IAAI,EAAG,KAAK,SAAW,CAAC,EAE5D,KAAK,cAAgB,SAAUC,EAAQ,CACnC,OAAOD,EAAiBC,CAAO,CACnC,CACJ,EAMA,YAAa,SAAU9I,EAAQ,CAC3B,IAAI+I,EAAQ,KAAK,cAAe/I,CAAM,EAClCqD,EAAI,KAAK,KAAM0F,EAAQ,KAAK,WAAW,EAAI,KAAK,aAAa/I,CAAK,CAAE,EACpEsD,EAAI,KAAK,KAAMyF,EAAQ,KAAK,WAAW,EAAI,KAAK,cAAc/I,CAAK,CAAE,EAEzE,OAAO,IAAIjX,EAAE,MAAOsa,EAAGC,CAAE,CAC7B,EAMA,cAAe,SAAUtD,EAAQ,CAC7B,IAAIgJ,EAAkB,KAAK,WAAW,MAAO,KAAK,cAAehJ,CAAM,CAAE,EACrEiJ,EAAK,EAAMD,EAAgB,EAAIjgB,EAAE,kBACjCmgB,EAAK,EAAMF,EAAgB,EAAIjgB,EAAE,kBAErC,OAAO,IAAIA,EAAE,MAAMkgB,EAAIC,CAAE,CAC7B,EAOA,gBAAiB,UAAW,CACxB,IAAI5e,EACA6e,EAEJ,IAAK7e,EAAI,KAAK,SAAW,EAAGA,GAAK,KAAK,WAClC6e,EAAQ,KAAK,YAAY7e,CAAC,EACtB,EAAA6e,EAAM,EAAI,GAAKA,EAAM,EAAI,IAFe7e,IAE5C,CAKJ,OAAOA,EAAI,CACf,EAOA,eAAgB,SAAS0V,EAAOjU,EAAO,CACnC,IAAIqd,EAAard,EAAM,GAAK,GAAKA,EAAM,GAAK,GACxCA,EAAM,GAAK,GAAKA,EAAM,GAAK,EAAI,KAAK,YACxChD,EAAE,QAAQ,OAAOqgB,EAAY,gEAAgE,EAG7F,IAAIC,EAAc,KAAK,WAAW,EAAI,KAAK,cAAcrJ,CAAK,EAC1DsJ,EAASvd,EAAM,EAAIsd,EACnBE,EAASxd,EAAM,EAAIsd,EAEnBhG,EAAI,KAAK,MAAMiG,EAAS,KAAK,aAAatJ,CAAK,CAAC,EAChDsD,EAAI,KAAK,MAAMiG,EAAS,KAAK,cAAcvJ,CAAK,CAAC,EAIjDjU,EAAM,GAAK,IACXsX,EAAI,KAAK,YAAYrD,CAAK,EAAE,EAAI,GAEpC,IAAIwJ,EAAU,MACd,OAAIzd,EAAM,GAAK,EAAI,KAAK,YAAcyd,IAClClG,EAAI,KAAK,YAAYtD,CAAK,EAAE,EAAI,GAG7B,IAAIjX,EAAE,MAAMsa,EAAGC,CAAC,CAC3B,EAYA,cAAe,SAAUtD,EAAOqD,EAAGC,EAAGmG,EAAW,CAC7C,IAAIC,EAAmB,KAAK,WAAW,MAAO,KAAK,cAAe1J,CAAM,CAAE,EACtE2J,EAAY,KAAK,aAAa3J,CAAK,EACnC4J,EAAa,KAAK,cAAc5J,CAAK,EACrC6J,EAAOxG,IAAM,EAAM,EAAIsG,EAAYtG,EAAI,KAAK,YAC5CyG,EAAOxG,IAAM,EAAM,EAAIsG,EAAatG,EAAI,KAAK,YAC7CpS,EAAKyY,GAActG,IAAM,EAAI,EAAI,GAAM,KAAK,YAC5ClS,EAAKyY,GAAetG,IAAM,EAAI,EAAI,GAAM,KAAK,YAC7CyF,EAAQ,EAAMW,EAAiB,EAKnC,OAHAxY,EAAK,KAAK,IAAKA,EAAIwY,EAAiB,EAAIG,CAAG,EAC3C1Y,EAAK,KAAK,IAAKA,EAAIuY,EAAiB,EAAII,CAAG,EAEvCL,EACO,IAAI1gB,EAAE,KAAK,EAAG,EAAGmI,EAAIC,CAAE,EAG3B,IAAIpI,EAAE,KAAM8gB,EAAKd,EAAOe,EAAKf,EAAO7X,EAAK6X,EAAO5X,EAAK4X,CAAM,CACtE,EAUA,aAAc,SAAUpb,EAAM,CAC1B,IAAI8F,EAAQ,KACRsW,EACAnb,EACAob,EACAlhB,EACAmhB,EACAC,EACAC,EAGAxc,IACAsc,EAAWtc,EAAI,MAAO,GAAI,EAC1Buc,EAAWD,EAAUA,EAAS,OAAS,CAAE,EACzCE,EAAWD,EAAS,YAAa,GAAI,EAChCC,EAAU,KACXF,EAAUA,EAAS,OAAS,CAAE,EAAIC,EAAS,MAAO,EAAGC,CAAQ,IAIrE,IAAIjc,EAAW,KACf,GAAI,KAAK,qBAAsB,CAC3B,IAAIkc,EAAUzc,EAAI,QAAQ,GAAG,EACzByc,IAAY,KACZlc,EAAWP,EAAI,UAAUyc,EAAU,CAAC,EACpCzc,EAAMA,EAAI,OAAO,EAAGyc,CAAO,EAEnC,CAEAxb,EAAW,SAAUyb,EAAM,CACnB,OAAQA,GAAU,WAClBA,EAAOthB,EAAE,SAAUshB,CAAK,GAE5B,IAAInH,EAAcna,EAAE,WAAW,cAAe0K,EAAO4W,EAAM1c,CAAI,EAC/D,GAAK,CAACuV,EAAc,CAYhBzP,EAAM,WAAY,cAAe,CAAE,QAAS,4BAA6B,OAAQ9F,CAAI,CAAE,EACvF,MACJ,CAEA7E,EAAUoa,EAAY,UAAU,UAAU,MAAOzP,EAAO,CAAE4W,EAAM1c,EAAKO,CAAS,CAAC,EAC3EpF,EAAQ,sBAAwB,SAChCA,EAAQ,oBAAsB2K,EAAM,qBAGxCuW,EAAc,IAAI9G,EAAapa,CAAQ,EACvC2K,EAAM,MAAQ,GAWdA,EAAM,WAAY,QAAS,CAAE,WAAYuW,CAAY,CAAE,CAC3D,EAEIrc,EAAI,MAAM,OAAO,GAIjBoc,EAAepc,EAAI,MAAM,GAAG,EAAE,IAAI,EAAE,QAAQ,MAAO,EAAE,EACrD5E,EAAE,MAAM,CACJ,IAAK4E,EACL,MAAO,GACP,aAAcoc,EACd,SAAUnb,CACd,CAAC,GAGD7F,EAAE,gBAAiB,CACf,IAAK4E,EACL,SAAUO,EACV,gBAAiB,KAAK,oBACtB,QAAS,KAAK,YACd,QAAS,SAAUoc,EAAM,CACrB,IAAID,EAAOE,EAAiBD,CAAI,EAChC1b,EAAUyb,CAAK,CACnB,EACA,MAAO,SAAWC,EAAKE,EAAM,CACzB,IAAIlb,EAOJ,GAAI,CACAA,EAAM,QAAUgb,EAAI,OAAS,mCAAqC3c,CACtE,OAAUjE,EAAI,CACV,IAAI+gB,EACC,OAASD,GAAU,aAAe,CAACA,EAAI,SACxCC,EAAe,gBAEfA,EAAeD,EAAI,SAAS,EAGhClb,EAAMmb,EAAe,mCAAqC9c,CAC9D,CAEA5E,EAAE,QAAQ,MAAMuG,CAAG,EAenBmE,EAAM,WAAY,cAAe,CAC7B,QAASnE,EACT,OAAQ3B,EACR,SAAUO,CACd,CAAC,CACL,CACJ,CAAC,CAGT,EAgBA,SAAU,SAAUmc,EAAM1c,EAAM,CAC5B,MAAO,EACX,EAoBA,UAAW,SAAU0c,EAAM1c,EAAKO,EAAW,CACvC,MAAM,IAAI,MAAO,yBAA0B,CAC/C,EAgBA,WAAY,SAAU8R,EAAOqD,EAAGC,EAAI,CAChC,MAAM,IAAI,MAAO,yBAA0B,CAC/C,EA6BA,gBAAiB,SAAUtD,EAAOqD,EAAGC,EAAI,CACrC,OAAO,IACX,EAoBA,mBAAoB,SAAUtD,EAAOqD,EAAGC,EAAI,CACxC,MAAO,CAAC,CACZ,EAiBA,eAAgB,SAAStD,EAAOqD,EAAGC,EAAG3V,EAAK4Q,EAAarQ,EAAU,CAC9D,SAASwc,EAAYC,EAAM,CACvB,OAAOpM,EAAcoM,EAAO,IAAM,KAAK,UAAUpM,CAAW,EAAIoM,CACpE,CAEA,OACWD,EADP,OAAO/c,GAAQ,SACIqS,EAAQ,IAAMqD,EAAI,IAAMC,EAE5B3V,CAF6B,CAGpD,EAQA,WAAY,SAAUqS,EAAOqD,EAAGC,EAAI,CAChC,IAAIsH,EAAW,KAAK,YAAa5K,CAAM,EACvC,OAAOA,GAAS,KAAK,UACdA,GAAS,KAAK,UACdqD,GAAK,GACLC,GAAK,GACLD,EAAIuH,EAAS,GACbtH,EAAIsH,EAAS,CACxB,EAMA,gBAAiB,SAASC,EAAWld,EAAK4Q,EAAauM,EAAM,CACzD,MAAO,CAAC,CAACD,GAAald,EAAI,MAAM,MAAM,CAC1C,EA0BA,kBAAmB,SAAU/D,EAAS,CAClC,IAAImhB,EAAYnhB,EAAQ,SACpBohB,EAAQ,IAAI,MAEhBD,EAAU,MAAQC,EAClBD,EAAU,QAAU,KAEpB,IAAIE,EAAS,SAASC,EAAO,CACzB,GAAI,CAACF,EAAO,CACRphB,EAAQ,OAAO,KAAMmhB,EAAU,QAAS,8CAA8C,EACtF,MACJ,CACAC,EAAM,OAASA,EAAM,QAAUA,EAAM,QAAU,KAC/CphB,EAAQ,OAAOshB,EAAQ,KAAOF,EAAOD,EAAU,QAASG,CAAK,CACjE,EACAF,EAAM,OAAS,UAAY,CACvBC,EAAO,CACX,EACAD,EAAM,QAAUA,EAAM,QAAU,UAAW,CACvCC,EAAO,qBAAqB,CAChC,EAIIrhB,EAAQ,aACRmhB,EAAU,QAAUhiB,EAAE,gBAAgB,CAClC,IAAKa,EAAQ,IACb,gBAAiBA,EAAQ,oBACzB,QAASA,EAAQ,YACjB,aAAc,cACd,SAAUA,EAAQ,SAClB,QAAS,SAASwE,EAAS,CACvB,IAAI+c,EAIJ,GAAI,CACAA,EAAM,IAAI,OAAO,KAAK,CAAC/c,EAAQ,QAAQ,CAAC,CAC5C,OAAS1E,EAAG,CACR,IAAI0hB,EACA,OAAO,aACP,OAAO,mBACP,OAAO,gBACP,OAAO,cAEX,GAAI1hB,EAAE,OAAS,aAAe0hB,EAAa,CACvC,IAAIC,EAAK,IAAID,EACbC,EAAG,OAAOjd,EAAQ,QAAQ,EAC1B+c,EAAME,EAAG,QAAQ,CACrB,CACJ,CAEIF,EAAI,OAAS,EACbF,EAAO,uBAAuB,EAI9BD,EAAM,KAAO,OAAO,KAAO,OAAO,WAAW,gBAAgBG,CAAG,CAExE,EACA,MAAO,SAAS/c,EAAS,CACrB6c,EAAO,gCAAgC,CAC3C,CACJ,CAAC,GAEGrhB,EAAQ,oBAAsB,KAC9BohB,EAAM,YAAcphB,EAAQ,mBAEhCohB,EAAM,IAAMphB,EAAQ,IAE5B,EAQA,kBAAmB,SAAUA,EAAS,CAC9BA,EAAQ,SAAS,SACjBA,EAAQ,SAAS,QAAQ,MAAM,EAEnC,IAAIohB,EAAQphB,EAAQ,SAAS,MACzBA,EAAQ,SAAS,QACjBohB,EAAM,OAASA,EAAM,QAAUA,EAAM,QAAU,KAEvD,EAYA,gBAAiB,SAASM,EAAajB,EAAMkB,EAAM,CAC/CD,EAAY,MAAQjB,CACxB,EAOA,iBAAkB,SAAUiB,EAAa,CACrCA,EAAY,MAAQ,KACpBA,EAAY,iBAAmB,IACnC,EAQA,iBAAkB,SAASA,EAAa,CACpC,OAAOA,EAAY,KACvB,EAUA,wBAAyB,SAASA,EAAa,CAC3C,OAAOA,EAAY,KACvB,EAUA,4BAA6B,SAASA,EAAa,CAC/C,GAAI,CAACA,EAAY,iBAAkB,CAC/B,IAAI9hB,EAAS,SAAS,cAAe,QAAS,EAC9CA,EAAO,MAAQ8hB,EAAY,MAAM,MACjC9hB,EAAO,OAAS8hB,EAAY,MAAM,OAClCA,EAAY,iBAAmB9hB,EAAO,WAAW,IAAI,EACrD8hB,EAAY,iBAAiB,UAAWA,EAAY,MAAO,EAAG,CAAE,EAGhEA,EAAY,MAAQ,IACxB,CACA,OAAOA,EAAY,gBACvB,CACJ,EAGAviB,EAAE,OAAQ,GAAMA,EAAE,WAAW,UAAWA,EAAE,YAAY,SAAU,EAWhE,SAASwhB,EAAiBD,EAAK,CAC3B,IAAIkB,EAAelB,EAAI,aACnBmB,EAAenB,EAAI,OACnBoB,EACArB,EAEJ,GAAMC,GAEC,GAAKA,EAAI,SAAW,KAAOA,EAAI,SAAW,EAC7C,MAAAmB,EAAanB,EAAI,OACjBoB,EAAeD,IAAW,IACtB,YACAnB,EAAI,WACF,IAAI,MAAOvhB,EAAE,UAAW,gBAAiB0iB,EAAQC,CAAW,CAAE,MANpE,OAAM,IAAI,MAAO3iB,EAAE,UAAW,iBAAkB,CAAE,EAStD,GAAIyiB,EAAa,MAAM,SAAS,EAC5B,GAAG,CACHnB,EAASC,EAAI,aAAeA,EAAI,YAAY,gBACxCA,EAAI,YACJvhB,EAAE,SAAUyiB,CAAa,CAC7B,OAAS9hB,EAAE,CACP2gB,EAAOC,EAAI,YACf,SACMkB,EAAa,MAAM,WAAW,EACpC,GAAG,CACDnB,EAAOthB,EAAE,UAAUyiB,CAAY,CACjC,OAAQ9hB,EAAE,CACR2gB,EAAQmB,CACV,MAEAnB,EAAOmB,EAEX,OAAOnB,CACX,CAaAthB,EAAE,WAAW,cAAgB,SAAUoU,EAAYkN,EAAM1c,EAAK,CAC1D,IAAIrC,EACJ,IAAKA,KAAYzC,EACb,GAAIyC,EAAS,MAAM,eAAe,GAC9BvC,EAAE,WAAYF,EAAeyC,CAAS,CAAE,GACxCvC,EAAE,WAAYF,EAAeyC,CAAS,EAAE,UAAU,QAAS,GAC3DzC,EAAeyC,CAAS,EAAE,UAAU,SAAS,KAAM6R,EAAYkN,EAAM1c,CAAI,EAEzE,OAAO9E,EAAeyC,CAAS,EAIvC,OAAAvC,EAAE,QAAQ,MAAO,uCAAwC4E,EAAK0c,CAAK,EAE5D,IACX,CAGA,EAAGxhB,CAAc,EAoChB,SAAUE,EAAG,CAkBdA,EAAE,cAAgB,SAAUoa,EAAOC,EAAQqF,EAAUC,EAAaiD,EAAUC,EAAYC,EAAclD,EAAUC,EAAW,CACvH,IAAIte,EACAiZ,EACAvD,EACAlX,EAuBJ,GArBIC,EAAE,cAAeoa,CAAM,EACvBra,EAAUqa,EAEVra,EAAU,CACN,MAAO,UAAW,CAAE,EACpB,OAAQ,UAAW,CAAE,EACrB,SAAU,UAAW,CAAE,EACvB,YAAa,UAAW,CAAE,EAC1B,SAAU,UAAW,CAAE,EACvB,WAAY,UAAW,CAAE,EACzB,aAAc,UAAW,CAAE,EAC3B,SAAU,UAAW,CAAE,EACvB,SAAU,UAAW,CAAE,CAC3B,EAGJ,KAAK,YAAe,CAAC,EACrB,KAAK,SAAeA,EAAQ,SAC5B,KAAK,WAAeA,EAAQ,WAC5B,KAAK,aAAeA,EAAQ,aAEvB,KAAK,aACN,IAAMwB,EAAI,KAAK,aAAa,OAAS,EAAGA,GAAK,EAAGA,IAE5C,IADAiZ,EAAO,KAAK,aAAcjZ,CAAE,EACtB0V,EAAQuD,EAAK,SAAUvD,GAASuD,EAAK,SAAUvD,IAC3C,KAAK,YAAaA,CAAM,IAC1B,KAAK,YAAaA,CAAM,EAAI,CAAC,GAEjC,KAAK,YAAaA,CAAM,EAAE,KAAMuD,CAAK,EAKjDxa,EAAE,WAAW,MAAO,KAAM,CAAED,CAAQ,CAAE,CAE1C,EAEAC,EAAE,OAAQA,EAAE,cAAc,UAAWA,EAAE,WAAW,UAA8D,CAU5G,SAAU,SAAUshB,EAAM1c,EAAK,CAC3B,IAAIme,EACJ,OAAKzB,EAAK,MACNyB,EAAKzB,EAAK,MAAM,MACRA,EAAK,kBACGA,EAAK,gBAAgB,YAAjC,SAA0DA,EAAK,gBAAgB,UAAjC,WAC9CyB,EAAKzB,EAAK,gBAAgB,cAIlCyB,GAAMA,GAAM,IAAI,YAAY,EAEpBA,EAAG,QAAQ,qCAAqC,IAAM,IAC1DA,EAAG,QAAQ,qCAAqC,IAAM,EAC9D,EAWA,UAAW,SAAUzB,EAAM1c,EAAKO,EAAU,CAEtC,IAAIpF,EAEJ,OAAKC,EAAE,cAAcshB,CAAI,EAMrBvhB,EAAUijB,EAAqB,KAAM1B,CAAK,EAJ1CvhB,EAAUkjB,EAAkB,KAAM3B,CAAK,EAOvC1c,GAAO,CAAC7E,EAAQ,WAChBA,EAAQ,SAAW6E,EAAI,QACf,2CAA4C,WAAW,EAE3DA,EAAI,OAAO,kBAAkB,IAAM,GACnC7E,EAAQ,YAAc6E,EAAI,MAAM,MAAM,EAEtC7E,EAAQ,YAAc,IAIvBA,CACX,EASA,WAAY,SAAUkX,EAAOqD,EAAGC,EAAI,CAChC,MAAO,CAAE,KAAK,SAAUtD,EAAO,IAAKqD,EAAG,IAAKC,EAAG,IAAK,KAAK,WAAY,KAAK,WAAY,EAAE,KAAM,EAAG,CACrG,EASA,WAAY,SAAUtD,EAAOqD,EAAGC,EAAI,CAChC,IAAI2I,EAAQ,KAAK,YAAajM,CAAM,EAChCuD,EACAwF,EACAmD,EACAC,EACAC,EACAC,EACA/hB,EAEJ,GAAK,KAAK,UAAY0V,EAAQ,KAAK,UAAc,KAAK,UAAYA,EAAQ,KAAK,SAC3E,MAAO,GAGX,GAAK,CAACiM,GAAS,CAACA,EAAM,OAClB,MAAO,GAGX,IAAM3hB,EAAI2hB,EAAM,OAAS,EAAG3hB,GAAK,EAAGA,IAGhC,GAFAiZ,EAAO0I,EAAO3hB,CAAE,EAEX,EAAA0V,EAAQuD,EAAK,UAAYvD,EAAQuD,EAAK,YAI3CwF,EAAQ,KAAK,cAAe/I,CAAM,EAClCkM,EAAO3I,EAAK,EAAIwF,EAChBoD,EAAO5I,EAAK,EAAIwF,EAChBqD,EAAOF,EAAO3I,EAAK,MAAQwF,EAC3BsD,EAAOF,EAAO5I,EAAK,OAASwF,EAE5BmD,EAAO,KAAK,MAAOA,EAAO,KAAK,UAAW,EAC1CC,EAAO,KAAK,MAAOA,EAAO,KAAK,UAAW,EAC1CC,EAAO,KAAK,KAAMA,EAAO,KAAK,UAAW,EACzCC,EAAO,KAAK,KAAMA,EAAO,KAAK,UAAW,EAEpCH,GAAQ7I,GAAKA,EAAI+I,GAAQD,GAAQ7I,GAAKA,EAAI+I,GAC3C,MAAO,GAIf,MAAO,EACX,CACJ,CAAC,EAQD,SAASL,EAAkB7O,EAAYnO,EAAQ,CAE3C,GAAK,CAACA,GAAU,CAACA,EAAO,gBACpB,MAAM,IAAI,MAAOjG,EAAE,UAAW,YAAa,CAAE,EAGjD,IAAI0H,EAAiBzB,EAAO,gBACxBsd,EAAiB7b,EAAK,WAAaA,EAAK,QACxCqb,EAAiB9c,EAAO,gBAAgB,aACxCud,EAAiB,KACjBV,EAAiB,CAAC,EAClBW,EACAC,EACAC,EACAC,EACAriB,EAEJ,GAAKgiB,IAAa,QAEd,GAAI,CAqBA,GApBAK,EAAWlc,EAAK,qBAAqB,MAAO,EAAG,CAAE,EAC7Ckc,IAAa,SACbA,EAAWlc,EAAK,uBAAuBqb,EAAI,MAAO,EAAG,CAAE,GAG3DS,EAAgB,CACZ,MAAO,CACH,MAAa,6CACb,IAAa9b,EAAK,aAAc,KAAM,EACtC,OAAaA,EAAK,aAAc,QAAS,EACzC,YAAa,KACb,QAAa,SAAUA,EAAK,aAAc,SAAU,EAAG,EAAG,EAC1D,SAAa,SAAUA,EAAK,aAAc,UAAW,EAAG,EAAG,EAC3D,KAAM,CACF,OAAQ,SAAUkc,EAAS,aAAc,QAAS,EAAG,EAAG,EACxD,MAAQ,SAAUA,EAAS,aAAc,OAAQ,EAAG,EAAG,CAC3D,CACJ,CACJ,EAEK,CAAC5jB,EAAE,qBAAsBwjB,EAAc,MAAM,MAAO,EACrD,MAAM,IAAI,MACNxjB,EAAE,UAAW,qBAAsBwjB,EAAc,MAAM,OAAO,YAAY,CAAE,CAChF,EAQJ,IALAC,EAAgB/b,EAAK,qBAAqB,aAAc,EACpD+b,IAAkB,SAClBA,EAAgB/b,EAAK,uBAAuBqb,EAAI,aAAc,EAAG,CAAE,GAGjExhB,EAAI,EAAGA,EAAIkiB,EAAc,OAAQliB,IACnCmiB,EAAeD,EAAeliB,CAAE,EAChCoiB,EAAeD,EAAa,qBAAqB,MAAO,EAAG,CAAE,EACzDC,IAAa,SACbA,EAAWD,EAAa,uBAAuBX,EAAI,MAAO,EAAG,CAAE,GAGnED,EAAa,KAAK,CACd,KAAM,CACF,EAAG,SAAUa,EAAS,aAAc,GAAI,EAAG,EAAG,EAC9C,EAAG,SAAUA,EAAS,aAAc,GAAI,EAAG,EAAG,EAC9C,MAAO,SAAUA,EAAS,aAAc,OAAQ,EAAG,EAAG,EACtD,OAAQ,SAAUA,EAAS,aAAc,QAAS,EAAG,EAAG,EACxD,SAAU,SAAUD,EAAa,aAAc,UAAW,EAAG,EAAG,EAChE,SAAU,SAAUA,EAAa,aAAc,UAAW,EAAG,EAAG,CACpE,CACJ,CAAC,EAGL,OAAIZ,EAAa,SACbU,EAAc,MAAM,YAAcV,GAG/BE,EAAqB5O,EAAYoP,CAAc,CAE1D,OAAU7iB,EAAI,CACV,MAAOA,aAAa,MAChBA,EACA,IAAI,MAAOX,EAAE,UAAU,YAAY,CAAE,CAC7C,KACG,IAAKujB,IAAa,aACrB,MAAM,IAAI,MAAOvjB,EAAE,UAAW,YAAa,CAAE,EAC1C,GAAKujB,IAAa,QAAU,CAC/B,IAAIM,EAAcnc,EAAK,qBAAqB,SAAS,EAAE,CAAC,EACpD4R,EAAUuK,EAAY,WAAW,UACrC,MAAM,IAAI,MAAMvK,CAAO,CAC3B,EAEA,MAAM,IAAI,MAAOtZ,EAAE,UAAW,YAAa,CAAE,CACjD,CAOA,SAASgjB,EAAqB5O,EAAYoP,EAAe,CACrD,IAAIM,EAAgBN,EAAc,MAC9BZ,EAAgBkB,EAAU,IAC1BjB,EAAgBiB,EAAU,OAC1BC,EAAgBD,EAAU,KAC1BE,EAAgBF,EAAU,aAAe,CAAC,EAC1C1J,EAAgB,SAAU2J,EAAS,MAAO,EAAG,EAC7C1J,EAAgB,SAAU0J,EAAS,OAAQ,EAAG,EAC9CrE,EAAgB,SAAUoE,EAAU,SAAU,EAAG,EACjDnE,EAAgB,SAAUmE,EAAU,QAAS,EAAG,EAChDhB,EAAgB,CAAC,EACjBmB,EACA1iB,EAeJ,IAAMA,EAAI,EAAGA,EAAIyiB,EAAa,OAAQziB,IAClC0iB,EAAWD,EAAcziB,CAAE,EAAE,KAE7BuhB,EAAa,KAAM,IAAI9iB,EAAE,YACrB,SAAUikB,EAAS,EAAG,EAAG,EACzB,SAAUA,EAAS,EAAG,EAAG,EACzB,SAAUA,EAAS,MAAO,EAAG,EAC7B,SAAUA,EAAS,OAAQ,EAAG,EAC9B,SAAUA,EAAS,SAAU,EAAG,EAChC,SAAUA,EAAS,SAAU,EAAG,CACpC,CAAC,EAGL,OAAOjkB,EAAE,OAAO,GAAM,CAClB,MAAOoa,EACP,OAAQC,EACR,SAAUqF,EACV,YAAaC,EACb,SAAU,KACV,SAAU,KACV,SAAUiD,EACV,WAAYC,EACZ,aAAcC,CAClB,EAAGU,CAAc,CAErB,CAEA,EAAG1jB,CAAc,EAoChB,SAAUE,EAAG,CAadA,EAAE,eAAiB,SAAUD,EAAS,CASlC,GALAC,EAAE,OAAQ,GAAM,KAAMD,CAAQ,EAG9B,KAAK,IAAM,KAAK,KAAK,GAAK,KAAK,IAAS,KAAK,YAAiB,KAEzD,EAAG,KAAK,QAAU,KAAK,OAAS,KAAK,KACtC,MAAM,IAAI,MAAO,+DAAgE,EAUrF,GAPAA,EAAQ,uBAAyB,CAAC,EAElC,KAAK,WAAa,KAAK,YAAc,MAErC,KAAK,QAAUA,EAAQ,QAGlB,KAAK,YAAc,KAAK,YACzBA,EAAQ,UAAY,KAAK,WACzBA,EAAQ,WAAa,KAAK,oBAClB,KAAK,WACbA,EAAQ,SAAW,KAAK,mBAChB,KAAK,YACbA,EAAQ,SAAW,KAAK,oBAChB,KAAK,MAEb,GAAK,KAAK,MAAM,SAAW,EACvBA,EAAQ,UAAa,KAAK,MAAM,CAAC,EAAE,MAEnCA,EAAQ,WAAa,KAAK,MAAM,CAAC,EAAE,QAAU,KAAK,MAAM,CAAC,EAAE,MAC3D,KAAK,cAAgB,KAAK,MAAM,CAAC,EAAE,iBAChC,CAEH,KAAK,cAAgB,CAAC,EACtB,QAASmkB,EAAI,EAAGA,EAAI,KAAK,MAAM,OAAQA,IACnC,QAASC,EAAK,EAAGA,EAAK,KAAK,MAAMD,CAAC,EAAE,aAAa,OAAQC,IAAM,CAC3D,IAAIC,EAAc,KAAK,MAAMF,CAAC,EAAE,aAAaC,CAAE,EAC/C,KAAK,cAAc,KAAKC,CAAW,EACnCrkB,EAAQ,uBAAuBqkB,CAAW,EAAI,CAC1C,MAAO,KAAK,MAAMF,CAAC,EAAE,MACrB,OAAQ,KAAK,MAAMA,CAAC,EAAE,QAAU,KAAK,MAAMA,CAAC,EAAE,KAClD,CACJ,CAER,SACQG,EAAWtkB,CAAO,EAAI,CAM9B,QAJIukB,EAAW,KAAK,IAAK,KAAK,OAAQ,KAAK,KAAM,EAC7CC,EAAc,CAAC,IAAK,IAAK,IAAI,EAC7BC,EAAe,CAAC,EAEVvc,EAAI,EAAGA,EAAIsc,EAAY,OAAQtc,IAChCsc,EAAYtc,CAAC,GAAKqc,GACnBE,EAAa,KAAMD,EAAYtc,CAAC,CAAE,EAIrCuc,EAAa,OAAS,EACvBzkB,EAAQ,SAAW,KAAK,IAAI,MAAO,KAAMykB,CAAa,EAGtDzkB,EAAQ,SAAWukB,CAE3B,MAAW,KAAK,OAAS,KAAK,MAAM,OAAS,GAIzC,KAAK,0BAA4B,GAEjCvkB,EAAQ,OAAS0kB,EAAiB,IAAK,EAEvCzkB,EAAE,OAAQ,GAAMD,EAAS,CACrB,MAAOA,EAAQ,OAAQA,EAAQ,OAAO,OAAS,CAAE,EAAE,MACnD,OAAQA,EAAQ,OAAQA,EAAQ,OAAO,OAAS,CAAE,EAAE,OACpD,SAAU,KAAK,IAAKA,EAAQ,OAAQA,EAAQ,KAAM,EAClD,YAAa,EACb,SAAU,EACV,SAAUA,EAAQ,OAAO,OAAS,CACtC,CAAC,EACD,KAAK,OAASA,EAAQ,QAEtBC,EAAE,QAAQ,MAAM,2DAA2D,EAG/E,GAAI,CAACD,EAAQ,UAAY,CAAC,KAAK,0BAC3B,GAAI,CAAC,KAAK,cACNA,EAAQ,SAAW,OAAO,KAAK,MAAM,KAAK,IAAI,KAAK,IAAI,KAAK,MAAO,KAAK,MAAM,EAAG,CAAC,CAAC,CAAC,MACjF,CACH,IAAI2kB,EAAiB,KAAK,IAAI,MAAM,KAAM,KAAK,aAAa,EAC5D3kB,EAAQ,SAAW,KAAK,MAAM,KAAK,IAAI2kB,CAAc,EAAI,KAAK,KAAK,CACvE,CAIJ,GAAI,KAAK,MAAQ,CACb,IAAIC,EAAa,KAAK,MAAM,QACtBA,IAAe5kB,EAAQ,UAAc4kB,IAAe5kB,EAAQ,SAAW,KACzE,KAAK,WAAa,KAAK,MAAM,MAAM,EAAE,KAAK,CAAE6kB,EAAOC,IAAWD,EAAM,MAAQC,EAAM,KAAK,EAEnFF,IAAe5kB,EAAQ,UACvB,KAAK,WAAW,KAAM,CAAC,MAAO,KAAK,MAAO,OAAQ,KAAK,MAAM,CAAE,EAG3E,CAEAC,EAAE,WAAW,MAAO,KAAM,CAAED,CAAQ,CAAE,CAC1C,EAEAC,EAAE,OAAQA,EAAE,eAAe,UAAWA,EAAE,WAAW,UAA+D,CAS9G,SAAU,SAAUshB,EAAM1c,EAAM,CAE5B,OAAI0c,EAAK,UAAYA,EAAK,WAAa,4BAG3BA,EAAK,UAAU,IACvBA,EAAK,UAAU,IAAM,+DACrBA,EAAK,UAAU,IAAM,4CAKbA,EAAK,SACbA,EAAK,QAAQ,QAAQ,4DAA4D,IAAM,GAE/EA,EAAK,YAAcA,EAAK,OAASA,EAAK,OAZvC,GAcC,GAAAA,EAAK,iBACFA,EAAK,gBAAgB,UAAhC,QAEIA,EAAK,gBAAgB,eADzB,iDAQR,EA4BA,UAAW,SAAUA,EAAM1c,EAAKO,EAAU,CAEtC,GAAMnF,EAAE,cAAcshB,CAAI,EAMnB,CACH,GAAK,CAACA,EAAK,UAAU,EACjBA,EAAK,UAAU,EAAI,4CACnBA,EAAK,KAAK,EAAI1c,EAAI,QAAQ,aAAc,EAAE,EAC1C0c,EAAK,QAAU,MACZ,CACH,IAAIzgB,EAAUygB,EAAK,UAAU,EAC7B,GAAI,MAAM,QAAQzgB,CAAO,GACrB,QAASU,EAAI,EAAGA,EAAIV,EAAQ,OAAQU,IAChC,GAAI,OAAOV,EAAQU,CAAC,GAAM,WACpB,wDAAwD,KAAKV,EAAQU,CAAC,CAAC,GACzEV,EAAQU,CAAC,IAAM,+DAAkE,CACjFV,EAAUA,EAAQU,CAAC,EACnB,KACJ,EAGR,OAAQV,EAAS,CACb,IAAK,0CACL,IAAK,8DACDygB,EAAK,QAAU,EACf,MACJ,IAAK,0CACDA,EAAK,QAAU,EACf,MACJ,IAAK,0CACDA,EAAK,QAAU,EACf,MACJ,QACIthB,EAAE,QAAQ,MAAM,wEAAwE,CAChG,CACJ,CAEA,GAAIshB,EAAK,kBACL,QAASwD,EAAI,EAAGA,EAAIxD,EAAK,iBAAiB,OAAQwD,IAC9C,GAAKhlB,EAAc,qBAAqBwhB,EAAK,iBAAiBwD,CAAC,CAAC,EAAI,CAChExD,EAAK,WAAaA,EAAK,iBAAiBwD,CAAC,EACzC,KACJ,EAGR,OAAOxD,CACX,KAhD8B,CAC1B,IAAIvhB,EAAUglB,EAAoBzD,CAAK,EACvC,OAAAvhB,EAAQ,UAAU,EAAI,4CACtBA,EAAQ,KAAK,EAAI6E,EAAI,QAAQ,YAAa,EAAE,EAC5C7E,EAAQ,QAAU,EACXA,CACX,CA2CJ,EAOA,aAAc,SAAUkX,EAAQ,CAE5B,GAAG,KAAK,0BACJ,OAAOjX,EAAE,WAAW,UAAU,aAAa,KAAK,KAAMiX,CAAK,EAG/D,IAAImN,EAAc,KAAK,IAAI,EAAG,KAAK,SAAWnN,CAAK,EAEnD,OAAI,KAAK,wBAA0B,KAAK,uBAAuBmN,CAAW,EAC/D,KAAK,uBAAuBA,CAAW,EAAE,MAE7C,KAAK,UAChB,EAOA,cAAe,SAAUnN,EAAQ,CAE7B,GAAG,KAAK,0BACJ,OAAOjX,EAAE,WAAW,UAAU,cAAc,KAAK,KAAMiX,CAAK,EAGhE,IAAImN,EAAc,KAAK,IAAI,EAAG,KAAK,SAAWnN,CAAK,EAEnD,OAAI,KAAK,wBAA0B,KAAK,uBAAuBmN,CAAW,EAC/D,KAAK,uBAAuBA,CAAW,EAAE,OAE7C,KAAK,WAChB,EAMA,cAAe,SAAWnN,EAAQ,CAE9B,GAAG,KAAK,0BAA2B,CAC/B,IAAI+N,EAAa,IACjB,OAAI,KAAK,OAAO,OAAS,GAAK/N,GAAS,KAAK,UAAYA,GAAS,KAAK,WAClE+N,EACI,KAAK,OAAO/N,CAAK,EAAE,MACnB,KAAK,OAAO,KAAK,QAAQ,EAAE,OAE5B+N,CACX,CAEA,OAAOhlB,EAAE,WAAW,UAAU,cAAc,KAAK,KAAMiX,CAAK,CAChE,EAMA,YAAa,SAAUA,EAAQ,CAE3B,GAAG,KAAK,0BAA2B,CAC/B,IAAI+I,EAAQ,KAAK,cAAc/I,CAAK,EACpC,OAAI+I,EACO,IAAIhgB,EAAE,MAAM,EAAG,CAAC,EAEhB,IAAIA,EAAE,MAAM,EAAG,CAAC,CAE/B,CAGA,GAAI,KAAK,WAAa,CAClB,IAAIilB,EAAY,KAAK,WAAWhO,CAAK,EACjCqD,EAAI,KAAK,KAAM2K,EAAU,MAAQ,KAAK,aAAahO,CAAK,CAAE,EAC1DsD,EAAI,KAAK,KAAM0K,EAAU,OAAS,KAAK,cAAchO,CAAK,CAAE,EAChE,OAAO,IAAIjX,EAAE,MAAOsa,EAAGC,CAAE,CAC7B,KAGI,QAAOva,EAAE,WAAW,UAAU,YAAY,KAAK,KAAMiX,CAAK,CAElE,EAQA,eAAgB,SAAUA,EAAOjU,EAAQ,CAErC,GAAG,KAAK,0BACJ,OAAO,IAAIhD,EAAE,MAAM,EAAG,CAAC,EAI3B,GAAI,KAAK,WAAa,CAElB,IAAIqgB,EAAard,EAAM,GAAK,GAAKA,EAAM,GAAK,GAC3BA,EAAM,GAAK,GAAKA,EAAM,GAAK,EAAI,KAAK,YACrDhD,EAAE,QAAQ,OAAOqgB,EAAY,gEAAgE,EAE7F,IAAIC,EAAc,KAAK,WAAWrJ,CAAK,EAAE,MACrCsJ,EAASvd,EAAM,EAAIsd,EACnBE,EAASxd,EAAM,EAAIsd,EAEnBhG,EAAI,KAAK,MAAMiG,EAAS,KAAK,aAAatJ,CAAK,CAAC,EAChDsD,EAAI,KAAK,MAAMiG,EAAS,KAAK,cAAcvJ,CAAK,CAAC,EAIjDjU,EAAM,GAAK,IACXsX,EAAI,KAAK,YAAYrD,CAAK,EAAE,EAAI,GAEpC,IAAIwJ,EAAU,MACd,OAAIzd,EAAM,GAAK,EAAI,KAAK,YAAcyd,IAClClG,EAAI,KAAK,YAAYtD,CAAK,EAAE,EAAI,GAG7B,IAAIjX,EAAE,MAAMsa,EAAGC,CAAC,CAC3B,CAGA,OAAOva,EAAE,WAAW,UAAU,eAAe,KAAK,KAAMiX,EAAOjU,CAAK,CACxE,EAYA,WAAY,SAAUiU,EAAOqD,EAAGC,EAAG,CAE/B,GAAG,KAAK,0BAA2B,CAC/B,IAAI3V,EAAM,KACV,OAAK,KAAK,OAAO,OAAS,GAAKqS,GAAS,KAAK,UAAYA,GAAS,KAAK,WACnErS,EAAM,KAAK,OAAQqS,CAAM,EAAE,KAExBrS,CACX,CAGA,IAAIsgB,EAAgB,IAEhBlF,EAAQ,KAAK,IAAK,GAAK,KAAK,SAAW/I,CAAM,EAE7CkO,EACAC,EAGAxE,EACAC,EACAwE,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EAGJ,OAAI,KAAK,YACLb,EAAa,KAAK,WAAWlO,CAAK,EAAE,MACpCmO,EAAc,KAAK,WAAWnO,CAAK,EAAE,SAIrCkO,EAAa,KAAK,KAAM,KAAK,MAAQnF,CAAM,EAC3CoF,EAAc,KAAK,KAAM,KAAK,OAASpF,CAAM,GAGjDY,EAAY,KAAK,aAAa3J,CAAK,EACnC4J,EAAa,KAAK,cAAc5J,CAAK,EACrCoO,EAAoB,KAAK,MAAOzE,EAAYZ,CAAM,EAClDsF,EAAqB,KAAK,MAAOzE,EAAab,CAAM,EAChD,KAAK,UAAY,EACjB+F,EAAc,UAAY,KAAK,WAE/BA,EAAc,WAAa,KAAK,WAE/BZ,EAAavE,GAAawE,EAAcvE,GACpC,KAAK,UAAY,GAAKsE,IAAe,KAAK,MAC3CS,EAAW,OACH,KAAK,UAAY,GAAKT,IAAe,KAAK,OAASC,IAAgB,KAAK,OAChFQ,EAAW,MACH,KAAK,UAAY,EACzBA,EAAWT,EAAa,IAAMC,EAE9BQ,EAAWT,EAAa,IAE5BI,EAAa,SAEbC,EAAYlL,EAAI+K,EAChBI,EAAYlL,EAAI+K,EAChBI,EAAY,KAAK,IAAKL,EAAmB,KAAK,MAAQG,CAAU,EAChEG,EAAY,KAAK,IAAKL,EAAoB,KAAK,OAASG,CAAU,EAC7DnL,IAAM,GAAKC,IAAM,GAAKmL,IAAc,KAAK,OAASC,IAAc,KAAK,OACtEJ,EAAa,OAEbA,EAAa,CAAEC,EAAWC,EAAWC,EAAWC,CAAU,EAAE,KAAM,GAAI,EAE1EE,EAAY,KAAK,IAAKjF,EAAWuE,EAAc7K,EAAIsG,CAAW,EAC9DkF,EAAY,KAAK,IAAKjF,EAAYuE,EAAe7K,EAAIsG,CAAY,EAC5D,KAAK,UAAY,GAAKgF,IAAc,KAAK,MAC1CD,EAAW,OACH,KAAK,UAAY,GAAKC,IAAc,KAAK,OAASC,IAAc,KAAK,OAC7EF,EAAW,MACJ,KAAK,UAAY,EACxBA,EAAWC,EAAY,IAAMC,EAE7BF,EAAWC,EAAY,KAG/BG,EAAM,CAAE,KAAK,IAAKT,EAAYK,EAAUV,EAAea,CAAY,EAAE,KAAM,GAAI,EAExEC,CACX,EAEA,aAAc,CACV,WAAY3B,EACZ,gBAAiBI,CACrB,CAEF,CAAC,EAWC,SAASJ,EAAatkB,EAAU,CAC5B,IAAIkmB,EAAiB,CACjB,oEACA,wEACA,yCACA,SACA,yCACJ,EACIC,EAAe,MAAM,QAAQnmB,EAAQ,OAAO,EAAIA,EAAQ,QAAQ,CAAC,EAAIA,EAAQ,QAC7EomB,EAAYF,EAAe,QAAQC,CAAY,IAAM,GACrDE,EAA2B,GAC/B,OAAKrmB,EAAQ,UAAY,GAAKA,EAAQ,QAAQ,OAAS,GAAKA,EAAQ,QAAQ,CAAC,EAAE,WAC3EqmB,EAA2BrmB,EAAQ,QAAQ,CAAC,EAAE,SAAS,QAAS,SAAU,IAAM,IAE/EA,EAAQ,UAAY,GAAKA,EAAQ,gBAClCqmB,EAA2BrmB,EAAQ,cAAc,QAAS,UAAW,IAAM,IAExE,CAAComB,GAAYC,CACxB,CAQA,SAAS3B,EAAgB1kB,EAAS,CAE9B,QADIsmB,EAAS,CAAC,EACN9kB,EAAI,EAAGA,EAAIxB,EAAQ,MAAM,OAAQwB,IACrC8kB,EAAO,KAAK,CACR,IAAKtmB,EAAQ,IAAM,SAAWA,EAAQ,MAAMwB,CAAC,EAAE,MAAQ,KAClDxB,EAAQ,UAAY,EAAIA,EAAQ,MAAMwB,CAAC,EAAE,OAAS,IACnD,cAAgBxB,EAAQ,WAC5B,MAAOA,EAAQ,MAAMwB,CAAC,EAAE,MACxB,OAAQxB,EAAQ,MAAMwB,CAAC,EAAE,MAC7B,CAAC,EAEL,OAAO8kB,EAAO,KAAK,SAAS/d,EAAGC,EAAG,CAC9B,OAAOD,EAAE,MAAQC,EAAE,KACvB,CAAC,CACL,CAGA,SAASwc,EAAmB9e,EAAQ,CAEhC,GAAK,CAACA,GAAU,CAACA,EAAO,gBACpB,MAAM,IAAI,MAAOjG,EAAE,UAAW,YAAa,CAAE,EAGjD,IAAI0H,EAAkBzB,EAAO,gBACzBsd,EAAkB7b,EAAK,QACvB8b,EAAkB,KAEtB,GAAKD,IAAa,OACd,GAAI,CACA,OAAAC,EAAgB,CAAC,EACjB8C,EAAY5e,EAAM8b,CAAc,EACzBA,CAEX,OAAU7iB,EAAI,CACV,MAAOA,aAAa,MAChBA,EACA,IAAI,MAAOX,EAAE,UAAU,aAAa,CAAE,CAC9C,CAEJ,MAAM,IAAI,MAAOA,EAAE,UAAW,aAAc,CAAE,CAClD,CAEA,SAASsmB,EAAYC,EAAM/C,EAAejhB,EAAW,CACjD,IAAIhB,EACAwC,EACJ,GAAKwiB,EAAK,WAAa,GAAKhkB,EACxBwB,EAAQwiB,EAAK,UAAU,KAAK,EACxBxiB,EAAM,MAAM,OAAO,IACnBA,EAAQ,OAAQA,CAAM,GAErByf,EAAejhB,CAAS,GAGpBvC,EAAE,QAASwjB,EAAejhB,CAAS,CAAE,IACtCihB,EAAejhB,CAAS,EAAI,CAAEihB,EAAejhB,CAAS,CAAE,GAE5DihB,EAAejhB,CAAS,EAAE,KAAMwB,CAAM,GALtCyf,EAAejhB,CAAS,EAAIwB,UAOzBwiB,EAAK,WAAa,EACzB,IAAKhlB,EAAI,EAAGA,EAAIglB,EAAK,WAAW,OAAQhlB,IACpC+kB,EAAYC,EAAK,WAAYhlB,CAAE,EAAGiiB,EAAe+C,EAAK,QAAS,CAG3E,CAIJ,EAAGzmB,CAAc,EA4ChB,SAAUE,EAAG,CA0BdA,EAAE,cAAgB,SAAUoa,EAAOC,EAAQqF,EAAUC,EAAaiD,EAAW,CACzE,IAAI7iB,EAEAC,EAAE,cAAeoa,CAAM,EACvBra,EAAUqa,EAEVra,EAAU,CACN,MAAO,UAAU,CAAC,EAClB,OAAQ,UAAU,CAAC,EACnB,SAAU,UAAU,CAAC,EACrB,YAAa,UAAU,CAAC,EACxB,SAAU,UAAU,CAAC,CACzB,GAKA,CAACA,EAAQ,OAAS,CAACA,EAAQ,UAC3BA,EAAQ,MAAQ,SAChBA,EAAQ,OAAS,UAEhBA,EAAQ,WACTA,EAAQ,SAAW,IACnBA,EAAQ,YAAc,GAErBA,EAAQ,WACTA,EAAQ,SAAW,kCAEvBA,EAAQ,SAAW,EAEnBC,EAAE,WAAW,MAAO,KAAM,CAAED,CAAQ,CAAE,CAE1C,EAEAC,EAAE,OAAQA,EAAE,cAAc,UAAWA,EAAE,WAAW,UAA8D,CAU5G,SAAU,SAAUshB,EAAM1c,EAAK,CAC3B,OACI0c,EAAK,MACgBA,EAAK,OAA1B,gBAER,EAWA,UAAW,SAAUA,EAAM1c,EAAKO,EAAU,CACtC,OAAOmc,CACX,EASA,WAAY,SAAUrK,EAAOqD,EAAGC,EAAI,CAChC,OAAO,KAAK,UAAYtD,EAAQ,GAAK,IAAMqD,EAAI,IAAMC,EAAI,MAC7D,CACJ,CAAC,CAGD,EAAGza,CAAc,EA4ChB,SAAUE,EAAG,CAiBdA,EAAE,cAAgB,SAAUoa,EAAOC,EAAQqF,EAAUC,EAAaiD,EAAW,CACzE,IAAI7iB,EAEAC,EAAE,cAAeoa,CAAM,EACvBra,EAAUqa,EAEVra,EAAU,CACN,MAAO,UAAU,CAAC,EAClB,OAAQ,UAAU,CAAC,EACnB,SAAU,UAAU,CAAC,EACrB,YAAa,UAAU,CAAC,EACxB,SAAU,UAAU,CAAC,CACzB,EAIJ,IAAIymB,EAAgB,KAAK,KAAKzmB,EAAQ,MAAQ,GAAG,EAAI,IACjD0mB,EAAiB,KAAK,KAAK1mB,EAAQ,OAAS,GAAG,EAAI,IACnD2mB,EAGAF,EAAgBC,EAChBC,EAAMF,EAAgB,IAEtBE,EAAMD,EAAiB,IAE3B1mB,EAAQ,SAAW,KAAK,KAAK,KAAK,IAAI2mB,CAAG,EAAI,KAAK,IAAI,CAAC,CAAC,EAAI,EAC5D3mB,EAAQ,SAAW,IACnBA,EAAQ,MAAQymB,EAChBzmB,EAAQ,OAAS0mB,EAEjBzmB,EAAE,WAAW,MAAO,KAAM,CAAED,CAAQ,CAAE,CAE1C,EAEAC,EAAE,OAAQA,EAAE,cAAc,UAAWA,EAAE,WAAW,UAA8D,CAU5G,SAAU,SAAUshB,EAAM1c,EAAK,CAC3B,OAAS0c,EAAK,MAA8BA,EAAK,OAA3B,iBAC1B,EAWA,UAAW,SAAUA,EAAM1c,EAAKO,EAAU,CACtC,OAAOmc,CACX,EASA,WAAY,SAAUrK,EAAOqD,EAAGC,EAAI,CAEhC,IAAIoM,EAAS,KAAK,YAAa1P,CAAM,EAAE,EAAI,EAE3C,OAAO,KAAK,SAAWA,EAAQ,IAAMqD,EAAI,KAAOqM,EAASpM,GAAK,MAClE,CACJ,CAAC,CAGD,EAAGza,CAAc,EAEhB,SAASE,EAAG,CA6CTA,EAAE,kBAAoB,SAASD,EAAS,CACjC,OAAOA,EAAQ,UAAa,cAC3BA,EAAQ,SAAW,KAGpB,OAAOA,EAAQ,YAAe,cAC7BA,EAAQ,WAAa,MACrB,KAAK,WAAaA,EAAQ,YAG9B,IAAI6mB,EAAmB,CACnB,EAAG7mB,EAAQ,MACX,EAAGA,EAAQ,MACf,EAOA,IANAA,EAAQ,WAAa,CAAC,CAClB,EAAGA,EAAQ,MACX,EAAGA,EAAQ,MACf,CAAC,EACDA,EAAQ,SAAW,CAAC,KAAK,aAAaA,EAAQ,MAAOA,EAAQ,OAAQA,EAAQ,QAAQ,CAAC,EAE/E,SAAS6mB,EAAiB,EAAG,EAAE,EAAI7mB,EAAQ,UAAY,SAAS6mB,EAAiB,EAAG,EAAE,EAAI7mB,EAAQ,UACrG6mB,EAAiB,EAAI,KAAK,MAAMA,EAAiB,EAAI,CAAC,EACtDA,EAAiB,EAAI,KAAK,MAAMA,EAAiB,EAAI,CAAC,EACtD7mB,EAAQ,WAAW,KAAK,CACpB,EAAG6mB,EAAiB,EACpB,EAAGA,EAAiB,CACxB,CAAC,EACD7mB,EAAQ,SAAS,KAAK,KAAK,aAAa6mB,EAAiB,EAAGA,EAAiB,EAAG7mB,EAAQ,QAAQ,CAAC,EAErGA,EAAQ,WAAW,QAAQ,EAC3BA,EAAQ,SAAS,QAAQ,EACzBA,EAAQ,SAAW,EACnBA,EAAQ,SAAWA,EAAQ,SAAS,OAAS,EAE7CD,EAAc,WAAW,MAAM,KAAM,CAACC,CAAO,CAAC,CAClD,EAEAC,EAAE,OAAOA,EAAE,kBAAkB,UAAWA,EAAE,WAAW,UAAmE,CAGpH,aAAc,SAASoa,EAAOC,EAAQqF,EAAU,CAC5C,MAAO,CACH,EAAG,KAAK,KAAKtF,EAAQsF,CAAQ,EAC7B,EAAG,KAAK,KAAKrF,EAASqF,CAAQ,CAClC,CACJ,EAGA,6BAA8B,SAASzI,EAAOqD,EAAGC,EAAG,CAKhD,QAJIsM,EAAM,EACN3jB,EAAO,CAAC,EAGH4jB,EAAI,EAAGA,EAAI7P,EAAO6P,IACvB5jB,EAAO,KAAK,SAAS4jB,CAAC,EACtBD,GAAO3jB,EAAK,EAAIA,EAAK,EAGzB,OAAAA,EAAO,KAAK,SAAS+T,CAAK,EAC1B4P,GAAO3jB,EAAK,EAAIqX,EAAID,EACbuM,CACX,EASA,SAAU,SAASvF,EAAM1c,EAAK,CAC1B,OAAQ0c,EAAK,MAAiCA,EAAK,OAA9B,oBACzB,EAWA,UAAW,SAASA,EAAM1c,EAAKO,EAAU,CACrC,OAAOmc,CACX,EAQA,WAAY,SAASrK,EAAOqD,EAAGC,EAAG,CAE9B,IAAIxY,EAAS,EACT8kB,EAAM,KAAK,6BAA6B5P,EAAOqD,EAAGC,CAAC,EACvD,OAAAxY,EAAS,KAAK,MAAM8kB,EAAM,GAAG,EACtB,KAAK,SAAW,YAAc9kB,EAAS,IAAMkV,EAAQ,IAAMqD,EAAI,IAAMC,EAAI,IAAM,KAAK,UAE/F,CACJ,CAAC,CAEL,EAAEza,CAAa,EAqCd,SAAUE,EAAG,CA0BdA,EAAE,iBAAmB,SAAUqmB,EAAS,CAEpC,IAAItmB,EACAqa,EACAC,EAEAra,EAAE,QAASqmB,CAAO,IAClBtmB,EAAU,CACN,KAAM,uBACN,OAAQsmB,CACZ,GAIJtmB,EAAQ,OAASgnB,EAAahnB,EAAQ,MAAO,EAExCA,EAAQ,OAAO,OAAS,GACzBqa,EAAQra,EAAQ,OAAQA,EAAQ,OAAO,OAAS,CAAE,EAAE,MACpDsa,EAASta,EAAQ,OAAQA,EAAQ,OAAO,OAAS,CAAE,EAAE,SAGrDqa,EAAQ,EACRC,EAAS,EACTra,EAAE,QAAQ,MAAO,kCAAmC,GAGxDA,EAAE,OAAQ,GAAMD,EAAS,CACrB,MAAOqa,EACP,OAAQC,EACR,SAAU,KAAK,IAAKA,EAAQD,CAAM,EAClC,YAAa,EACb,SAAU,EACV,SAAUra,EAAQ,OAAO,OAAS,EAAIA,EAAQ,OAAO,OAAS,EAAI,CACtE,CAAE,EAEFC,EAAE,WAAW,MAAO,KAAM,CAAED,CAAQ,CAAE,EAEtC,KAAK,OAASA,EAAQ,MAC1B,EAEAC,EAAE,OAAQA,EAAE,iBAAiB,UAAWA,EAAE,WAAW,UAAiE,CAQlH,SAAU,SAAUshB,EAAM1c,EAAK,CAC3B,OACI0c,EAAK,MACsBA,EAAK,OAAhC,wBAEAA,EAAK,iBACsBA,EAAK,gBAAgB,aAAa,MAAM,IAAnE,sBAER,EAYA,UAAW,SAAUkC,EAAewD,EAAS7hB,EAAU,CAEnD,IAAIpF,EAEJ,OAAKC,EAAE,cAAcwjB,CAAa,EAM9BzjB,EAAUijB,EAAqB,KAAMQ,CAAc,EAJnDzjB,EAAUkjB,EAAkB,KAAMO,CAAc,EAO7CzjB,CAEX,EAMA,cAAe,SAAWkX,EAAQ,CAC9B,IAAI+N,EAAa,IACjB,OAAK,KAAK,OAAO,OAAS,GAAK/N,GAAS,KAAK,UAAYA,GAAS,KAAK,WACnE+N,EACI,KAAK,OAAQ/N,CAAM,EAAE,MACrB,KAAK,OAAQ,KAAK,QAAS,EAAE,OAE9B+N,CACX,EAMA,YAAa,SAAU/N,EAAQ,CAC3B,IAAI+I,EAAQ,KAAK,cAAe/I,CAAM,EACtC,OAAK+I,EACM,IAAIhgB,EAAE,MAAO,EAAG,CAAE,EAElB,IAAIA,EAAE,MAAO,EAAG,CAAE,CAEjC,EAaA,WAAY,SAAWiX,EAAOqD,EAAGC,EAAI,CACjC,IAAI3V,EAAM,KACV,OAAK,KAAK,OAAO,OAAS,GAAKqS,GAAS,KAAK,UAAYA,GAAS,KAAK,WACnErS,EAAM,KAAK,OAAQqS,CAAM,EAAE,KAExBrS,CACX,CACJ,CAAE,EASF,SAASmiB,EAAaE,EAAO,CACzB,IAAIC,EAAW,CAAC,EACZC,EACA5lB,EACJ,IAAKA,EAAI,EAAGA,EAAI0lB,EAAM,OAAQ1lB,IAC1B4lB,EAAOF,EAAO1lB,CAAE,EACZ4lB,EAAK,QACLA,EAAK,OACLA,EAAK,IAELD,EAAS,KAAK,CACV,IAAKC,EAAK,IACV,MAAO,OAAQA,EAAK,KAAM,EAC1B,OAAQ,OAAQA,EAAK,MAAO,CAChC,CAAC,EAGDnnB,EAAE,QAAQ,MAAO,+BAAgCmnB,EAAK,IAAMA,EAAK,IAAM,UAAW,EAI1F,OAAOD,EAAS,KAAK,SAAS5e,EAAGC,EAAG,CAChC,OAAOD,EAAE,OAASC,EAAE,MACxB,CAAC,CAEL,CAOA,SAAS0a,EAAkB7O,EAAYnO,EAAQ,CAE3C,GAAK,CAACA,GAAU,CAACA,EAAO,gBACpB,MAAM,IAAI,MAAOjG,EAAE,UAAW,YAAa,CAAE,EAGjD,IAAI0H,EAAezB,EAAO,gBACtBsd,EAAe7b,EAAK,QACpB0f,EAAe,KACff,EAAe,CAAC,EAChBpP,EACA1V,EAEJ,GAAKgiB,IAAa,QAEd,GAAI,CAOA,IANA6D,EAAO,CACH,KAAa1f,EAAK,aAAc,MAAO,EACvC,OAAa,CAAC,CAClB,EAEA2e,EAAS3e,EAAK,qBAAsB,OAAQ,EACtCnG,EAAI,EAAGA,EAAI8kB,EAAO,OAAQ9kB,IAC5B0V,EAAQoP,EAAQ9kB,CAAE,EAElB6lB,EAAK,OAAO,KAAK,CACb,IAAQnQ,EAAM,aAAc,KAAM,EAClC,MAAQ,SAAUA,EAAM,aAAc,OAAQ,EAAG,EAAG,EACpD,OAAQ,SAAUA,EAAM,aAAc,QAAS,EAAG,EAAG,CACzD,CAAC,EAGL,OAAO+L,EAAqB5O,EAAYgT,CAAK,CAEjD,OAAUzmB,EAAI,CACV,MAAOA,aAAa,MAChBA,EACA,IAAI,MAAO,iDAAkD,CACrE,KACG,IAAK4iB,IAAa,aACrB,MAAM,IAAI,MAAO,qDAAsD,EACpE,GAAKA,IAAa,QACrB,MAAM,IAAI,MAAO,UAAYtd,CAAO,EAGxC,MAAM,IAAI,MAAO,mBAAqBsd,CAAS,CACnD,CAOA,SAASP,EAAqB5O,EAAYoP,EAAe,CAErD,OAAOA,EAAc,MAEzB,CAEA,EAAG1jB,CAAc,EAoChB,SAAUE,EAAG,CA2BVA,EAAE,gBAAkB,SAAUD,EAAS,CAEnCA,EAAUC,EAAE,OAAO,CACf,aAAc,GACd,kBAAmB,GACnB,oBAAqB,EACzB,EAAGD,CAAO,EACVC,EAAE,WAAW,MAAM,KAAM,CAACD,CAAO,CAAC,CAEtC,EAEAC,EAAE,OAAOA,EAAE,gBAAgB,UAAWA,EAAE,WAAW,UAAgE,CAQ/G,SAAU,SAAUshB,EAAM1c,EAAK,CAC3B,OAAO0c,EAAK,MAAQA,EAAK,OAAS,OACtC,EAUA,UAAW,SAAUvhB,EAASinB,EAAS7hB,EAAU,CAC7C,OAAOpF,CACX,EAQA,aAAc,SAAU6E,EAAK,CACzB,IAAIqd,EAAQ,KAAK,OAAS,IAAI,MAC1BvX,EAAQ,KAER,KAAK,oBACLuX,EAAM,YAAc,KAAK,mBAEzB,KAAK,sBACLA,EAAM,eAAiB,KAAK,qBAGhCjiB,EAAE,SAASiiB,EAAO,OAAQ,UAAY,CAClCvX,EAAM,MAAQuX,EAAM,aACpBvX,EAAM,OAASuX,EAAM,cACrBvX,EAAM,YAAcA,EAAM,MAAQA,EAAM,OACxCA,EAAM,WAAa,IAAI1K,EAAE,MAAM0K,EAAM,MAAOA,EAAM,MAAM,EACxDA,EAAM,WAAaA,EAAM,MACzBA,EAAM,YAAcA,EAAM,OAC1BA,EAAM,YAAc,EACpBA,EAAM,SAAW,EACjBA,EAAM,OAASA,EAAM,aAAa,EAClCA,EAAM,SAAWA,EAAM,OAAO,OAAS,EAEvCA,EAAM,MAAQ,GAGdA,EAAM,WAAW,QAAS,CAAC,WAAYA,CAAK,CAAC,CACjD,CAAC,EAED1K,EAAE,SAASiiB,EAAO,QAAS,UAAY,CAEnCvX,EAAM,WAAW,cAAe,CAC5B,QAAS,0BAA4B9F,EACrC,OAAQA,CACZ,CAAC,CACL,CAAC,EAEDqd,EAAM,IAAMrd,CAChB,EAKA,cAAe,SAAUqS,EAAO,CAC5B,IAAI+N,EAAa,IACjB,OAAI/N,GAAS,KAAK,UAAYA,GAAS,KAAK,WACxC+N,EACQ,KAAK,OAAO/N,CAAK,EAAE,MACnB,KAAK,OAAO,KAAK,QAAQ,EAAE,OAEhC+N,CACX,EAKA,YAAa,SAAU/N,EAAO,CAC1B,IAAI+I,EAAQ,KAAK,cAAc/I,CAAK,EACpC,OAAI+I,EACO,IAAIhgB,EAAE,MAAM,EAAG,CAAC,EAEhB,IAAIA,EAAE,MAAM,EAAG,CAAC,CAE/B,EAQA,WAAY,SAAUiX,EAAOqD,EAAGC,EAAG,CAC/B,IAAI3V,EAAM,KACV,OAAIqS,GAAS,KAAK,UAAYA,GAAS,KAAK,WACxCrS,EAAM,KAAK,OAAOqS,CAAK,EAAE,KAEtBrS,CACX,EAQA,aAAc,SAAUqS,EAAOqD,EAAGC,EAAG,CACjC,IAAI1Z,EAAU,KACd,OAAIoW,GAAS,KAAK,UAAYA,GAAS,KAAK,WACxCpW,EAAU,KAAK,OAAOoW,CAAK,EAAE,WAE1BpW,CACX,EAOA,QAAS,SAAU8Y,EAAQ,CACvB,KAAK,oBAAoBA,CAAM,CACnC,EAMA,aAAc,UAAY,CACtB,IAAI0M,EAAS,CAAC,CACN,IAAK,KAAK,OAAO,IACjB,MAAO,KAAK,OAAO,aACnB,OAAS,KAAK,OAAO,aACzB,CAAC,EAEL,GAAI,CAAC,KAAK,cAAgB,CAACrmB,EAAE,eAEzB,cAAO,KAAK,OACLqmB,EAGX,IAAIgB,EAAe,KAAK,OAAO,aAC3BC,EAAgB,KAAK,OAAO,cAG5BC,EAAY,SAAS,cAAc,QAAQ,EAC3CC,EAAaD,EAAU,WAAW,IAAI,EAY1C,GAVAA,EAAU,MAAQF,EAClBE,EAAU,OAASD,EACnBE,EAAW,UAAU,KAAK,OAAQ,EAAG,EAAGH,EAAcC,CAAa,EAInEjB,EAAO,CAAC,EAAE,UAAYmB,EAEtB,OAAO,KAAK,OAERxnB,EAAE,gBAAgBunB,CAAS,EAE3B,OAAOlB,EAKX,KAAOgB,GAAgB,GAAKC,GAAiB,GAAG,CAC5CD,EAAe,KAAK,MAAMA,EAAe,CAAC,EAC1CC,EAAgB,KAAK,MAAMA,EAAgB,CAAC,EAC5C,IAAIG,EAAc,SAAS,cAAc,QAAQ,EAC7CC,EAAeD,EAAY,WAAW,IAAI,EAC9CA,EAAY,MAAQJ,EACpBI,EAAY,OAASH,EACrBI,EAAa,UAAUH,EAAW,EAAG,EAAGF,EAAcC,CAAa,EAEnEjB,EAAO,OAAO,EAAG,EAAG,CAChB,UAAWqB,EACX,MAAOL,EACP,OAAQC,CACZ,CAAC,EAEDC,EAAYE,EACZD,EAAaE,CACjB,CACA,OAAOrB,CACX,EAOA,oBAAqB,SAAU1M,EAAQ,CACnC,QAASpY,EAAI,EAAGA,EAAI,KAAK,OAAO,OAAQA,IACjC,KAAK,OAAOA,CAAC,EAAE,YACd,KAAK,OAAOA,CAAC,EAAE,UAAU,OAAO,OAAS,EACzC,KAAK,OAAOA,CAAC,EAAE,UAAU,OAAO,MAAQ,EAErCoY,GAUCA,EAAO,WAAW,iBAAkB,CAChC,UAAW,KAAK,OAAOpY,CAAC,EAAE,SAC9B,CAAC,EAKjB,CACJ,CAAC,CAEL,EAAEzB,CAAa,EAoCd,SAASE,EAAG,CAGbA,EAAE,qBAAuB,SAAS0f,EAAUrL,EAAasT,EAAM5V,EAAQ,CACnE/R,EAAE,QAAQ,MAAM,uDAAuD,CAC3E,CAEA,EAAEF,CAAa,EAoCd,SAAUE,EAAG,CAadA,EAAE,YAAc,CACZ,KAAQ,EACR,MAAQ,EACR,MAAQ,EACR,KAAQ,CACZ,EA6BAA,EAAE,OAAS,SAAUD,EAAU,CAE3B,IAAI2K,EAAQ,KAEZ1K,EAAE,YAAY,KAAM,IAAK,EAEzBA,EAAE,OAAQ,GAAM,KAAM,CAElB,QAAoB,KACpB,QAAoB,KACpB,SAAoB,KACpB,SAAoB,KACpB,QAAoB,KACpB,mBAAoBA,EAAE,iBAAiB,mBACvC,mBAAoBA,EAAE,iBAAiB,mBAMvC,UAAoB,EAMpB,WAAoB,IACpB,QAAoB,KACpB,UAAoB,KACpB,QAAoB,KACpB,QAAoB,KACpB,OAAoB,KACpB,QAAoB,KACpB,OAAoB,KACpB,SAAoB,IAExB,EAAGD,CAAQ,EAOX,KAAK,QAAUA,EAAQ,SAAWC,EAAE,mBAAmB,KAAK,EAItDD,EAAQ,UACV,KAAK,QAAeC,EAAE,qBAAsB,KAAK,OAAQ,EACzD,KAAK,SAAeA,EAAE,qBAAsB,KAAK,QAAS,EAC1D,KAAK,SAAeA,EAAE,qBAAsB,KAAK,QAAS,EAC1D,KAAK,QAAeA,EAAE,qBAAsB,KAAK,OAAQ,EAEzD,KAAK,QAAQ,IACb,KAAK,SAAS,IACd,KAAK,SAAS,IACd,KAAK,QAAQ,IACT,KAAK,QAITA,EAAE,4BAA6B,KAAK,OAAQ,EAC5CA,EAAE,4BAA6B,KAAK,QAAS,EAC7CA,EAAE,4BAA6B,KAAK,QAAS,EAC7CA,EAAE,4BAA6B,KAAK,OAAQ,EAE5C,KAAK,QAAQ,MAAM,SAAW,WAC9BA,EAAE,0BAA2B,KAAK,OAAQ,EAE1C,KAAK,SAAS,MAAM,SACpB,KAAK,SAAS,MAAM,SACpB,KAAK,QAAQ,MAAM,SACf,WAEJ,KAAK,SAAS,MAAM,IACpB,KAAK,SAAS,MAAM,IACpB,KAAK,QAAQ,MAAM,IACf,MAEJ,KAAK,SAAS,MAAM,KACpB,KAAK,SAAS,MAAM,KACpB,KAAK,QAAQ,MAAM,KACf,MAEJ,KAAK,SAAS,MAAM,WACpB,KAAK,QAAQ,MAAM,WACf,SAEJ,KAAK,QAAQ,YAAa,KAAK,OAAQ,EACvC,KAAK,QAAQ,YAAa,KAAK,QAAS,EACxC,KAAK,QAAQ,YAAa,KAAK,QAAS,EACxC,KAAK,QAAQ,YAAa,KAAK,OAAQ,GAI3C,KAAK,WAAW,QAAS,KAAK,OAAO,EACrC,KAAK,WAAW,UAAW,KAAK,SAAS,EACzC,KAAK,WAAW,QAAS,KAAK,OAAO,EACrC,KAAK,WAAW,QAAS,KAAK,OAAO,EACrC,KAAK,WAAW,OAAQ,KAAK,MAAM,EACnC,KAAK,WAAW,QAAS,KAAK,OAAO,EACrC,KAAK,WAAW,OAAQ,KAAK,MAAM,EAOnC,KAAK,aAAeA,EAAE,YAAY,MAGlC,KAAK,cAAiB,KAEtB,KAAK,WAAiB,GAEtB,KAAK,QAAQ,MAAM,QAAW,eAC9B,KAAK,QAAQ,MAAM,SAAW,WAC9B,KAAK,QAAQ,MAAiB,KAAK,QAOnC,KAAK,QAAU,IAAIA,EAAE,aAAa,CAE9B,SAAoB,iBACpB,QAAoB,KAAK,QACzB,mBAAoB,KAAK,mBACzB,mBAAoB,KAAK,mBAEzB,aAAc,SAAUmD,EAAQ,CACvBA,EAAM,sBACPykB,EAAMld,EAAO1K,EAAE,YAAY,IAAK,EAWhC0K,EAAM,WAAY,QAAS,CAAE,cAAevH,EAAM,aAAc,CAAE,GACzDA,EAAM,eACfykB,EAAMld,EAAO1K,EAAE,YAAY,KAAM,CAEzC,EAEA,aAAc,SAAWmD,EAAQ,CAC7BuH,EAAM,QAAQ,aAAcvH,CAAM,EAWlCuH,EAAM,WAAY,QAAS,CAAE,cAAevH,EAAM,aAAc,CAAE,CACtE,EAEA,aAAc,SAAUA,EAAQ,CAC5B0kB,EAAOnd,EAAO1K,EAAE,YAAY,KAAM,EAC7BmD,EAAM,sBAWPuH,EAAM,WAAY,OAAQ,CAAE,cAAevH,EAAM,aAAc,CAAE,CAEzE,EAEA,YAAa,SAAWA,EAAQ,CAC5BuH,EAAM,QAAQ,aAAcvH,CAAM,EAWlCuH,EAAM,WAAY,OAAQ,CAAE,cAAevH,EAAM,aAAc,CAAE,CACrE,EAEA,aAAc,SAAWA,EAAQ,CAC7BykB,EAAMld,EAAO1K,EAAE,YAAY,IAAK,EAWhC0K,EAAM,WAAY,QAAS,CAAE,cAAevH,EAAM,aAAc,CAAE,CACtE,EAEA,eAAgB,SAAUA,EAAQ,CACzBA,EAAM,sBAAwBA,EAAM,uBACrC0kB,EAAOnd,EAAO1K,EAAE,YAAY,KAAM,EAWlC0K,EAAM,WAAY,UAAW,CAAE,cAAevH,EAAM,aAAc,CAAE,GAC5DA,EAAM,qBACd0kB,EAAOnd,EAAO1K,EAAE,YAAY,KAAM,EAElC4nB,EAAMld,EAAO1K,EAAE,YAAY,KAAM,CAEzC,EAEA,aAAc,SAAUmD,EAAQ,CACvBA,EAAM,OAWPuH,EAAM,WAAW,QAAS,CAAE,cAAevH,EAAM,aAAc,CAAC,CAExE,EAEA,WAAY,SAAUA,EAAO,CAEdA,EAAM,UAAb,IAWAuH,EAAM,WAAY,QAAS,CAAE,cAAevH,EAAM,aAAc,CAAE,EAWlEuH,EAAM,WAAY,UAAW,CAAE,cAAevH,EAAM,aAAc,CAAE,EAEpEA,EAAM,eAAiB,IAEvBA,EAAM,eAAiB,EAE/B,CAEJ,CAAC,EAED0kB,EAAO,KAAM7nB,EAAE,YAAY,IAAK,CACpC,EAEAA,EAAE,OAAQA,EAAE,OAAO,UAAWA,EAAE,YAAY,UAAuD,CAO/F,iBAAkB,UAAW,CACzB4nB,EAAM,KAAM5nB,EAAE,YAAY,KAAM,CACpC,EAOA,gBAAiB,UAAW,CACxB6nB,EAAO,KAAM7nB,EAAE,YAAY,IAAK,CACpC,EAKA,QAAS,UAAU,CACf,KAAK,gBAAgB,EACrB,KAAK,QAAQ,SAAW,GACxB,KAAK,QAAQ,YAAY,EAAK,EAC9BA,EAAE,kBAAmB,KAAK,QAAS,GAAK,EAAK,CACjD,EAKA,OAAQ,UAAU,CACd,KAAK,QAAQ,SAAW,GACxB,KAAK,QAAQ,YAAY,EAAI,EAC7BA,EAAE,kBAAmB,KAAK,QAAS,EAAK,EAAK,EAC7C,KAAK,iBAAiB,CAC1B,EAEA,QAAS,UAAW,CACZ,KAAK,UACL,KAAK,QAAQ,YAAY,KAAK,OAAO,EACrC,KAAK,QAAU,MAEf,KAAK,WACL,KAAK,QAAQ,YAAY,KAAK,QAAQ,EACtC,KAAK,SAAW,MAEhB,KAAK,WACL,KAAK,QAAQ,YAAY,KAAK,QAAQ,EACtC,KAAK,SAAW,MAEhB,KAAK,UACL,KAAK,QAAQ,YAAY,KAAK,OAAO,EACrC,KAAK,QAAU,MAEnB,KAAK,kBAAkB,EACvB,KAAK,QAAQ,QAAQ,EACrB,KAAK,QAAU,IACnB,CAEJ,CAAC,EAGD,SAAS8nB,EAAcpS,EAAS,CAC5B1V,EAAE,sBAAsB,UAAU,CAC9B+nB,EAAYrS,CAAO,CACvB,CAAC,CACL,CAEA,SAASqS,EAAYrS,EAAS,CAC1B,IAAImF,EACAC,EACAnX,EAEC+R,EAAO,aACRmF,EAAc7a,EAAE,IAAI,EACpB8a,EAAcD,EAAcnF,EAAO,cACnC/R,EAAc,EAAMmX,EAAYpF,EAAO,WACvC/R,EAAc,KAAK,IAAK,EAAKA,CAAQ,EACrCA,EAAc,KAAK,IAAK,EAAKA,CAAQ,EAEjC+R,EAAO,UACP1V,EAAE,kBAAmB0V,EAAO,SAAU/R,EAAS,EAAK,EAEnDA,EAAU,GAEXmkB,EAAcpS,CAAO,EAGjC,CAEA,SAASsS,EAAatS,EAAS,CAC3BA,EAAO,WAAa,GACpBA,EAAO,cAAgB1V,EAAE,IAAI,EAAI0V,EAAO,UACxC,OAAO,WAAY,UAAU,CACzBoS,EAAcpS,CAAO,CACzB,EAAGA,EAAO,SAAU,CACxB,CAEA,SAASuS,EAAYvS,EAAS,CAC1BA,EAAO,WAAa,GAChBA,EAAO,UACP1V,EAAE,kBAAmB0V,EAAO,SAAU,EAAK,EAAK,CAExD,CAEA,SAASkS,EAAMlS,EAAQwS,EAAW,CAE1BxS,EAAO,QAAQ,WAIdwS,GAAYloB,EAAE,YAAY,OAC1B0V,EAAO,eAAiB1V,EAAE,YAAY,OACvCioB,EAAYvS,CAAO,EACnBA,EAAO,aAAe1V,EAAE,YAAY,OAGnCkoB,GAAYloB,EAAE,YAAY,OAC1B0V,EAAO,eAAiB1V,EAAE,YAAY,QACnC0V,EAAO,WACPA,EAAO,SAAS,MAAM,WAAa,IAEvCA,EAAO,aAAe1V,EAAE,YAAY,OAGnCkoB,GAAYloB,EAAE,YAAY,MAC1B0V,EAAO,eAAiB1V,EAAE,YAAY,QACnC0V,EAAO,UACPA,EAAO,QAAQ,MAAM,WAAa,IAEtCA,EAAO,aAAe1V,EAAE,YAAY,MAE5C,CAGA,SAAS6nB,EAAOnS,EAAQwS,EAAW,CAE3BxS,EAAO,QAAQ,WAIdwS,GAAYloB,EAAE,YAAY,OAC1B0V,EAAO,eAAiB1V,EAAE,YAAY,OACnC0V,EAAO,UACPA,EAAO,QAAQ,MAAM,WAAa,UAEtCA,EAAO,aAAe1V,EAAE,YAAY,OAGnCkoB,GAAYloB,EAAE,YAAY,OAC1B0V,EAAO,eAAiB1V,EAAE,YAAY,QACnC0V,EAAO,WACPA,EAAO,SAAS,MAAM,WAAa,UAEvCA,EAAO,aAAe1V,EAAE,YAAY,OAGnCkoB,GAAYloB,EAAE,YAAY,MAC1B0V,EAAO,eAAiB1V,EAAE,YAAY,QACvCgoB,EAAatS,CAAO,EACpBA,EAAO,aAAe1V,EAAE,YAAY,MAE5C,CAIA,EAAGF,CAAc,EAoChB,SAAUE,EAAG,CAUdA,EAAE,YAAc,SAAUD,EAAU,CAEhCC,EAAE,OAAQ,GAAM,KAAM,CAMlB,QAAoB,CAAC,EACrB,mBAAoBA,EAAE,iBAAiB,mBACvC,mBAAoBA,EAAE,iBAAiB,mBACvC,UAAoB,EACxB,EAAGD,CAAQ,EAGX,IAAI+Y,EAAU,KAAK,QAAQ,OAAO,CAAC,CAAC,EAChCpO,EAAQ,KACRnJ,EAUJ,GAHA,KAAK,QAAUxB,EAAQ,SAAWC,EAAE,mBAAoB,KAAM,EAG1D,CAACD,EAAQ,MAMT,IALA,KAAK,QAAQ,MAAM,QAAU,eAKvBwB,EAAI,EAAGA,EAAIuX,EAAQ,OAAQvX,IAC7B,KAAK,QAAQ,YAAauX,EAASvX,CAAE,EAAE,OAAQ,EAIvDvB,EAAE,0BAA2B,KAAK,OAAQ,EAO1C,KAAK,QAAU,IAAIA,EAAE,aAAa,CAC9B,SAAoB,sBACpB,QAAoB,KAAK,QACzB,mBAAoB,KAAK,mBACzB,mBAAoB,KAAK,mBACzB,aAAc,SAAWmD,EAAQ,CAC7B,IAAI5B,EACJ,IAAMA,EAAI,EAAGA,EAAImJ,EAAM,QAAQ,OAAQnJ,IACnCmJ,EAAM,QAASnJ,CAAE,EAAE,iBAAiB,CAE5C,EACA,aAAc,SAAW4B,EAAQ,CAC7B,IAAI5B,EACJ,GAAK,CAAC4B,EAAM,qBACR,IAAM5B,EAAI,EAAGA,EAAImJ,EAAM,QAAQ,OAAQnJ,IACnCmJ,EAAM,QAASnJ,CAAE,EAAE,gBAAgB,CAG/C,CACJ,CAAC,CACL,EAGAvB,EAAE,YAAY,UAAY,CAQtB,UAAW,SAAU0V,EAAQ,CACzB,KAAK,QAAQ,KAAKA,CAAM,EACxB,KAAK,QAAQ,YAAYA,EAAO,OAAO,CAC3C,EAQA,aAAc,UAAW,CACrB,KAAK,QAAQ,aAAc,CAAE,YAAa,KAAK,OAAQ,CAAE,CAC7D,EAQA,aAAc,UAAW,CACrB,KAAK,QAAQ,aAAc,CAAE,YAAa,KAAK,OAAQ,CAAE,CAC7D,EAEA,QAAS,UAAW,CAChB,KAAO,KAAK,QAAQ,QAAQ,CACxB,IAAIA,EAAS,KAAK,QAAQ,IAAI,EAC9B,KAAK,QAAQ,YAAYA,EAAO,OAAO,EACvCA,EAAO,QAAQ,CACnB,CACA,KAAK,QAAQ,QAAQ,EACrB,KAAK,QAAU,IACnB,CACJ,CAGA,EAAG5V,CAAc,EAoChB,SAASE,EAAG,CAoBbA,EAAE,KAAO,SAASsa,EAAGC,EAAGH,EAAOC,EAAQ2D,EAAS,CAM5C,KAAK,EAAI,OAAQ1D,GAAO,SAAWA,EAAI,EAMvC,KAAK,EAAI,OAAQC,GAAO,SAAWA,EAAI,EAMvC,KAAK,MAAS,OAAQH,GAAW,SAAWA,EAAQ,EAMpD,KAAK,OAAS,OAAQC,GAAY,SAAWA,EAAS,EAOtD,KAAK,QAAU,OAAQ2D,GAAa,SAAWA,EAAU,EAGzD,KAAK,QAAUhe,EAAE,eAAe,KAAK,QAAS,GAAG,EACjD,IAAImoB,EAAY1J,EACZ,KAAK,SAAW,KAChB0J,EAAa,KAAK,YAAY,EAC9B,KAAK,EAAIA,EAAW,EACpB,KAAK,EAAIA,EAAW,EACpB1J,EAAW,KAAK,OAChB,KAAK,OAAS,KAAK,MACnB,KAAK,MAAQA,EACb,KAAK,SAAW,KACT,KAAK,SAAW,KACvB0J,EAAa,KAAK,eAAe,EACjC,KAAK,EAAIA,EAAW,EACpB,KAAK,EAAIA,EAAW,EACpB,KAAK,SAAW,KACT,KAAK,SAAW,KACvBA,EAAa,KAAK,cAAc,EAChC,KAAK,EAAIA,EAAW,EACpB,KAAK,EAAIA,EAAW,EACpB1J,EAAW,KAAK,OAChB,KAAK,OAAS,KAAK,MACnB,KAAK,MAAQA,EACb,KAAK,SAAW,GAExB,EAWAze,EAAE,KAAK,YAAc,SAASooB,EAASC,EAAUC,EAAY,CACzD,IAAIlO,EAAQgO,EAAQ,WAAWC,CAAQ,EACnChO,EAAS+N,EAAQ,WAAWE,CAAU,EACtCC,EAAOF,EAAS,MAAMD,CAAO,EAC7BI,EAAU,KAAK,KAAKD,EAAK,EAAIA,EAAK,CAAC,EACvC,OAAIA,EAAK,EAAI,EACTC,GAAW,KAAK,GACTD,EAAK,EAAI,IAChBC,GAAW,EAAI,KAAK,IAEjB,IAAIxoB,EAAE,KACTooB,EAAQ,EACRA,EAAQ,EACRhO,EACAC,EACAmO,EAAU,KAAK,GAAK,GAAG,CAC/B,EAGAxoB,EAAE,KAAK,UAAY,CAKf,MAAO,UAAW,CACd,OAAO,IAAIA,EAAE,KACT,KAAK,EACL,KAAK,EACL,KAAK,MACL,KAAK,OACL,KAAK,OAAO,CACpB,EAOA,eAAgB,UAAW,CACvB,OAAO,KAAK,MAAQ,KAAK,MAC7B,EASA,WAAY,UAAW,CACnB,OAAO,IAAIA,EAAE,MACT,KAAK,EACL,KAAK,CACT,CACJ,EASA,eAAgB,UAAW,CACvB,OAAO,IAAIA,EAAE,MAAM,KAAK,EAAI,KAAK,MAAO,KAAK,EAAI,KAAK,MAAM,EACvD,OAAO,KAAK,QAAS,KAAK,WAAW,CAAC,CAC/C,EASA,YAAa,UAAW,CACpB,OAAO,IAAIA,EAAE,MAAM,KAAK,EAAI,KAAK,MAAO,KAAK,CAAC,EACzC,OAAO,KAAK,QAAS,KAAK,WAAW,CAAC,CAC/C,EASA,cAAe,UAAW,CACtB,OAAO,IAAIA,EAAE,MAAM,KAAK,EAAG,KAAK,EAAI,KAAK,MAAM,EAC1C,OAAO,KAAK,QAAS,KAAK,WAAW,CAAC,CAC/C,EAQA,UAAW,UAAW,CAClB,OAAO,IAAIA,EAAE,MACT,KAAK,EAAI,KAAK,MAAQ,EACtB,KAAK,EAAI,KAAK,OAAS,CAC3B,EAAE,OAAO,KAAK,QAAS,KAAK,WAAW,CAAC,CAC5C,EAQA,QAAS,UAAW,CAChB,OAAO,IAAIA,EAAE,MAAM,KAAK,MAAO,KAAK,MAAM,CAC9C,EAQA,OAAQ,SAASqI,EAAO,CACpB,OAAQA,aAAiBrI,EAAE,MACvB,KAAK,IAAMqI,EAAM,GACjB,KAAK,IAAMA,EAAM,GACjB,KAAK,QAAUA,EAAM,OACrB,KAAK,SAAWA,EAAM,QACtB,KAAK,UAAYA,EAAM,OAC/B,EAUA,MAAO,SAASiT,EAAQ,CACpB,OAAO,IAAItb,EAAE,KACT,KAAK,EAAIsb,EACT,KAAK,EAAIA,EACT,KAAK,MAAQA,EACb,KAAK,OAASA,EACd,KAAK,OAAO,CACpB,EAQA,UAAW,SAAS9J,EAAO,CACvB,OAAO,IAAIxR,EAAE,KACT,KAAK,EAAIwR,EAAM,EACf,KAAK,EAAIA,EAAM,EACf,KAAK,MACL,KAAK,OACL,KAAK,OAAO,CACpB,EAQA,MAAO,SAASgJ,EAAM,CAClB,IAAIiO,EAAkB,KAAK,eAAe,EACtCC,EAAmBlO,EAAK,eAAe,EAEvCmO,EAAO,KAAK,IAAIF,EAAgB,EAAGC,EAAiB,CAAC,EACrDE,EAAM,KAAK,IAAIH,EAAgB,EAAGC,EAAiB,CAAC,EACpDG,EAAQ,KAAK,IACbJ,EAAgB,EAAIA,EAAgB,MACpCC,EAAiB,EAAIA,EAAiB,KAAK,EAC3CI,EAAS,KAAK,IACdL,EAAgB,EAAIA,EAAgB,OACpCC,EAAiB,EAAIA,EAAiB,MAAM,EAEhD,OAAO,IAAI1oB,EAAE,KACT2oB,EACAC,EACAC,EAAQF,EACRG,EAASF,CAAG,CACpB,EASA,aAAc,SAASpO,EAAM,CAQzB,IAAIiG,EAAU,MAEVsI,EAAqB,CAAC,EAEtBC,EAAc,KAAK,WAAW,EAC9BxO,EAAK,cAAcwO,EAAavI,CAAO,GACvCsI,EAAmB,KAAKC,CAAW,EAEvC,IAAIC,EAAe,KAAK,YAAY,EAChCzO,EAAK,cAAcyO,EAAcxI,CAAO,GACxCsI,EAAmB,KAAKE,CAAY,EAExC,IAAIC,EAAiB,KAAK,cAAc,EACpC1O,EAAK,cAAc0O,EAAgBzI,CAAO,GAC1CsI,EAAmB,KAAKG,CAAc,EAE1C,IAAIC,EAAkB,KAAK,eAAe,EACtC3O,EAAK,cAAc2O,EAAiB1I,CAAO,GAC3CsI,EAAmB,KAAKI,CAAe,EAG3C,IAAIC,EAAc5O,EAAK,WAAW,EAC9B,KAAK,cAAc4O,EAAa3I,CAAO,GACvCsI,EAAmB,KAAKK,CAAW,EAEvC,IAAIC,EAAe7O,EAAK,YAAY,EAChC,KAAK,cAAc6O,EAAc5I,CAAO,GACxCsI,EAAmB,KAAKM,CAAY,EAExC,IAAIC,EAAiB9O,EAAK,cAAc,EACpC,KAAK,cAAc8O,EAAgB7I,CAAO,GAC1CsI,EAAmB,KAAKO,CAAc,EAE1C,IAAIC,EAAkB/O,EAAK,eAAe,EACtC,KAAK,cAAc+O,EAAiB9I,CAAO,GAC3CsI,EAAmB,KAAKQ,CAAe,EAK3C,QAFIC,EAAe,KAAK,aAAa,EACjCC,EAAejP,EAAK,aAAa,EAC5BjZ,EAAI,EAAGA,EAAIioB,EAAa,OAAQjoB,IAErC,QADImoB,EAAcF,EAAajoB,CAAC,EACvBkG,EAAI,EAAGA,EAAIgiB,EAAa,OAAQhiB,IAAK,CAC1C,IAAIkiB,EAAcF,EAAahiB,CAAC,EAC5BmiB,EAAYC,EAAgBH,EAAY,CAAC,EAAGA,EAAY,CAAC,EACzDC,EAAY,CAAC,EAAGA,EAAY,CAAC,CAAC,EAC9BC,GACAb,EAAmB,KAAKa,CAAS,CAEzC,CAIJ,SAASC,EAAgBvhB,EAAGC,EAAGN,EAAGuX,GAAG,CAEjC,IAAIsK,GAAWvhB,EAAE,MAAMD,CAAC,EACpByhB,GAAWvK,GAAE,MAAMvX,CAAC,EAEpB+hB,GAAQ,CAACD,GAAS,EAAID,GAAS,EAAIA,GAAS,EAAIC,GAAS,EAC7D,GAAIC,KAAU,EACV,OAAO,KAGX,IAAI9hB,IAAK4hB,GAAS,GAAKxhB,EAAE,EAAIL,EAAE,GAAK6hB,GAAS,GAAKxhB,EAAE,EAAIL,EAAE,IAAM+hB,GAC5D9F,IAAK6F,GAAS,GAAKzhB,EAAE,EAAIL,EAAE,GAAK8hB,GAAS,GAAKzhB,EAAE,EAAIL,EAAE,IAAM+hB,GAEhE,MAAI,CAACvJ,GAAWvY,IAAKA,IAAK,EAAIuY,GAC1B,CAACA,GAAWyD,IAAKA,IAAK,EAAIzD,EACnB,IAAIzgB,EAAE,MAAMsI,EAAE,EAAI4b,GAAI4F,GAAS,EAAGxhB,EAAE,EAAI4b,GAAI4F,GAAS,CAAC,EAE1D,IACX,CAEA,GAAIf,EAAmB,SAAW,EAC9B,OAAO,KAOX,QAJIkB,EAAOlB,EAAmB,CAAC,EAAE,EAC7BmB,EAAOnB,EAAmB,CAAC,EAAE,EAC7BoB,EAAOpB,EAAmB,CAAC,EAAE,EAC7BqB,EAAOrB,EAAmB,CAAC,EAAE,EACxBsB,EAAI,EAAGA,EAAItB,EAAmB,OAAQsB,IAAK,CAChD,IAAIrnB,EAAQ+lB,EAAmBsB,CAAC,EAC5BrnB,EAAM,EAAIinB,IACVA,EAAOjnB,EAAM,GAEbA,EAAM,EAAIknB,IACVA,EAAOlnB,EAAM,GAEbA,EAAM,EAAImnB,IACVA,EAAOnnB,EAAM,GAEbA,EAAM,EAAIonB,IACVA,EAAOpnB,EAAM,EAErB,CACA,OAAO,IAAIhD,EAAE,KAAKiqB,EAAME,EAAMD,EAAOD,EAAMG,EAAOD,CAAI,CAC1D,EAGA,aAAc,UAAW,CACrB,IAAI/B,EAAU,KAAK,WAAW,EAC1BC,EAAW,KAAK,YAAY,EAC5BC,EAAa,KAAK,cAAc,EAChCgC,EAAc,KAAK,eAAe,EACtC,MAAO,CAAC,CAAClC,EAASC,CAAQ,EACtB,CAACA,EAAUiC,CAAW,EACtB,CAACA,EAAahC,CAAU,EACxB,CAACA,EAAYF,CAAO,CAAC,CAC7B,EAUA,OAAQ,SAASpK,EAAS5Z,EAAO,CAE7B,GADA4Z,EAAUhe,EAAE,eAAege,EAAS,GAAG,EACnCA,IAAY,EACZ,OAAO,KAAK,MAAM,EAGtB5Z,EAAQA,GAAS,KAAK,UAAU,EAChC,IAAI+jB,EAAa,KAAK,WAAW,EAAE,OAAOnK,EAAS5Z,CAAK,EACpDmmB,EAAc,KAAK,YAAY,EAAE,OAAOvM,EAAS5Z,CAAK,EAEtDmkB,EAAOgC,EAAY,MAAMpC,CAAU,EAEvCI,EAAOA,EAAK,MAAM,SAASjO,EAAG,CAC1B,IAAImG,EAAU,MACd,OAAO,KAAK,IAAInG,CAAC,EAAImG,EAAU,EAAInG,CACvC,CAAC,EACD,IAAIkO,EAAU,KAAK,KAAKD,EAAK,EAAIA,EAAK,CAAC,EACvC,OAAIA,EAAK,EAAI,EACTC,GAAW,KAAK,GACTD,EAAK,EAAI,IAChBC,GAAW,EAAI,KAAK,IAEjB,IAAIxoB,EAAE,KACTmoB,EAAW,EACXA,EAAW,EACX,KAAK,MACL,KAAK,OACLK,EAAU,KAAK,GAAK,GAAG,CAC/B,EAOA,eAAgB,UAAW,CACvB,GAAI,KAAK,UAAY,EACjB,OAAO,KAAK,MAAM,EAEtB,IAAIJ,EAAU,KAAK,WAAW,EAC1BC,EAAW,KAAK,YAAY,EAC5BC,EAAa,KAAK,cAAc,EAChCgC,EAAc,KAAK,eAAe,EAClCL,EAAO,KAAK,IAAI7B,EAAQ,EAAGC,EAAS,EAAGC,EAAW,EAAGgC,EAAY,CAAC,EAClEJ,EAAO,KAAK,IAAI9B,EAAQ,EAAGC,EAAS,EAAGC,EAAW,EAAGgC,EAAY,CAAC,EAClEH,EAAO,KAAK,IAAI/B,EAAQ,EAAGC,EAAS,EAAGC,EAAW,EAAGgC,EAAY,CAAC,EAClEF,EAAO,KAAK,IAAIhC,EAAQ,EAAGC,EAAS,EAAGC,EAAW,EAAGgC,EAAY,CAAC,EACtE,OAAO,IAAItqB,EAAE,KACTiqB,EACAE,EACAD,EAAOD,EACPG,EAAOD,CAAI,CACnB,EAOA,sBAAuB,UAAW,CAC9B,IAAIK,EAAc,KAAK,eAAe,EAClClQ,EAAI,KAAK,MAAMkQ,EAAY,CAAC,EAC5BjQ,EAAI,KAAK,MAAMiQ,EAAY,CAAC,EAC5BpQ,EAAQ,KAAK,KAAKoQ,EAAY,MAAQA,EAAY,EAAIlQ,CAAC,EACvDD,EAAS,KAAK,KAAKmQ,EAAY,OAASA,EAAY,EAAIjQ,CAAC,EAC7D,OAAO,IAAIva,EAAE,KAAKsa,EAAGC,EAAGH,EAAOC,CAAM,CACzC,EAUA,cAAe,SAASrX,EAAOynB,EAAS,CACpCA,EAAUA,GAAW,EAGrB,IAAIrC,EAAU,KAAK,WAAW,EAC1BC,EAAW,KAAK,YAAY,EAC5BC,EAAa,KAAK,cAAc,EAChCoC,EAAUrC,EAAS,MAAMD,CAAO,EAChCuC,EAAWrC,EAAW,MAAMF,CAAO,EAEvC,OAASplB,EAAM,EAAIolB,EAAQ,GAAKsC,EAAQ,GACnC1nB,EAAM,EAAIolB,EAAQ,GAAKsC,EAAQ,GAAK,CAACD,IAEpCznB,EAAM,EAAIqlB,EAAS,GAAKqC,EAAQ,GACjC1nB,EAAM,EAAIqlB,EAAS,GAAKqC,EAAQ,GAAKD,IAEpCznB,EAAM,EAAIolB,EAAQ,GAAKuC,EAAS,GACjC3nB,EAAM,EAAIolB,EAAQ,GAAKuC,EAAS,GAAK,CAACF,IAErCznB,EAAM,EAAIslB,EAAW,GAAKqC,EAAS,GACpC3nB,EAAM,EAAIslB,EAAW,GAAKqC,EAAS,GAAKF,CACjD,EAQA,SAAU,UAAW,CACjB,MAAO,IACF,KAAK,MAAM,KAAK,EAAI,GAAG,EAAI,IAAO,KAClC,KAAK,MAAM,KAAK,EAAI,GAAG,EAAI,IAAO,KAClC,KAAK,MAAM,KAAK,MAAQ,GAAG,EAAI,IAAO,IACtC,KAAK,MAAM,KAAK,OAAS,GAAG,EAAI,IAAO,KACvC,KAAK,MAAM,KAAK,QAAU,GAAG,EAAI,IAAO,MAEjD,CACJ,CAGA,EAAE3qB,CAAa,EAoCd,SAAWE,EAAI,CAGhB,IAAIyK,EAAO,CAAC,EA0BZzK,EAAE,eAAiB,SAAWD,EAAU,CAEpC,IAAI2K,EAAc,KACdiP,EAAc5Z,EAAQ,OACtB6d,EAAc5d,EAAE,eAAgB2Z,EAAO,OAAQ,EAC/C7X,EACAW,EACAlB,EAmHJ,IA/GMxB,EAAQ,KACVA,EAAQ,GAAkB,kBAAoBC,EAAE,IAAI,EACpD,KAAK,QAAqBA,EAAE,mBAAoB,KAAM,EACtD,KAAK,QAAQ,GAAaD,EAAQ,GAClC,KAAK,QAAQ,UAAa,kBAG9BA,EAAUC,EAAE,OAAQ,GAAM,CACtB,UAAYA,EAAE,iBAAiB,wBAC/B,SAAYA,EAAE,iBAAiB,uBAC/B,OAAYA,EAAE,iBAAiB,qBAC/B,mBAAqBA,EAAE,iBAAiB,kBAC5C,EAAGD,EAAS,CACR,QAAwB,KAAK,OACjC,CAAE,EAEFC,EAAE,OAAQ,KAAMD,CAAQ,EAExB0K,EAAK,KAAK,EAAE,EAAI,CACZ,UAAqB,EACzB,EAEA,KAAK,cAAgB,KAAK,OAAO,cAEjC,KAAK,QAAQ,SAAW,EAExBhI,EAAQ,KAAK,QAAQ,MACrBA,EAAM,UAAgB,MACtBA,EAAM,YAAgB,MACtBA,EAAM,aAAgB,MACtBA,EAAM,WAAgB,MACtBA,EAAM,KAAgB,MACtBA,EAAM,OAAgB,MACtBA,EAAM,OAAgB,MACtBA,EAAM,WAAgB,OACtBA,EAAM,SAAgB,WAEtBzC,EAAE,0BAA2B,KAAK,OAAQ,EAE1CA,EAAE,kBAAmB,KAAK,QAAS,EAAI,EAEvC,KAAK,OAAS2Z,EACd,KAAK,QAAU,IAAI3Z,EAAE,aAAc,CAC/B,SAAgB,yBAChB,QAAgB,KAAK,QACrB,aAAgBA,EAAE,SAAU,KAAM4qB,CAAa,EAC/C,YAAgB5qB,EAAE,SAAU,KAAM6qB,CAAY,EAC9C,cAAgB7qB,EAAE,SAAU,KAAM8qB,CAAc,EAChD,aAAgB9qB,EAAE,SAAU,KAAM+qB,CAAa,EAC/C,aAAgB/qB,EAAE,SAAU,KAAMgrB,CAAa,EAC/C,eAAgBhrB,EAAE,SAAU,KAAM6K,CAAU,EAC5C,WAAgB7K,EAAE,SAAU,KAAM+K,CAAW,EAC7C,uBAAwB,SAAU0E,EAAW,CACrCA,EAAU,YAAc,UACxBA,EAAU,eAAiB,GAEnC,CACJ,CAAE,EAIG1P,EAAQ,OAASA,EAAQ,QAC1B,KAAK,QAAQ,MAAM,MAASA,EAAQ,MAAQ,KAC5C,KAAK,QAAQ,MAAM,OAASA,EAAQ,OAAS,KAC7C4Z,EAAO,WACH,KAAK,QACL,CAAE,OAAQ3Z,EAAE,cAAc,WAAY,CAC1C,GAEsBD,EAAQ,SAAzB,cACD,KAAK,QAAQ,MAAM,MACf6d,EAAW,EACX7d,EAAQ,UACR4Z,EAAO,YAAY,OACjB,GAAKA,EAAO,YAAY,OAAW,KAEzC,KAAK,QAAQ,MAAM,OACfiE,EAAW,EACX7d,EAAQ,UACR,KAEJ4Z,EAAO,WACH,KAAK,QACL,CAAE,OAAQ3Z,EAAE,cAAc,WAAY,CAC1C,IAEA,KAAK,QAAQ,MAAM,OACf4d,EAAW,EACX7d,EAAQ,UACR4Z,EAAO,YAAY,OACjB,GAAKA,EAAO,YAAY,OAAW,KAEzC,KAAK,QAAQ,MAAM,MACfiE,EAAW,EACX7d,EAAQ,UACR,KAEJ4Z,EAAO,WACH,KAAK,QACL,CAAE,OAAQ3Z,EAAE,cAAc,QAAS,CACvC,GAKR,KAAK,WAAe4d,EAAW,EAAI,KAAK,UAAc,EACtD,KAAK,YAAgBA,EAAW,EAAI,KAAK,UAAc,EACvD,KAAK,OAAS,CAAC,EACf,KAAK,YAAc,CAAC,EAGdrc,EAAI,EAAGA,EAAIoY,EAAO,YAAY,OAAQpY,IAExCO,EAAU9B,EAAE,mBAAoB,KAAM,EACtC8B,EAAQ,GAAK,KAAK,QAAQ,GAAK,IAAMP,EAErCO,EAAQ,MAAM,MAAgB4I,EAAM,WAAa,KACjD5I,EAAQ,MAAM,OAAgB4I,EAAM,YAAc,KAClD5I,EAAQ,MAAM,QAAgB,SAC9BA,EAAQ,MAAM,MAAgB,OAC9BA,EAAQ,MAAM,SAAgB,OAC9BA,EAAQ,MAAM,QAAgB,MAC9B9B,EAAE,0BAA2B8B,CAAQ,EACrC9B,EAAE,4BAA6B8B,CAAQ,EAEvC,KAAK,QAAQ,YAAaA,CAAQ,EAElCA,EAAQ,YAAc,GAEtB,KAAK,OAAO,KAAMA,CAAQ,EAG9BmpB,EAAY,KAAM,KAAK,SAAW,WAAarN,EAAW,EAAIA,EAAW,EAAG,CAAE,EAC9E,KAAK,SAAU,CAAE,CAErB,EAGA5d,EAAE,eAAe,UAAY,CAKzB,SAAU,SAAWgZ,EAAO,CACxB,IAAIlX,EAAe,KAAK,QAAQ,cAAc,IAAM,KAAK,QAAQ,GAAK,IAAMkX,CAAK,EAC7E4E,EAAe5d,EAAE,eAAgB,KAAK,OAAO,MAAO,EACpDkrB,EAAe,OAAQ,KAAK,QAAQ,MAAM,MAAM,QAAS,KAAM,EAAG,CAAE,EACpEC,EAAe,OAAQ,KAAK,QAAQ,MAAM,OAAO,QAAS,KAAM,EAAG,CAAE,EACrEC,EAAe,CAAC,OAAQ,KAAK,QAAQ,MAAM,WAAW,QAAS,KAAM,EAAG,CAAE,EAC1EC,EAAe,CAAC,OAAQ,KAAK,QAAQ,MAAM,UAAU,QAAS,KAAM,EAAG,CAAE,EACzEpoB,EAEC,KAAK,kBAAoBnB,IACrB,KAAK,kBACN,KAAK,gBAAgB,MAAM,WAAa,QAE5C,KAAK,gBAAkBA,EACvB,KAAK,gBAAgB,MAAM,WAAa,OAElB,KAAK,SAAtB,cAEDmB,EAAW,OAAQ+V,CAAK,GAAQ,KAAK,WAAa,GAC7C/V,EAASmoB,EAAaxN,EAAW,EAAI,KAAK,YAC3C3a,EAAS,KAAK,IAAKA,EAAUioB,EAActN,EAAW,CAAI,EAC1D,KAAK,QAAQ,MAAM,WAAa,CAAC3a,EAAS,KAC1CgoB,EAAY,KAAMrN,EAAW,EAAG,CAAC3a,CAAO,GAChCA,EAASmoB,IACjBnoB,EAAS,KAAK,IAAK,EAAGA,EAAS2a,EAAW,EAAI,CAAE,EAChD,KAAK,QAAQ,MAAM,WAAa,CAAC3a,EAAS,KAC1CgoB,EAAY,KAAMrN,EAAW,EAAG,CAAC3a,CAAO,KAG5CA,EAAW,OAAQ+V,CAAK,GAAQ,KAAK,YAAc,GAC9C/V,EAASooB,EAAYzN,EAAW,EAAI,KAAK,aAC1C3a,EAAS,KAAK,IAAKA,EAAUkoB,EAAevN,EAAW,CAAI,EAC3D,KAAK,QAAQ,MAAM,UAAY,CAAC3a,EAAS,KACzCgoB,EAAY,KAAMrN,EAAW,EAAG,CAAC3a,CAAO,GAChCA,EAASooB,IACjBpoB,EAAS,KAAK,IAAK,EAAGA,EAAS2a,EAAW,EAAI,CAAE,EAChD,KAAK,QAAQ,MAAM,UAAY,CAAC3a,EAAS,KACzCgoB,EAAY,KAAMrN,EAAW,EAAG,CAAC3a,CAAO,IAIhD,KAAK,YAAc+V,EACnB+R,EAAa,KAAM,KAAM,CAAE,YAAa,KAAK,OAAQ,CAAE,EAE/D,EAKA,OAAQ,UAAY,CAChB,MAAK,EAAAtgB,EAAK,KAAK,EAAE,EAAE,SAKvB,EAEA,QAAS,UAAW,CAChB,GAAI,KAAK,YACP,QAASnK,KAAO,KAAK,YACnB,KAAK,YAAYA,CAAG,EAAE,QAAQ,EAIlC,KAAK,QAAQ,QAAQ,EAEjB,KAAK,SACL,KAAK,OAAO,cAAe,KAAK,OAAQ,CAEhD,CAEJ,EAQA,SAASsqB,EAAcznB,EAAQ,CAC3B,GAAKA,EAAM,MAAQ,CACf,IAAI6V,EAEkB,KAAK,SAAtB,aAEDA,EAAO,KAAK,MAAM7V,EAAM,SAAS,GAAK,KAAK,WAAa,EAAE,EAE1D6V,EAAO,KAAK,MAAM7V,EAAM,SAAS,EAAI,KAAK,WAAW,EAGzD,KAAK,OAAO,SAAU6V,CAAK,CAC/B,CAEA,KAAK,QAAQ,MAAM,CACvB,CAQA,SAAS6R,EAAa1nB,EAAQ,CAG1B,GADA,KAAK,SAAW,GACX,KAAK,QAAU,CAChB,IAAIioB,EAAe,OAAQ,KAAK,QAAQ,MAAM,WAAW,QAAS,KAAM,EAAG,CAAE,EAC7EC,EAAe,OAAQ,KAAK,QAAQ,MAAM,UAAU,QAAS,KAAM,EAAG,CAAE,EACxEH,EAAe,OAAQ,KAAK,QAAQ,MAAM,MAAM,QAAS,KAAM,EAAG,CAAE,EACpEC,EAAe,OAAQ,KAAK,QAAQ,MAAM,OAAO,QAAS,KAAM,EAAG,CAAE,EACrEvN,EAAe5d,EAAE,eAAgB,KAAK,OAAO,MAAO,EAE9B,KAAK,SAAtB,aACI,CAACmD,EAAM,MAAM,EAAI,EAEbioB,EAAa,EAAGF,EAActN,EAAW,KAC1C,KAAK,QAAQ,MAAM,WAAewN,EAAejoB,EAAM,MAAM,EAAI,EAAQ,KACzE8nB,EAAY,KAAMrN,EAAW,EAAGwN,EAAejoB,EAAM,MAAM,EAAI,CAAI,GAE/D,CAACA,EAAM,MAAM,EAAI,GAEpBioB,EAAa,IACd,KAAK,QAAQ,MAAM,WAAeA,EAAejoB,EAAM,MAAM,EAAI,EAAQ,KACzE8nB,EAAY,KAAMrN,EAAW,EAAGwN,EAAejoB,EAAM,MAAM,EAAI,CAAI,GAItE,CAACA,EAAM,MAAM,EAAI,EAEbkoB,EAAY,EAAGF,EAAevN,EAAW,KAC1C,KAAK,QAAQ,MAAM,UAAcyN,EAAcloB,EAAM,MAAM,EAAI,EAAQ,KACvE8nB,EAAY,KAAMrN,EAAW,EAAGyN,EAAcloB,EAAM,MAAM,EAAI,CAAI,GAE9D,CAACA,EAAM,MAAM,EAAI,GAEpBkoB,EAAY,IACb,KAAK,QAAQ,MAAM,UAAcA,EAAcloB,EAAM,MAAM,EAAI,EAAQ,KACvE8nB,EAAY,KAAMrN,EAAW,EAAGyN,EAAcloB,EAAM,MAAM,EAAI,CAAI,EAIlF,CAEJ,CASA,SAAS2nB,EAAe3nB,EAAQ,CAC5B,GAAK,KAAK,QAAU,CAChB,IAAIioB,EAAe,OAAQ,KAAK,QAAQ,MAAM,WAAW,QAAS,KAAM,EAAG,CAAE,EAC7EC,EAAe,OAAQ,KAAK,QAAQ,MAAM,UAAU,QAAS,KAAM,EAAG,CAAE,EACxEH,EAAe,OAAQ,KAAK,QAAQ,MAAM,MAAM,QAAS,KAAM,EAAG,CAAE,EACpEC,EAAe,OAAQ,KAAK,QAAQ,MAAM,OAAO,QAAS,KAAM,EAAG,CAAE,EACrEvN,EAAe5d,EAAE,eAAgB,KAAK,OAAO,MAAO,EAE9B,KAAK,SAAtB,aACImD,EAAM,OAAS,EAEXioB,EAAa,EAAGF,EAActN,EAAW,KAC1C,KAAK,QAAQ,MAAM,WAAewN,EAAejoB,EAAM,OAAS,GAAS,KACzE8nB,EAAY,KAAMrN,EAAW,EAAGwN,EAAejoB,EAAM,OAAS,EAAK,GAE/DA,EAAM,OAAS,GAElBioB,EAAa,IACd,KAAK,QAAQ,MAAM,WAAeA,EAAejoB,EAAM,OAAS,GAAS,KACzE8nB,EAAY,KAAMrN,EAAW,EAAGwN,EAAejoB,EAAM,OAAS,EAAK,GAItEA,EAAM,OAAS,EAEXkoB,EAAYzN,EAAW,EAAIuN,IAC5B,KAAK,QAAQ,MAAM,UAAcE,EAAcloB,EAAM,OAAS,GAAS,KACvE8nB,EAAY,KAAMrN,EAAW,EAAGyN,EAAcloB,EAAM,OAAS,EAAK,GAE9DA,EAAM,OAAS,GAElBkoB,EAAY,IACb,KAAK,QAAQ,MAAM,UAAcA,EAAcloB,EAAM,OAAS,GAAS,KACvE8nB,EAAY,KAAMrN,EAAW,EAAGyN,EAAcloB,EAAM,OAAS,EAAK,GAK9EA,EAAM,eAAiB,EAC3B,CACJ,CAGA,SAAS8nB,EAAYK,EAAO1N,EAAYva,EAAS,CAC7C,IAAIkoB,EACAC,EACAC,EACAC,EACAnqB,EACAO,EAWJ,IAVsBwpB,EAAM,SAAvB,aACDC,EAAYD,EAAM,WAElBC,EAAYD,EAAM,YAEtBE,EAAoB,KAAK,KAAM5N,EAAa2N,CAAU,EAAI,EAC1DE,EAAkB,KAAK,MAAQ,KAAK,IAAKpoB,CAAO,EAAIua,GAAe2N,CAAU,EAAI,EACjFC,EAAoBC,EAAkBD,EACtCA,EAAoBA,EAAoB,EAAI,EAAIA,EAE1CjqB,EAAIiqB,EAAmBjqB,EAAIkqB,GAAmBlqB,EAAI+pB,EAAM,OAAO,OAAQ/pB,IAEzE,GADAO,EAAUwpB,EAAM,OAAO/pB,CAAC,EACnB,CAACO,EAAQ,YAAc,CACxB,IAAI6pB,EACA1R,EAAqBqR,EAAM,OAAO,YAAY/pB,CAAC,EAC/C0Y,EAAmB,2BACnB0R,EAAiB,CACb,KAAM,QACN,IAAK1R,EAAmB,0BAC5B,EAEA0R,EAAiB1R,EAErByR,EAAa,IAAI1rB,EAAE,OAAQ,CACvB,GAAwB8B,EAAQ,GAChC,YAAwB,CAAC6pB,CAAc,EACvC,QAAwB7pB,EACxB,mBAAwBwpB,EAAM,UAC9B,cAAwB,GACxB,gBAAwB,GACxB,sBAAwB,GACxB,oBAAwB,GACxB,gBAAwB,GACxB,UAAwB,EACxB,cAAwB,EACxB,kBAAwBA,EAAM,OAAO,kBACrC,YAAwBA,EAAM,OAAO,YACrC,OAAwB,QAC5B,CAAE,EAGFtrB,EAAE,4BAA6B0rB,EAAW,MAAO,EACjD1rB,EAAE,4BAA6B0rB,EAAW,SAAU,EAGpDA,EAAW,aAAa,YAAa,EAAM,EAC3CA,EAAW,aAAa,YAAa,EAAM,EAE3CJ,EAAM,YAAYxpB,EAAQ,EAAE,EAAI4pB,EAEhC5pB,EAAQ,YAAc,EAC1B,CAER,CAQA,SAASipB,EAAc5nB,EAAQ,CAC3B,IAAIrB,EAAUqB,EAAM,YAAY,QAOV,KAAK,SAAtB,aAGDrB,EAAQ,MAAM,aAAe,MAK7BA,EAAQ,MAAM,WAAa,KAGnC,CAQA,SAASkpB,EAAc7nB,EAAQ,CAC3B,IAAIrB,EAAUqB,EAAM,YAAY,QAEV,KAAK,SAAtB,aAGDrB,EAAQ,MAAM,aAAe,IAAQ9B,EAAE,eAAgB8B,CAAQ,EAAE,EAAI,EAAM,KAK3EA,EAAQ,MAAM,WAAa,IAAQ9B,EAAE,eAAgB8B,CAAQ,EAAE,EAAI,EAAM,IAGjF,CAQA,SAAS+I,EAAW1H,EAAQ,CAGxB,GAAK,CAACA,EAAM,MAAQ,CAACA,EAAM,KAAO,CAACA,EAAM,KACrC,OAASA,EAAM,QAAU,CACrB,IAAK,IACD2nB,EAAc,KAAM,KAAM,CAAE,YAAa,KAAK,QAAS,SAAU,KAAM,OAAQ,EAAG,MAAO,IAAK,CAAE,EAChG3nB,EAAM,eAAiB,GACvB,MACJ,IAAK,IACD2nB,EAAc,KAAM,KAAM,CAAE,YAAa,KAAK,QAAS,SAAU,KAAM,OAAQ,GAAI,MAAO,IAAK,CAAE,EACjG3nB,EAAM,eAAiB,GACvB,MACJ,IAAK,IACD2nB,EAAc,KAAM,KAAM,CAAE,YAAa,KAAK,QAAS,SAAU,KAAM,OAAQ,GAAI,MAAO,IAAK,CAAE,EACjG3nB,EAAM,eAAiB,GACvB,MACJ,IAAK,IACD2nB,EAAc,KAAM,KAAM,CAAE,YAAa,KAAK,QAAS,SAAU,KAAM,OAAQ,EAAG,MAAO,IAAK,CAAE,EAChG3nB,EAAM,eAAiB,GACvB,MACJ,QAEIA,EAAM,eAAiB,GACvB,KACR,MAEAA,EAAM,eAAiB,EAE/B,CAQA,SAAS4H,EAAY5H,EAAQ,CAGzB,GAAK,CAACA,EAAM,MAAQ,CAACA,EAAM,KAAO,CAACA,EAAM,KACrC,OAASA,EAAM,QAAU,CACrB,IAAK,IACD2nB,EAAc,KAAM,KAAM,CAAE,YAAa,KAAK,QAAS,SAAU,KAAM,OAAQ,EAAG,MAAO,IAAK,CAAE,EAChG3nB,EAAM,eAAiB,GACvB,MACJ,IAAK,IACD2nB,EAAc,KAAM,KAAM,CAAE,YAAa,KAAK,QAAS,SAAU,KAAM,OAAQ,GAAI,MAAO,IAAK,CAAE,EACjG3nB,EAAM,eAAiB,GACvB,MACJ,IAAK,IACL,IAAK,KACL,IAAK,IACD2nB,EAAc,KAAM,KAAM,CAAE,YAAa,KAAK,QAAS,SAAU,KAAM,OAAQ,EAAG,MAAO,IAAK,CAAE,EAChG3nB,EAAM,eAAiB,GACvB,MACJ,IAAK,KACL,IAAK,IACD2nB,EAAc,KAAM,KAAM,CAAE,YAAa,KAAK,QAAS,SAAU,KAAM,OAAQ,GAAI,MAAO,IAAK,CAAE,EACjG3nB,EAAM,eAAiB,GACvB,MACJ,IAAK,IACD2nB,EAAc,KAAM,KAAM,CAAE,YAAa,KAAK,QAAS,SAAU,KAAM,OAAQ,GAAI,MAAO,IAAK,CAAE,EACjG3nB,EAAM,eAAiB,GACvB,MACJ,IAAK,KACD2nB,EAAc,KAAM,KAAM,CAAE,YAAa,KAAK,QAAS,SAAU,KAAM,OAAQ,EAAG,MAAO,IAAK,CAAE,EAChG3nB,EAAM,eAAiB,GACvB,MACJ,QAEIA,EAAM,eAAiB,GACvB,KACR,MAEAA,EAAM,eAAiB,EAE/B,CAEA,EAAErD,CAAa,EAoCd,SAAUE,EAAG,CAiBdA,EAAE,YAAc,SAAUsa,EAAGC,EAAGH,EAAOC,EAAQuF,EAAUC,EAAW,CAChE7f,EAAE,KAAK,MAAO,KAAM,CAAEsa,EAAGC,EAAGH,EAAOC,CAAO,CAAE,EAO5C,KAAK,SAAWuF,EAMhB,KAAK,SAAWC,CACpB,EAEA7f,EAAE,OAAQA,EAAE,YAAY,UAAWA,EAAE,KAAK,SAAU,CAEpD,EAAGF,CAAc,EAoChB,SAAUE,EAAG,CAedA,EAAE,OAAS,SAAUD,EAAU,CAC3B,IAAI8B,EAAO,UAEP,OAAS9B,GAAc,WAGvBA,EAAU,CACN,QAAS8B,EAAK,QAAU,OAASA,EAAM,CAAE,GAAQ,SAC7CA,EAAM,CAAE,EACR,OAMJ,gBAAiBA,EAAK,OAAS,EAC3BA,EAAM,CAAE,EAAE,gBACV,EAMJ,cAAeA,EAAK,OAAS,EACzBA,EAAM,CAAE,EAAE,cACV,GACR,GAGJ7B,EAAE,QAAQ,OAAO,OAAOD,EAAQ,iBAAoB,UAAYA,EAAQ,kBAAoB,EACxF,0EAA0E,EAE9EC,EAAE,QAAQ,OAAO,OAAOD,EAAQ,eAAkB,UAAYA,EAAQ,eAAiB,EACnF,0FAA0F,EAE1FA,EAAQ,cACR,KAAK,aAAe,GACpB,OAAOA,EAAQ,aAGnBC,EAAE,OAAQ,GAAM,KAAMD,CAAO,EAQ7B,KAAK,QAAU,CACX,MAAO,OAAS,KAAK,SAAc,SAC/B,KAAK,QACJ,KAAK,aAAe,EAAI,EAC7B,KAAOC,EAAE,IAAI,CACjB,EAEAA,EAAE,QAAQ,OAAO,CAAC,KAAK,cAAgB,KAAK,QAAQ,QAAU,EAC1D,uEAAuE,EAQ3E,KAAK,MAAQ,CACT,MAAO,KAAK,QAAQ,MACpB,KAAO,KAAK,QAAQ,IACxB,EAQA,KAAK,OAAS,CACV,MAAO,KAAK,QAAQ,MACpB,KAAO,KAAK,QAAQ,IACxB,EAEI,KAAK,eACL,KAAK,MAAM,UAAY,KAAK,IAAI,KAAK,MAAM,KAAK,EAChD,KAAK,OAAO,UAAY,KAAK,IAAI,KAAK,OAAO,KAAK,EAClD,KAAK,QAAQ,UAAY,KAAK,IAAI,KAAK,QAAQ,KAAK,EAE5D,EAGAA,EAAE,OAAO,UAAY,CAMjB,QAAS,SAAUoB,EAAS,CACxBpB,EAAE,QAAQ,OAAO,CAAC,KAAK,cAAgBoB,IAAW,EAC9C,gFAAgF,EAEpF,KAAK,MAAM,MAAQ,KAAK,OAAO,MAAQ,KAAK,QAAQ,MAAQA,EAC5D,KAAK,MAAM,KAAO,KAAK,OAAO,KAAO,KAAK,QAAQ,KAAOpB,EAAE,IAAI,EAE3D,KAAK,eACL,KAAK,MAAM,UAAY,KAAK,IAAI,KAAK,MAAM,KAAK,EAChD,KAAK,OAAO,UAAY,KAAK,IAAI,KAAK,OAAO,KAAK,EAClD,KAAK,QAAQ,UAAY,KAAK,IAAI,KAAK,QAAQ,KAAK,EAE5D,EAMA,SAAU,SAAUoB,EAAS,CACzBpB,EAAE,QAAQ,OAAO,CAAC,KAAK,cAAgBoB,IAAW,EAC9C,iFAAiF,EAErF,KAAK,MAAM,MAAS,KAAK,QAAQ,MACjC,KAAK,MAAM,KAAS,KAAK,QAAQ,KACjC,KAAK,OAAO,MAAQA,EACpB,KAAK,OAAO,KAAQ,KAAK,MAAM,KAAO,IAAO,KAAK,cAE9C,KAAK,eACL,KAAK,MAAM,UAAY,KAAK,IAAI,KAAK,MAAM,KAAK,EAChD,KAAK,OAAO,UAAY,KAAK,IAAI,KAAK,OAAO,KAAK,EAE1D,EAMA,QAAS,SAAUoQ,EAAQ,CACvB,KAAK,MAAM,OAAUA,EACrB,KAAK,OAAO,OAASA,EAEjB,KAAK,eACLxR,EAAE,QAAQ,OAAO,KAAK,OAAO,QAAU,GAAK,KAAK,MAAM,QAAU,EAC7D,sFAAsF,EAE1F,KAAK,MAAM,UAAY,KAAK,IAAI,KAAK,MAAM,KAAK,EAChD,KAAK,OAAO,UAAY,KAAK,IAAI,KAAK,OAAO,KAAK,EAE1D,EAEA,eAAgB,SAAS+D,EAAO,CAC5B,KAAK,aAAeA,EAEhB,KAAK,eACL/D,EAAE,QAAQ,OAAO,KAAK,QAAQ,QAAU,GAAK,KAAK,OAAO,QAAU,GAAK,KAAK,MAAM,QAAU,EACzF,6FAA6F,EAEjG,KAAK,MAAM,UAAY,KAAK,IAAI,KAAK,MAAM,KAAK,EAChD,KAAK,OAAO,UAAY,KAAK,IAAI,KAAK,OAAO,KAAK,EAClD,KAAK,QAAQ,UAAY,KAAK,IAAI,KAAK,QAAQ,KAAK,EAE5D,EAOA,OAAQ,UAAW,CACf,KAAK,QAAQ,KAAQA,EAAE,IAAI,EAE3B,IAAI4rB,EAAYC,EAShB,GARI,KAAK,cACLD,EAAa,KAAK,MAAM,UACxBC,EAAc,KAAK,OAAO,YAE1BD,EAAa,KAAK,MAAM,MACxBC,EAAc,KAAK,OAAO,OAG3B,KAAK,QAAQ,MAAQ,KAAK,OAAO,KAChC,KAAK,QAAQ,MAAQ,KAAK,OAAO,UAC9B,CACH,IAAIC,EAAeF,GACTC,EAAcD,GAChBG,EACI,KAAK,iBACH,KAAK,QAAQ,KAAO,KAAK,MAAM,OAC/B,KAAK,OAAO,KAAO,KAAK,MAAM,KACpC,EAEJ,KAAK,aACL,KAAK,QAAQ,MAAQ,KAAK,IAAID,CAAY,EAE1C,KAAK,QAAQ,MAAQA,CAE7B,CAEA,OAAO,KAAK,QAAQ,QAAU,KAAK,OAAO,KAC9C,EAOA,gBAAiB,UAAW,CACxB,OAAO,KAAK,QAAQ,QAAU,KAAK,OAAO,KAC9C,CACJ,EAKA,SAASC,EAAWC,EAAW1R,EAAI,CAC/B,OAAS,EAAM,KAAK,IAAK0R,EAAY,CAAC1R,CAAE,IAClC,EAAM,KAAK,IAAK,CAAC0R,CAAU,EACrC,CAEA,EAAGlsB,CAAc,EAoChB,SAASE,EAAE,CAsBZA,EAAE,SAAW,SAASD,EAAS,CAE3BC,EAAE,OAAO,GAAM,KAAM,CACjB,QAASA,EAAE,iBAAiB,QAC5B,MAAO,KACP,MAAO,CACX,EAAGD,CAAO,EAOV,KAAK,KAAO,KAOZ,KAAK,SAAW,CAAC,EAQjB,KAAK,SAAW,IACpB,EAEAC,EAAE,SAAS,UAAY,CAMnB,MAAO,UAAW,CACd,KAAK,QAEL,IAAI8J,EAAO,KACPmiB,EAAY,KAAK,MAErB,KAAK,MAAQ,OAAO,WAAW,UAAY,CACvCniB,EAAK,OAAO,KAAM,KAAM,gCAAkCA,EAAK,QAAU,MAAM,CACnF,EAAG,KAAK,OAAO,EAEf,KAAK,MAAQ,UAAW,CACpBA,EAAK,OAAO,kBAAkBA,CAAI,EAC9B,OAAOmiB,GAAc,YACrBA,EAAU,CAElB,EAEA,KAAK,OAAO,kBAAkB,IAAI,CACtC,EASA,OAAQ,SAAS3K,EAAMjc,EAASkF,EAAe,CAC3C,KAAK,KAAO+W,EACZ,KAAK,QAAUjc,EACf,KAAK,SAAWkF,EAEZ,KAAK,OACL,OAAO,aAAa,KAAK,KAAK,EAGlC,KAAK,SAAS,IAAI,CACtB,CACJ,EAWAvK,EAAE,YAAc,SAASD,EAAS,CAE9BC,EAAE,OAAO,GAAM,KAAM,CACjB,SAAgBA,EAAE,iBAAiB,iBACnC,QAAgBA,EAAE,iBAAiB,QACnC,SAAgB,CAAC,EACjB,YAAgB,CAAC,EACjB,eAAgB,CACpB,EAAGD,CAAO,CAEd,EAGAC,EAAE,YAAY,UAAY,CAoBtB,OAAQ,SAASD,EAAS,CACtB,GAAI,CAACA,EAAQ,OAAQ,CACjBC,EAAE,QAAQ,MAAM,iJAC2E,EAC3F,IAAIksB,EAAiBlsB,EAAE,WAAW,UAClCD,EAAQ,OAAS,CACb,kBAAmBmsB,EAAe,kBAClC,kBAAmBA,EAAe,iBACtC,CACJ,CAEA,IAAIxhB,EAAQ,KACRyhB,EAAW,SAASC,EAAK,CACrBC,EAAY3hB,EAAO0hB,EAAKrsB,EAAQ,QAAQ,CAC5C,EACAusB,EAAa,CACT,IAAKvsB,EAAQ,IACb,KAAMA,EAAQ,MAAQ,CAAC,EACvB,OAAQA,EAAQ,OAChB,aAAcA,EAAQ,aACtB,YAAaA,EAAQ,aAAeA,EAAQ,YAAc,KAC1D,kBAAmBA,EAAQ,kBAC3B,oBAAqBA,EAAQ,oBAC7B,SAAUA,EAAQ,SAClB,SAAUosB,EACV,MAAOpsB,EAAQ,MACf,QAAS,KAAK,OAClB,EACAwsB,EAAS,IAAIvsB,EAAE,SAASssB,CAAU,EAEjC,CAAC,KAAK,UAAY,KAAK,eAAiB,KAAK,UAC9CC,EAAO,MAAM,EACb,KAAK,kBAGL,KAAK,SAAS,KAAMA,CAAO,CAEnC,EAMA,MAAO,UAAW,CACd,QAAShrB,EAAI,EAAGA,EAAI,KAAK,SAAS,OAAQA,IAAM,CAC5C,IAAI6qB,EAAM,KAAK,SAAS7qB,CAAC,EACpB,OAAO6qB,EAAI,OAAU,YACtBA,EAAI,MAAM,CAElB,CAEA,KAAK,SAAW,CAAC,CACrB,CACJ,EAWA,SAASC,EAAYG,EAAQJ,EAAKvmB,EAAU,CACpCumB,EAAI,WAAa,KAAOA,EAAI,OAAS,MAAQA,EAAI,OAAS,SAAcA,EAAI,MAAQ,EAAII,EAAO,cAC/FA,EAAO,YAAY,KAAKJ,CAAG,EAE/B,IAAIK,EAEJD,EAAO,kBAEF,CAACA,EAAO,UAAYA,EAAO,eAAiBA,EAAO,WAAaA,EAAO,SAAS,OAAS,IAC1FC,EAAUD,EAAO,SAAS,MAAM,EAChCC,EAAQ,MAAM,EACdD,EAAO,kBAGPA,EAAO,aAAe,GAAKA,EAAO,SAAS,SAAW,IACjD,CAACA,EAAO,UAAYA,EAAO,eAAiBA,EAAO,WAAaA,EAAO,YAAY,OAAS,IAC5FC,EAAUD,EAAO,YAAY,MAAM,EACnC,WAAW,UAAY,CACnBC,EAAQ,MAAM,CAClB,EAAGD,EAAO,cAAc,EACxBA,EAAO,kBAIhB3mB,EAASumB,EAAI,KAAMA,EAAI,SAAUA,EAAI,OAAO,CAChD,CAEA,EAAEtsB,CAAa,EAoCd,SAAUE,EAAG,CAwBdA,EAAE,KAAO,SAASiX,EAAOqD,EAAGC,EAAGoE,EAAQ+N,EAAQ9nB,EAAKkd,EAAW6K,EAAcnX,EAAaoX,EAAcznB,EAAU0nB,EAAU,CAMxH,KAAK,MAAU5V,EAMf,KAAK,EAAUqD,EAMf,KAAK,EAAUC,EAMf,KAAK,OAAUoE,EAMf,KAAK,iBAAoB,IAAI7e,EAAc,KAAK6e,EAAO,EAAGA,EAAO,EAAGA,EAAO,MAAOA,EAAO,MAAM,EAO/F,KAAK,aAAeiO,EAMpB,KAAK,OAAUF,EAQf,KAAK,KAAW9nB,EAQhB,KAAK,SAAYO,EAMjB,KAAK,UAAY2c,EAMjB,KAAK,aAAe6K,EAOpB,KAAK,YAAcnX,EAEfqX,IAAa,SACb7sB,EAAE,QAAQ,KAAK,gJACsE,EACrF6sB,EAAW7sB,EAAE,WAAW,UAAU,eAAeiX,EAAOqD,EAAGC,EAAG3V,EAAK4Q,EAAarQ,CAAQ,GAO5F,KAAK,SAAW0nB,EAMhB,KAAK,OAAU,GAMf,KAAK,QAAU,GAOf,KAAK,QAAa,KAMlB,KAAK,WAAa,KAOlB,KAAK,MAAa,KAMlB,KAAK,SAAa,KAMlB,KAAK,KAAa,KAMlB,KAAK,QAAa,GAMlB,KAAK,WAAa,KAMlB,KAAK,QAAa,KAQlB,KAAK,gBAAoB,KAMzB,KAAK,WAAa,KAOlB,KAAK,gBAAkB,GAOvB,KAAK,WAAiB,GAOtB,KAAK,cAAiB,EAOtB,KAAK,YAAc,GAOnB,KAAK,aAAe,EACxB,EAGA7sB,EAAE,KAAK,UAAY,CAQf,SAAU,UAAW,CACjB,OAAO,KAAK,MAAQ,IAAM,KAAK,EAAI,IAAM,KAAK,CAClD,EAGA,wBAAyB,UAAW,CAChC,eAAQ,KAAK,qJAC0F,EAChG,CAAC,CAAC,KAAK,WAAa,KAAK,OAAO,EAAE,MAAM,MAAM,CACzD,EASA,IAAI,OAAQ,CACR,OAAAA,EAAE,QAAQ,MAAM,mFAAmF,EAC5F,KAAK,SAAS,CACzB,EASA,IAAI,KAAM,CACN,OAAAA,EAAE,QAAQ,MAAM,+EAA+E,EACxF,KAAK,OAAO,CACvB,EAMA,SAAU,UAAW,CACjB,OAAO,KAAK,iBAAiB,SAAS,CAC1C,EAMA,OAAQ,UAAW,CACf,OAAI,OAAO,KAAK,MAAS,WACd,KAAK,KAAK,EAGd,KAAK,IAChB,EAOA,iBAAkB,UAAW,CACzB,OAAO,KAAK,WAAc,KAAK,kBAAoB,KAAK,iBAAiB,mBAAmB,CAChG,EAOA,yBAA0B,UAAW,CACjC,IAAIa,EACJ,GAAI,KAAK,iBACLA,EAAU,KAAK,iBAAiB,mBAAmB,UAC5C,KAAK,UACZA,EAAU,KAAK,cAEf,QAAAb,EAAE,QAAQ,KACN,2EACA,KAAK,SAAS,CAAC,EACZ,EAEX,OAAOa,EAAQ,OAAO,OAAS,KAAK,KAAK,EAAIb,EAAE,kBACnD,EASA,+BAAgC,SAASggB,EAAO8M,EAAYC,EAAkB,CAK1E,IAAIzS,EAAI,KAAK,IAAI,EAAG,KAAK,MAAMyS,EAAiB,EAAID,EAAW,GAAK,CAAC,CAAC,EAClEvS,EAAI,KAAK,IAAI,EAAG,KAAK,MAAMwS,EAAiB,EAAID,EAAW,GAAK,CAAC,CAAC,EACtE,OAAO,IAAI9sB,EAAE,MAAMsa,EAAGC,CAAC,EAAE,MACrB,KAAK,SACA,MAAMva,EAAE,iBAAiB,EACzB,MAAMggB,GAAS,CAAC,EAChB,MAAM,SAAS1F,EAAG,CACf,OAAOA,EAAI,CACf,CAAC,CACT,CACJ,EAMA,OAAQ,UAAW,CACV,KAAK,YAAc,KAAK,WAAW,YACpC,KAAK,WAAW,WAAW,YAAa,KAAK,UAAW,EAEvD,KAAK,SAAW,KAAK,QAAQ,YAC9B,KAAK,QAAQ,WAAW,YAAa,KAAK,OAAQ,EAGtD,KAAK,QAAa,KAClB,KAAK,WAAa,KAClB,KAAK,OAAa,GAClB,KAAK,QAAa,EACtB,CACJ,CAEA,EAAGxa,CAAc,EAoChB,SAASE,EAAG,CAuBTA,EAAE,iBAAmBA,EAAE,UAevBA,EAAE,oBAAsBA,EAAE,aAAa,CACnC,YAAa,EACb,MAAO,EACP,aAAc,CAClB,CAAC,EA+BDA,EAAE,QAAU,SAAS8B,EAASmX,EAAUC,EAAW,CAY/C,IAAInZ,EACAC,EAAE,cAAc8B,CAAO,EACvB/B,EAAU+B,EAEV/B,EAAU,CACN,QAAS+B,EACT,SAAUmX,EACV,UAAWC,CACf,EAGJ,KAAK,eAAiB,SAAS,cAAc,KAAK,EAClD,KAAK,QAAUnZ,EAAQ,QACvB,KAAK,eAAe,YAAY,KAAK,OAAO,EAExC,KAAK,QAAQ,GACb,KAAK,eAAe,GAAK,mBAAqB,KAAK,QAAQ,GAE3D,KAAK,eAAe,GAAK,kBAG7B,KAAK,MAAQ,KAAK,eAAe,MACjC,KAAK,MAAMA,CAAO,CACtB,EAGAC,EAAE,QAAQ,UAAY,CAGlB,MAAO,SAASD,EAAS,CACrB,KAAK,SAAWA,EAAQ,SACxB,KAAK,UAAYA,EAAQ,YAAc,OACnCC,EAAE,UAAU,SAAWD,EAAQ,UACnC,KAAK,OAASA,EAAQ,OACtB,KAAK,YAAcA,EAAQ,cAAgB,OACvC,GAAOA,EAAQ,YAGnB,KAAK,MAAQA,EAAQ,QAAU,OAAY,KAAOA,EAAQ,MAG1D,KAAK,OAASA,EAAQ,SAAW,OAAY,KAAOA,EAAQ,OAE5D,KAAK,aAAeA,EAAQ,cAAgBC,EAAE,oBAAoB,MAG9D,KAAK,oBAAoBA,EAAE,OAC3B,KAAK,MAAQ,KAAK,SAAS,MAC3B,KAAK,OAAS,KAAK,SAAS,OAC5B,KAAK,SAAW,KAAK,SAAS,WAAW,EACzC,KAAK,UAAYA,EAAE,UAAU,UAIjC,KAAK,OAAS,KAAK,QAAU,MAAQ,KAAK,SAAW,KACrD,KAAK,OAAS,IAAIA,EAAE,KAChB,KAAK,SAAS,EAAG,KAAK,SAAS,EAAG,KAAK,MAAO,KAAK,MAAM,EAC7D,KAAK,SAAW,KAAK,QACzB,EASA,OAAQ,SAASgtB,EAAU9pB,EAAM,CAC7B,IAAI+pB,EAAajtB,EAAE,UAAU,WAAW,KAAK,SAAS,EACjDitB,IAGDA,EAAW,uBACXD,EAAS,GAAK9pB,EAAK,EAAI,EAChB+pB,EAAW,UAClBD,EAAS,GAAK9pB,EAAK,GAEnB+pB,EAAW,qBACXD,EAAS,GAAK9pB,EAAK,EAAI,EAChB+pB,EAAW,WAClBD,EAAS,GAAK9pB,EAAK,GAE3B,EAKA,QAAS,UAAW,CAChB,IAAIpB,EAAU,KAAK,eACfW,EAAQ,KAAK,MAEbX,EAAQ,aACRA,EAAQ,WAAW,YAAYA,CAAO,EAGlCA,EAAQ,oBACRW,EAAM,QAAU,OAKhB,SAAS,KAAK,YAAYX,CAAO,IAKzC,KAAK,OAAS,KAEdW,EAAM,IAAM,GACZA,EAAM,KAAO,GACbA,EAAM,SAAW,GAEb,KAAK,QAAU,OACfA,EAAM,MAAQ,IAEd,KAAK,SAAW,OAChBA,EAAM,OAAS,IAEnB,IAAIyqB,EAAsBltB,EAAE,+BACxB,iBAAiB,EACjBmtB,EAAgBntB,EAAE,+BAClB,WAAW,EACXktB,GAAuBC,IACvB1qB,EAAMyqB,CAAmB,EAAI,GAC7BzqB,EAAM0qB,CAAa,EAAI,GAE/B,EAMA,SAAU,SAASxb,EAAW+K,EAAU,CACpC,IAAI5a,EAAU,KAAK,eACfA,EAAQ,aAAe6P,IAEvB7P,EAAQ,kBAAoBA,EAAQ,WACpCA,EAAQ,gBAAkBA,EAAQ,YAClC6P,EAAU,YAAY7P,CAAO,EAG7B,KAAK,MAAM,SAAW,WAGtB,KAAK,KAAO9B,EAAE,eAAe,KAAK,cAAc,GAEpD,IAAIotB,EAAkB,KAAK,2BAA2B1Q,CAAQ,EAC1DsQ,EAAWI,EAAgB,SAC3BlqB,EAAO,KAAK,KAAOkqB,EAAgB,KACnCC,EAAa,GACb3Q,EAAS,kCACT2Q,EAAa3Q,EAAS,QAAU,cAAgB,cAEpD,IAAIqB,EAASrB,EAAS,QAAU,CAAC0Q,EAAgB,OAASA,EAAgB,OACtEpN,EAAQtD,EAAS,QAAU,cAAgB,GAG/C,GAAI,KAAK,OACL,KAAK,OAAOsQ,EAAU9pB,EAAM,KAAK,OAAO,MACrC,CACH,IAAIT,EAAQ,KAAK,MACb6qB,EAAa,KAAK,QAAQ,MAC9BA,EAAW,QAAU,QACrB7qB,EAAM,KAAOuqB,EAAS,EAAI,KAC1BvqB,EAAM,IAAMuqB,EAAS,EAAI,KACrB,KAAK,QAAU,OACfM,EAAW,MAAQpqB,EAAK,EAAI,MAE5B,KAAK,SAAW,OAChBoqB,EAAW,OAASpqB,EAAK,EAAI,MAEjC,IAAIgqB,EAAsBltB,EAAE,+BACxB,iBAAiB,EACjBmtB,EAAgBntB,EAAE,+BAClB,WAAW,EACXktB,GAAuBC,IACnBpP,GAAU,CAACrB,EAAS,SACpB4Q,EAAWH,CAAa,EAAI,GAC5B1qB,EAAMyqB,CAAmB,EAAI,KAAK,oBAAoB,EACtDzqB,EAAM0qB,CAAa,EAAI,UAAYpP,EAAS,QACrC,CAACA,GAAUrB,EAAS,SAC3B4Q,EAAWH,CAAa,EAAIE,EAC5B5qB,EAAMyqB,CAAmB,EAAI,KAAK,oBAAoB,EACtDzqB,EAAM0qB,CAAa,EAAInN,GAChBjC,GAAUrB,EAAS,SAC1B4Q,EAAWH,CAAa,EAAIE,EAC5B5qB,EAAMyqB,CAAmB,EAAI,KAAK,oBAAoB,EACtDzqB,EAAM0qB,CAAa,EAAI,UAAYpP,EAAS,OAASiC,IAErDsN,EAAWH,CAAa,EAAI,GAC5B1qB,EAAMyqB,CAAmB,EAAI,GAC7BzqB,EAAM0qB,CAAa,EAAI,KAG/B1qB,EAAM,QAAU,MACpB,CACJ,EAGA,2BAA4B,SAASia,EAAU,CAC3C,IAAIsQ,EAAWtQ,EAAS,eAAe,KAAK,SAAU,EAAI,EACtDxZ,EAAO,KAAK,iBAAiBwZ,CAAQ,EACzC,KAAK,OAAOsQ,EAAU9pB,CAAI,EAE1B,IAAI6a,EAAS,EACb,GAAIrB,EAAS,YAAY,EAAI,GACzB,KAAK,eAAiB1c,EAAE,oBAAoB,YAG5C,GAAI,KAAK,eAAiBA,EAAE,oBAAoB,cAC5C,KAAK,QAAU,MAAQ,KAAK,SAAW,KAAM,CAC7C,IAAIwa,EAAO,IAAIxa,EAAE,KAAKgtB,EAAS,EAAGA,EAAS,EAAG9pB,EAAK,EAAGA,EAAK,CAAC,EACxDsnB,EAAc,KAAK,gBAAgBhQ,EAAMkC,EAAS,YAAY,EAAI,CAAC,EACvEsQ,EAAWxC,EAAY,WAAW,EAClCtnB,EAAOsnB,EAAY,QAAQ,CAC/B,MACIzM,EAASrB,EAAS,YAAY,EAAI,EAI1C,OAAIA,EAAS,UACTsQ,EAAS,EAAKtQ,EAAS,iBAAiB,EAAE,EAAIsQ,EAAS,GAEpD,CACH,SAAUA,EACV,KAAM9pB,EACN,OAAQ6a,CACZ,CACJ,EAGA,iBAAkB,SAASrB,EAAU,CACjC,IAAItC,EAAQ,KAAK,KAAK,EAClBC,EAAS,KAAK,KAAK,EACvB,GAAI,KAAK,QAAU,MAAQ,KAAK,SAAW,KAAM,CAC7C,IAAIkT,EAAa7Q,EAAS,8BACtB,IAAI1c,EAAE,MAAM,KAAK,OAAS,EAAG,KAAK,QAAU,CAAC,EAAG,EAAI,EACpD,KAAK,QAAU,OACfoa,EAAQmT,EAAW,GAEnB,KAAK,SAAW,OAChBlT,EAASkT,EAAW,EAE5B,CACA,GAAI,KAAK,cACJ,KAAK,QAAU,MAAQ,KAAK,SAAW,MAAO,CAC/C,IAAIC,EAAU,KAAK,KAAOxtB,EAAE,eAAe,KAAK,cAAc,EAC1D,KAAK,QAAU,OACfoa,EAAQoT,EAAQ,GAEhB,KAAK,SAAW,OAChBnT,EAASmT,EAAQ,EAEzB,CACA,OAAO,IAAIxtB,EAAE,MAAMoa,EAAOC,CAAM,CACpC,EAGA,gBAAiB,SAASG,EAAMwD,EAAS,CACrC,IAAIyP,EAAW,KAAK,mBAAmBjT,CAAI,EAC3C,OAAOA,EAAK,OAAOwD,EAASyP,CAAQ,EAAE,eAAe,CACzD,EAGA,mBAAoB,SAASjT,EAAM,CAC/B,IAAIzY,EAAS,IAAI/B,EAAE,MAAMwa,EAAK,EAAGA,EAAK,CAAC,EACnCyS,EAAajtB,EAAE,UAAU,WAAW,KAAK,SAAS,EACtD,OAAIitB,IACIA,EAAW,uBACXlrB,EAAO,GAAKyY,EAAK,MAAQ,EAClByS,EAAW,UAClBlrB,EAAO,GAAKyY,EAAK,OAEjByS,EAAW,qBACXlrB,EAAO,GAAKyY,EAAK,OAAS,EACnByS,EAAW,WAClBlrB,EAAO,GAAKyY,EAAK,SAGlBzY,CACX,EAGA,oBAAqB,UAAW,CAC5B,IAAIA,EAAS,GACTkrB,EAAajtB,EAAE,UAAU,WAAW,KAAK,SAAS,EACtD,OAAKitB,IAGDA,EAAW,OACXlrB,EAAS,OACFkrB,EAAW,UAClBlrB,EAAS,SAETkrB,EAAW,MACXlrB,GAAU,OACHkrB,EAAW,WAClBlrB,GAAU,YAEPA,CACX,EAUA,OAAQ,SAASkX,EAAUC,EAAW,CAClC,IAAInZ,EAAUC,EAAE,cAAciZ,CAAQ,EAAIA,EAAW,CACjD,SAAUA,EACV,UAAWC,CACf,EACA,KAAK,MAAM,CACP,SAAUnZ,EAAQ,UAAY,KAAK,SACnC,UAAWA,EAAQ,YAAc,OAC7BA,EAAQ,UAAY,KAAK,UAC7B,OAAQA,EAAQ,QAAU,KAAK,OAC/B,YAAaA,EAAQ,aAAe,KAAK,YACzC,MAAOA,EAAQ,QAAU,OAAYA,EAAQ,MAAQ,KAAK,MAC1D,OAAQA,EAAQ,SAAW,OAAYA,EAAQ,OAAS,KAAK,OAC7D,aAAcA,EAAQ,cAAgB,KAAK,YAC/C,CAAC,CACL,EAQA,UAAW,SAAS2c,EAAU,CAC1B1c,EAAE,QAAQ,OAAO0c,EACb,qDAAqD,EACzD,IAAItC,EAAQ,KAAK,MACbC,EAAS,KAAK,OAClB,GAAID,IAAU,MAAQC,IAAW,KAAM,CACnC,IAAInX,EAAOwZ,EAAS,8BAA8B,KAAK,KAAM,EAAI,EAC7DtC,IAAU,OACVA,EAAQlX,EAAK,GAEbmX,IAAW,OACXA,EAASnX,EAAK,EAEtB,CACA,IAAI+V,EAAW,KAAK,SAAS,MAAM,EACnC,YAAK,OAAOA,EAAU,IAAIjZ,EAAE,MAAMoa,EAAOC,CAAM,CAAC,EACzC,KAAK,yBACRqC,EAAU,IAAI1c,EAAE,KAAKiZ,EAAS,EAAGA,EAAS,EAAGmB,EAAOC,CAAM,CAAC,CACnE,EAGA,yBAA0B,SAASqC,EAAUiC,EAAQ,CACjD,GAAI,CAACjC,GACDA,EAAS,YAAY,EAAI,IAAM,GAC/B,KAAK,eAAiB1c,EAAE,oBAAoB,MAC5C,OAAO2e,EAEX,GAAI,KAAK,eAAiB3e,EAAE,oBAAoB,aAAc,CAE1D,GAAI,KAAK,QAAU,MAAQ,KAAK,SAAW,KACvC,OAAO2e,EAIX,IAAIyO,EAAkB,KAAK,2BAA2B1Q,CAAQ,EAC9D,OAAOA,EAAS,iCAAiC,IAAI1c,EAAE,KACnDotB,EAAgB,SAAS,EACzBA,EAAgB,SAAS,EACzBA,EAAgB,KAAK,EACrBA,EAAgB,KAAK,CAAC,CAAC,CAC/B,CAGA,OAAOzO,EAAO,OAAO,CAACjC,EAAS,YAAY,EAAI,EAC3C,KAAK,mBAAmBiC,CAAM,CAAC,CACvC,CACJ,CAEJ,EAAE7e,CAAa,EAoCd,SAAUE,EAAG,CAEV,MAAMF,EAAgBE,EAW1BF,EAAc,WAAa,KAAgB,CACvC,YAAYC,EAAQ,CAChBC,EAAE,QAAQ,OAAQD,EAAQ,OAAQ,qCAAsC,EACxEC,EAAE,QAAQ,OAAQD,EAAQ,SAAU,uCAAwC,EAC5EC,EAAE,QAAQ,OAAQD,EAAQ,QAAS,sCAAuC,EAE1E,KAAK,OAASA,EAAQ,OACtB,KAAK,SAAWA,EAAQ,SACxB,KAAK,eAAiB,OAAOA,EAAQ,gBAAmB,SAAW,CAACA,EAAQ,cAAc,EAAIA,EAAQ,gBAAkBC,EAAE,iBAAiB,eAC3I,KAAK,QAAUD,EAAQ,SAAW,CAAC,EAEnC,KAAK,UAAaC,EAAE,WAAYD,EAAQ,OAAQ,EAEhD,KAAK,iBAAmB,KAAK,sBAAsB,EAGnD,KAAK,OAAO,MAAM,MAAY,OAC9B,KAAK,OAAO,MAAM,OAAY,OAC9B,KAAK,OAAO,MAAM,SAAY,WAE9B,KAAK,OAAO,MAAM,KAAO,IACzBC,EAAE,kBAAmB,KAAK,OAAQ,KAAK,OAAO,QAAS,EAAK,EAI5DA,EAAE,4BAA6B,KAAK,MAAO,EAC3CA,EAAE,0BAA2B,KAAK,MAAO,EAGzC,KAAK,UAAU,MAAM,UAAY,OACjC,KAAK,UAAU,YAAa,KAAK,MAAO,EAExC,KAAK,sBAAsB,CAC/B,CAGA,IAAI,QAAQ,CACR,OAAO,KAAK,gBAChB,CACA,IAAI,SAAS,CACT,OAAAA,EAAE,QAAQ,MAAM,6DAA6D,EACtE,KAAK,SAChB,CAMA,SAAS,CACLA,EAAE,QAAQ,MAAM,mDAAmD,CAEvE,CAMA,OAAO,aAAc,CACjBA,EAAE,QAAQ,MAAM,uDAAuD,CAC3E,CAOA,uBAAwB,CACpB,OAAAA,EAAE,QAAQ,MAAM,iEAAiE,EAC1E,IACX,CAOA,KAAK0tB,EAAa,CACd1tB,EAAE,QAAQ,MAAM,gDAAgD,CACpE,CAMA,WAAY,CACRA,EAAE,QAAQ,MAAM,qDAAqD,CACzE,CAKA,SAAU,CACNA,EAAE,QAAQ,MAAM,mDAAmD,CACvE,CAOA,uBAAuB6W,EAAY,CAC/B,MAAO,EACX,CASA,yBAAyB8W,EAAsB,CAC3C3tB,EAAE,QAAQ,MAAM,oEAAoE,CACxF,CAOA,kBAAkBwa,EAAM,CACpBxa,EAAE,QAAQ,KAAK,8DAA8D,CACjF,CAGA,OAAO,CACHA,EAAE,QAAQ,KAAK,+GAA+G,CAClI,CAWA,uBAAuB,CACnB,GAAG,KAAK,wBAA0BA,EAAE,WAAW,UAAU,sBACrD,MAAM,IAAI,MAAM,mEAAmE,EAEvF,GAAG,KAAK,OAASA,EAAE,WAAW,UAAU,KACpC,MAAM,IAAI,MAAM,kDAAkD,EAEtE,GAAG,KAAK,YAAcA,EAAE,WAAW,UAAU,UACzC,MAAM,IAAI,MAAM,uDAAuD,EAE3E,GAAG,KAAK,UAAYA,EAAE,WAAW,UAAU,QACvC,MAAM,IAAI,MAAM,qDAAqD,EAEzE,GAAG,KAAK,2BAA6BA,EAAE,WAAW,UAAU,yBACxD,MAAM,IAAI,MAAM,sEAAsE,CAE9F,CAWA,0BAA0B4tB,EAAW,CACjC,IAAIxF,EAAU,KAAK,SAAS,uBAAuBwF,EAAU,WAAW,EAAG,EAAI,EAC3E1qB,EAAO,KAAK,SAAS,8BAA8B0qB,EAAU,QAAQ,EAAG,EAAI,EAEhF,OAAO,IAAI5tB,EAAE,KACTooB,EAAQ,EAAIpoB,EAAE,kBACdooB,EAAQ,EAAIpoB,EAAE,kBACdkD,EAAK,EAAIlD,EAAE,kBACXkD,EAAK,EAAIlD,EAAE,iBACf,CACJ,CAUA,2BAA2BgD,EAAO,CAC9B,IAAI6qB,EAAU,KAAK,SAAS,uBAAuB7qB,EAAO,EAAI,EAC9D,OAAO,IAAIhD,EAAE,MACT6tB,EAAQ,EAAI7tB,EAAE,kBACd6tB,EAAQ,EAAI7tB,EAAE,iBAClB,CACJ,CAWA,sBAAuB,CACnB,IAAI8tB,EAAoB9tB,EAAE,kBACtB+tB,EAAe,KAAK,SAAS,iBAAiB,EAClD,OAAO,IAAIjuB,EAAc,MAAO,KAAK,MAAMiuB,EAAa,EAAID,CAAiB,EAAG,KAAK,MAAMC,EAAa,EAAID,CAAiB,CAAC,CAClI,CAMA,2BAA2BjX,EAAYuJ,EAAM,CACrC,KAAK,QAiBT,KAAK,OAAO,WAAY,oBAAqB,CACzC,WAAYvJ,EACZ,MAAOuJ,CACX,CAAC,CACL,CAMA,uBAAuBvJ,EAAYtM,EAAa,CACxC,KAAK,QAkBT,KAAK,OAAO,WAAY,eAAgB,CACpC,WAAYsM,EACZ,OAAQ,KACR,MAAOtM,CACX,CAAC,CACL,CAGJ,CAEA,EAAGzK,CAAc,EAoChB,SAAUE,EAAG,CAEV,MAAMF,EAAgBE,EAa1B,MAAMguB,UAAmBluB,EAAc,UAAU,CAC7C,YAAYC,EAAQ,CAChB,MAAMA,CAAO,EAgBb,KAAK,OAAO,mBAAmB,eAAgB,sDAAsD,EAErG,KAAK,OAAO,kBAAkB,YAAY,CAC9C,CAKA,OAAO,aAAa,CAChB,MAAO,EACX,CAMA,SAAS,CACL,MAAO,MACX,CAOA,uBAAuB8W,EAAY,CAC/B,MAAO,EACX,CAMA,uBAAuB,CAEnB,OADa7W,EAAE,mBAAmB,KAAK,CAE3C,CAKA,KAAK0tB,EAAa,CACd,IAAIhjB,EAAQ,KACZ,KAAK,iBAAiB,EACtBgjB,EAAY,QAAQ,SAAS7W,EAAW,CAChCA,EAAW,UAAY,GACvBnM,EAAM,WAAWmM,CAAU,CAEnC,CAAC,CAEL,CAKA,WAAY,CACR,MAAO,EACX,CAKA,SAAU,CACN,KAAK,UAAU,YAAY,KAAK,MAAM,CAC1C,CAQA,0BAA0B,CAE1B,CAOA,kBAAmB,CACf,KAAK,OAAO,UAAY,EAC5B,CAOA,WAAYA,EAAa,CACrB,IAAIoX,EAAYpX,EAAW,eAAe,EAAE,IAAIqX,GAAQA,EAAK,IAAI,EACjE,GAAI,EAAArX,EAAW,UAAY,GAAMoX,EAAU,SAAW,GAAK,CAACpX,EAAW,sBAKvE,QAAStV,EAAI0sB,EAAU,OAAS,EAAG1sB,GAAK,EAAGA,IAAK,CAC5C,IAAIihB,EAAOyL,EAAW1sB,CAAE,EACxB,KAAK,UAAWihB,CAAK,EAEjB,KAAK,QAaL,KAAK,OAAO,WAAY,aAAc,CAClC,WAAY3L,EACZ,KAAM2L,CACV,CAAC,CAET,CAEJ,CASA,UAAWA,EAAO,CACdxiB,EAAE,QAAQ,OAAOwiB,EAAM,qCAAqC,EAE5D,IAAI7Q,EAAY,KAAK,OAErB,GAAI,CAAC6Q,EAAK,iBAAkB,CACxBxiB,EAAE,QAAQ,KACN,2EACAwiB,EAAK,SAAS,CAAC,EACnB,MACJ,CAEA,GAAK,CAACA,EAAK,OAAS,CAChBxiB,EAAE,QAAQ,KACN,uDACAwiB,EAAK,SAAS,CAClB,EACA,MACJ,CAKA,GAAK,CAACA,EAAK,QAAU,CACjB,IAAIP,EAAQO,EAAK,SAAS,EAC1B,GAAI,CAACP,EACD,OAGJO,EAAK,QAAuCxiB,EAAE,mBAAoB,KAAM,EACxEwiB,EAAK,WAAuCP,EAAM,UAAU,EAC5DO,EAAK,WAAW,MAAM,oBAAsB,mBAC5CA,EAAK,WAAW,MAAM,MAAsB,OAC5CA,EAAK,WAAW,MAAM,OAAsB,OAE5CA,EAAK,MAA4BA,EAAK,QAAQ,MAC9CA,EAAK,MAAM,SAAsB,UACrC,CAEKA,EAAK,QAAQ,aAAe7Q,GAC7BA,EAAU,YAAa6Q,EAAK,OAAQ,EAEnCA,EAAK,WAAW,aAAeA,EAAK,SACrCA,EAAK,QAAQ,YAAaA,EAAK,UAAW,EAG9CA,EAAK,MAAM,IAAUA,EAAK,SAAS,EAAI,KACvCA,EAAK,MAAM,KAAUA,EAAK,SAAS,EAAI,KACvCA,EAAK,MAAM,OAAUA,EAAK,KAAK,EAAI,KACnCA,EAAK,MAAM,MAAUA,EAAK,KAAK,EAAI,KAE/BA,EAAK,UACLA,EAAK,MAAM,UAAY,cAG3BxiB,EAAE,kBAAmBwiB,EAAK,QAASA,EAAK,OAAQ,CACpD,CAEJ,CAEAxiB,EAAE,WAAaguB,CAGf,EAAGluB,CAAc,EAoChB,SAAUE,EAAG,CAEV,MAAMF,EAAgBE,EAY1B,MAAMmuB,UAAqBruB,EAAc,UAAU,CAC/C,YAAYC,EAAQ,CAChB,MAAMA,CAAO,EAqBb,KAAK,QAAU,KAAK,OAAO,WAAY,IAAK,EAI5C,KAAK,aAAe,KACpB,KAAK,cAAgB,KAIrB,KAAK,uBAAyB,GAG9B,KAAK,OAAO,kBAAkB,YAAY,EAC1C,KAAK,OAAO,kBAAkB,cAAc,CAEhD,CAKA,OAAO,aAAa,CAChB,OAAOC,EAAE,cACb,CAEA,SAAS,CACL,MAAO,QACX,CAMA,uBAAuB,CACnB,IAAIS,EAAST,EAAE,mBAAmB,QAAQ,EACtC+tB,EAAe,KAAK,qBAAqB,EAC7C,OAAAttB,EAAO,MAAQstB,EAAa,EAC5BttB,EAAO,OAASstB,EAAa,EACtBttB,CACX,CAKA,KAAKitB,EAAa,CACd,KAAK,iBAAiB,EACnB,KAAK,OAAO,SAAS,QAAQ,IAAM,KAAK,kBACvC,KAAK,MAAM,EAEf,UAAU7W,KAAc6W,EAChB7W,EAAW,UAAY,GACvB,KAAK,WAAWA,CAAU,CAGtC,CAKA,WAAY,CACR,MAAO,EACX,CAKA,SAAU,CAEN,KAAK,OAAO,MAAS,EACrB,KAAK,OAAO,OAAS,EACrB,KAAK,aAAe,KACpB,KAAK,cAAgB,KACrB,KAAK,UAAU,YAAY,KAAK,MAAM,CAC1C,CAOA,uBAAuBA,EAAY,CAC/B,MAAO,EACX,CAWA,yBAAyB8W,EAAsB,CAC3C,KAAK,uBAAyB,CAAC,CAACA,EAChC,KAAK,6BAA6B,KAAK,OAAO,EAC9C,KAAK,OAAO,YAAY,CAC5B,CAMA,kBAAkBnT,EAAM,CACpB,IAAI3Z,EAAU,KAAK,QACnBA,EAAQ,KAAK,EACbA,EAAQ,UAAY,EAAIb,EAAE,kBAC1Ba,EAAQ,YAAc,KAAK,eAAe,CAAC,EAC3CA,EAAQ,UAAY,KAAK,eAAe,CAAC,EAEzCA,EAAQ,WACJ2Z,EAAK,EAAIxa,EAAE,kBACXwa,EAAK,EAAIxa,EAAE,kBACXwa,EAAK,MAAQxa,EAAE,kBACfwa,EAAK,OAASxa,EAAE,iBACpB,EAEAa,EAAQ,QAAQ,CACpB,CAMA,IAAI,kBAAkB,CAClB,OAAO,KAAK,QAAQ,aAAa,EAAE,EAAI,CAC3C,CAMA,uBAAuBgW,EAAYhW,EAAS2hB,EAAM4L,EAAS,CAgBvD,KAAK,OAAO,WAAW,eAAgB,CACnC,WAAYvX,EACZ,QAAShW,EACT,KAAM2hB,EACN,SAAU4L,CACd,CAAC,CACL,CAOA,kBAAmB,CACf,IAAIL,EAAe,KAAK,qBAAqB,EAC7C,IAAI,KAAK,OAAO,QAAUA,EAAa,GACnC,KAAK,OAAO,SAAWA,EAAa,KACpC,KAAK,OAAO,MAAQA,EAAa,EACjC,KAAK,OAAO,OAASA,EAAa,EAClC,KAAK,6BAA6B,KAAK,OAAO,EACzC,KAAK,eAAiB,MAAO,CAC9B,IAAIhB,EAAmB,KAAK,2BAA2B,EACvD,KAAK,aAAa,MAAQA,EAAiB,EAC3C,KAAK,aAAa,OAASA,EAAiB,EAC5C,KAAK,6BAA6B,KAAK,aAAa,CACxD,CAEJ,KAAK,OAAO,CAChB,CAOA,OAAOsB,EAAW1P,EAAO,CACrB,IAAI9d,EAAU,KAAK,YAAYwtB,CAAS,EACxC,GAAI1P,EACA9d,EAAQ,UAAU8d,EAAO,EAAGA,EAAO,EAAGA,EAAO,MAAOA,EAAO,MAAM,MAC9D,CACH,IAAIle,EAASI,EAAQ,OACrBA,EAAQ,UAAU,EAAG,EAAGJ,EAAO,MAAOA,EAAO,MAAM,CACvD,CACJ,CAOA,WAAYoW,EAAa,CACrB,IAAIoX,EAAapX,EAAW,eAAe,EAAE,IAAIqX,GAAQA,EAAK,IAAI,EAClE,GAAI,EAAArX,EAAW,UAAY,GAAMoX,EAAU,SAAW,GAAK,CAACpX,EAAW,sBAIvE,KAAI2L,EAAOyL,EAAU,CAAC,EAClBI,EAEA7L,IACA6L,EAAYxX,EAAW,QAAU,GAC5BA,EAAW,oBAAsBA,EAAW,qBAAuB,eACnE,CAACA,EAAW,cAAc,GAC3BA,EAAW,OAAO,gBAAgB2L,EAAK,UAAWA,EAAK,OAAO,EAAGA,EAAK,YAAaA,EAAK,QAAQ,GAGxG,IAAI8L,EACAC,EAEA5R,EAAO,KAAK,SAAS,QAAQ,EAAI,EACjC6R,EAAY3X,EAAW,oBAAoB8F,CAAI,EAE/CsR,EAAU,OAAS,GACnBO,EAAY3X,EAAW,wBACvB,CAACA,EAAW,WACZA,EAAW,YAAY,EAAI,EAAI,MAAQ,IAIvCwX,EAAY,GACZC,EAAc9L,EAAK,yBAAyB,EAC5C+L,EAAkB/L,EAAK,+BAA+B8L,EAClD,KAAK,eAAe,EAAK,EACzB,KAAK,eAAe,EAAI,CAAC,GAGjC,IAAI3P,EACA0P,IACKC,IAGD3P,EAAS,KAAK,SAAS,iCACnB9H,EAAW,iBAAiB,EAAI,CAAC,EAChC,sBAAsB,EAE3B8H,EAASA,EAAO,MAAM3e,EAAE,iBAAiB,GAE7C,KAAK,OAAO,GAAM2e,CAAM,GAKvB2P,GACD,KAAK,cAAczX,EAAYwX,CAAS,EAG5C,IAAII,EAAW,GACf,GAAK5X,EAAW,MAAQ,CACpB,KAAK,aAAawX,CAAS,EAE3B,IAAIK,EAAM7X,EAAW,yBAAyBA,EAAW,MAAO,EAAI,EACpE6X,EAAMA,EAAI,OAAO,CAAC7X,EAAW,YAAY,EAAI,EAAGA,EAAW,kBAAkB,EAAI,CAAC,EAClF,IAAI8X,EAAW,KAAK,0BAA0BD,CAAG,EAC7CJ,IACAK,EAAWA,EAAS,MAAML,CAAW,GAErCC,IACAI,EAAWA,EAAS,UAAUJ,CAAe,GAEjD,KAAK,SAASI,EAAUN,CAAS,EAEjCI,EAAW,EACf,CAEA,GAAI5X,EAAW,kBAAmB,CAC9B,IAAI/M,EAAO,KACP2kB,GACA,KAAK,aAAaJ,CAAS,EAE/B,GAAI,CACA,IAAIO,EAAW/X,EAAW,kBAAkB,IAAI,SAAUgY,EAAS,CAC/D,OAAOA,EAAQ,IAAI,SAAUC,EAAO,CAChC,IAAI9rB,EAAQ6T,EACP,2BAA2BiY,EAAM,EAAGA,EAAM,EAAG,EAAI,EACjD,OAAO,CAACjY,EAAW,YAAY,EAAI,EAAGA,EAAW,kBAAkB,EAAI,CAAC,EACzEkY,GAAYjlB,EAAK,2BAA2B9G,CAAK,EACrD,OAAIsrB,IACAS,GAAYA,GAAU,MAAMT,CAAW,GAEvCC,IACAQ,GAAYA,GAAU,KAAKR,CAAe,GAEvCQ,EACX,CAAC,CACL,CAAC,EACD,KAAK,kBAAkBH,EAAUP,CAAS,CAC9C,OAAS1tB,EAAG,CACRX,EAAE,QAAQ,MAAMW,CAAC,CACrB,CACA8tB,EAAW,EACf,CAEA,GADA5X,EAAW,eAAiB,GACvBA,EAAW,sBAAwBA,EAAW,iBAAmB,GAAQ,CAC1E,IAAImY,EAAkB,KAAK,0BAA0BnY,EAAW,kBAAkB,EAAI,CAAC,EACnFyX,IACAU,EAAkBA,EAAgB,MAAMV,CAAW,GAEnDC,IACAS,EAAkBA,EAAgB,UAAUT,CAAe,GAG/D,IAAIU,EAAY,KACX,OAAOpY,EAAW,sBAAyB,WAC5CoY,EAAYpY,EAAW,qBAAqBA,EAAY,KAAK,OAAO,EAGpEoY,EAAYpY,EAAW,qBAG3B,KAAK,eAAemY,EAAiBC,EAAWZ,CAAS,CAC7D,CAEA,IAAIa,EAAuBC,EAA8BtY,EAAW,+BAA+B,EAE/FuY,EAA6B,GAEjC,GAAIF,IAAyBlvB,EAAE,8BAA8B,OACzDovB,EAA6B,WACtBF,IAAyBlvB,EAAE,8BAA8B,aAAc,CAC9E,IAAIqvB,EAAc,KAAK,QAAU,KAAK,OAAO,YAAY,EACzDD,EAA6B,CAACC,CAClC,CAGA,QAAS9tB,EAAI,EAAGA,EAAI0sB,EAAU,OAAQ1sB,IAClCihB,EAAOyL,EAAW1sB,CAAE,EACpB,KAAK,UAAWihB,EAAM3L,EAAYwX,EAAWC,EACzCC,EAAiBa,EAA4BvY,EAAW,MAAO,EAE/D,KAAK,QAaL,KAAK,OAAO,WAAY,aAAc,CAClC,WAAYA,EACZ,KAAM2L,CACV,CAAC,EAIJiM,GACD,KAAK,gBAAiBJ,CAAU,EAG/BC,IACGzX,EAAW,YAAY,EAAI,EAAI,MAAQ,GACvC,KAAK,wBAAwBwX,CAAS,EAEtC,KAAK,SAAS,YAAY,EAAI,EAAI,MAAQ,GAC1C,KAAK,wBAAwBA,CAAS,GAI1CA,IACIC,GACA,KAAK,cAAczX,CAAU,EAEjC,KAAK,YAAY,CACb,QAASA,EAAW,QACpB,MAAOyX,EACP,UAAWC,EACX,mBAAoB1X,EAAW,mBAC/B,OAAQ8H,CACZ,CAAC,EACG2P,IACIzX,EAAW,YAAY,EAAI,EAAI,MAAQ,GACvC,KAAK,wBAAwB,EAAK,EAElC,KAAK,SAAS,YAAY,EAAI,EAAI,MAAQ,GAC1C,KAAK,wBAAwB,EAAK,IAK9C,KAAK,eAAgBA,EAAYoX,CAAU,EAI3C,KAAK,2BAA2BpX,EAAYoX,CAAS,EAEzD,CAOA,eAAgBpX,EAAYoX,EAAY,CACpC,GAAIpX,EAAW,UACX,QAAUtV,EAAI0sB,EAAU,OAAS,EAAG1sB,GAAK,EAAGA,IAAM,CAC9C,IAAIihB,EAAOyL,EAAW1sB,CAAE,EACxB,GAAI,CACA,KAAK,qBAAqBihB,EAAMyL,EAAU,OAAQ1sB,EAAGsV,CAAU,CACnE,OAAQlW,EAAG,CACPX,EAAE,QAAQ,MAAMW,CAAC,CACrB,CACJ,CAER,CASA,kBAAmBiuB,EAAUP,EAAW,CACpC,IAAIxtB,EAAU,KAAK,YAAYwtB,CAAS,EACxCxtB,EAAQ,UAAU,EAClB,UAAUguB,KAAWD,EACjB,SAAU,CAACrtB,EAAGutB,CAAK,IAAKD,EAAQ,QAAQ,EACpChuB,EAAQU,IAAM,EAAI,SAAW,QAAQ,EAAEutB,EAAM,EAAGA,EAAM,CAAC,EAI/DjuB,EAAQ,KAAK,CACjB,CAgBA,UAAW2hB,EAAM3L,EAAYwX,EAAWrO,EAAOsP,EAAWF,EAA4B/kB,EAAQ,CAC1FrK,EAAE,QAAQ,OAAOwiB,EAAM,qCAAqC,EAC5DxiB,EAAE,QAAQ,OAAO6W,EAAY,+CAA+C,EAE5E,IAAIhW,EAAU,KAAK,YAAYwtB,CAAS,EACxCrO,EAAQA,GAAS,EACjB,KAAK,kBAAkBwC,EAAM3hB,EAASgW,EAAYmJ,EAAOsP,EAAWF,EAA4B/kB,CAAM,CAE1G,CAkBA,kBAAmBmY,EAAM3hB,EAASgW,EAAYmJ,EAAOsP,EAAWF,EAA4B/kB,EAAQ,CAEhG,IAAI2iB,EAAWxK,EAAK,SAAS,MAAMxiB,EAAE,iBAAiB,EAClDkD,EAAWsf,EAAK,KAAK,MAAMxiB,EAAE,iBAAiB,EAC9CouB,EAEJ,GAAI,CAAC5L,EAAK,WAAa,CAACA,EAAK,iBAAkB,CAC3CxiB,EAAE,QAAQ,KACN,6EACAwiB,EAAK,SAAS,CAAC,EACnB,MACJ,CAIA,GAFA4L,EAAW5L,EAAK,iBAAiB,EAE5B,CAACA,EAAK,QAAU,CAAC4L,EAAU,CAC5BpuB,EAAE,QAAQ,KACN,uDACAwiB,EAAK,SAAS,CAClB,EAEA,MACJ,CAEA3hB,EAAQ,KAAK,EAET,OAAOmf,GAAU,UAAYA,IAAU,IAEvCgN,EAAWA,EAAS,MAAMhN,CAAK,EAC/B9c,EAAOA,EAAK,MAAM8c,CAAK,GAGvBsP,aAAqBtvB,EAAE,QAEvBgtB,EAAWA,EAAS,KAAKsC,CAAS,GAOlCzuB,EAAQ,cAAgB,GAAK2hB,EAAK,kBAC9B4M,IAEApC,EAAS,EAAI,KAAK,MAAMA,EAAS,CAAC,EAClCA,EAAS,EAAI,KAAK,MAAMA,EAAS,CAAC,EAClC9pB,EAAK,EAAI,KAAK,MAAMA,EAAK,CAAC,EAC1BA,EAAK,EAAI,KAAK,MAAMA,EAAK,CAAC,GAK9BrC,EAAQ,UACJmsB,EAAS,EACTA,EAAS,EACT9pB,EAAK,EACLA,EAAK,CACT,GAGJ,KAAK,uBAAuB2T,EAAYhW,EAAS2hB,EAAM4L,CAAQ,EAE/D,IAAImB,EAAaC,EACbhN,EAAK,cACL+M,EAAc,KAAK,IAAI/M,EAAK,aAAa,MAAO4L,EAAS,OAAO,KAAK,EACrEoB,EAAe,KAAK,IAAIhN,EAAK,aAAa,OAAQ4L,EAAS,OAAO,MAAM,IAExEmB,EAAcnB,EAAS,OAAO,MAC9BoB,EAAepB,EAAS,OAAO,QAGnCvtB,EAAQ,UAAUmsB,EAAS,EAAI9pB,EAAK,EAAI,EAAG,CAAC,EACxCsf,EAAK,SACL3hB,EAAQ,MAAM,GAAI,CAAC,EAEvBA,EAAQ,UACJutB,EAAS,OACT,EACA,EACAmB,EACAC,EACA,CAACtsB,EAAK,EAAI,EACV8pB,EAAS,EACT9pB,EAAK,EACLA,EAAK,CACT,EAEArC,EAAQ,QAAQ,CACpB,CAQA,YAAawtB,EAAY,CACrB,IAAIxtB,EAAU,KAAK,QACnB,GAAKwtB,EAAY,CACb,GAAI,KAAK,eAAiB,KAAM,CAC5B,KAAK,aAAe,SAAS,cAAe,QAAS,EACrD,IAAItB,EAAmB,KAAK,2BAA2B,EAQvD,GAPA,KAAK,aAAa,MAAQA,EAAiB,EAC3C,KAAK,aAAa,OAASA,EAAiB,EAC5C,KAAK,cAAgB,KAAK,aAAa,WAAY,IAAK,EAKpD,KAAK,SAAS,YAAY,IAAM,EAAG,CACnC,IAAIjjB,EAAO,KACX,KAAK,OAAO,WAAW,SAAU,SAAS2lB,GAAqB,CAC3D,GAAI3lB,EAAK,SAAS,YAAY,IAAM,EAGpC,CAAAA,EAAK,OAAO,cAAc,SAAU2lB,CAAkB,EACtD,IAAI1C,EAAmBjjB,EAAK,2BAA2B,EACvDA,EAAK,aAAa,MAAQijB,EAAiB,EAC3CjjB,EAAK,aAAa,OAASijB,EAAiB,EAChD,CAAC,CACL,CACA,KAAK,6BAA6B,KAAK,aAAa,CACxD,CACAlsB,EAAU,KAAK,aACnB,CACA,OAAOA,CACX,CAOA,aAAcwtB,EAAY,CACtB,KAAK,YAAaA,CAAU,EAAE,KAAK,CACvC,CAOA,gBAAiBA,EAAY,CACzB,KAAK,YAAaA,CAAU,EAAE,QAAQ,CAC1C,CAGA,SAAS7T,EAAM6T,EAAW,CACtB,IAAIxtB,EAAU,KAAK,YAAawtB,CAAU,EAC1CxtB,EAAQ,UAAU,EAClBA,EAAQ,KAAK2Z,EAAK,EAAGA,EAAK,EAAGA,EAAK,MAAOA,EAAK,MAAM,EACpD3Z,EAAQ,KAAK,CACjB,CAIA,eAAe2Z,EAAMyU,EAAWZ,EAAW,CACvC,IAAIxtB,EAAU,KAAK,YAAawtB,CAAU,EAC1CxtB,EAAQ,KAAK,EACbA,EAAQ,UAAYouB,EACpBpuB,EAAQ,SAAS2Z,EAAK,EAAGA,EAAK,EAAGA,EAAK,MAAOA,EAAK,MAAM,EACxD3Z,EAAQ,QAAQ,CACpB,CAkBA,YAAY8C,EAASqc,EAAOsP,EAAWI,EAAoB,CACvD,IAAI3vB,EAAU4D,EACT3D,EAAE,cAAcD,CAAO,IACxBA,EAAU,CACN,QAAS4D,EACT,MAAOqc,EACP,UAAWsP,EACX,mBAAoBI,CACxB,GAGJ/rB,EAAU5D,EAAQ,QAClB2vB,EAAqB3vB,EAAQ,mBAC7B,IAAI4e,EAAS5e,EAAQ,OAOrB,GALA,KAAK,QAAQ,KAAK,EAClB,KAAK,QAAQ,YAAc4D,EACvB+rB,IACA,KAAK,QAAQ,yBAA2BA,GAExC/Q,EAIIA,EAAO,EAAI,IACXA,EAAO,OAASA,EAAO,EACvBA,EAAO,EAAI,GAEXA,EAAO,EAAIA,EAAO,MAAQ,KAAK,OAAO,QACtCA,EAAO,MAAQ,KAAK,OAAO,MAAQA,EAAO,GAE1CA,EAAO,EAAI,IACXA,EAAO,QAAUA,EAAO,EACxBA,EAAO,EAAI,GAEXA,EAAO,EAAIA,EAAO,OAAS,KAAK,OAAO,SACvCA,EAAO,OAAS,KAAK,OAAO,OAASA,EAAO,GAGhD,KAAK,QAAQ,UACT,KAAK,aACLA,EAAO,EACPA,EAAO,EACPA,EAAO,MACPA,EAAO,OACPA,EAAO,EACPA,EAAO,EACPA,EAAO,MACPA,EAAO,MACX,MACG,CACHqB,EAAQjgB,EAAQ,OAAS,EACzBuvB,EAAYvvB,EAAQ,UACpB,IAAIitB,EAAWsC,aAAqBtvB,EAAE,MAClCsvB,EAAY,IAAItvB,EAAE,MAAM,EAAG,CAAC,EAE5B2vB,EAAW,EACXC,EAAY,EAChB,GAAIN,EAAW,CACX,IAAIO,EAAY,KAAK,aAAa,MAAQ,KAAK,OAAO,MAClDC,EAAa,KAAK,aAAa,OAAS,KAAK,OAAO,OACxDH,EAAW,KAAK,MAAME,EAAY,CAAC,EACnCD,EAAY,KAAK,MAAME,EAAa,CAAC,CACzC,CACA,KAAK,QAAQ,UACT,KAAK,aACL9C,EAAS,EAAI2C,EAAW3P,EACxBgN,EAAS,EAAI4C,EAAY5P,GACxB,KAAK,OAAO,MAAQ,EAAI2P,GAAY3P,GACpC,KAAK,OAAO,OAAS,EAAI4P,GAAa5P,EACvC,CAAC2P,EACD,CAACC,EACD,KAAK,OAAO,MAAQ,EAAID,EACxB,KAAK,OAAO,OAAS,EAAIC,CAC7B,CACJ,CACA,KAAK,QAAQ,QAAQ,CACzB,CAGA,qBAAqBpN,EAAMzY,EAAOxI,EAAGsV,EAAY,CAE7C,IAAIkZ,EAAa,KAAK,OAAO,MAAM,eAAelZ,CAAU,EAAI,KAAK,eAAe,OAChFhW,EAAU,KAAK,QACnBA,EAAQ,KAAK,EACbA,EAAQ,UAAY,EAAIb,EAAE,kBAC1Ba,EAAQ,KAAO,mBAAsB,GAAKb,EAAE,kBAAqB,WACjEa,EAAQ,YAAc,KAAK,eAAekvB,CAAU,EACpDlvB,EAAQ,UAAY,KAAK,eAAekvB,CAAU,EAElD,KAAK,cAAclZ,CAAU,EAE1B,KAAK,kBACJ,KAAK,MAAM,CAAC,MAAO2L,EAAK,SAAS,KAAKA,EAAK,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,EAG/D3hB,EAAQ,WACJ2hB,EAAK,SAAS,EAAIxiB,EAAE,kBACpBwiB,EAAK,SAAS,EAAIxiB,EAAE,kBACpBwiB,EAAK,KAAK,EAAIxiB,EAAE,kBAChBwiB,EAAK,KAAK,EAAIxiB,EAAE,iBACpB,EAEA,IAAIgwB,GAAexN,EAAK,SAAS,EAAKA,EAAK,KAAK,EAAI,GAAMxiB,EAAE,kBACxDiwB,GAAezN,EAAK,SAAS,EAAKA,EAAK,KAAK,EAAI,GAAMxiB,EAAE,kBAG5Da,EAAQ,UAAWmvB,EAAaC,CAAY,EAC5C,MAAMC,EAAiB,KAAK,SAAS,YAAY,EAAI,EACrDrvB,EAAQ,OAAQ,KAAK,GAAK,IAAM,CAACqvB,CAAe,EAChDrvB,EAAQ,UAAW,CAACmvB,EAAa,CAACC,CAAY,EAE1CzN,EAAK,IAAM,GAAKA,EAAK,IAAM,IAC3B3hB,EAAQ,SACJ,SAAW,KAAK,SAAS,QAAQ,EACjC2hB,EAAK,SAAS,EAAIxiB,EAAE,mBACnBwiB,EAAK,SAAS,EAAI,IAAMxiB,EAAE,iBAC/B,EACAa,EAAQ,SACJ,QAAU,KAAK,SAAS,UAAU,EAAE,SAAS,EAC7C2hB,EAAK,SAAS,EAAIxiB,EAAE,mBACnBwiB,EAAK,SAAS,EAAI,IAAMxiB,EAAE,iBAC/B,GAEJa,EAAQ,SACJ,UAAY2hB,EAAK,OAChBA,EAAK,SAAS,EAAI,IAAMxiB,EAAE,mBAC1BwiB,EAAK,SAAS,EAAI,IAAMxiB,EAAE,iBAC/B,EACAa,EAAQ,SACJ,WAAa2hB,EAAK,GACjBA,EAAK,SAAS,EAAI,IAAMxiB,EAAE,mBAC1BwiB,EAAK,SAAS,EAAI,IAAMxiB,EAAE,iBAC/B,EACAa,EAAQ,SACJ,QAAU2hB,EAAK,GACdA,EAAK,SAAS,EAAI,IAAMxiB,EAAE,mBAC1BwiB,EAAK,SAAS,EAAI,IAAMxiB,EAAE,iBAC/B,EACAa,EAAQ,SACJ,UAAYU,EAAI,OAASwI,GACxByY,EAAK,SAAS,EAAI,IAAMxiB,EAAE,mBAC1BwiB,EAAK,SAAS,EAAI,IAAMxiB,EAAE,iBAC/B,EACAa,EAAQ,SACJ,SAAW2hB,EAAK,KAAK,SAAS,GAC7BA,EAAK,SAAS,EAAI,IAAMxiB,EAAE,mBAC1BwiB,EAAK,SAAS,EAAI,IAAMxiB,EAAE,iBAC/B,EACAa,EAAQ,SACJ,aAAe2hB,EAAK,SAAS,SAAS,GACrCA,EAAK,SAAS,EAAI,IAAMxiB,EAAE,mBAC1BwiB,EAAK,SAAS,EAAI,IAAMxiB,EAAE,iBAC/B,EAEI,KAAK,SAAS,YAAY,EAAI,EAAI,MAAQ,GAC1C,KAAK,wBAAwB,EAE7B6W,EAAW,YAAY,EAAI,EAAI,MAAQ,GACvC,KAAK,wBAAwB,EAGjChW,EAAQ,QAAQ,CACpB,CAGA,6BAA6BA,EAAQ,CACjCA,EAAQ,wBAA0B,KAAK,uBACvCA,EAAQ,sBAAwB,KAAK,sBACzC,CAQA,eAAesvB,EAAQ,CACnB,IAAI1vB,EAAS,KAAK,YAAY0vB,CAAM,EAAE,OACtC,OAAO,IAAInwB,EAAE,MAAMS,EAAO,MAAOA,EAAO,MAAM,CAClD,CAQA,kBAAmB,CACf,OAAO,IAAIT,EAAE,MAAM,KAAK,OAAO,MAAQ,EAAG,KAAK,OAAO,OAAS,CAAC,CACpE,CAQA,cAAc6W,EAAYwX,EAAY,GAAO,CACzC,IAAI+B,EAAc,GACd,KAAK,SAAS,YAAY,EAAI,EAAI,MAAQ,IAC1C,KAAK,mBAAmB,CACpB,QAAS,KAAK,SAAS,YAAY,EAAI,EACvC,UAAW/B,EACX,YAAa+B,CACjB,CAAC,EACDA,EAAc,IAEdvZ,EAAW,YAAY,EAAI,EAAI,MAAQ,GACvC,KAAK,mBAAmB,CACpB,QAASA,EAAW,YAAY,EAAI,EACpC,MAAO,KAAK,SAAS,uBACjBA,EAAW,kBAAkB,EAAI,EAAG,EAAI,EAC5C,UAAWwX,EACX,YAAa+B,CACjB,CAAC,CAET,CAGA,mBAAmBrwB,EAAS,CACxB,IAAIiD,EAAQjD,EAAQ,MAChBA,EAAQ,MAAM,MAAMC,EAAE,iBAAiB,EACvC,KAAK,iBAAiB,EAEtBa,EAAU,KAAK,YAAYd,EAAQ,SAAS,EAChDc,EAAQ,KAAK,EAEbA,EAAQ,UAAUmC,EAAM,EAAGA,EAAM,CAAC,EAClCnC,EAAQ,OAAO,KAAK,GAAK,IAAMd,EAAQ,OAAO,EAC9Cc,EAAQ,UAAU,CAACmC,EAAM,EAAG,CAACA,EAAM,CAAC,CACxC,CAGA,MAAMjD,EAAS,CACXA,EAAUA,GAAW,CAAC,EACtB,IAAIiD,EAAQjD,EAAQ,MACpBA,EAAQ,MAAM,MAAMC,EAAE,iBAAiB,EACvC,KAAK,iBAAiB,EAClBa,EAAU,KAAK,YAAYd,EAAQ,SAAS,EAEhDc,EAAQ,UAAUmC,EAAM,EAAG,CAAC,EAC5BnC,EAAQ,MAAM,GAAI,CAAC,EACnBA,EAAQ,UAAU,CAACmC,EAAM,EAAG,CAAC,CACjC,CAGA,wBAAwBqrB,EAAW,CAC/B,IAAIxtB,EAAU,KAAK,YAAYwtB,CAAS,EACxCxtB,EAAQ,QAAQ,CACpB,CAGA,sBAAuB,CACnB,IAAIitB,EAAoB9tB,EAAE,kBACtB+tB,EAAe,KAAK,SAAS,iBAAiB,EAClD,MAAO,CAEH,EAAG,KAAK,MAAMA,EAAa,EAAID,CAAiB,EAChD,EAAG,KAAK,MAAMC,EAAa,EAAID,CAAiB,CACpD,CACJ,CAGA,4BAA6B,CACzB,IAAIhB,EAAa,KAAK,qBAAqB,EAC3C,GAAI,KAAK,SAAS,YAAY,IAAM,EAChC,OAAOA,EAIX,IAAIC,EAAmB,KAAK,KAAK,KAAK,KAClCD,EAAW,EAAIA,EAAW,EAC1BA,EAAW,EAAIA,EAAW,CAAC,CAAC,EAChC,MAAO,CACH,EAAGC,EACH,EAAGA,CACP,CACJ,CACJ,CACA/sB,EAAE,aAAemuB,EAQjB,IAAIkC,EAAiCrwB,EAAE,8BAA8B,MAUrE,SAASswB,EAA8BvsB,EAAO,CAC1C,OAAOA,IAAU/D,EAAE,8BAA8B,QAC7C+D,IAAU/D,EAAE,8BAA8B,cAC1C+D,IAAU/D,EAAE,8BAA8B,KAClD,CASA,SAASuwB,EAA8BxsB,EAAO,CAC1C,OAAIusB,EAA8BvsB,CAAK,EAC5BssB,EAEJtsB,CACX,CAWA,SAASorB,EAA8BqB,EAAuB,CAC1D,GAAI,OAAOA,GAA0B,SACjC,OAAOD,EAA8BC,CAAqB,EAG9D,GAAI,CAACA,GAAyB,CAACxwB,EAAE,QAC7B,OAAOqwB,EAGX,IAAInB,EAAuBsB,EAAsBxwB,EAAE,QAAQ,MAAM,EAEjE,OAAIswB,EAA8BpB,CAAoB,IAClDA,EAAuBsB,EAAsB,GAAG,GAG7CD,EAA8BrB,CAAoB,CAC7D,CAEA,EAAGpvB,CAAc,EAqChB,SAAUE,EAAG,CAEV,MAAMF,EAAgBE,EAsBtBF,EAAc,YAAc,cAA0BA,EAAc,UAAU,CAC1E,YAAYC,EAAQ,CACjB,MAAMA,CAAO,EAgBZ,KAAK,WAAa,GAClB,KAAK,YAAc,IAAI,IACvB,KAAK,SAAW,IAAI,IAEpB,KAAK,IAAM,KACX,KAAK,WAAa,KAClB,KAAK,YAAc,KACnB,KAAK,eAAiB,KACtB,KAAK,iBAAmB,KACxB,KAAK,gCAAkC,KACvC,KAAK,cAAgB,KACrB,KAAK,eAAiB,KACtB,KAAK,gBAAkB,KACvB,KAAK,iBAAmB,KACxB,KAAK,iBAAmB,KACxB,KAAK,oBAAsB,KAE3B,KAAK,uBAAyB,GAG9B,KAAK,kBAAoB0wB,GAAM,KAAK,kBAAkBA,CAAE,EACxD,KAAK,sBAAwBA,GAAM,KAAK,sBAAsBA,CAAE,EAChE,KAAK,OAAO,WAAW,aAAc,KAAK,iBAAiB,EAC3D,KAAK,OAAO,WAAW,iBAAkB,KAAK,qBAAqB,EAGnE,KAAK,OAAO,mBAAmB,aAAc,qDAAqD,EAClG,KAAK,OAAO,mBAAmB,eAAgB,uDAAuD,EAKtG,KAAK,eAAe,EACpB,KAAK,eAAe,EAEpB,KAAK,QAAU,KAAK,cAEzB,CAMC,SAAS,CACL,GAAG,KAAK,WACJ,OAGJ,IAAIC,EAAK,KAAK,IAGd,IAAIC,EAAkBD,EAAG,aAAaA,EAAG,uBAAuB,EAChE,QAASE,EAAO,EAAGA,EAAOD,EAAiB,EAAEC,EACzCF,EAAG,cAAcA,EAAG,SAAWE,CAAI,EACnCF,EAAG,YAAYA,EAAG,WAAY,IAAI,EAClCA,EAAG,YAAYA,EAAG,iBAAkB,IAAI,EAE5CA,EAAG,WAAWA,EAAG,aAAc,IAAI,EACnCA,EAAG,WAAWA,EAAG,qBAAsB,IAAI,EAC3CA,EAAG,iBAAiBA,EAAG,aAAc,IAAI,EACzCA,EAAG,gBAAgBA,EAAG,YAAa,IAAI,EAEvC,KAAK,gBAAgB,EAGrBA,EAAG,aAAa,KAAK,YAAY,oBAAoB,EACrDA,EAAG,kBAAkB,KAAK,cAAc,EAGxC,KAAK,iBAAiB,MAAQ,KAAK,iBAAiB,OAAS,EAC7D,KAAK,gBAAgB,MAAQ,KAAK,gBAAgB,OAAS,EAC3D,KAAK,cAAc,MAAQ,KAAK,cAAc,OAAS,EACvD,KAAK,iBAAmB,KACxB,KAAK,gBAAkB,KAAK,iBAAmB,KAC/C,KAAK,cAAgB,KAAK,eAAiB,KAE3C,IAAIG,EAAMH,EAAG,aAAa,oBAAoB,EAC3CG,GACCA,EAAI,YAAY,EAIpB,KAAK,OAAO,cAAc,aAAc,KAAK,iBAAiB,EAC9D,KAAK,OAAO,cAAc,iBAAkB,KAAK,qBAAqB,EACtE,KAAK,OAAO,cAAc,SAAU,KAAK,cAAc,EAGvD,KAAK,IAAM,KAER,KAAK,sBACJ,KAAK,oBAAoB,QAAQ,EACjC,KAAK,oBAAsB,MAG/B,KAAK,UAAU,YAAY,KAAK,MAAM,EACnC,KAAK,OAAO,SAAW,OACtB,KAAK,OAAO,OAAS,MAIzB,KAAK,WAAa,EACtB,CAOA,WAAW,CACP,MAAO,EACX,CAMA,OAAO,aAAa,CAChB,IAAIrwB,EAAgB,SAAS,cAAe,QAAS,EACjDswB,EAAe9wB,EAAE,WAAYQ,EAAc,UAAW,GAC9CA,EAAc,WAAY,OAAQ,EAC1CqwB,EAAMC,GAAgBA,EAAa,aAAa,oBAAoB,EACxE,OAAGD,GACCA,EAAI,YAAY,EAEb,CAAC,CAAGC,CACf,CAMA,SAAS,CACL,MAAO,OACX,CAOA,uBAAuBja,EAAY,CAE/B,OAAOA,EAAW,UAAU,CAChC,CAOA,uBAAuB,CACnB,IAAIpW,EAAST,EAAE,mBAAmB,QAAQ,EACtC+tB,EAAe,KAAK,qBAAqB,EAC7C,OAAAttB,EAAO,MAAQstB,EAAa,EAC5BttB,EAAO,OAASstB,EAAa,EACtBttB,CACX,CAQA,wBAAwB,CACpB,OAAI,KAAK,sBACL,KAAK,oBAAsB,KAAK,OAAO,cAAc,SAAU,CAAC,WAAY,EAAK,CAAC,EAClF,KAAK,oBAAoB,OAAO,MAAM,YAAY,aAAc,QAAQ,GAGrE,KAAK,mBAChB,CAMA,KAAKitB,EAAY,CACb,IAAIgD,EAAK,KAAK,IACd,MAAM/R,EAAS,KAAK,SAAS,6BAA6B,EAAI,EAC9D,IAAIoS,EAAO,CACP,OAAQpS,EACR,OAAQ,IAAI7e,EAAc,MAAM6e,EAAO,EAAIA,EAAO,MAAQ,EAAGA,EAAO,EAAIA,EAAO,OAAS,CAAC,EACzF,SAAU,KAAK,SAAS,YAAY,EAAI,EAAI,KAAK,GAAK,GAC1D,EAEIqS,EAAiB,KAAK,SAAS,QAAU,GAAK,EAE9CC,EAAYjxB,EAAE,KAAK,gBAAgB,CAAC+wB,EAAK,OAAO,EAAG,CAACA,EAAK,OAAO,CAAC,EACjEG,EAAclxB,EAAE,KAAK,YAAY,EAAI+wB,EAAK,OAAO,MAAQC,EAAgB,GAAKD,EAAK,OAAO,MAAM,EAChGI,EAAYnxB,EAAE,KAAK,aAAa,CAAC+wB,EAAK,QAAQ,EAC9CK,EAAaF,EAAY,SAASC,CAAS,EAAE,SAASF,CAAS,EAEnEP,EAAG,gBAAgBA,EAAG,YAAa,IAAI,EACvCA,EAAG,MAAMA,EAAG,gBAAgB,EAG5B,KAAK,eAAe,UAAU,EAAG,EAAG,KAAK,cAAc,MAAO,KAAK,cAAc,MAAM,EAGvF,IAAIW,EAA8B,GAGlC3D,EAAY,QAAS,CAAC7W,EAAYya,IAAoB,CAElD,GAAGza,EAAW,UAAU,EAAE,CAEnBwa,IACC,KAAK,eAAe,UAAU,KAAK,iBAAkB,EAAG,CAAC,EAEzDX,EAAG,gBAAgBA,EAAG,YAAa,IAAI,EACvCA,EAAG,MAAMA,EAAG,gBAAgB,EAC5BW,EAA8B,IAIlC,MAAME,EAAe,KAAK,uBAAuB,EACjDA,EAAa,KAAK,CAAC1a,CAAU,CAAC,EAC9B,KAAK,eAAe,UAAU0a,EAAa,OAAQ,EAAG,CAAC,CAE3D,KAAO,CACH,IAAIC,EAAc3a,EAAW,eAAe,EAM5C,GAJKA,EAAW,sBAAwBA,EAAW,iBAAmB,IAClE,KAAK,iBAAiBA,CAAU,EAGjC2a,EAAY,SAAW,GAAK3a,EAAW,WAAW,IAAM,EACvD,OAEJ,IAAI4a,EAAYD,EAAY,CAAC,EAEzBE,EAAyB7a,EAAW,oBACpC,KAAK,OAAO,oBACZA,EAAW,OACXA,EAAW,mBACXA,EAAW,UAGX8a,EAAsBD,GAAyB7a,EAAW,QAAU,GAAM4a,EAAU,gBAGrFC,IAGIL,GACC,KAAK,eAAe,UAAU,KAAK,iBAAkB,EAAG,CAAC,EAI7DX,EAAG,gBAAgBA,EAAG,YAAa,IAAI,EACvCA,EAAG,MAAMA,EAAG,gBAAgB,GAIhCA,EAAG,WAAW,KAAK,WAAW,aAAa,EAGxCiB,GACCjB,EAAG,gBAAgBA,EAAG,YAAa,KAAK,cAAc,EAEtDA,EAAG,MAAMA,EAAG,gBAAgB,GAE5BA,EAAG,gBAAgBA,EAAG,YAAa,IAAI,EAI3C,IAAIkB,EAAgBR,EAEhBS,EAAgBhb,EAAW,YAAY,EAAI,EAE/C,GAAIgb,EAAgB,MAAQ,EAAE,CAC1B,IAAIC,EAAsB9xB,EAAE,KAAK,aAAa,CAAC6xB,EAAgB,KAAK,GAAK,GAAG,EACxEE,EAAclb,EAAW,kBAAkB,EAAI,EAAE,UAAU,EAC3Dmb,EAAKhyB,EAAE,KAAK,gBAAgB+xB,EAAY,EAAGA,EAAY,CAAC,EACxDE,GAAKjyB,EAAE,KAAK,gBAAgB,CAAC+xB,EAAY,EAAG,CAACA,EAAY,CAAC,EAG1DG,GAAcF,EAAG,SAASF,CAAmB,EAAE,SAASG,EAAE,EAC9DL,EAAgBR,EAAW,SAASc,EAAW,CACnD,CAEA,IAAIC,EAAc,KAAK,IAAI,aAAa,KAAK,IAAI,uBAAuB,EACxE,GAAGA,GAAe,EAOd,MAAM,IAAI,MAAM,oEAAoEA,CAAW;AAAA,qIACc,EAGjH,IAAIC,EAAuB,IAAI,aAAaD,EAAc,EAAE,EACxDE,EAAmB,IAAI,MAAMF,CAAW,EACxCG,EAAc,IAAI,MAAMH,CAAW,EACnCI,EAAe,IAAI,MAAMJ,CAAW,EAGxC,QAAQK,EAAY,EAAGA,EAAYhB,EAAY,OAAQgB,IAAY,CAC/D,IAAIhQ,EAAOgP,EAAYgB,CAAS,EAAE,KAC9BC,EAAmBD,EAAYL,EAC/BO,GAAkBD,EAAmB,EACrCE,GAAcnQ,EAAK,iBAAiB,EAEpCoQ,GAAcD,GAAc,KAAK,YAAY,IAAIA,GAAY,MAAM,EAAI,KAe3E,GAdIC,KAGA,KAAK,kBAAkB,CAAC,KAAMpQ,EAAM,WAAY3L,CAAU,CAAC,EAG3D+b,GAAcD,GAAc,KAAK,YAAY,IAAIA,GAAY,MAAM,EAAI,MAGxEC,IACC,KAAK,aAAapQ,EAAM3L,EAAY+b,GAAahB,EAAea,EAAkBL,EAAsBC,EAAkBC,EAAaC,CAAY,EAIlJG,KAAmBP,GAAiBK,IAAchB,EAAY,OAAS,EAAG,CAI3E,QAAQjwB,GAAI,EAAGA,IAAKmxB,GAAgBnxB,KAChCmvB,EAAG,cAAcA,EAAG,SAAWnvB,EAAC,EAChCmvB,EAAG,YAAYA,EAAG,WAAY2B,EAAiB9wB,EAAC,CAAC,EAIrDmvB,EAAG,WAAWA,EAAG,aAAc,KAAK,WAAW,qBAAqB,EACpEA,EAAG,WAAWA,EAAG,aAAc0B,EAAsB1B,EAAG,YAAY,EAGpE4B,EAAY,QAAS,CAACO,GAAQ3oB,KAAU,CACpCwmB,EAAG,iBAAiB,KAAK,WAAW,mBAAmBxmB,EAAK,EAAG,GAAO2oB,EAAM,CAChF,CAAC,EAEDnC,EAAG,WAAW,KAAK,WAAW,WAAY,IAAI,aAAa6B,CAAY,CAAC,EAGxE7B,EAAG,WAAWA,EAAG,aAAc,KAAK,WAAW,oBAAoB,EACnEA,EAAG,oBAAoB,KAAK,WAAW,gBAAiB,EAAGA,EAAG,MAAO,GAAO,EAAG,CAAC,EAEhFA,EAAG,WAAWA,EAAG,aAAc,KAAK,WAAW,qBAAqB,EACpEA,EAAG,oBAAoB,KAAK,WAAW,iBAAkB,EAAGA,EAAG,MAAO,GAAO,EAAG,CAAC,EAEjFA,EAAG,WAAWA,EAAG,aAAc,KAAK,WAAW,WAAW,EAC1DA,EAAG,oBAAoB,KAAK,WAAW,OAAQ,EAAGA,EAAG,MAAO,GAAO,EAAG,CAAC,EAGvEA,EAAG,WAAWA,EAAG,UAAW,EAAG,EAAIgC,EAAe,CACtD,CACJ,CAEGf,IAECjB,EAAG,WAAW,KAAK,YAAY,aAAa,EAG5CA,EAAG,gBAAgBA,EAAG,YAAa,IAAI,EAGvCA,EAAG,cAAcA,EAAG,QAAQ,EAC5BA,EAAG,YAAYA,EAAG,WAAY,KAAK,gBAAgB,EAGnD,KAAK,IAAI,UAAU,KAAK,YAAY,mBAAoB7Z,EAAW,OAAO,EAG1E6Z,EAAG,WAAWA,EAAG,aAAc,KAAK,YAAY,qBAAqB,EACrEA,EAAG,oBAAoB,KAAK,YAAY,iBAAkB,EAAGA,EAAG,MAAO,GAAO,EAAG,CAAC,EAClFA,EAAG,WAAWA,EAAG,aAAc,KAAK,YAAY,oBAAoB,EACpEA,EAAG,oBAAoB,KAAK,YAAY,gBAAiB,EAAGA,EAAG,MAAO,GAAO,EAAG,CAAC,EAGjFA,EAAG,WAAWA,EAAG,UAAW,EAAG,CAAC,GAIpCW,EAA8B,GAE3BK,IAEC,KAAK,wBAAwB7a,EAAY2a,EAAaF,CAAe,EACrED,EAA8B,GAE9BX,EAAG,gBAAgBA,EAAG,YAAa,IAAI,EACvCA,EAAG,MAAMA,EAAG,gBAAgB,GAI7BY,IAAoB,GACnB,KAAK,2BAA2Bza,EAAY2a,EAAY,IAAItD,GAAMA,EAAK,IAAI,CAAC,CAEpF,CAIJ,CAAC,EAEEmD,GACC,KAAK,eAAe,UAAU,KAAK,iBAAkB,EAAG,CAAC,CAGjE,CAOA,yBAAyBlf,EAAQ,CACzB,KAAK,yBAA2BA,IAChC,KAAK,uBAAyBA,EAC9B,KAAK,gBAAgB,EACrB,KAAK,OAAO,MAAM,KAAK,EAE/B,CAMA,kBAAkBqI,EAAK,CACnB,IAAI3Z,EAAU,KAAK,eACnBA,EAAQ,KAAK,EACbA,EAAQ,UAAY,EAAIb,EAAE,kBAC1Ba,EAAQ,YAAc,KAAK,eAAe,CAAC,EAC3CA,EAAQ,UAAY,KAAK,eAAe,CAAC,EAEzCA,EAAQ,WACJ2Z,EAAK,EAAIxa,EAAE,kBACXwa,EAAK,EAAIxa,EAAE,kBACXwa,EAAK,MAAQxa,EAAE,kBACfwa,EAAK,OAASxa,EAAE,iBACpB,EAEAa,EAAQ,QAAQ,CACpB,CAGA,wBAAwB2hB,EAAK,CACzB,OAAOA,EAAK,iBAAiB,EAAE,MACnC,CASA,wBAAwB3L,EAAY2a,EAAaF,EAAgB,CAc7D,GAZA,KAAK,eAAe,KAAK,EAGzB,KAAK,eAAe,yBAA2BA,IAAoB,EAAI,KAAOza,EAAW,oBAAsB,KAAK,OAAO,mBACxHA,EAAW,mBAAqBA,EAAW,OAC1C,KAAK,wBAAwBA,CAAU,EACvC,KAAK,eAAe,UAAU,KAAK,gBAAiB,EAAG,CAAC,GAGxD,KAAK,eAAe,UAAU,KAAK,iBAAkB,EAAG,CAAC,EAE7D,KAAK,eAAe,QAAQ,EACzBA,EAAW,UAAU,CACpB,MAAMic,EAAU,KAAK,OAAO,SAAS,QAAQ,EAC1CA,GACC,KAAK,MAAM,EAEf,KAAK,eAAetB,EAAa3a,EAAYic,CAAO,EACjDA,GACC,KAAK,MAAM,CAEnB,CAGJ,CAGA,aAAatQ,EAAM3L,EAAY+b,EAAaxB,EAAYlnB,EAAOkoB,EAAsBC,EAAkBC,EAAaC,EAAa,CAE7H,IAAIQ,EAAUH,EAAY,QACtBI,EAAcJ,EAAY,SAG9BR,EAAqB,IAAIY,EAAa9oB,EAAQ,EAAE,EAGhD,IAAI+oB,EAAkB,KAAK,0BAA0BzQ,EAAM3L,CAAU,EACjEqc,EAAU1Q,EAAK,iBAAiB,MAAQyQ,EAAgB,EACxDE,EAAU3Q,EAAK,iBAAiB,OAASyQ,EAAgB,EAGzD3Y,EAAIkI,EAAK,iBAAiB,GAAKA,EAAK,IAAM,EAAI,EAAI0Q,GAClD3Y,EAAIiI,EAAK,iBAAiB,GAAKA,EAAK,IAAM,EAAI,EAAI2Q,GAClDtK,EAAQrG,EAAK,iBAAiB,EAAIA,EAAK,iBAAiB,OAASA,EAAK,YAAc,EAAI0Q,GACxFpK,EAAStG,EAAK,iBAAiB,EAAIA,EAAK,iBAAiB,QAAUA,EAAK,aAAe,EAAI2Q,GAC3FpsB,EAAI8hB,EAAQvO,EACZ8Y,EAAItK,EAASvO,EAEbsY,EAAS,IAAI7yB,EAAE,KAAK,CACpB+G,EAAG,EAAG,EACN,EAAGqsB,EAAG,EACN9Y,EAAGC,EAAG,CACV,CAAC,EAED,GAAGiI,EAAK,QAAQ,CAEZ,IAAIwP,EAAKhyB,EAAE,KAAK,gBAAgB,GAAK,CAAC,EAClCiyB,EAAKjyB,EAAE,KAAK,gBAAgB,IAAM,CAAC,EAGnCkyB,EAAcF,EAAG,SAAShyB,EAAE,KAAK,YAAY,GAAI,CAAC,CAAC,EAAE,SAASiyB,CAAE,EACpEY,EAASA,EAAO,SAASX,CAAW,CACxC,CAEA,IAAIN,EAAgBR,EAAW,SAASyB,CAAM,EAE9CN,EAAaroB,CAAK,EAAIsY,EAAK,QAC3B6P,EAAiBnoB,CAAK,EAAI6oB,EAC1BT,EAAYpoB,CAAK,EAAI0nB,EAAc,MAEvC,CAGA,gBAAgB,CACZ,OAAO,KAAK,uBAAyB,KAAK,IAAI,OAAS,KAAK,IAAI,OACpE,CAGA,gBAAgB,CACZ,IAAIlB,EAAK,KAAK,IACVA,GACA1wB,EAAE,QAAQ,MAAM,qDAAqD,EAEzE,KAAK,UAAY,KAAK,sBAAsB,EAAG,EAAG,EAAG,CAAC,EAEtD,KAAK,4BAA4B,EACjC,KAAK,6BAA6B,EAGlC,KAAK,iBAAmB0wB,EAAG,cAAc,EACzCA,EAAG,cAAcA,EAAG,QAAQ,EAC5BA,EAAG,YAAYA,EAAG,WAAY,KAAK,gBAAgB,EACnDA,EAAG,WAAWA,EAAG,WAAY,EAAGA,EAAG,KAAM,KAAK,iBAAiB,MAAO,KAAK,iBAAiB,OAAQ,EAAGA,EAAG,KAAMA,EAAG,cAAe,IAAI,EACtIA,EAAG,cAAcA,EAAG,WAAYA,EAAG,mBAAoB,KAAK,eAAe,CAAC,EAC5EA,EAAG,cAAcA,EAAG,WAAYA,EAAG,eAAgBA,EAAG,aAAa,EACnEA,EAAG,cAAcA,EAAG,WAAYA,EAAG,eAAgBA,EAAG,aAAa,EAGnE,KAAK,eAAiBA,EAAG,kBAAkB,EAC3CA,EAAG,gBAAgBA,EAAG,YAAa,KAAK,cAAc,EACtDA,EAAG,qBACCA,EAAG,YACHA,EAAG,kBACHA,EAAG,WACH,KAAK,iBACL,CACJ,EAEAA,EAAG,OAAOA,EAAG,KAAK,EAClBA,EAAG,UAAUA,EAAG,IAAKA,EAAG,mBAAmB,CAE/C,CAGA,6BAA6B,CACzB,IAAI2C,EAAc,KAAK,eAAiB,KAAK,IAAI,aAAa,KAAK,IAAI,uBAAuB,EAC1FC,EAAqB,IACd,CAAC,GAAG,MAAMD,CAAW,EAAE,KAAK,CAAC,EAAE,IAAInpB,GAAS,yBAAyBA,CAAK,GAAG,EAAE,KAAK;AAAA,CAAI,EAE/FqpB,EAAmB,IACZ,CAAC,GAAG,MAAMF,CAAW,EAAE,KAAK,CAAC,EAAE,IAAInpB,GAAS,GAAGA,EAAQ,EAAI,QAAU,EAAE,sBAAsBA,CAAK,mCAAmCA,CAAK,KAAK,EAAE,KAAK;AAAA,CAAI,EAGrK,MAAMspB,EAAsB;AAAA;AAAA;AAAA;AAAA;AAAA,cAK1BF,EAAmB,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAShBC,EAAiB,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cASlBE,EAAwB;AAAA;AAAA;AAAA;AAAA,yCAIDJ,CAAW;AAAA;AAAA,wCAEZA,CAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qCAQdA,CAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAQpC,IAAI3C,EAAK,KAAK,IAEVgD,EAAU,KAAK,YAAY,kBAAkBhD,EAAI8C,EAAqBC,CAAqB,EAC/F/C,EAAG,WAAWgD,CAAO,EAGrB,KAAK,WAAa,CACd,cAAeA,EACf,gBAAiBhD,EAAG,kBAAkBgD,EAAS,mBAAmB,EAClE,iBAAkBhD,EAAG,kBAAkBgD,EAAS,oBAAoB,EACpE,OAAQhD,EAAG,kBAAkBgD,EAAS,SAAS,EAC/C,mBAAoB,CAAC,GAAG,MAAM,KAAK,cAAc,EAAE,KAAK,CAAC,EAAE,IAAInyB,GAAGmvB,EAAG,mBAAmBgD,EAAS,YAAYnyB,CAAC,EAAE,CAAC,EACjH,QAASmvB,EAAG,mBAAmBgD,EAAS,UAAU,EAClD,WAAYhD,EAAG,mBAAmBgD,EAAS,aAAa,EACxD,qBAAsBhD,EAAG,aAAa,EACtC,sBAAuBA,EAAG,aAAa,EACvC,YAAaA,EAAG,aAAa,CACjC,EAEAA,EAAG,WAAW,KAAK,WAAW,QAAS,CAAC,GAAG,MAAM2C,CAAW,EAAE,KAAK,CAAC,CAAC,EAGrE,IAAIM,EAAc,IAAI,aAAaN,EAAc,EAAE,EACnD,QAAQ9xB,EAAI,EAAGA,EAAI8xB,EAAa,EAAE9xB,EAC9BoyB,EAAY,IAAI,aAAa,KAAK,KAAK,SAAS,EAAGpyB,EAAI,EAAE,EAE7DmvB,EAAG,WAAWA,EAAG,aAAc,KAAK,WAAW,oBAAoB,EACnEA,EAAG,WAAWA,EAAG,aAAciD,EAAajD,EAAG,WAAW,EAC1DA,EAAG,wBAAwB,KAAK,WAAW,eAAe,EAG1DA,EAAG,WAAWA,EAAG,aAAc,KAAK,WAAW,qBAAqB,EACpEA,EAAG,wBAAwB,KAAK,WAAW,gBAAgB,EAG3DA,EAAG,WAAWA,EAAG,aAAc,KAAK,WAAW,WAAW,EAC1D,IAAIkD,EAAU,CAAC,GAAG,MAAM,KAAK,cAAc,EAAE,KAAK,CAAC,EAAE,IAAIryB,GAAK,MAAM,CAAC,EAAE,KAAKA,CAAC,CAAC,EAAE,KAAK,EACrFmvB,EAAG,WAAWA,EAAG,aAAc,IAAI,aAAakD,CAAO,EAAGlD,EAAG,WAAW,EACxEA,EAAG,wBAAwB,KAAK,WAAW,MAAM,CAErD,CAGA,8BAA8B,CAC1B,MAAM8C,EAAsB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAetBC,EAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAkB9B,IAAI/C,EAAK,KAAK,IAEVgD,EAAU,KAAK,YAAY,kBAAkBhD,EAAI8C,EAAqBC,CAAqB,EAC/F/C,EAAG,WAAWgD,CAAO,EAGrB,KAAK,YAAc,CACf,cAAeA,EACf,gBAAiBhD,EAAG,kBAAkBgD,EAAS,mBAAmB,EAClE,iBAAkBhD,EAAG,kBAAkBgD,EAAS,oBAAoB,EACpE,QAAShD,EAAG,mBAAmBgD,EAAS,UAAU,EAClD,OAAQhD,EAAG,mBAAmBgD,EAAS,SAAS,EAChD,mBAAoBhD,EAAG,mBAAmBgD,EAAS,sBAAsB,EACzE,qBAAsBhD,EAAG,aAAa,EACtC,sBAAuBA,EAAG,aAAa,CAC3C,EAIAA,EAAG,WAAWA,EAAG,aAAc,KAAK,YAAY,oBAAoB,EACpEA,EAAG,WAAWA,EAAG,aAAc,KAAK,UAAWA,EAAG,WAAW,EAC7DA,EAAG,wBAAwB,KAAK,YAAY,eAAe,EAG3DA,EAAG,WAAWA,EAAG,aAAc,KAAK,YAAY,qBAAqB,EACrEA,EAAG,WAAWA,EAAG,aAAc,KAAK,UAAWA,EAAG,YAAY,EAC9DA,EAAG,wBAAwB,KAAK,YAAY,gBAAgB,EAG5D,IAAImC,EAAS7yB,EAAE,KAAK,YAAY,EAAG,CAAC,EAAE,SAASA,EAAE,KAAK,gBAAgB,IAAM,GAAI,CAAC,EACjF0wB,EAAG,iBAAiB,KAAK,YAAY,QAAS,GAAOmC,EAAO,MAAM,CACtE,CAGA,iBAAiB,CACb,IAAInC,EAAK,KAAK,IACV3pB,EAAI,KAAK,iBAAiB,MAC1BqsB,EAAI,KAAK,iBAAiB,OAC9B1C,EAAG,SAAS,EAAG,EAAG3pB,EAAGqsB,CAAC,EAGtB1C,EAAG,cAAc,KAAK,gBAAgB,EAEtC,KAAK,iBAAmBA,EAAG,cAAc,EACzCA,EAAG,cAAcA,EAAG,QAAQ,EAC5BA,EAAG,YAAYA,EAAG,WAAY,KAAK,gBAAgB,EACnDA,EAAG,WAAWA,EAAG,WAAY,EAAGA,EAAG,KAAM3pB,EAAGqsB,EAAG,EAAG1C,EAAG,KAAMA,EAAG,cAAe,IAAI,EACjFA,EAAG,cAAcA,EAAG,WAAYA,EAAG,mBAAoB,KAAK,eAAe,CAAC,EAC5EA,EAAG,cAAcA,EAAG,WAAYA,EAAG,eAAgBA,EAAG,aAAa,EACnEA,EAAG,cAAcA,EAAG,WAAYA,EAAG,eAAgBA,EAAG,aAAa,EAGnEA,EAAG,gBAAgBA,EAAG,YAAa,KAAK,cAAc,EACtDA,EAAG,qBAAqBA,EAAG,YAAaA,EAAG,kBAAmBA,EAAG,WAAY,KAAK,iBAAkB,CAAC,CAEzG,CAGA,gBAAgB,CACZ,IAAIhmB,EAAQ,KAEZ,KAAK,cAAgB,KAAK,OAC1B,KAAK,eAAiB,KAAK,cAAc,WAAW,IAAI,EAExD,KAAK,iBAAmB,SAAS,cAAc,QAAQ,EAEvD,KAAK,gBAAkB,SAAS,cAAc,QAAQ,EACtD,KAAK,iBAAmB,KAAK,gBAAgB,WAAW,IAAI,EAC5D,KAAK,iBAAiB,MAAQ,KAAK,gBAAgB,MAAQ,KAAK,cAAc,MAC9E,KAAK,iBAAiB,OAAS,KAAK,gBAAgB,OAAS,KAAK,cAAc,OAEhF,KAAK,IAAM,KAAK,iBAAiB,WAAW,OAAO,EAEnD,KAAK,eAAiB,UAAU,CAEzBA,EAAM,gBAAkBA,EAAM,OAAO,OAAO,SAC3CA,EAAM,cAAc,MAAM,MAAQA,EAAM,OAAO,OAAO,OAAO,YAAc,KAC3EA,EAAM,cAAc,MAAM,OAASA,EAAM,OAAO,OAAO,OAAO,aAAe,MAGjF,IAAIqjB,EAAerjB,EAAM,qBAAqB,GAC1CA,EAAM,cAAc,QAAUqjB,EAAa,GAC3CrjB,EAAM,cAAc,SAAWqjB,EAAa,KAC5CrjB,EAAM,cAAc,MAAQqjB,EAAa,EACzCrjB,EAAM,cAAc,OAASqjB,EAAa,GAG9CrjB,EAAM,iBAAiB,MAAM,MAAQA,EAAM,cAAc,YAAc,KACvEA,EAAM,iBAAiB,MAAM,OAASA,EAAM,cAAc,aAAe,KACzEA,EAAM,iBAAiB,MAAQA,EAAM,gBAAgB,MAAQA,EAAM,cAAc,MACjFA,EAAM,iBAAiB,OAASA,EAAM,gBAAgB,OAASA,EAAM,cAAc,OAGnFA,EAAM,gBAAgB,CAC1B,EAGA,KAAK,OAAO,WAAW,SAAU,KAAK,cAAc,CACxD,CAGA,sBAAsBie,EAAME,EAAOD,EAAKE,EAAO,CAC3C,OAAO,IAAI,aAAa,CACpBH,EAAMG,EACND,EAAOC,EACPH,EAAMC,EACND,EAAMC,EACNC,EAAOC,EACPD,EAAOD,CAAG,CAAC,CACnB,CAGA,kBAAkBzlB,EAAM,CACpB,IAAIqf,EAAOrf,EAAM,KACb0T,EAAa1T,EAAM,WAIvB,GAAG0T,EAAW,UAAU,EACpB,OAGJ,IAAI8b,EAAcnQ,EAAK,iBAAiB,EACpC/hB,EAASkyB,GAAeA,EAAY,OAIxC,GAAG,CAAClyB,GAAUT,EAAE,gBAAgBS,CAAM,EAAE,CACjBoW,EAAW,UAAU,IAEpCA,EAAW,WAAW,EAAI,EAC1B7W,EAAE,QAAQ,KAAK,kHAAkH,EACjI,KAAK,uBAAuB6W,EAAY,mGAAmG,GAE/I,MACJ,CAKA,GAAG,CAHe,KAAK,YAAY,IAAIpW,CAAM,EAG7B,CACZ,IAAIiwB,EAAK,KAAK,IAGVqC,EAAUrC,EAAG,cAAc,EAC3B1D,EACA6G,EAAUhd,EAAW,OAAO,YAG5Bid,EAAqBC,EASzB,GARIvR,EAAK,cACLsR,EAAsB,KAAK,IAAItR,EAAK,aAAa,MAAO/hB,EAAO,KAAK,EAAIA,EAAO,MAC/EszB,EAAuB,KAAK,IAAIvR,EAAK,aAAa,OAAQ/hB,EAAO,MAAM,EAAIA,EAAO,SAElFqzB,EAAsB,EACtBC,EAAuB,GAGvBF,EAAU,EAAE,CAGZ,IAAIZ,EAAkB,KAAK,0BAA0BzQ,EAAM3L,CAAU,EAEjE8R,GAAQnG,EAAK,IAAM,EAAI,EAAIyQ,EAAgB,GAAKa,EAChDlL,GAAOpG,EAAK,IAAM,EAAI,EAAIyQ,EAAgB,GAAKc,EAC/ClL,GAASrG,EAAK,YAAc,EAAI,EAAIyQ,EAAgB,GAAKa,EACzDhL,GAAUtG,EAAK,aAAe,EAAI,EAAIyQ,EAAgB,GAAKc,EAC/D/G,EAAW,KAAK,sBAAsBrE,EAAME,EAAOD,EAAKE,CAAM,CAClE,MAAWgL,IAAwB,GAAKC,IAAyB,EAE7D/G,EAAW,KAAK,UAEhBA,EAAW,KAAK,sBAAsB,EAAG8G,EAAqB,EAAGC,CAAoB,EAGzF,IAAInB,EAAc,CACd,QAASG,EACT,SAAU/F,CACd,EAGA,KAAK,YAAY,IAAIvsB,EAAQmyB,CAAW,EACxClC,EAAG,cAAcA,EAAG,QAAQ,EAC5BA,EAAG,YAAYA,EAAG,WAAYqC,CAAO,EAErCrC,EAAG,cAAcA,EAAG,WAAYA,EAAG,eAAgBA,EAAG,aAAa,EACnEA,EAAG,cAAcA,EAAG,WAAYA,EAAG,eAAgBA,EAAG,aAAa,EACnEA,EAAG,cAAcA,EAAG,WAAYA,EAAG,mBAAoB,KAAK,eAAe,CAAC,EAC5EA,EAAG,cAAcA,EAAG,WAAYA,EAAG,mBAAoB,KAAK,eAAe,CAAC,EAG5E,KAAK,iBAAiBiC,CAAW,CAErC,CAEJ,CAGA,0BAA0BnQ,EAAM3L,EAAW,CACvC,IAAIgd,EAAUhd,EAAW,OAAO,YAC5Bmd,EAAcxR,EAAK,aAAa,MAChCyR,EAAezR,EAAK,aAAa,OACjC0R,GAAiB1R,EAAK,IAAM,EAAI,EAAIqR,IAAYrR,EAAK,YAAc,EAAIqR,GACvEM,GAAiB3R,EAAK,IAAM,EAAI,EAAIqR,IAAYrR,EAAK,aAAe,EAAIqR,GACxEO,EAAuBP,GAAWG,EAAcE,GAChDG,EAAwBR,GAAWI,EAAeE,GACtD,MAAO,CACH,EAAGC,EACH,EAAGC,CACP,CACJ,CAGA,iBAAiB,CACE,MAAM,KAAK,KAAK,YAAY,KAAK,CAAC,EACxC,QAAQ5zB,GAAU,CACvB,KAAK,kBAAkBA,CAAM,CACjC,CAAC,CACL,CAGA,iBAAiBkyB,EAAY,CAEzB,IAAIjC,EAAK,KAAK,IACVjwB,EAASkyB,EAAY,OAEzB,GAAG,CACC,GAAG,CAAClyB,EACA,MAA6CkyB,EAIjDjC,EAAG,WAAWA,EAAG,WAAY,EAAGA,EAAG,KAAMA,EAAG,KAAMA,EAAG,cAAejwB,CAAM,CAC9E,OAASE,EAAE,CACPX,EAAE,QAAQ,MAAM,sCAAuCW,CAAC,CAC5D,CACJ,CAGA,sBAAsBwC,EAAM,CACxB,IAAI1C,EAAS0C,EAAM,UAAU,OAC7B,KAAK,kBAAkB1C,CAAM,CACjC,CAGA,kBAAkB6zB,EAAW,CACzB,IAAI1B,EAAc,KAAK,YAAY,IAAI0B,CAAU,EAEjD,KAAK,YAAY,OAAOA,CAAU,EAG/B1B,GACC,KAAK,IAAI,cAAcA,EAAY,OAAO,CAGlD,CAGA,UAAU,CAGV,CAGA,wBAAwBzU,EAAK,CAIzB,GAFA,KAAK,iBAAiB,UAAU,EAAG,EAAG,KAAK,gBAAgB,MAAO,KAAK,gBAAgB,MAAM,EAC7F,KAAK,iBAAiB,KAAK,EACxB,KAAK,OAAO,SAAS,QAAQ,EAAE,CAC9B,MAAMnb,EAAQ,IAAIhD,EAAE,MAAM,KAAK,OAAO,MAAQ,EAAG,KAAK,OAAO,OAAS,CAAC,EACvE,KAAK,iBAAiB,UAAUgD,EAAM,EAAG,CAAC,EAC1C,KAAK,iBAAiB,MAAM,GAAI,CAAC,EACjC,KAAK,iBAAiB,UAAU,CAACA,EAAM,EAAG,CAAC,CAC/C,CAEA,GAAGmb,EAAK,MAAM,CAOV,IAAIoW,EANY,CACZ,CAAC,EAAGpW,EAAK,MAAM,EAAG,EAAGA,EAAK,MAAM,CAAC,EACjC,CAAC,EAAGA,EAAK,MAAM,EAAIA,EAAK,MAAM,MAAO,EAAGA,EAAK,MAAM,CAAC,EACpD,CAAC,EAAGA,EAAK,MAAM,EAAIA,EAAK,MAAM,MAAO,EAAGA,EAAK,MAAM,EAAIA,EAAK,MAAM,MAAM,EACxE,CAAC,EAAGA,EAAK,MAAM,EAAG,EAAGA,EAAK,MAAM,EAAIA,EAAK,MAAM,MAAM,CACzD,EACyB,IAAI2Q,GAAS,CAClC,IAAI9rB,EAAQmb,EAAK,2BAA2B2Q,EAAM,EAAGA,EAAM,EAAG,EAAI,EAC7D,OAAO,KAAK,OAAO,SAAS,YAAY,EAAI,EAAG,KAAK,OAAO,SAAS,UAAU,EAAI,CAAC,EAExF,OADgB,KAAK,2BAA2B9rB,CAAK,CAEzD,CAAC,EACD,KAAK,iBAAiB,UAAU,EAChCuxB,EAAW,QAAS,CAACzF,EAAOvtB,IAAM,CAC9B,KAAK,iBAAiBA,IAAM,EAAI,SAAW,QAAQ,EAAEutB,EAAM,EAAGA,EAAM,CAAC,CACzE,CAAC,EACD,KAAK,iBAAiB,KAAK,EAC3B,KAAK,SAAS,CAClB,CACA,GAAG3Q,EAAK,kBAAkB,CACtB,IAAIyQ,EAAWzQ,EAAK,kBAAkB,IAAI0Q,GAC/BA,EAAQ,IAAIC,GAAS,CACxB,IAAI9rB,EAAQmb,EAAK,2BAA2B2Q,EAAM,EAAGA,EAAM,EAAG,EAAI,EAC7D,OAAO,KAAK,OAAO,SAAS,YAAY,EAAI,EAAG,KAAK,OAAO,SAAS,UAAU,EAAI,CAAC,EAExF,OADgB,KAAK,2BAA2B9rB,CAAK,CAEzD,CAAC,CACJ,EACD,KAAK,iBAAiB,UAAU,EAChC4rB,EAAS,QAASC,GAAY,CAC1BA,EAAQ,QAAS,CAACC,EAAOvtB,IAAM,CAC3B,KAAK,iBAAiBA,IAAM,EAAI,SAAW,QAAQ,EAAEutB,EAAM,EAAGA,EAAM,CAAC,CACzE,CAAC,CACL,CAAC,EACD,KAAK,iBAAiB,KAAK,CAC/B,CAEA,GAAG,KAAK,OAAO,SAAS,QAAQ,EAAE,CAC9B,MAAM9rB,EAAQ,IAAIhD,EAAE,MAAM,KAAK,OAAO,MAAQ,EAAG,KAAK,OAAO,OAAS,CAAC,EACvE,KAAK,iBAAiB,UAAUgD,EAAM,EAAG,CAAC,EAC1C,KAAK,iBAAiB,MAAM,GAAI,CAAC,EACjC,KAAK,iBAAiB,UAAU,CAACA,EAAM,EAAG,CAAC,CAC/C,CAEA,KAAK,iBAAiB,UAAU,KAAK,iBAAkB,EAAG,CAAC,EAE3D,KAAK,iBAAiB,QAAQ,CAClC,CAOA,cAAc6T,EAAY,CACtB,IAAIuZ,EAAc,GACd,KAAK,SAAS,YAAY,EAAI,EAAI,MAAQ,IAC1C,KAAK,mBAAmB,CACpB,QAAS,KAAK,SAAS,YAAY,EAAI,EACvC,YAAaA,CACjB,CAAC,EACDA,EAAc,IAEdvZ,EAAW,YAAY,EAAI,EAAI,MAAQ,GACvC,KAAK,mBAAmB,CACpB,QAASA,EAAW,YAAY,EAAI,EACpC,MAAO,KAAK,SAAS,uBACjBA,EAAW,kBAAkB,EAAI,EAAG,EAAI,EAC5C,YAAauZ,CACjB,CAAC,CAET,CAGA,mBAAmBrwB,EAAS,CACxB,IAAIiD,EAAQjD,EAAQ,MAChBA,EAAQ,MAAM,MAAMC,EAAE,iBAAiB,EACvC,KAAK,iBAAiB,EAEtBa,EAAU,KAAK,eACnBA,EAAQ,KAAK,EAEbA,EAAQ,UAAUmC,EAAM,EAAGA,EAAM,CAAC,EAClCnC,EAAQ,OAAO,KAAK,GAAK,IAAMd,EAAQ,OAAO,EAC9Cc,EAAQ,UAAU,CAACmC,EAAM,EAAG,CAACA,EAAM,CAAC,CACxC,CAGA,MAAMjD,EAAS,CACXA,EAAUA,GAAW,CAAC,EACtB,IAAIiD,EAAQjD,EAAQ,MACpBA,EAAQ,MAAM,MAAMC,EAAE,iBAAiB,EACvC,KAAK,iBAAiB,EAClBa,EAAU,KAAK,eAEnBA,EAAQ,UAAUmC,EAAM,EAAG,CAAC,EAC5BnC,EAAQ,MAAM,GAAI,CAAC,EACnBA,EAAQ,UAAU,CAACmC,EAAM,EAAG,CAAC,CACjC,CAGA,eAAgBwuB,EAAa3a,EAAYic,EAAU,CAE/C,QAAUvxB,EAAIiwB,EAAY,OAAS,EAAGjwB,GAAK,EAAGA,IAAM,CAChD,IAAIihB,EAAOgP,EAAajwB,CAAE,EAAE,KAC5B,GAAI,CACA,KAAK,qBAAqBihB,EAAMgP,EAAY,OAAQjwB,EAAGsV,EAAYic,CAAO,CAC9E,OAAQnyB,EAAG,CACPX,EAAE,QAAQ,MAAMW,CAAC,CACrB,CACJ,CACJ,CAGA,qBAAqB6hB,EAAMzY,EAAOxI,EAAGsV,EAAYic,EAAS,CAEtD,IAAI/C,EAAa,KAAK,OAAO,MAAM,eAAelZ,CAAU,EAAI,KAAK,eAAe,OAChFhW,EAAU,KAAK,QACnBA,EAAQ,KAAK,EACbA,EAAQ,UAAY,EAAIb,EAAE,kBAC1Ba,EAAQ,KAAO,mBAAsB,GAAKb,EAAE,kBAAqB,WACjEa,EAAQ,YAAc,KAAK,eAAekvB,CAAU,EACpDlvB,EAAQ,UAAY,KAAK,eAAekvB,CAAU,EAElD,KAAK,cAAclZ,CAAU,EAE1Bic,GACC,KAAK,MAAM,CAAC,MAAOtQ,EAAK,SAAS,KAAKA,EAAK,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,EAG/D3hB,EAAQ,WACJ2hB,EAAK,SAAS,EAAIxiB,EAAE,kBACpBwiB,EAAK,SAAS,EAAIxiB,EAAE,kBACpBwiB,EAAK,KAAK,EAAIxiB,EAAE,kBAChBwiB,EAAK,KAAK,EAAIxiB,EAAE,iBACpB,EAEA,IAAIgwB,GAAexN,EAAK,SAAS,EAAKA,EAAK,KAAK,EAAI,GAAMxiB,EAAE,kBACxDiwB,GAAezN,EAAK,SAAS,EAAKA,EAAK,KAAK,EAAI,GAAMxiB,EAAE,kBAG5Da,EAAQ,UAAWmvB,EAAaC,CAAY,EAC5C,MAAMC,EAAiB,KAAK,SAAS,YAAY,EAAI,EACrDrvB,EAAQ,OAAQ,KAAK,GAAK,IAAM,CAACqvB,CAAe,EAChDrvB,EAAQ,UAAW,CAACmvB,EAAa,CAACC,CAAY,EAE1CzN,EAAK,IAAM,GAAKA,EAAK,IAAM,IAC3B3hB,EAAQ,SACJ,SAAW,KAAK,SAAS,QAAQ,EACjC2hB,EAAK,SAAS,EAAIxiB,EAAE,mBACnBwiB,EAAK,SAAS,EAAI,IAAMxiB,EAAE,iBAC/B,EACAa,EAAQ,SACJ,QAAU,KAAK,SAAS,UAAU,EAAE,SAAS,EAC7C2hB,EAAK,SAAS,EAAIxiB,EAAE,mBACnBwiB,EAAK,SAAS,EAAI,IAAMxiB,EAAE,iBAC/B,GAEJa,EAAQ,SACJ,UAAY2hB,EAAK,OAChBA,EAAK,SAAS,EAAI,IAAMxiB,EAAE,mBAC1BwiB,EAAK,SAAS,EAAI,IAAMxiB,EAAE,iBAC/B,EACAa,EAAQ,SACJ,WAAa2hB,EAAK,GACjBA,EAAK,SAAS,EAAI,IAAMxiB,EAAE,mBAC1BwiB,EAAK,SAAS,EAAI,IAAMxiB,EAAE,iBAC/B,EACAa,EAAQ,SACJ,QAAU2hB,EAAK,GACdA,EAAK,SAAS,EAAI,IAAMxiB,EAAE,mBAC1BwiB,EAAK,SAAS,EAAI,IAAMxiB,EAAE,iBAC/B,EACAa,EAAQ,SACJ,UAAYU,EAAI,OAASwI,GACxByY,EAAK,SAAS,EAAI,IAAMxiB,EAAE,mBAC1BwiB,EAAK,SAAS,EAAI,IAAMxiB,EAAE,iBAC/B,EACAa,EAAQ,SACJ,SAAW2hB,EAAK,KAAK,SAAS,GAC7BA,EAAK,SAAS,EAAI,IAAMxiB,EAAE,mBAC1BwiB,EAAK,SAAS,EAAI,IAAMxiB,EAAE,iBAC/B,EACAa,EAAQ,SACJ,aAAe2hB,EAAK,SAAS,SAAS,GACrCA,EAAK,SAAS,EAAI,IAAMxiB,EAAE,mBAC1BwiB,EAAK,SAAS,EAAI,IAAMxiB,EAAE,iBAC/B,EAEI,KAAK,SAAS,YAAY,EAAI,EAAI,MAAQ,GAC1C,KAAK,wBAAwB,EAE7B6W,EAAW,YAAY,EAAI,EAAI,MAAQ,GACvC,KAAK,wBAAwB,EAGjChW,EAAQ,QAAQ,CACpB,CAEA,iBAAiBgW,EAAW,CAExB,MAAM8H,EAAS9H,EAAW,UAAU,EAAI,EAClC2D,EAAO,KAAK,0BAA0B3D,EAAW,UAAU,EAAI,CAAC,EAChEhW,EAAU,KAAK,eAErB,IAAIouB,EACC,OAAOpY,EAAW,sBAAyB,WAC5CoY,EAAYpY,EAAW,qBAAqBA,EAAYhW,CAAO,EAG/DouB,EAAYpY,EAAW,qBAG3B,KAAK,mBAAmB,CAAC,QAAS,KAAK,OAAO,SAAS,YAAY,EAAI,CAAC,CAAC,EACzEhW,EAAQ,UAAYouB,EACpBpuB,EAAQ,UAAU2Z,EAAK,EAAGA,EAAK,CAAC,EAChC3Z,EAAQ,OAAO,KAAK,GAAK,IAAM8d,EAAO,OAAO,EAC7C9d,EAAQ,UAAU,CAAC2Z,EAAK,EAAG,CAACA,EAAK,CAAC,EAClC3Z,EAAQ,SAAS2Z,EAAK,EAAGA,EAAK,EAAGA,EAAK,MAAOA,EAAK,MAAM,EACxD,KAAK,wBAAwB,CAEjC,CAOA,kBAAmB,CACf,OAAO,IAAIxa,EAAE,MAAM,KAAK,OAAO,MAAQ,EAAG,KAAK,OAAO,OAAS,CAAC,CACpE,CAGA,yBAA0B,CACtB,IAAIa,EAAU,KAAK,eACnBA,EAAQ,QAAQ,CACpB,CAGA,OAAO,kBAAkB6vB,EAAI8D,EAAUC,EAAU,CAE7C,SAASC,EAAWhE,EAAI/jB,EAAMtC,EAAQ,CAClC,MAAMsqB,EAASjE,EAAG,aAAa/jB,CAAI,EAYnC,OARA+jB,EAAG,aAAaiE,EAAQtqB,CAAM,EAI9BqmB,EAAG,cAAciE,CAAM,EAIlBjE,EAAG,mBAAmBiE,EAAQjE,EAAG,cAAc,EAQ7CiE,GAPH30B,EAAE,QAAQ,MACN,4CAA4C0wB,EAAG,iBAAiBiE,CAAM,CAAC,EAC3E,EACAjE,EAAG,aAAaiE,CAAM,EACf,KAIf,CAEA,MAAMC,EAAeF,EAAWhE,EAAIA,EAAG,cAAe8D,CAAQ,EACxDK,EAAiBH,EAAWhE,EAAIA,EAAG,gBAAiB+D,CAAQ,EAI5DK,EAAgBpE,EAAG,cAAc,EAOvC,OANAA,EAAG,aAAaoE,EAAeF,CAAY,EAC3ClE,EAAG,aAAaoE,EAAeD,CAAc,EAC7CnE,EAAG,YAAYoE,CAAa,EAIvBpE,EAAG,oBAAoBoE,EAAepE,EAAG,WAAW,EASlDoE,GARP90B,EAAE,QAAQ,MACN,4CAA4C0wB,EAAG,kBAC/CoE,CACA,CAAC,EACL,EACO,KAIX,CAEJ,CAIJ,EAAGh1B,CAAc,EAoChB,SAAUE,EAAG,CAwBdA,EAAE,SAAW,SAAUD,EAAU,CAI7B,IAAI8B,EAAO,UACPA,EAAK,QAAUA,EAAK,CAAC,YAAa7B,EAAE,QACpCD,EAAU,CACN,cAAgB8B,EAAK,CAAC,EACtB,YAAgBA,EAAK,CAAC,EACtB,OAAgBA,EAAK,CAAC,CAC1B,GAMC9B,EAAQ,SACTC,EAAE,OAAQ,GAAMD,EAASA,EAAQ,MAAO,EACxC,OAAOA,EAAQ,QAGnB,KAAK,SAAWC,EAAE,OAAO,CACrB,KAAM,EACN,IAAK,EACL,MAAO,EACP,OAAQ,CACZ,EAAGD,EAAQ,SAAW,CAAC,CAAC,EAExB,OAAOA,EAAQ,QAEfA,EAAQ,eAAiBA,EAAQ,QACjC,OAAOA,EAAQ,QAEfC,EAAE,OAAQ,GAAM,KAAM,CAGlB,cAAoB,KACpB,YAAoB,KAGpB,UAAoB,KACpB,cAAoB,KACpB,OAAoB,KAGpB,gBAA4BA,EAAE,iBAAiB,gBAC/C,cAA4BA,EAAE,iBAAiB,cAC/C,kBAA4BA,EAAE,iBAAiB,kBAC/C,kBAA4BA,EAAE,iBAAiB,kBAC/C,gBAA4BA,EAAE,iBAAiB,gBAC/C,eAA4BA,EAAE,iBAAiB,eAC/C,aAA4BA,EAAE,iBAAiB,aAC/C,iBAA4BA,EAAE,iBAAiB,iBAC/C,aAA4BA,EAAE,iBAAiB,aAC/C,aAA4BA,EAAE,iBAAiB,aAC/C,eAA4BA,EAAE,iBAAiB,QAC/C,QAA4BA,EAAE,iBAAiB,QAC/C,gBAA4BA,EAAE,iBAAiB,gBAC/C,0BAA4BA,EAAE,iBAAiB,yBAEnD,EAAGD,CAAQ,EAEX,KAAK,0BAA0B,EAE/B,KAAK,cAAgB,IAAIC,EAAE,OAAO,CAC9B,QAAS,EACT,gBAAiB,KAAK,gBACtB,cAAiB,KAAK,aAC1B,CAAC,EACD,KAAK,cAAgB,IAAIA,EAAE,OAAO,CAC9B,QAAS,EACT,gBAAiB,KAAK,gBACtB,cAAiB,KAAK,aAC1B,CAAC,EACD,KAAK,WAAgB,IAAIA,EAAE,OAAO,CAC9B,YAAa,GACb,QAAS,EACT,gBAAiB,KAAK,gBACtB,cAAiB,KAAK,aAC1B,CAAC,EAED,KAAK,cAAgB,IAAIA,EAAE,OAAO,CAC9B,QAASD,EAAQ,eACjB,gBAAiB,KAAK,gBACtB,cAAe,KAAK,aACxB,CAAC,EAED,KAAK,YAAc,KAAK,cAAc,QAAQ,MAC9C,KAAK,YAAc,KAAK,cAAc,QAAQ,MAC9C,KAAK,SAAc,KAAK,WAAW,QAAQ,MAC3C,KAAK,YAAc,KAAK,cAAc,QAAQ,MAE9C,KAAK,kBAAkB,IAAIC,EAAE,KAAK,EAAG,EAAG,EAAG,CAAC,EAAG,CAAC,EAEhD,KAAK,OAAO,EAAI,EAChB,KAAK,OAAO,CAChB,EAGAA,EAAE,SAAS,UAAY,CAGnB,IAAI,SAAW,CACX,OAAAA,EAAE,QAAQ,KAAK,+EAA+E,EACvF,KAAK,YAAY,CAC5B,EAGA,IAAI,QAASge,EAAS,CAClBhe,EAAE,QAAQ,KAAK,sHAAsH,EACrI,KAAK,SAASge,CAAO,CACzB,EASA,iBAAkB,SAAS+W,EAAa,CACpC,OAAA/0B,EAAE,QAAQ,OAAO+0B,EAAa,qDAAqD,EACnF/0B,EAAE,QAAQ,OAAO+0B,aAAuB/0B,EAAE,MAAO,wEAAwE,EACzHA,EAAE,QAAQ,OAAO+0B,EAAY,EAAI,EAAG,kEAAkE,EACtG/0B,EAAE,QAAQ,OAAO+0B,EAAY,EAAI,EAAG,kEAAkE,EAEtG,KAAK,kBAAkB,IAAI/0B,EAAE,KAAK,EAAG,EAAG,EAAG+0B,EAAY,EAAIA,EAAY,CAAC,EAAGA,EAAY,CAAC,EACjF,IACX,EAGA,cAAe,SAASpW,EAAQqW,EAAe,CAC3Ch1B,EAAE,QAAQ,MAAM,sGAAsG,EACtH,KAAK,kBAAkB2e,EAAQqW,CAAa,CAChD,EAQA,kBAAmB,SAASrW,EAAQqW,EAAe,CAC/Ch1B,EAAE,QAAQ,OAAO2e,EAAQ,iDAAiD,EAC1E3e,EAAE,QAAQ,OAAO2e,aAAkB3e,EAAE,KAAM,mEAAmE,EAC9GA,EAAE,QAAQ,OAAO2e,EAAO,MAAQ,EAAG,kEAAkE,EACrG3e,EAAE,QAAQ,OAAO2e,EAAO,OAAS,EAAG,mEAAmE,EAEvG,KAAK,uBAAyBA,EAAO,MAAM,EAC3C,KAAK,qBAAuB,KAAK,uBAAuB,QAAQ,EAAE,MAC9DqW,CAAa,EAEjB,KAAK,eAAiBrW,EAAO,OAAO,KAAK,YAAY,CAAC,EAAE,eAAe,EACvE,KAAK,aAAe,KAAK,eAAe,QAAQ,EAAE,MAAMqW,CAAa,EACrE,KAAK,oBAAsB,KAAK,aAAa,EAAI,KAAK,aAAa,EAE/D,KAAK,QAgBL,KAAK,OAAO,WAAW,aAAc,CACjC,YAAa,KAAK,qBAAqB,MAAM,EAC7C,cAAeA,EACf,WAAY,KAAK,uBAAuB,MAAM,EAC9C,cAAe,KAAK,eAAe,MAAM,CAC7C,CAAC,CAET,EAOA,YAAa,UAAW,CACpB,GAAI,KAAK,iBACL,OAAO,KAAK,iBAGhB,IAAIC,EAAe,KAAK,oBAAsB,KAAK,eAAe,EAC9DC,EACJ,OAAI,KAAK,gBACLA,EAASD,GAAgB,EAAIA,EAAe,EAE5CC,EAASD,GAAgB,EAAI,EAAIA,EAG9BC,EAAS,KAAK,eAAe,KACxC,EAOA,cAAe,UAAW,CACtB,OAAO,KAAK,sBAAsB,EAAE,OAAO,CAAC,KAAK,YAAY,CAAC,CAClE,EASA,sBAAuB,UAAW,CAC9B,IAAIvZ,EAAS,KAAK,eAAe,UAAU,EACvCvB,EAAS,EAAM,KAAK,YAAY,EAChCC,EAASD,EAAQ,KAAK,eAAe,EAEzC,OAAO,IAAIpa,EAAE,KACT2b,EAAO,EAAKvB,EAAQ,EACpBuB,EAAO,EAAKtB,EAAS,EACrBD,EACAC,CACJ,CACJ,EAOA,OAAQ,SAAS4D,EAAa,CAC1B,OAAI,KAAK,QAWL,KAAK,OAAO,WAAW,OAAQ,CAC3B,YAAaA,CACjB,CAAC,EAEE,KAAK,UAAU,KAAK,cAAc,EAAGA,CAAW,CAC3D,EAKA,WAAY,UAAW,CACnB,IAAIkX,EAAW,KAAK,YAAY,EAC5BxY,EAAO,KAAK,aACZ,KAAK,aACD,KAAK,kBAAoBwY,EAEjC,OAAOxY,CACX,EAKA,WAAY,UAAW,CACnB,IAAIA,EAAO,KAAK,aAChB,OAAKA,IACDA,EAAO,KAAK,aAAa,EAAI,KAAK,kBAAoB,KAAK,oBAAoB,EAC/EA,GAAQ,KAAK,eAAe,OAGzB,KAAK,IAAKA,EAAM,KAAK,YAAY,CAAE,CAC9C,EAKA,eAAgB,UAAW,CACvB,OAAO,KAAK,oBAAoB,EAAI,KAAK,oBAAoB,CACjE,EAMA,iBAAkB,UAAW,CACzB,OAAO,IAAI3c,EAAE,MACT,KAAK,cAAc,EACnB,KAAK,cAAc,CACvB,CACJ,EAOA,WAAY,UAAW,CACnB,OAAOA,EAAE,OAAO,CAAC,EAAG,KAAK,QAAQ,CACrC,EAOA,WAAY,SAASo1B,EAAS,CAC1Bp1B,EAAE,QAAQ,OAAOA,EAAE,KAAKo1B,CAAO,IAAM,SAAU,iDAAiD,EAEhG,KAAK,SAAWp1B,EAAE,OAAO,CACrB,KAAM,EACN,IAAK,EACL,MAAO,EACP,OAAQ,CACZ,EAAGo1B,CAAO,EAEV,KAAK,0BAA0B,EAC3B,KAAK,QACL,KAAK,OAAO,YAAY,CAEhC,EAQA,UAAW,SAASC,EAAS,CACzB,OAAO,KAAK,kBAAkBA,CAAO,EAAE,OAAO,CAAC,KAAK,YAAYA,CAAO,CAAC,CAC5E,EAUA,kBAAmB,SAASA,EAAS,CACjC,IAAI1Z,EAAS,KAAK,UAAU0Z,CAAO,EAC/Bjb,EAAS,EAAM,KAAK,QAAQib,CAAO,EACnChb,EAASD,EAAQ,KAAK,eAAe,EAEzC,OAAO,IAAIpa,EAAE,KACT2b,EAAO,EAAKvB,EAAQ,EACpBuB,EAAO,EAAKtB,EAAS,EACrBD,EACAC,CACJ,CACJ,EAQA,qBAAsB,SAASgb,EAAS,CACpC,OAAO,KAAK,6BAA6BA,CAAO,EAAE,OAC9C,CAAC,KAAK,YAAYA,CAAO,EAAG,KAAK,UAAUA,CAAO,CAAC,CAC3D,EAQA,6BAA8B,SAASA,EAAS,CAC5C,IAAI1W,EAAS,KAAK,kBAAkB0W,CAAO,EACvC/Z,EAAS,KAAK,oBAAoB,EAAI,KAAK,QAAQ+Z,CAAO,EAC9D,OAAA1W,EAAO,GAAK,KAAK,SAAS,KAAOrD,EACjCqD,EAAO,GAAK,KAAK,SAAS,IAAMrD,EAChCqD,EAAO,QAAU,KAAK,SAAS,KAAO,KAAK,SAAS,OAASrD,EAC7DqD,EAAO,SAAW,KAAK,SAAS,IAAM,KAAK,SAAS,QAAUrD,EACvDqD,CACX,EAMA,UAAW,SAAU0W,EAAU,CAC3B,IAAIC,EAAgB,IAAIt1B,EAAE,MAClB,KAAK,cAAc,QAAQ,MAC3B,KAAK,cAAc,QAAQ,KAC/B,EACAu1B,EAAe,IAAIv1B,EAAE,MACjB,KAAK,cAAc,OAAO,MAC1B,KAAK,cAAc,OAAO,KAC9B,EACAw1B,EACA7Y,EACAvC,EACAC,EACAsE,EACA8W,EACAC,EACAC,EAEJ,OAAKN,EACMC,EACE,KAAK,WAIlBE,EAAe,KAAK,eAAe,KAAK,UAAW,EAAI,EAEvD7Y,EAAU,KAAK,QAAQ,EACvBvC,EAAU,EAAMuC,EAChBtC,EAAUD,EAAQ,KAAK,eAAe,EACtCuE,EAAU,IAAI3e,EAAE,KACZs1B,EAAc,EAAIlb,EAAQ,EAC1Bkb,EAAc,EAAIjb,EAAS,EAC3BD,EACAC,CACJ,EAEAob,EAAe,KAAK,gBAAgB,KAAK,UAAW9W,CAAM,EAC1D+W,EAAkBD,EAAa,MAAOD,CAAa,EAAE,OAAO,CAAC,KAAK,YAAY,EAAI,CAAC,EACnFG,EAAkBD,EAAgB,OAAQ,KAAK,oBAAoB,EAAI/Y,CAAK,EAErE4Y,EAAa,KAAMI,CAAgB,GAnB/BJ,CAoBf,EAMA,QAAS,SAAUF,EAAU,CACzB,OAAKA,EACM,KAAK,WAAW,QAAQ,MAExB,KAAK,WAAW,OAAO,KAEtC,EAGA,sBAAuB,SAAS1Y,EAAM,CAClC,OAAO,KAAK,IACR,KAAK,IAAIA,EAAM,KAAK,WAAW,CAAC,EAChC,KAAK,WAAW,CAAC,CACzB,EAQA,0BAA2B,SAASgC,EAAQ,CACxC,IAAIiX,EAAY,KAAK,iCAAiCjX,CAAM,EAAE,eAAe,EACzEkX,EAAK,KAAK,iCAAiC,KAAK,sBAAsB,EAAE,eAAe,EAEvFC,EAAe,GACfC,EAAe,GAEnB,GAAI,MAAK,eAEF,CACH,IAAIC,EAAcJ,EAAU,EAAIA,EAAU,MACtCK,EAAeJ,EAAG,EAAIA,EAAG,MAEzBK,EAAqBC,EAAQC,EAC7BR,EAAU,MAAQC,EAAG,MACrBK,EAAsB,KAAK,gBAAkBL,EAAG,MAEhDK,EAAsB,KAAK,gBAAkBN,EAAU,MAG3DO,EAASN,EAAG,EAAIG,EAAcE,EAC9BE,EAAUH,EAAeL,EAAU,EAAIM,EACnCA,EAAsBL,EAAG,OACzBD,EAAU,IAAMO,EAASC,GAAW,EACpCN,EAAe,IACRM,EAAU,GACjBR,EAAU,GAAKQ,EACfN,EAAe,IACRK,EAAS,IAChBP,EAAU,GAAKO,EACfL,EAAe,GAGvB,CAEA,GAAI,MAAK,aAEF,CACH,IAAIO,EAAeT,EAAU,EAAIA,EAAU,OACvCU,EAAgBT,EAAG,EAAIA,EAAG,OAE1BU,EAAmBC,EAAOC,EAC1Bb,EAAU,OAASC,EAAG,OACtBU,EAAoB,KAAK,gBAAkBV,EAAG,OAE9CU,EAAoB,KAAK,gBAAkBX,EAAU,OAGzDY,EAAQX,EAAG,EAAIQ,EAAeE,EAC9BE,EAAWH,EAAgBV,EAAU,EAAIW,EACrCA,EAAoBV,EAAG,QACvBD,EAAU,IAAMY,EAAQC,GAAY,EACpCV,EAAe,IACRU,EAAW,GAClBb,EAAU,GAAKa,EACfV,EAAe,IACRS,EAAQ,IACfZ,EAAU,GAAKY,EACfT,EAAe,GAGvB,CAEA,IAAIW,EAAoBZ,GAAgBC,EACpCY,EAAoBD,EAAoB,KAAK,iCAAiCd,CAAS,EAAIjX,EAAO,MAAM,EAC5G,OAAAgY,EAAkB,aAAeb,EACjCa,EAAkB,aAAeZ,EACjCY,EAAkB,kBAAoBD,EAE/BC,CACX,EAQA,uBAAwB,SAAS1Y,EAAa,CACtC,KAAK,QAYL,KAAK,OAAO,WAAY,YAAa,CACjC,YAAaA,CACjB,CAAC,CAET,EAUA,iBAAkB,SAASA,EAAa,CACpC,IAAI2Y,EAAa,KAAK,QAAQ,EAC1BC,EAAkB,KAAK,sBAAsBD,CAAU,EAEvDA,IAAeC,GACf,KAAK,OAAOA,EAAiB,KAAK,UAAW5Y,CAAW,EAG5D,IAAI1C,EAAoB,KAAK,qBAAqB,EAAK,EAEvD,OAAGA,EAAkB,oBACjB,KAAK,UAAUA,EAAmB0C,CAAW,EAC7C,KAAK,uBAAuBA,CAAW,GAGpC,IACX,EASA,cAAe,SAASA,EAAa,CACjC,OAAO,KAAK,iBAAiBA,CAAW,CAC5C,EASA,WAAY,SAASU,EAAQ5e,EAAS,CAClCA,EAAUA,GAAW,CAAC,EACtB,IAAIke,EAAcle,EAAQ,aAAe,GACrC+2B,EAAc/2B,EAAQ,aAAe,GAErCg3B,EAAS,KAAK,eAAe,EAC7Bpb,EAASgD,EAAO,UAAU,EAG1BiX,EAAY,IAAI51B,EAAE,KAClB2e,EAAO,EACPA,EAAO,EACPA,EAAO,MACPA,EAAO,OACPA,EAAO,QAAU,KAAK,YAAY,CAAC,EAClC,eAAe,EAEhBiX,EAAU,eAAe,GAAKmB,EAC9BnB,EAAU,OAASA,EAAU,MAAQmB,EAErCnB,EAAU,MAAQA,EAAU,OAASmB,EAIzCnB,EAAU,EAAIja,EAAO,EAAIia,EAAU,MAAQ,EAC3CA,EAAU,EAAIja,EAAO,EAAIia,EAAU,OAAS,EAC5C,IAAIoB,EAAU,EAAMpB,EAAU,MAE9B,GAAI3X,EACA,YAAK,MAAMtC,EAAQ,EAAI,EACvB,KAAK,OAAOqb,EAAS,KAAM,EAAI,EAC5BF,GACC,KAAK,iBAAiB,EAAI,EAEvB,KAGX,IAAIG,EAAgB,KAAK,UAAU,EAAI,EACnCC,EAAc,KAAK,QAAQ,EAAI,EACnC,KAAK,MAAMD,EAAe,EAAI,EAC9B,KAAK,OAAOC,EAAa,KAAM,EAAI,EAEnC,IAAIC,EAAY,KAAK,UAAU,EAC3BC,EAAY,KAAK,QAAQ,EAE7B,GAAIA,IAAY,GAAK,KAAK,IAAIJ,EAAUI,EAAU,CAAC,EAAI,KACnD,YAAK,OAAOJ,EAAS,KAAM,EAAI,EAC/B,KAAK,MAAMrb,EAAQsC,CAAW,EAC3B6Y,GACC,KAAK,iBAAiB,EAAK,EAExB,KAGX,GAAGA,EAAY,CACX,KAAK,MAAMnb,EAAQ,EAAK,EAExBqb,EAAU,KAAK,sBAAsBA,CAAO,EAC5C,KAAK,OAAOA,EAAS,KAAM,EAAK,EAEhC,IAAIzb,EAAoB,KAAK,qBAAqB,EAElD,KAAK,MAAM0b,EAAe,EAAI,EAC9B,KAAK,OAAOC,EAAa,KAAM,EAAI,EAEnC,KAAK,UAAU3b,CAAiB,CACpC,KAAO,CACH,IAAI8b,EAAmBzB,EAAU,OAAO,CAAC,KAAK,YAAY,CAAC,EACvD0B,EAAiBD,EAAiB,WAAW,EAAE,MAAML,CAAO,EAC3D,MAAMG,EAAU,WAAW,EAAE,MAAMC,CAAO,CAAC,EAC3C,OAAOJ,EAAUI,CAAO,EAE7B,KAAK,OAAOJ,EAASM,EAAgBrZ,CAAW,CACpD,CACA,OAAO,IACX,EAcA,UAAW,SAASU,EAAQV,EAAa,CACrC,OAAO,KAAK,WAAWU,EAAQ,CAC3B,YAAaV,EACb,YAAa,EACjB,CAAC,CACL,EAcA,yBAA0B,SAASU,EAAQV,EAAa,CACpD,OAAO,KAAK,WAAWU,EAAQ,CAC3B,YAAaV,EACb,YAAa,EACjB,CAAC,CACL,EAOA,cAAe,SAASA,EAAa,CACjC,IAAIyQ,EAAM,IAAI1uB,EAAE,KACZ,KAAK,eAAe,EAAK,KAAK,eAAe,MAAQ,EACrD,KAAK,eAAe,EACpB,EACA,KAAK,eAAe,MAAM,EAC9B,OAAO,KAAK,UAAU0uB,EAAKzQ,CAAW,CAC1C,EAOA,gBAAiB,SAASA,EAAa,CACnC,IAAIyQ,EAAM,IAAI1uB,EAAE,KACZ,KAAK,eAAe,EACpB,KAAK,eAAe,EAAK,KAAK,eAAe,OAAS,EACtD,KAAK,eAAe,MACpB,CAAC,EACL,OAAO,KAAK,UAAU0uB,EAAKzQ,CAAW,CAC1C,EAYA,qBAAsB,SAASoX,EAAS,CACpC,IAAI1W,EACApD,EAEJ,OAAAoD,EAAS,KAAK,UAAU0W,CAAO,EAE/B9Z,EAAoB,KAAK,0BAA0BoD,CAAM,EAElDpD,CACX,EASA,MAAO,SAAU/J,EAAOyM,EAAc,CAClC,IAAItC,EAAS,IAAI3b,EAAE,MACf,KAAK,cAAc,OAAO,MAC1B,KAAK,cAAc,OAAO,KAC9B,EACA,OAAO,KAAK,MAAO2b,EAAO,KAAMnK,CAAM,EAAGyM,CAAY,CACzD,EASA,MAAO,SAAUtC,EAAQsC,EAAc,CACnC,OAAKA,GACD,KAAK,cAAc,QAAStC,EAAO,CAAE,EACrC,KAAK,cAAc,QAASA,EAAO,CAAE,IAErC,KAAK,cAAc,SAAUA,EAAO,CAAE,EACtC,KAAK,cAAc,SAAUA,EAAO,CAAE,GAGtC,KAAK,QAYL,KAAK,OAAO,WAAY,MAAO,CAC3B,OAAQA,EACR,YAAasC,CACjB,CAAC,EAGE,IACX,EAOA,OAAQ,SAAS3C,EAAQmS,EAAUxP,EAAa,CAC5C,OAAO,KAAK,OACR,KAAK,WAAW,OAAO,MAAQ3C,EAAQmS,EAAUxP,CAAW,CACpE,EAYA,OAAQ,SAAStB,EAAM8Q,EAAUxP,EAAa,CAC1C,IAAIvT,EAAQ,KAEZ,YAAK,UAAY+iB,aAAoBztB,EAAE,OACnC,CAAC,MAAMytB,EAAS,CAAC,GACjB,CAAC,MAAMA,EAAS,CAAC,EACjBA,EACA,KAEAxP,EACA,KAAK,iCAAiC,UAAW,CAC7CvT,EAAM,WAAW,QAAQiS,CAAI,CACjC,CAAC,EAED,KAAK,WAAW,SAASA,CAAI,EAG7B,KAAK,QAaL,KAAK,OAAO,WAAW,OAAQ,CAC3B,KAAMA,EACN,SAAU8Q,EACV,YAAaxP,CACjB,CAAC,EAGE,IACX,EAUA,YAAa,SAASD,EAASC,EAAa,CACxC,OAAO,KAAK,SAASD,EAAS,KAAMC,CAAW,CACnD,EAQA,YAAa,SAASoX,EAAS,CAC3B,OAAOA,EACH,KAAK,cAAc,QAAQ,MAC3B,KAAK,cAAc,OAAO,KAClC,EAYA,qBAAsB,SAASrX,EAAS5Z,EAAO6Z,EAAa,CACxD,OAAO,KAAK,SAASD,EAAS5Z,EAAO6Z,CAAW,CACpD,EAYA,SAAU,SAASD,EAAS5Z,EAAO6Z,EAAY,CAC3C,GAAI,CAAC,KAAK,QAAU,CAAC,KAAK,OAAO,OAAO,UAAU,EAC9C,OAAO,KAGX,GAAI,KAAK,cAAc,OAAO,QAAUD,GACpC,KAAK,cAAc,gBAAgB,EACnC,OAAO,KAOX,GALA,KAAK,cAAgB5Z,aAAiBpE,EAAE,OACpC,CAAC,MAAMoE,EAAM,CAAC,GACd,CAAC,MAAMA,EAAM,CAAC,EACdA,EACA,KACA6Z,EACA,GAAG,KAAK,cAAc,CAClB,IAAIsZ,EAAkBvZ,EAAU,KAAK,YACrC,GAAG,CAACuZ,EACA,YAAK,cAAgB,KACd,KAEX,KAAK,kBAAkBvZ,CAAO,CAClC,MACI,KAAK,cAAc,QAAQA,CAAO,MAEnC,CACH,IAAIwZ,EAAiBx3B,EAAE,eAAe,KAAK,cAAc,QAAQ,MAAO,GAAG,EACvEy3B,EAAez3B,EAAE,eAAege,EAAS,GAAG,EAC5CuK,EAAOkP,EAAeD,EACtBjP,EAAO,IACPkP,GAAgB,IACTlP,EAAO,OACdkP,GAAgB,KAGpB,IAAIC,EAAcF,EAAiBC,EACnC,KAAK,cAAc,QAAQzZ,EAAU0Z,CAAW,EAChD,KAAK,cAAc,SAAS1Z,CAAO,CACvC,CAEA,YAAK,kBACD,KAAK,OAAO,MAAM,cAAc,EAChC,KAAK,OAAO,MAAM,iBAAiB,CAAC,EACxC,KAAK,OAAO,YAAY,EAcxB,KAAK,OAAO,WAAW,SAAU,CAAC,QAASA,EAAS,YAAa,CAAC,CAACC,EAAa,MAAO,KAAK,eAAiB,KAAK,UAAU,CAAC,CAAC,EACvH,IACX,EAYA,SAAU,SAASD,EAAS5Z,EAAO6Z,EAAY,CAC3C,OAAO,KAAK,SAAS,KAAK,cAAc,OAAO,MAAQD,EAAS5Z,EAAO6Z,CAAW,CACtF,EAOA,OAAQ,SAAU0Z,EAAkBC,EAAW,CAC3C,IAAIT,EAAY,KAAK,kBAAkB,EACnCvB,EAAYuB,EACZU,EAEJ,KAAK,cAAc,EAAIF,EAAiB,EACxC,KAAK,cAAc,EAAIA,EAAiB,EAExC,KAAK,0BAA0B,EAE1BC,IAEDC,EAAmBF,EAAiB,EAAI,KAAK,cAAc,EAC3D/B,EAAU,MAASuB,EAAU,MAAQU,EACrCjC,EAAU,OAASA,EAAU,MAAQ,KAAK,eAAe,GAGzD,KAAK,QAeL,KAAK,OAAO,WAAY,SAAU,CAC9B,iBAAkB+B,EAClB,SAAUC,CACd,CAAC,EAGL,IAAI1C,EAAS,KAAK,UAAWU,EAAW,EAAK,EAE7C,OAAI,KAAK,QAcL,KAAK,OAAO,WAAY,eAAgB,CACpC,iBAAkB+B,EAClB,SAAUC,CACd,CAAC,EAGE1C,CACX,EAGA,0BAA2B,UAAW,CAClC,KAAK,oBAAsB,IAAIl1B,EAAE,MAC7B,KAAK,IAAI,EAAG,KAAK,cAAc,GAAK,KAAK,SAAS,KAAO,KAAK,SAAS,MAAM,EAC7E,KAAK,IAAI,EAAG,KAAK,cAAc,GAAK,KAAK,SAAS,IAAM,KAAK,SAAS,OAAO,CACjF,CACJ,EAOA,OAAQ,UAAW,CACf,IAAI0K,EAAQ,KACZ,KAAK,iCAAiC,UAAW,CAC7CA,EAAM,WAAW,OAAO,CAC5B,CAAC,EACE,KAAK,cAAc,gBAAgB,IAClC,KAAK,cAAgB,MAEzB,KAAK,cAAc,OAAO,EAC1B,KAAK,cAAc,OAAO,EAEvB,KAAK,cACJ,KAAK,kBAAkB,EAAI,EAG3B,KAAK,cAAc,OAAO,EAI9B,IAAIotB,EAAU,KAAK,cAAc,QAAQ,QAAU,KAAK,aACpD,KAAK,cAAc,QAAQ,QAAU,KAAK,aAC1C,KAAK,WAAW,QAAQ,QAAU,KAAK,UACvC,KAAK,cAAc,QAAQ,QAAU,KAAK,YAG9C,KAAK,YAAc,KAAK,cAAc,QAAQ,MAC9C,KAAK,YAAc,KAAK,cAAc,QAAQ,MAC9C,KAAK,SAAc,KAAK,WAAW,QAAQ,MAC3C,KAAK,YAAc,KAAK,cAAc,QAAQ,MAE9C,IAAIzI,EAAcyI,GACA,CAAC,KAAK,WAAW,gBAAgB,GACjC,CAAC,KAAK,cAAc,gBAAgB,GACpC,CAAC,KAAK,cAAc,gBAAgB,GACpC,CAAC,KAAK,cAAc,gBAAgB,EAEtD,OAAOzI,CACX,EAGA,kBAAmB,SAAS0I,EAAmB,CAC3C,IAAIC,EAAYD,IAAuB,GAEnCvmB,EAAQ,KAAK,cAAc,MAAM,KAAK,UAAU,CAAC,EACrD,KAAK,cAAc,QAAQA,EAAM,CAAC,EAClC,KAAK,cAAc,QAAQA,EAAM,CAAC,EAE/BwmB,EACC,KAAK,cAAc,OAAO,EAE1B,KAAK,cAAc,QAAQD,CAAkB,EAGjD,IAAIR,EAAkB,KAAK,cAAc,QAAQ,MAAQ,KAAK,YAC1DU,EAASzmB,EAAM,OAAO+lB,EAAkB,EAAE,EAAE,MAAM,EAAE,EACxD,KAAK,cAAc,QAAQU,EAAO,CAAC,EACnC,KAAK,cAAc,QAAQA,EAAO,CAAC,CACvC,EAGA,iCAAkC,SAASC,EAAmB,CAC1D,GAAI,KAAK,UAAW,CAChB,IAAI1C,EAAe,KAAK,eAAe,KAAK,UAAW,EAAI,EAC3D0C,EAAkB,EAClB,IAAIzC,EAAe,KAAK,eAAe,KAAK,UAAW,EAAI,EAEvDC,EAAkBD,EAAa,MAAMD,CAAY,EACjDG,EAAkB,KAAK,sBACvBD,EAAiB,EAAI,EAEzB,KAAK,cAAc,QAAQC,EAAgB,CAAC,EAC5C,KAAK,cAAc,QAAQA,EAAgB,CAAC,EAExC,KAAK,WAAW,gBAAgB,IAChC,KAAK,UAAY,KAEzB,MACIuC,EAAkB,CAE1B,EAWA,8BAA+B,SAASC,EAAa9C,EAAS,CAC1D,OAAO8C,EAAY,MACf,KAAK,oBAAoB,EAAI,KAAK,QAAQ9C,CAAO,CACrD,CACJ,EAUA,sBAAuB,SAAS8C,EAAa9C,EAAS,CAClD,OAAO,KAAK,8BACR8C,EAAY,OAAO,KAAK,YAAY9C,CAAO,CAAC,EAC5CA,CAAO,CACf,EAWA,8BAA+B,SAAS+C,EAAa/C,EAAS,CAC1D,OAAO+C,EAAY,OACf,KAAK,oBAAoB,EAAI,KAAK,QAAQ/C,CAAO,CACrD,CACJ,EAUA,sBAAuB,SAAS+C,EAAa/C,EAAS,CAClD,OAAO,KAAK,8BAA8B+C,EAAa/C,CAAO,EACzD,OAAO,CAAC,KAAK,YAAYA,CAAO,CAAC,CAC1C,EAWA,uBAAwB,SAASryB,EAAOqyB,EAAS,CAC7C,OAAO,KAAK,wBACRryB,EAAO,KAAK,kBAAkBqyB,CAAO,CAAC,CAC9C,EASA,eAAgB,SAASryB,EAAOqyB,EAAS,CACrC,OAAO,KAAK,gBAAgBryB,EAAO,KAAK,kBAAkBqyB,CAAO,CAAC,CACtE,EAGA,wBAAyB,SAASryB,EAAO2b,EAAQ,CAC7C,OAAO3b,EAAM,MACT2b,EAAO,WAAW,CACtB,EAAE,MACE,KAAK,oBAAoB,EAAIA,EAAO,KACxC,EAAE,KACE,IAAI3e,EAAE,MAAM,KAAK,SAAS,KAAM,KAAK,SAAS,GAAG,CACrD,CACJ,EAGA,gBAAiB,SAASgD,EAAO2b,EAAQ,CACrC,OAAO,KAAK,wBACR3b,EAAM,OAAO,KAAK,YAAY,EAAI,EAAG,KAAK,UAAU,EAAI,CAAC,EACzD2b,CAAM,CACd,EAWA,uBAAwB,SAAS0Z,EAAOhD,EAAS,CAC7C,IAAI1W,EAAS,KAAK,kBAAkB0W,CAAO,EAC3C,OAAOgD,EAAM,MACT,IAAIr4B,EAAE,MAAM,KAAK,SAAS,KAAM,KAAK,SAAS,GAAG,CACrD,EAAE,OACE,KAAK,oBAAoB,EAAI2e,EAAO,KACxC,EAAE,KACEA,EAAO,WAAW,CACtB,CACJ,EASA,eAAgB,SAAS0Z,EAAOhD,EAAS,CACrC,OAAO,KAAK,uBAAuBgD,EAAOhD,CAAO,EAAE,OAC/C,CAAC,KAAK,YAAYA,CAAO,EACzB,KAAK,UAAUA,CAAO,CAC1B,CACJ,EAGA,sBAAuB,SAAUiD,EAASC,EAAU,CAChD,IAAIvY,EAAQ,KAAK,uBAAuB,MACxC,OAAO,IAAIhgB,EAAE,MACTs4B,EAAU,KAAK,qBAAqB,EAAItY,EACxCuY,EAAU,KAAK,qBAAqB,EAAIvY,CAAK,CACrD,EAaA,2BAA4B,SAASsY,EAASC,EAAS,CACnD,GAAID,aAAmBt4B,EAAE,MAErB,OAAO,KAAK,2BAA2Bs4B,EAAQ,EAAGA,EAAQ,CAAC,EAG/D,GAAI,KAAK,OAAQ,CACb,IAAIvuB,EAAQ,KAAK,OAAO,MAAM,aAAa,EAC3C,GAAIA,EAAQ,EACH,KAAK,2BACN/J,EAAE,QAAQ,MAAM,4HAC0D,UAEvE+J,IAAU,EAAG,CAIpB,IAAIoU,EAAO,KAAK,OAAO,MAAM,UAAU,CAAC,EACxC,OAAOA,EAAK,2BAA2Bma,EAASC,EAAS,EAAI,CACjE,CACJ,CAEA,OAAO,KAAK,sBACRD,EAAU,KAAK,uBAAuB,EACtCC,EAAU,KAAK,uBAAuB,CAAC,CAC/C,EAGA,sBAAuB,SAAUC,EAAQC,EAAS,CAC9C,IAAIzY,EAAQ,KAAK,uBAAuB,MACxC,OAAO,IAAIhgB,EAAE,MACTw4B,EAAS,KAAK,qBAAqB,EAAIxY,EACvCyY,EAAS,KAAK,qBAAqB,EAAIzY,CAAK,CACpD,EAaA,2BAA4B,SAASwY,EAAQC,EAAQ,CACjD,GAAID,aAAkBx4B,EAAE,MAEpB,OAAO,KAAK,2BAA2Bw4B,EAAO,EAAGA,EAAO,CAAC,EAG7D,GAAI,KAAK,OAAQ,CACb,IAAIzuB,EAAQ,KAAK,OAAO,MAAM,aAAa,EAC3C,GAAIA,EAAQ,EACH,KAAK,2BACN/J,EAAE,QAAQ,MAAM,4HAC0D,UAEvE+J,IAAU,EAAG,CAIpB,IAAIoU,EAAO,KAAK,OAAO,MAAM,UAAU,CAAC,EACxC,OAAOA,EAAK,2BAA2Bqa,EAAQC,EAAQ,EAAI,CAC/D,CACJ,CAEA,IAAIz1B,EAAQ,KAAK,sBAAsBw1B,EAAQC,CAAM,EACrD,OAAAz1B,EAAM,GAAK,KAAK,uBAAuB,EACvCA,EAAM,GAAK,KAAK,uBAAuB,EAChCA,CACX,EAiBA,yBAA0B,SAASw1B,EAAQC,EAAQC,EAAYC,EAAa,CACxE,IAAIne,EAAOge,EAMX,GALMhe,aAAgBxa,EAAE,OAEpBwa,EAAO,IAAIxa,EAAE,KAAKw4B,EAAQC,EAAQC,EAAYC,CAAW,GAGzD,KAAK,OAAQ,CACb,IAAI5uB,EAAQ,KAAK,OAAO,MAAM,aAAa,EAC3C,GAAIA,EAAQ,EACH,KAAK,2BACN/J,EAAE,QAAQ,MAAM,wHACuD,UAEpE+J,IAAU,EAAG,CAIpB,IAAIoU,EAAO,KAAK,OAAO,MAAM,UAAU,CAAC,EACxC,OAAOA,EAAK,yBACRqa,EAAQC,EAAQC,EAAYC,EAAa,EAAI,CACrD,CACJ,CAEA,IAAIC,EAAS,KAAK,2BAA2Bpe,EAAK,EAAGA,EAAK,CAAC,EACvDqe,EAAS,KAAK,sBAAsBre,EAAK,MAAOA,EAAK,MAAM,EAC/D,OAAO,IAAIxa,EAAE,KACT44B,EAAO,EACPA,EAAO,EACPC,EAAO,EACPA,EAAO,EACPre,EAAK,OACT,CACJ,EAiBA,yBAA0B,SAAS8d,EAASC,EAASO,EAAYC,EAAa,CAC1E,IAAIve,EAAO8d,EAMX,GALM9d,aAAgBxa,EAAE,OAEpBwa,EAAO,IAAIxa,EAAE,KAAKs4B,EAASC,EAASO,EAAYC,CAAW,GAG3D,KAAK,OAAQ,CACb,IAAIhvB,EAAQ,KAAK,OAAO,MAAM,aAAa,EAC3C,GAAIA,EAAQ,EACH,KAAK,2BACN/J,EAAE,QAAQ,MAAM,wHACwD,UAErE+J,IAAU,EAAG,CAIpB,IAAIoU,EAAO,KAAK,OAAO,MAAM,UAAU,CAAC,EACxC,OAAOA,EAAK,yBACRma,EAASC,EAASO,EAAYC,EAAa,EAAI,CACvD,CACJ,CAEA,IAAIH,EAAS,KAAK,2BAA2Bpe,EAAK,EAAGA,EAAK,CAAC,EACvDqe,EAAS,KAAK,sBAAsBre,EAAK,MAAOA,EAAK,MAAM,EAC/D,OAAO,IAAIxa,EAAE,KACT44B,EAAO,EACPA,EAAO,EACPC,EAAO,EACPA,EAAO,EACPre,EAAK,OACT,CACJ,EASA,gCAAiC,SAAU6d,EAAQ,CAC/C,IAAIr1B,EAAQ,KAAK,eAAgBq1B,EAAO,EAAK,EAC7C,OAAO,KAAK,2BAA4Br1B,CAAM,CAClD,EASA,gCAAiC,SAAUq1B,EAAQ,CAC/C,IAAIr1B,EAAQ,KAAK,2BAA4Bq1B,CAAM,EACnD,OAAO,KAAK,eAAgBr1B,EAAO,EAAK,CAC5C,EAQA,yBAA0B,SAASq1B,EAAO,CACtCr4B,EAAE,QAAQ,OAAO,KAAK,OAClB,sEAAsE,EAC1E,IAAIg5B,EAAoBX,EAAM,MACtBr4B,EAAE,mBAAmB,KAAK,OAAO,OAAO,CAAC,EACjD,OAAO,KAAK,gCAAgCg5B,CAAiB,CACjE,EAQA,yBAA0B,SAASX,EAAO,CACtCr4B,EAAE,QAAQ,OAAO,KAAK,OAClB,sEAAsE,EAC1E,IAAIg5B,EAAoB,KAAK,gCAAgCX,CAAK,EAClE,OAAOW,EAAkB,KACjBh5B,EAAE,mBAAmB,KAAK,OAAO,OAAO,CAAC,CACrD,EAQA,mCAAoC,SAAUq4B,EAAQ,CAClD,OAAO,KAAK,eAAgBA,EAAO,EAAK,CAC5C,EAQA,mCAAoC,SAAUr1B,EAAQ,CAClD,OAAO,KAAK,eAAgBA,EAAO,EAAK,CAC5C,EAQA,iCAAkC,SAAS4qB,EAAW,CAClD,OAAO5tB,EAAE,KAAK,YACV,KAAK,eAAe4tB,EAAU,WAAW,EAAG,EAAI,EAChD,KAAK,eAAeA,EAAU,YAAY,EAAG,EAAI,EACjD,KAAK,eAAeA,EAAU,cAAc,EAAG,EAAI,CACvD,CACJ,EAQA,iCAAkC,SAASA,EAAW,CAClD,OAAO5tB,EAAE,KAAK,YACV,KAAK,eAAe4tB,EAAU,WAAW,EAAG,EAAI,EAChD,KAAK,eAAeA,EAAU,YAAY,EAAG,EAAI,EACjD,KAAK,eAAeA,EAAU,cAAc,EAAG,EAAI,CACvD,CACJ,EAOA,4BAA6B,SAASyK,EAAO,CACzCr4B,EAAE,QAAQ,OAAO,KAAK,OAClB,yEAAyE,EAC7E,IAAIg5B,EAAoBX,EAAM,MACtBr4B,EAAE,mBAAmB,KAAK,OAAO,OAAO,CAAC,EACjD,OAAO,KAAK,mCAAmCg5B,CAAiB,CACpE,EAOA,4BAA6B,SAASh2B,EAAO,CACzChD,EAAE,QAAQ,OAAO,KAAK,OAClB,yEAAyE,EAC7E,IAAIg5B,EAAoB,KAAK,mCAAmCh2B,CAAK,EACrE,OAAOg2B,EAAkB,KACjBh5B,EAAE,mBAAmB,KAAK,OAAO,OAAO,CAAC,CACrD,EAcA,oBAAqB,SAASi5B,EAAc,CACxC,GAAI,KAAK,OAAQ,CACb,IAAIlvB,EAAQ,KAAK,OAAO,MAAM,aAAa,EAC3C,GAAIA,EAAQ,EACH,KAAK,2BACN/J,EAAE,QAAQ,MAAM,kEACgB,UAE7B+J,IAAU,EAAG,CAIpB,IAAIoU,EAAO,KAAK,OAAO,MAAM,UAAU,CAAC,EACxC,OAAOA,EAAK,oBAAoB8a,CAAY,CAChD,CACJ,CAEA,IAAIC,EAAa,KAAK,qBAAqB,EACvCC,EAAiB,KAAK,oBAAoB,EAC1CnZ,EAAQ,KAAK,uBAAuB,MACpCoZ,EAA4BD,EAAiBD,EAAclZ,EAC/D,OAAOiZ,EAAeG,CAC1B,EAcA,oBAAqB,SAAS5K,EAAW,CACrC,GAAI,KAAK,OAAQ,CACb,IAAIzkB,EAAQ,KAAK,OAAO,MAAM,aAAa,EAC3C,GAAIA,EAAQ,EACH,KAAK,2BACN/J,EAAE,QAAQ,MAAM,mJACwF,UAErG+J,IAAU,EAAG,CAIpB,IAAIoU,EAAO,KAAK,OAAO,MAAM,UAAU,CAAC,EACxC,OAAOA,EAAK,oBAAoBqQ,CAAS,CAC7C,CACJ,CAEA,IAAI0K,EAAa,KAAK,qBAAqB,EACvCC,EAAiB,KAAK,oBAAoB,EAC1CnZ,EAAQ,KAAK,uBAAuB,MACpCoZ,EAA4BF,EAAaC,EAAkBnZ,EAC/D,OAAOwO,EAAY4K,CACvB,EAOA,WAAY,UAAW,CACrB,YAAK,QAAQ,CAAC,KAAK,QAAQ,CAAC,EACrB,IACT,EAOA,QAAS,UAAW,CAClB,OAAO,KAAK,OACd,EAQA,QAAS,SAAU9a,EAAQ,CACzB,OAAK,KAAK,UAAYA,EACb,MAGT,KAAK,QAAUA,EACZ,KAAK,OAAO,WACb,KAAK,OAAO,UAAU,QAAQ,KAAK,QAAQ,CAAC,EAE9C,KAAK,OAAO,YAAY,EAYxB,KAAK,OAAO,WAAW,OAAQ,CAAC,QAASA,CAAK,CAAC,EACxC,KACT,EAOA,qBAAsB,UAAW,CAC7B,OAAO,KAAK,iBAChB,EAUA,qBAAsB,SAAS+a,EAAOC,EAAmB,GAAMrb,EAAc,GAAO,CAEhFje,EAAE,QAAQ,OAAO,CAAC,MAAMq5B,CAAK,EAAG,wDAAwD,EAEpF,OAAMA,CAAK,IAIf,KAAK,kBAAoBA,EAErBC,GACI,KAAK,QAAQ,EAAI,KAAK,WAAW,GACjC,KAAK,iBAAiBrb,CAAW,EAG7C,CAEJ,CAEA,EAAGne,CAAc,EAoChB,SAAUE,EAAG,CAoDdA,EAAE,WAAa,SAAUD,EAAU,CAC/B,KAAK,aAAe,GAMpBC,EAAE,QAAQ,OAAQD,EAAQ,UAAW,4CAA6C,EAClFC,EAAE,QAAQ,OAAQD,EAAQ,OAAQ,yCAA0C,EAC5EC,EAAE,QAAQ,OAAQD,EAAQ,OAAQ,yCAA0C,EAC5EC,EAAE,QAAQ,OAAQD,EAAQ,YAAa,8CAA+C,EACtFC,EAAE,QAAQ,OAAQD,EAAQ,OAAQ,yCAA0C,EAC5EC,EAAE,QAAQ,OAAO,CAACD,EAAQ,MAAQA,EAAQ,gBAAgBC,EAAE,KACxD,oEAAoE,EAExEA,EAAE,YAAY,KAAM,IAAK,EAEzB,KAAK,WAAaD,EAAQ,UAC1B,OAAOA,EAAQ,UAEf,KAAK,QAAUA,EAAQ,OACvB,OAAOA,EAAQ,OAEf,KAAK,aAAeA,EAAQ,YAC5B,OAAOA,EAAQ,YAEXA,EAAQ,gBAAgBC,EAAE,OAC1B,KAAK,MAAQD,EAAQ,KAAK,MAAM,GAGpC,OAAOA,EAAQ,KAEf,IAAIua,EAAIva,EAAQ,GAAK,EACrB,OAAOA,EAAQ,EACf,IAAIwa,EAAIxa,EAAQ,GAAK,EACrB,OAAOA,EAAQ,EAGf,KAAK,WAAaA,EAAQ,OAAO,WAAW,EAAIA,EAAQ,OAAO,WAAW,EAC1E,KAAK,eAAiBA,EAAQ,OAAO,WAAW,EAAIA,EAAQ,OAAO,WAAW,EAE9E,IAAIigB,EAAQ,EACPjgB,EAAQ,OACTigB,EAAQjgB,EAAQ,MAChB,OAAOA,EAAQ,MAEVA,EAAQ,SACTC,EAAE,QAAQ,MAAO,mEAAoE,EACrF,OAAOD,EAAQ,SAEXA,EAAQ,SAChBigB,EAAQjgB,EAAQ,OAAS,KAAK,WAC9B,OAAOA,EAAQ,QAGnB,IAAIw5B,EAAYx5B,EAAQ,UACxB,OAAOA,EAAQ,UACf,IAAIy5B,EAAqBz5B,EAAQ,oBAAsBD,EAAc,UAAU,OAC/E,OAAOC,EAAQ,mBAEf,IAAIie,EAAUje,EAAQ,SAAW,EACjC,OAAOA,EAAQ,QAEf,IAAIyV,EAAczV,EAAQ,YAC1B,OAAOA,EAAQ,YAEfC,EAAE,OAAQ,GAAM,KAAM,CAGlB,OAAgB,KAChB,YAAgB,CAAC,EACjB,SAAgB,CAAC,EACjB,gBAAiB,CAAC,EAClB,UAAgB,CAAC,EACjB,cAAgB,EAChB,WAAgB,GAChB,aAAgB,GAChB,eAAgB,GAChB,cAAgB,EAChB,aAAgB,CAAC,EACjB,WAAgB,CAAC,EACjB,YAAgB,GAChB,aAAgB,GAChB,WAAgB,GAEhB,gBAAmCA,EAAE,iBAAiB,gBACtD,cAAmCA,EAAE,iBAAiB,cACtD,kBAAmCA,EAAE,iBAAiB,kBACtD,eAAmCA,EAAE,iBAAiB,eACtD,aAAmCA,EAAE,iBAAiB,aACtD,gBAAmCA,EAAE,iBAAiB,gBACtD,UAAmCA,EAAE,iBAAiB,UACtD,YAAmCA,EAAE,iBAAiB,YACtD,cAAmCA,EAAE,iBAAiB,cACtD,uBAAmCA,EAAE,iBAAiB,uBACtD,UAAmCA,EAAE,iBAAiB,UACtD,UAAmCA,EAAE,iBAAiB,UACtD,kBAAmCA,EAAE,iBAAiB,kBACtD,oBAAmCA,EAAE,iBAAiB,oBACtD,qBAAmCA,EAAE,iBAAiB,qBACtD,QAAmCA,EAAE,iBAAiB,QACtD,QAAmCA,EAAE,iBAAiB,QACtD,mBAAmCA,EAAE,iBAAiB,mBACtD,gCAAmCA,EAAE,iBAAiB,gCACtD,iBAAmCA,EAAE,iBAAiB,gBAC1D,EAAGD,CAAQ,EAEX,KAAK,SAAW,KAAK,QACrB,OAAO,KAAK,QAEZ,KAAK,aAAe,GAEpB,KAAK,SAAW,IAAIC,EAAE,OAAO,CACzB,QAASsa,EACT,gBAAiB,KAAK,gBACtB,cAAe,KAAK,aACxB,CAAC,EAED,KAAK,SAAW,IAAIta,EAAE,OAAO,CACzB,QAASua,EACT,gBAAiB,KAAK,gBACtB,cAAe,KAAK,aACxB,CAAC,EAED,KAAK,aAAe,IAAIva,EAAE,OAAO,CAC7B,QAASggB,EACT,gBAAiB,KAAK,gBACtB,cAAe,KAAK,aACxB,CAAC,EAED,KAAK,eAAiB,IAAIhgB,EAAE,OAAO,CAC/B,QAASge,EACT,gBAAiB,KAAK,gBACtB,cAAe,KAAK,aACxB,CAAC,EAED,KAAK,gBAAgB,EAEjBub,GACA,KAAK,UAAUA,EAAWC,EAAoB,EAAI,EAGtD,KAAK,gBAAkB,CAAC,EACxB,KAAK,eAAehkB,EAAa,EAAK,EACtC,KAAK,aAAe,EACxB,EAEAxV,EAAE,OAAOA,EAAE,WAAW,UAAWA,EAAE,YAAY,UAA2D,CAItG,UAAW,UAAW,CAClB,OAAO,KAAK,UAChB,EAKA,OAAQ,UAAW,CACf,KAAK,WAAa,EACtB,EAKA,eAAgB,UAAW,CACvB,OAAO,KAAK,YAChB,EAGA,gBAAiB,SAASy5B,EAAM,CACxBA,IAAS,KAAK,eAIlB,KAAK,aAAeA,EAapB,KAAK,WAAW,sBAAuB,CACnC,YAAa,KAAK,YACtB,CAAC,EACL,EAMA,MAAO,UAAW,CACd,KAAK,WAAW,cAAc,IAAI,EAClC,KAAK,cAAgBz5B,EAAE,IAAI,EAC3B,KAAK,WAAa,EACtB,EAQA,OAAQ,SAAS05B,EAAiB,CAC9B,IAAIC,EAAW,KAAK,SAAS,OAAO,EAChCC,EAAW,KAAK,SAAS,OAAO,EAChCC,EAAe,KAAK,aAAa,OAAO,EACxCC,EAAiB,KAAK,eAAe,OAAO,EAE5CC,EAAWJ,GAAYC,GAAYC,GAAgBC,GAAkB,KAAK,aAE9E,GAAIC,GAAWL,GAAmB,CAAC,KAAK,aAAa,CACjD,IAAIM,EAAkB,KAAK,yBAAyB,EACpD,KAAK,gBAAgBA,CAAe,CACxC,CAIA,OAFA,KAAK,aAAe,GAEhBD,GACA,KAAK,gBAAgB,EACrB,KAAK,mBAAmB,EACxB,KAAK,WAAa,GACX,IAGJ,EACX,EAQA,SAAU,UAAU,CAChB,YAAK,WAAa,KAAK,aAAe,KAAK,aACpC,KAAK,UAChB,EASA,WAAWr5B,EAAU,CACjB,KAAK,WAAaA,CACtB,EAMA,WAAW,CACP,OAAO,KAAK,UAChB,EAKA,QAAS,UAAW,CAChB,KAAK,MAAM,EAEP,KAAK,OAAO,SACZ,KAAK,OAAO,QAAQ,KAAK,MAAM,CAEvC,EAQA,UAAW,SAAS20B,EAAS,CACzB,OAAO,KAAK,kBAAkBA,CAAO,EAChC,OAAO,KAAK,YAAYA,CAAO,EAAG,KAAK,kBAAkBA,CAAO,CAAC,CAC1E,EASA,kBAAmB,SAASA,EAAS,CACjC,OAAOA,EACH,IAAIr1B,EAAE,KACF,KAAK,SAAS,QAAQ,MACtB,KAAK,SAAS,QAAQ,MACtB,KAAK,mBACL,KAAK,mBAAmB,EAC5B,IAAIA,EAAE,KACF,KAAK,SAAS,OAAO,MACrB,KAAK,SAAS,OAAO,MACrB,KAAK,kBACL,KAAK,kBAAkB,CACnC,EAGA,eAAgB,UAAW,CACvB,OAAAA,EAAE,QAAQ,MAAM,6EAA6E,EACtF,KAAK,UAAU,CAC1B,EAQA,iBAAkB,SAASq1B,EAAS,CAChC,IAAI1W,EAAS,KAAK,kBAAkB0W,CAAO,EAC3C,GAAI,KAAK,MAAO,CACZ,IAAI4E,EAAa5E,EACb,KAAK,mBAAqB,KAAK,kBAC/BgE,EAAQY,EAAa,KAAK,OAAO,WAAW,EAC5CC,EAAO,KAAK,MAAM,MAAMb,CAAK,EACjC1a,EAAS,IAAI3e,EAAE,KACX2e,EAAO,EAAIub,EAAK,EAChBvb,EAAO,EAAIub,EAAK,EAChBA,EAAK,MACLA,EAAK,MAAM,CACnB,CACA,OAAOvb,EAAO,OAAO,KAAK,YAAY0W,CAAO,EAAG,KAAK,kBAAkBA,CAAO,CAAC,CACnF,EASA,cAAe,SAAUpe,EAAOqD,EAAGC,EAAI,CACnC,IAAIsH,EAAW,KAAK,OAAO,YAAY5K,CAAK,EACxCkjB,GAAYtY,EAAS,EAAMvH,EAAIuH,EAAS,GAAQA,EAAS,EACzDuY,GAAYvY,EAAS,EAAMtH,EAAIsH,EAAS,GAAQA,EAAS,EACzDlD,EAAS,KAAK,OAAO,cAAc1H,EAAOkjB,EAAMC,CAAI,EACxD,OAAI,KAAK,QAAQ,IACbzb,EAAO,EAAI,KAAK,IAAI,EAAG,EAAIA,EAAO,EAAIA,EAAO,KAAK,GAEtDA,EAAO,IAAMrE,EAAI6f,GAAQtY,EAAS,EAClClD,EAAO,GAAM,KAAK,oBAAsB,KAAK,qBAAwBpE,EAAI6f,GAAQvY,EAAS,GACnFlD,CACX,EAKA,eAAgB,UAAW,CACvB,OAAO,IAAI3e,EAAE,MAAM,KAAK,OAAO,WAAW,EAAG,KAAK,OAAO,WAAW,CAAC,CACzE,EAKA,2BAA4B,UAAW,CACnC,IAAIooB,EAAU,KAAK,yBAAyB,IAAIpoB,EAAE,MAAM,EAAG,CAAC,CAAC,EACzDsqB,EAAc,KAAK,yBAAyB,KAAK,eAAe,CAAC,EACrE,OAAO,IAAItqB,EAAE,MAAMsqB,EAAY,EAAIlC,EAAQ,EAAGkC,EAAY,EAAIlC,EAAQ,CAAC,CAC3E,EAGA,sBAAuB,SAAUkQ,EAASC,EAASlD,EAAU,CACzD,IAAIrV,EAASqV,EAAU,KAAK,aAAa,QAAQ,MAAQ,KAAK,aAAa,OAAO,MAClF,OAAO,IAAIr1B,EAAE,MAAMs4B,GAAW,KAAK,OAAO,WAAW,EAAItY,GACrDuY,GAAY,KAAK,OAAO,WAAW,EAAI,KAAK,eAAkBvY,EAAM,CAC5E,EAUA,2BAA4B,SAASsY,EAASC,EAASlD,EAAS,CAC5D,IAAIryB,EACJ,OAAIs1B,aAAmBt4B,EAAE,OAErBq1B,EAAUkD,EACVv1B,EAAQs1B,GAERt1B,EAAQ,IAAIhD,EAAE,MAAMs4B,EAASC,CAAO,EAGxCv1B,EAAQA,EAAM,OAAO,CAAC,KAAK,YAAYqyB,CAAO,EAAG,KAAK,kBAAkBA,CAAO,CAAC,EACzEA,EACH,KAAK,sBACDryB,EAAM,EAAI,KAAK,SAAS,QAAQ,MAChCA,EAAM,EAAI,KAAK,SAAS,QAAQ,KAAK,EACzC,KAAK,sBACDA,EAAM,EAAI,KAAK,SAAS,OAAO,MAC/BA,EAAM,EAAI,KAAK,SAAS,OAAO,KAAK,CAChD,EAGA,sBAAuB,SAAUw1B,EAAQC,EAAQpD,EAAU,CACvD,IAAIrV,EAASqV,EAAU,KAAK,aAAa,QAAQ,MAAQ,KAAK,aAAa,OAAO,MAClF,OAAO,IAAIr1B,EAAE,MAAOw4B,EAAS,KAAK,OAAO,WAAW,EAAKxY,EACpDyY,EAAS,KAAK,OAAO,WAAW,EAAI,KAAK,eAAkBzY,CAAK,CACzE,EAUA,2BAA4B,SAASwY,EAAQC,EAAQpD,EAAS,CACtDmD,aAAkBx4B,EAAE,QAEpBq1B,EAAUoD,EACVA,EAASD,EAAO,EAChBA,EAASA,EAAO,GAGpB,IAAIx1B,EAAQ,KAAK,sBAAsBw1B,EAAQC,EAAQpD,CAAO,EAC9D,OAAIA,GACAryB,EAAM,GAAK,KAAK,SAAS,QAAQ,MACjCA,EAAM,GAAK,KAAK,SAAS,QAAQ,QAEjCA,EAAM,GAAK,KAAK,SAAS,OAAO,MAChCA,EAAM,GAAK,KAAK,SAAS,OAAO,OAG7BA,EAAM,OAAO,KAAK,YAAYqyB,CAAO,EAAG,KAAK,kBAAkBA,CAAO,CAAC,CAClF,EAaA,yBAA0B,SAASmD,EAAQC,EAAQC,EAAYC,EAAatD,EAAS,CACjF,IAAI7a,EAAOge,EACPhe,aAAgBxa,EAAE,KAElBq1B,EAAUoD,EAEVje,EAAO,IAAIxa,EAAE,KAAKw4B,EAAQC,EAAQC,EAAYC,CAAW,EAG7D,IAAIC,EAAS,KAAK,2BAA2Bpe,EAAK,WAAW,EAAG6a,CAAO,EACnEwD,EAAS,KAAK,sBAAsBre,EAAK,MAAOA,EAAK,OAAQ6a,CAAO,EAExE,OAAO,IAAIr1B,EAAE,KACT44B,EAAO,EACPA,EAAO,EACPC,EAAO,EACPA,EAAO,EACPre,EAAK,QAAU,KAAK,YAAY6a,CAAO,CAC3C,CACJ,EAaA,yBAA0B,SAAUiD,EAASC,EAASO,EAAYC,EAAa1D,EAAU,CACrF,IAAI7a,EAAO8d,EACPA,aAAmBt4B,EAAE,KAErBq1B,EAAUkD,EAEV/d,EAAO,IAAIxa,EAAE,KAAKs4B,EAASC,EAASO,EAAYC,CAAW,EAG/D,IAAIH,EAAS,KAAK,2BAA2Bpe,EAAK,WAAW,EAAG6a,CAAO,EACnEwD,EAAS,KAAK,sBAAsBre,EAAK,MAAOA,EAAK,OAAQ6a,CAAO,EAExE,OAAO,IAAIr1B,EAAE,KACT44B,EAAO,EACPA,EAAO,EACPC,EAAO,EACPA,EAAO,EACPre,EAAK,QAAU,KAAK,YAAY6a,CAAO,CAC3C,CACJ,EAQA,gCAAiC,SAAUgD,EAAQ,CAC/C,IAAIr1B,EAAQ,KAAK,SAAS,eAAgBq1B,EAAO,EAAK,EACtD,OAAO,KAAK,2BAA4Br1B,CAAM,CAClD,EAQA,gCAAiC,SAAUq1B,EAAQ,CAC/C,IAAIr1B,EAAQ,KAAK,2BAA4Bq1B,CAAM,EACnD,OAAO,KAAK,SAAS,eAAgBr1B,EAAO,EAAK,CACrD,EAOA,yBAA0B,SAAUq1B,EAAQ,CACxC,IAAIW,EAAoBX,EAAM,MAC1Bv4B,EAAc,mBAAoB,KAAK,OAAO,OAAQ,CAAC,EAC3D,OAAO,KAAK,gCAAiCk5B,CAAkB,CACnE,EAOA,yBAA0B,SAAUX,EAAQ,CACxC,IAAIW,EAAoB,KAAK,gCAAiCX,CAAM,EACpE,OAAOW,EAAkB,KACrBl5B,EAAc,mBAAoB,KAAK,OAAO,OAAQ,CAAC,CAC/D,EAKA,+BAAgC,SAAS0a,EAAM,CAC3C,IAAIwF,EAAQ,KAAK,aAAa,QAAQ,MACtC,OAAAxF,EAAOA,EAAK,OAAO,CAAC,KAAK,YAAY,EAAI,EAAG,KAAK,kBAAkB,EAAI,CAAC,EACjE,IAAIxa,EAAE,MACRwa,EAAK,EAAI,KAAK,SAAS,QAAQ,OAASwF,GACxCxF,EAAK,EAAI,KAAK,SAAS,QAAQ,OAASwF,EACzCxF,EAAK,MAAQwF,EACbxF,EAAK,OAASwF,EACdxF,EAAK,OAAO,CACpB,EAYA,oBAAqB,SAAUye,EAAe,CAC1C,IAAII,EAAQ,KAAK,aAAa,QAAQ,MAClC,KAAK,SAAS,oBAAoB,EAAI,KAAK,OAAO,WAAW,EACjE,OAAOA,EAAQJ,CACnB,EAaA,oBAAqB,SAAUzK,EAAY,CACvC,IAAI6K,EAAQ,KAAK,aAAa,QAAQ,MAClC,KAAK,SAAS,oBAAoB,EAAI,KAAK,OAAO,WAAW,EACjE,OAAO7K,EAAY6K,CACvB,EAQA,YAAa,SAASrM,EAAU/O,EAAa,CACzC,IAAIoc,EAAc,KAAK,SAAS,OAAO,QAAUrN,EAAS,GACtD,KAAK,SAAS,OAAO,QAAUA,EAAS,EAE5C,GAAI/O,EAAa,CACb,GAAIoc,GAAc,KAAK,SAAS,QAAQ,QAAUrN,EAAS,GACvD,KAAK,SAAS,QAAQ,QAAUA,EAAS,EACzC,OAGJ,KAAK,SAAS,QAAQA,EAAS,CAAC,EAChC,KAAK,SAAS,QAAQA,EAAS,CAAC,EAChC,KAAK,WAAa,GAClB,KAAK,aAAe,EACxB,KAAO,CACH,GAAIqN,EACA,OAGJ,KAAK,SAAS,SAASrN,EAAS,CAAC,EACjC,KAAK,SAAS,SAASA,EAAS,CAAC,EACjC,KAAK,WAAa,GAClB,KAAK,aAAe,EACxB,CAEKqN,GACD,KAAK,mBAAmB,CAEhC,EAQA,SAAU,SAASjgB,EAAO6D,EAAa,CACnC,KAAK,UAAU7D,EAAO6D,CAAW,CACrC,EAQA,UAAW,SAAS5D,EAAQ4D,EAAa,CACrC,KAAK,UAAU5D,EAAS,KAAK,WAAY4D,CAAW,CACxD,EAYA,oBAAqB,SAAU2Q,EAAW,CACtC,IAAI0L,EAAa,SAASl6B,EAAK,CAC3B,OAAOA,aAAeJ,EAAE,OAAU,OAAOI,EAAI,GAAM,UAAY,OAAOA,EAAI,GAAM,QACpF,EAEIm6B,EAAyB,SAASC,EAAM,CACxC,OAAOA,EAAK,IAAI,SAASp6B,EAAK,CAC1B,GAAI,CACA,GAAIk6B,EAAWl6B,CAAG,EACd,MAAO,CAAE,EAAGA,EAAI,EAAG,EAAGA,EAAI,CAAE,EAE5B,MAAM,IAAI,KAElB,OAAQO,EAAG,CACP,MAAM,IAAI,MAAM,oDAAoD,CACxE,CACJ,CAAC,CACL,EAEA,GAAI,CACA,GAAI,CAACX,EAAE,QAAQ4uB,CAAQ,EACnB,MAAM,IAAI,MAAM,2CAA2C,EAE/D,KAAK,kBAAoBA,EAAS,IAAI,SAASC,EAAQ,CACnD,OAAO0L,EAAuB1L,CAAO,CACzC,CAAC,EACD,KAAK,WAAa,EACtB,OAASluB,EAAG,CACRX,EAAE,QAAQ,MAAM,wEAAwE,EACxFA,EAAE,QAAQ,MAAMW,CAAC,EACjB,KAAK,sBAAsB,CAC/B,CACJ,EAMA,sBAAuB,UAAW,CAC9B,KAAK,kBAAoB,KACzB,KAAK,WAAa,EACtB,EAaA,UAAW,SAASge,EAAQ8b,EAAQxc,EAAa,CAC7Cwc,EAASA,GAAUz6B,EAAE,UAAU,OAC/B,IAAI06B,EAAmB16B,EAAE,UAAU,WAAWy6B,CAAM,EAChDE,EAAc,KAAK,eACnBzH,EAAU,EACVC,EAAU,EACVyH,EAAsB,EACtBC,EAAuB,EAc3B,GAbI,KAAK,QACLF,EAAc,KAAK,MAAM,eAAe,EACxCC,EAAsB,KAAK,MAAM,MAAQ,KAAK,OAAO,WAAW,EAChEC,EAAuB,KAAK,MAAM,OAAS,KAAK,OAAO,WAAW,EAC9Dlc,EAAO,eAAe,EAAIgc,GAC1BzH,EAAU,KAAK,MAAM,EAAI,KAAK,MAAM,OAASvU,EAAO,OACpDwU,EAAU,KAAK,MAAM,EAAI,KAAK,MAAM,OAASxU,EAAO,SAEpDuU,EAAU,KAAK,MAAM,EAAI,KAAK,MAAM,MAAQvU,EAAO,MACnDwU,EAAU,KAAK,MAAM,EAAI,KAAK,MAAM,MAAQxU,EAAO,QAIvDA,EAAO,eAAe,EAAIgc,EAAa,CAEvC,IAAItgB,EAASsE,EAAO,OAASkc,EACzBC,EAAa,EACbJ,EAAiB,uBACjBI,GAAcnc,EAAO,MAAQA,EAAO,OAASgc,GAAe,EACrDD,EAAiB,UACxBI,EAAanc,EAAO,MAAQA,EAAO,OAASgc,GAEhD,KAAK,YACD,IAAI36B,EAAE,MAAM2e,EAAO,EAAIuU,EAAU4H,EAAYnc,EAAO,EAAIwU,CAAO,EAC/DlV,CAAW,EACf,KAAK,UAAU5D,EAAQ4D,CAAW,CACtC,KAAO,CAEH,IAAI7D,EAAQuE,EAAO,MAAQic,EACvBG,EAAY,EACZL,EAAiB,qBACjBK,GAAapc,EAAO,OAASA,EAAO,MAAQgc,GAAe,EACpDD,EAAiB,WACxBK,EAAYpc,EAAO,OAASA,EAAO,MAAQgc,GAE/C,KAAK,YACD,IAAI36B,EAAE,MAAM2e,EAAO,EAAIuU,EAASvU,EAAO,EAAIwU,EAAU4H,CAAS,EAC9D9c,CAAW,EACf,KAAK,SAAS7D,EAAO6D,CAAW,CACpC,CACJ,EAMA,QAAS,UAAW,CAChB,OAAI,KAAK,MACE,KAAK,MAAM,MAAM,EAGrB,IACX,EAQA,QAAS,SAAS+c,EAAS,CACvBh7B,EAAE,QAAQ,OAAO,CAACg7B,GAAWA,aAAmBh7B,EAAE,KAC9C,oEAAoE,EAEpEg7B,aAAmBh7B,EAAE,KACrB,KAAK,MAAQg7B,EAAQ,MAAM,EAE3B,KAAK,MAAQ,KAGjB,KAAK,aAAe,GACpB,KAAK,WAAa,GAUlB,KAAK,WAAW,aAAa,CACjC,EAKA,QAAS,UAAW,CAChB,OAAO,KAAK,OAChB,EAMA,QAAS,SAASC,EAAM,CACpB,KAAK,QAAUA,CACnB,EAEA,IAAI,SAAS,CACT,OAAO,KAAK,QAChB,EACA,IAAI,QAAQnI,EAAQ,CAChB,IAAIgF,EAAU,KAAK,WAAa,CAAC,CAAChF,EAClC,KAAK,SAAW,CAAC,CAACA,EACfgF,IACC,KAAK,OAAO,EAAI,EAChB,KAAK,WAAa,GAClB,KAAK,mBAAmB,EAEhC,EAEA,IAAI,gBAAgB,CAChB,OAAO,KAAK,eAChB,EACA,IAAI,eAAeoD,EAAK,CACpB,IAAIpD,EAAU,KAAK,kBAAoB,CAAC,CAACoD,EACzC,KAAK,gBAAkB,CAAC,CAACA,EACtB,KAAK,cAAgBpD,IACpB,KAAK,OAAO,EAAI,EAChB,KAAK,WAAa,GAG1B,EAEA,IAAI,cAAc,CACd,OAAO,KAAK,aAChB,EACA,IAAI,aAAaoD,EAAK,CAClB,IAAIpD,EAAU,KAAK,gBAAkB,CAAC,CAACoD,EACvC,KAAK,cAAgB,CAAC,CAACA,EACpB,KAAK,cAAgBpD,IACpB,KAAK,OAAO,EAAI,EAChB,KAAK,WAAa,GAG1B,EAEA,IAAI,WAAW,CACX,OAAO,KAAK,UAChB,EACA,IAAI,UAAUqD,EAAM,CAChB,KAAK,WAAa,CAAC,CAACA,EACpB,KAAK,WAAa,EACtB,EAKA,WAAY,UAAW,CACnB,OAAO,KAAK,OAChB,EAMA,WAAY,SAASx3B,EAAS,CAC1B,KAAK,QAAUA,CACnB,EAEA,IAAI,SAAU,CACV,OAAO,KAAK,QAChB,EAEA,IAAI,QAAQA,EAAS,CACbA,IAAY,KAAK,UAIrB,KAAK,SAAWA,EAChB,KAAK,WAAa,GAWlB,KAAK,WAAW,iBAAkB,CAC9B,QAAS,KAAK,OAClB,CAAC,EACL,EAKA,WAAY,UAAW,CACnB,OAAO,KAAK,QAChB,EAKA,WAAY,SAASy3B,EAAS,CAC1B,KAAK,SAAW,CAAC,CAACA,EAClB,KAAK,WAAa,EACtB,EAOA,YAAa,SAAS/F,EAAS,CAC3B,OAAOA,EACH,KAAK,eAAe,QAAQ,MAC5B,KAAK,eAAe,OAAO,KACnC,EASA,YAAa,SAASrX,EAASC,EAAa,CACpC,KAAK,eAAe,OAAO,QAAUD,GACrC,KAAK,eAAe,gBAAgB,IAGpCC,EACA,KAAK,eAAe,QAAQD,CAAO,EAEnC,KAAK,eAAe,SAASA,CAAO,EAExC,KAAK,WAAa,GAClB,KAAK,aAAe,GACpB,KAAK,mBAAmB,EAC5B,EAOA,YAAa,UAAU,CAEnB,GAAI,KAAK,WAAa,GAAK,CAAC,KAAK,SAC7B,MAAO,GAGX,IAAIqd,EAAW,KAAK,+BAChB,KAAK,SAAS,qBAAqB,EAAI,CAAC,EAE5C,GAAI,CAAC,KAAK,gBAAkB,CAAC,KAAK,aAAc,CAC5C,IAAIC,EAAmB,KAAK,+BACxB,KAAK,iBAAiB,EAAI,CAAC,EAC/BD,EAAWA,EAAS,aAAaC,CAAgB,CACrD,CAEA,OAAOD,CACX,EAMA,eAAgB,UAAU,CAItB,IAAIE,EAAY,KAAK,aAAa,KAAK,EAGvC,YAAK,uBAAuBA,CAAS,EAGrCA,EAAY,KAAK,aAAa,KAAK,EAInCA,EAAU,QAAQC,GAAY,CAC1BA,EAAS,KAAK,WAAa,EAC/B,CAAC,EACD,KAAK,WAAaD,EACXA,CACX,EAQA,kBAAmB,SAASlG,EAAS,CACjC,OAAO,KAAK,kBAAkBA,CAAO,EAAE,UAAU,CACrD,EAEA,IAAI,oBAAoB,CACpB,OAAO,KAAK,mBAChB,EAEA,IAAI,mBAAmB3F,EAAmB,CAElCA,IAAuB,KAAK,sBAGhC,KAAK,oBAAsBA,EAC3B,KAAK,WAAa,GAWlB,KAAK,WAAW,6BAA8B,CAC1C,mBAAoB,KAAK,mBAC7B,CAAC,EAEL,EAKA,sBAAuB,UAAW,CAC9B,OAAO,KAAK,mBAChB,EAMA,sBAAuB,SAASA,EAAoB,CAChD,KAAK,mBAAqBA,CAC9B,EAgBA,eAAgB,SAASla,EAAaC,EAAW,CAI7C,GAHID,IAAgB,OAChBA,EAAc,CAAC,GAEf,CAACxV,EAAE,cAAcwV,CAAW,EAAG,CAC/B,QAAQ,MAAM,8EAA8E,EAC5F,MACJ,CAEA,KAAK,gBAAkBA,EACvB,KAAK,mBAAmBC,CAAS,CACrC,EAcA,mBAAoB,SAASA,EAAW,CAapC,GAZIA,IAAc,SACdA,EAAY,IAIZzV,EAAE,cAAc,KAAK,OAAO,WAAW,EACvC,KAAK,YAAcA,EAAE,OAAO,CAAC,EAAG,KAAK,OAAO,YAAa,KAAK,eAAe,EAE7E,KAAK,YAAc,KAAK,gBAIxByV,EAAW,CACX,IAAIoM,EAAUsY,EAAMC,EAAM5X,EAE1B,QAASvL,KAAS,KAAK,YAAa,CAChC4K,EAAW,KAAK,OAAO,YAAY5K,CAAK,EAExC,QAASqD,KAAK,KAAK,YAAYrD,CAAK,EAAG,CACnCkjB,GAAStY,EAAS,EAAMvH,EAAIuH,EAAS,GAAQA,EAAS,EAEtD,QAAStH,KAAK,KAAK,YAAYtD,CAAK,EAAEqD,CAAC,EAKnC,GAJA8f,GAASvY,EAAS,EAAMtH,EAAIsH,EAAS,GAAQA,EAAS,EACtDW,EAAO,KAAK,YAAYvL,CAAK,EAAEqD,CAAC,EAAEC,CAAC,EAEnCiI,EAAK,aAAe,KAAK,kBACrBA,EAAK,aAAc,CACnB,IAAIiZ,EAAkB,KAAK,OAAO,mBAAoBxkB,EAAOkjB,EAAMC,CAAK,EACxE5X,EAAK,YAAcxiB,EAAE,OAAO,CAAC,EAAG,KAAK,YAAay7B,CAAe,CACrE,MACIjZ,EAAK,YAAc,IAG/B,CACJ,CAEA,QAASjhB,EAAI,EAAGA,EAAI,KAAK,aAAa,SAAS,OAAQA,IAAK,CACxD,IAAI6qB,EAAM,KAAK,aAAa,SAAS7qB,CAAC,EACtC6qB,EAAI,aAAeA,EAAI,KAAK,aAC5BA,EAAI,YAAcA,EAAI,KAAK,aAAeA,EAAI,KAAK,YAAc,IACrE,CACJ,CACJ,EAGA,UAAW,SAASpM,EAAO/B,EAAa,CACpC,IAAIoc,EAAc,KAAK,aAAa,OAAO,QAAUra,EACrD,GAAI/B,EAAa,CACb,GAAIoc,GAAc,KAAK,aAAa,QAAQ,QAAUra,EAClD,OAGJ,KAAK,aAAa,QAAQA,CAAK,EAC/B,KAAK,gBAAgB,EACrB,KAAK,WAAa,GAClB,KAAK,aAAe,EACxB,KAAO,CACH,GAAIqa,EACA,OAGJ,KAAK,aAAa,SAASra,CAAK,EAChC,KAAK,gBAAgB,EACrB,KAAK,WAAa,GAClB,KAAK,aAAe,EACxB,CAEKqa,GACD,KAAK,mBAAmB,CAEhC,EAGA,gBAAiB,UAAW,CACxB,KAAK,kBAAoB,KAAK,aAAa,OAAO,MAClD,KAAK,mBAAqB,KAAK,WAAa,KAAK,aAAa,OAAO,MACrE,KAAK,mBAAqB,KAAK,aAAa,QAAQ,MACpD,KAAK,oBAAsB,KAAK,WAAa,KAAK,aAAa,QAAQ,KAC3E,EAGA,mBAAoB,UAAW,CAY3B,KAAK,WAAW,eAAe,CACnC,EAGA,cAAe,UAAW,CACtB,OAAO,KAAK,OAAO,MAAM,UAAU,CAAC,IAAM,IAC9C,EAGA,mBAAoB,UAAW,CAC3B,IAAIqB,EAAc,KAAK,IACnB,KAAK,OAAO,SACZ,KAAK,MAAM,KAAK,IAAI,KAAK,iBAAiB,EAAI,KAAK,IAAI,CAAC,CAAC,CAC7D,EACIC,EAAmB,KAAK,SAAS,8BACjC,KAAK,OAAO,cAAc,CAAC,EAAG,EAAI,EAAE,EACpC,KAAK,aAAa,QAAQ,MAC1BC,EAAe,KAAK,IACpB,KAAK,IAAI,KAAK,OAAO,QAAQ,EAC7B,KAAK,IAAI,KAAK,MACV,KAAK,IAAID,EAAmB,KAAK,aAAa,EAAI,KAAK,IAAI,CAAC,CAChE,CAAC,CACL,EAIA,OAAAC,EAAe,KAAK,IAAIA,EAAc,KAAK,OAAO,UAAY,CAAC,EAC/DF,EAAc,KAAK,IAAIA,EAAaE,CAAY,EACzC,CACH,YAAaF,EACb,aAAcE,CAClB,CACJ,EAGA,yBAA0B,UAAU,CAChC,IAAIC,EAAiB,KAAK,mBAAmB,EACzCH,EAAcG,EAAe,YAC7BD,EAAeC,EAAe,aAC9BC,EAAY,CAAC,EACbT,EAAW,KAAK,YAAY,EAC5BxgB,EAAc7a,EAAE,IAAI,EAWxB,GARA,KAAK,WAAW,QAAQ+7B,GAAY,CAChCA,EAAS,KAAK,WAAa,EAC/B,CAAC,EAED,KAAK,aAAe,CAAC,EACrB,KAAK,cAAgB,EACrB,KAAK,gBAAkB,CAAC,EAErB,CAACV,EACA,YAAK,WAAa,GACX,KAAK,aAIhB,IAAIW,EAAY,IAAI,MAAMJ,EAAeF,EAAc,CAAC,EAExD,QAAQn6B,EAAI,EAAG0V,EAAQ2kB,EAAc3kB,GAASykB,EAAazkB,IAAS1V,IAChEy6B,EAAUz6B,CAAC,EAAI0V,EAMnB,QAAQA,EAAQ2kB,EAAe,EAAG3kB,GAAS,KAAK,OAAO,SAAUA,IAAQ,CACrE,IAAIuL,EACA,KAAK,YAAYvL,CAAK,GACtB,KAAK,YAAYA,CAAK,EAAE,CAAC,GACzB,KAAK,YAAYA,CAAK,EAAE,CAAC,EAAE,CAAC,EAEhC,GAAGuL,GAAQA,EAAK,cAAgBA,EAAK,aAAeA,EAAK,OAAO,CAC5DwZ,EAAU,KAAK/kB,CAAK,EACpB,KACJ,CACJ,CAOA,IAAIglB,EAAW,GACf,QAAS16B,EAAI,EAAGA,EAAIy6B,EAAU,OAAQz6B,IAAK,CACvC,IAAI0V,EAAQ+kB,EAAUz6B,CAAC,EAEvB,IAAI26B,EAA0B,KAAK,SAAS,8BACxC,KAAK,OAAO,cAAcjlB,CAAK,EAC/B,EACJ,EAAE,EAAI,KAAK,aAAa,QAAQ,MAIhC,GAAI1V,IAAMy6B,EAAU,OAAS,GAAKE,GAA2B,KAAK,cAC9DD,EAAW,WACJ,CAACA,EACR,SAGJ,IAAIE,EAAyB,KAAK,SAAS,8BACvC,KAAK,OAAO,cAAcllB,CAAK,EAC/B,EACJ,EAAE,EAAI,KAAK,aAAa,QAAQ,MAE5BmlB,EAAkB,KAAK,SAAS,8BAChC,KAAK,OAAO,cACR,KAAK,IACD,KAAK,OAAO,gBAAgB,EAC5B,CACJ,CACJ,EACA,EACJ,EAAE,EAAI,KAAK,aAAa,QAAQ,MAE5BC,EAAe,KAAK,gBAAkB,EAAID,EAC1CE,EAAe,KAAK,IAAI,GAAIJ,EAA0B,IAAO,EAAG,EAChEK,EAAkBF,EAAe,KAAK,IACtCA,EAAeF,CACnB,EAGIp6B,EAAS,KAAK,aACdkV,EACAqlB,EACAC,EACAlB,EACAxgB,EACAihB,CACJ,EAEAA,EAAY/5B,EAAO,UACnB,IAAIqe,EAAQre,EAAO,aAAa,OAAOygB,GAAQA,EAAK,MAAM,EACtDga,EAAsB,SAASvlB,EAAOqlB,EAAczhB,EAAY,CAChE,OAAO,SAAS2H,EAAK,CACjB,MAAO,CACH,KAAMA,EACN,MAAOvL,EACP,aAAcqlB,EACd,YAAazhB,CACjB,CACJ,CACJ,EAAG5D,EAAOqlB,EAAczhB,CAAW,EAMnC,GAJA,KAAK,aAAa5D,CAAK,EAAImJ,EAAM,IAAIoc,CAAkB,EAInD,KAAK,kBAAkB,KAAK,SAAUvlB,CAAK,EAC3C,KAER,CAIA,OAAI6kB,GAAaA,EAAU,OAAS,GAChCA,EAAU,QAAQ,SAAUtZ,EAAM,CAC1BA,GAAQ,CAACA,EAAK,WACd,KAAK,UAAUA,EAAM3H,CAAW,CAExC,EAAG,IAAI,EAEP,KAAK,WAAa,GACX,IAEA,KAAK,gBAAkB,CAKtC,EAOA,uBAAwB,SAASuF,EAAO,CACpC,IAAIvF,EAAc7a,EAAE,IAAI,EACpB0K,EAAQ,KACZ,KAAK,cAAgB,EACrB,KAAK,aAAe,KAAK,YACzB,KAAK,YAAc,GACnB,KAAK,gBAAkB,CAAC,EACxB,IAAIgxB,EAActb,EAAM,OAASA,EAAM,CAAC,EAAE,MAAQ,EAGlD,GAAG,CADY,KAAK,YAAY,EAE5B,OAGJ,SAASqc,EAAWvO,EAAK,CACrB,IAAI1L,EAAO0L,EAAK,KAChB,GAAG1L,GAAQA,EAAK,OAAO,CACnB,IAAIka,EAAiBhyB,EAAM,WACvB8X,EACAA,EAAK,EACLA,EAAK,EACL0L,EAAK,MACLA,EAAK,aACLrT,EACA6gB,CACJ,EACAhxB,EAAM,YAAcA,EAAM,aAAegyB,EACzChyB,EAAM,WAAaA,EAAM,YAAcgyB,GAAkBhyB,EAAM,YACnE,CACJ,CAKA,IAAIuM,EAAQ,EACZ,QAAQ1V,EAAI,EAAGA,EAAI6e,EAAM,OAAQ7e,IAAI,CACjC,IAAIihB,EAAOpC,EAAM7e,CAAC,EAClBk7B,EAAWja,CAAI,EACZ,KAAK,kBAAkB,KAAK,SAAUA,EAAK,KAAK,IAC/CvL,EAAQ,KAAK,IAAIA,EAAOuL,EAAK,KAAK,EAE1C,CACA,GAAGvL,EAAQ,EACP,QAAS0lB,KAAY,KAAK,aAClBA,EAAW1lB,GACX,OAAO,KAAK,aAAa0lB,CAAQ,CAKjD,EAkBA,WAAY,SAASna,EAAMlI,EAAGC,EAAGtD,EAAOqlB,EAAczhB,EAAa6gB,EAAa,CAC5E,IAAIkB,EAAkB,IAAO,KAAK,UAC9B9hB,EACAnX,EAEJ,OAAM6e,EAAK,aACPA,EAAK,WAAa3H,GAGtBC,EAAcD,EAAc2H,EAAK,WACjC7e,EAAci5B,EAAkB,KAAK,IAAK,EAAG9hB,EAAc8hB,CAAkB,EAAI,EAG9E3lB,IAAUykB,IACT/3B,EAAU,EACVmX,EAAY8hB,GAGX,KAAK,cACNj5B,GAAW24B,GAEf9Z,EAAK,QAAU7e,EAEVA,IAAY,IACb,KAAK,aAAc,KAAK,SAAUsT,EAAOqD,EAAGC,EAAG,EAAK,EACpD,KAAK,eAAiB,IAGnBO,EAAY8hB,CACvB,EAaA,aAAc,SAAS3lB,EAAOqlB,EACNC,EAAiBlB,EAAUxgB,EAAagiB,EAAM,CAElE,IAAIC,EAAezB,EAAS,eAAe,EAAE,WAAW,EACpD0B,EAAmB1B,EAAS,eAAe,EAAE,eAAe,EAE5D,KAAK,QAoBL,KAAK,OAAO,WAAW,eAAgB,CACnC,WAAY,KACZ,UAAW,GACX,MAAOpkB,EACP,QAASqlB,EACT,WAAYC,EACZ,SAAUlB,EACV,QAASyB,EACT,YAAaC,EACb,YAAaliB,EACb,KAAMgiB,CACV,CAAC,EAGL,KAAK,eAAe,KAAK,SAAU5lB,CAAK,EACxC,KAAK,eAAe,KAAK,gBAAiBA,CAAK,EAG/C,IAAI+lB,EAAc,KAAK,gBAAgB/lB,EAAO6lB,EAAcC,CAAgB,EACxEE,EAAcD,EAAY,QAC1BE,EAAkBF,EAAY,YAC9BG,EAAiB,KAAK,OAAO,YAAYlmB,CAAK,EAE9CmmB,EAAiB,KAAK,SAAS,eAAe,KAAK,SAAS,UAAU,CAAC,EAEvE,KAAK,QAAQ,IAObF,EAAgB,GAAK,EAChB,KAAK,iBACNA,EAAgB,EAAK,KAAK,IAAIA,EAAgB,EAAGC,EAAc,EAAI,CAAC,IAM5E,QAHItb,EAAW,KAAK,IAAI,GAAIqb,EAAgB,EAAID,EAAY,IAAMC,EAAgB,EAAID,EAAY,EAAE,EAChG7c,EAAQ,IAAI,MAAMyB,CAAQ,EAC1B2Q,EAAY,EACPlY,EAAI2iB,EAAY,EAAG3iB,GAAK4iB,EAAgB,EAAG5iB,IAChD,QAASC,EAAI0iB,EAAY,EAAG1iB,GAAK2iB,EAAgB,EAAG3iB,IAAK,CAErD,IAAI8iB,EACJ,GAAI,KAAK,QAAQ,EAAG,CAChB,IAAIlD,GAASgD,EAAc,EAAM7iB,EAAI6iB,EAAc,GAAQA,EAAc,EACzEE,EAAW/iB,EAAI6iB,EAAc,EAAIhD,EAAOA,EAAO,CACnD,MACIkD,EAAW/iB,EAGf,GAAI+gB,EAAS,aAAa,KAAK,cAAcpkB,EAAOomB,EAAU9iB,CAAC,CAAC,IAAM,KAKtE,KAAIxY,EAAS,KAAK,YACds7B,EAAU9iB,EACVtD,EACAslB,EACAa,EACAD,EACAtiB,EACAgiB,CACJ,EACAA,EAAO96B,EAAO,UACdqe,EAAMoS,CAAS,EAAIzwB,EAAO,KAC1BywB,GAAa,EACjB,CAGJ,MAAO,CACH,UAAWqK,EACX,aAAczc,CAClB,CACJ,EAUA,cAAe,SAAUoC,EAAMqR,EAASnX,EAAU0gB,EAAgBb,EAAiB,CAC/E,IAAIe,EAAW9a,EAAK,OAAO,WAAW,EAEtC8a,EAAS,GAAK,KAAK,aAAa,QAAQ,MACxCA,EAAS,GAAK,KAAK,aAAa,QAAQ,MACxCA,EAAS,GAAK,KAAK,SAAS,QAAQ,MACpCA,EAAS,GAAK,KAAK,SAAS,QAAQ,MAEpC,IAAIC,EAAe/a,EAAK,OAAO,QAAQ,EAEvC+a,EAAW,GAAK,KAAK,aAAa,QAAQ,MAC1CA,EAAW,GAAK,KAAK,aAAa,QAAQ,MAE1C/a,EAAK,iBAAiB,EAAI8a,EAAS,EACnC9a,EAAK,iBAAiB,EAAI8a,EAAS,EACnC9a,EAAK,iBAAiB,MAAQ+a,EAAW,EACzC/a,EAAK,iBAAiB,OAAS+a,EAAW,EAE1C,IAAIC,EAAY9gB,EAAS,uBAAuB4gB,EAAU,EAAI,EAC1DG,EAAY/gB,EAAS,uBAAuB4gB,EAAU,EAAK,EAC3DI,EAAQhhB,EAAS,8BAA8B6gB,EAAY,EAAI,EAC/DI,EAAQjhB,EAAS,8BAA8B6gB,EAAY,EAAK,EAChEK,EAAaH,EAAU,KAAME,EAAM,OAAQ,CAAE,CAAE,EAC/CE,EAAsBT,EAAe,kBAAmBQ,CAAW,EAEpE,KAAK,OAAO,OAAO,uBAAuB,IAAI,IACvC/J,IACF6J,EAAQA,EAAM,KAAM,IAAI19B,EAAE,MAAM,EAAG,CAAC,CAAC,GAGrCwiB,EAAK,aAAe,KAAK,iBACzBkb,EAAM,GAAK,KAGXlb,EAAK,cAAgB,KAAK,eAC1Bkb,EAAM,GAAK,MAInBlb,EAAK,SAAagb,EAClBhb,EAAK,KAAakb,EAClBlb,EAAK,gBAAoBqb,EACzBrb,EAAK,WAAa+Z,CACtB,EAeA,YAAa,SAAUjiB,EAAGC,EAAGtD,EACLslB,EAAiBa,EAAgBD,EAAetiB,EAAagiB,EAAK,CAEtF,IAAIra,EAAO,KAAK,SACZlI,EAAGC,EACHtD,EACA4D,EACAsiB,CACA,EAEA,KAAK,QAYL,KAAK,OAAO,WAAY,cAAe,CACnC,WAAY,KACZ,KAAM3a,CACV,CAAC,EAGL,KAAK,aAAc,KAAK,SAAUvL,EAAOqD,EAAGC,EAAG,EAAM,EAErD,IAAIujB,EAAkBtb,EAAK,QAAUA,EAAK,SAAW,KAAK,WAAW,KAAK,gBAAiBvL,EAAOqD,EAAGC,CAAC,EAGtG,GAFA,KAAK,aAAa,KAAK,gBAAiBtD,EAAOqD,EAAGC,EAAGujB,CAAe,EAE/D,CAACtb,EAAK,OACP,MAAO,CACH,UAAWqa,EACX,KAAMra,CACV,EAcJ,GAZIA,EAAK,QAAUA,EAAK,UAAY,GAChC,KAAK,aAAc,KAAK,SAAUvL,EAAOqD,EAAGC,EAAG,EAAK,EAGxD,KAAK,cACDiI,EACA,KAAK,OAAO,YACZ,KAAK,SACL4a,EACAb,CACJ,EAEI,CAAC/Z,EAAK,OACN,GAAIA,EAAK,UACL,KAAK,eAAeA,CAAI,MACrB,CACH,IAAIub,EAAc,KAAK,WAAW,eAAevb,EAAK,QAAQ,EAC1Dub,GACA,KAAK,eAAevb,EAAMub,EAAY,QAAQ,CAAC,CAEvD,CAGJ,OAAKvb,EAAK,QAEN,KAAK,gBACGsb,IACRjB,EAAO,KAAK,cAAeA,EAAMra,EAAM,KAAK,gBAAiB,GAG1D,CACH,UAAWqa,EACX,KAAMra,CACV,CACJ,EAGA,gBAAiB,SAASvL,EAAO6lB,EAAcC,EAAkB,CAC7D,IAAIiB,EACAC,EACA,KAAK,gBACLD,EAAQh+B,EAAE,eAAe88B,EAAa,EAAG,CAAC,EAC1CmB,EAASj+B,EAAE,eAAe+8B,EAAiB,EAAG,CAAC,IAE/CiB,EAAQ,KAAK,IAAI,EAAGlB,EAAa,CAAC,EAClCmB,EAAS,KAAK,IAAI,EAAGlB,EAAiB,CAAC,GAE3C,IAAImB,EACAC,EACAxD,EAAc,EAAI,KAAK,OAAO,YAC9B,KAAK,cACLuD,EAAOl+B,EAAE,eAAe88B,EAAa,EAAGnC,CAAW,EACnDwD,EAAUn+B,EAAE,eAAe+8B,EAAiB,EAAGpC,CAAW,IAE1DuD,EAAO,KAAK,IAAI,EAAGpB,EAAa,CAAC,EACjCqB,EAAU,KAAK,IAAIxD,EAAaoC,EAAiB,CAAC,GAGtD,IAAIE,EAAc,KAAK,OAAO,eAAehmB,EAAO,IAAIjX,EAAE,MAAMg+B,EAAOE,CAAI,CAAC,EACxEhB,EAAkB,KAAK,OAAO,eAAejmB,EAAO,IAAIjX,EAAE,MAAMi+B,EAAQE,CAAO,CAAC,EAChFtc,EAAY,KAAK,OAAO,YAAY5K,CAAK,EAE7C,OAAI,KAAK,iBACLgmB,EAAY,GAAKpb,EAAS,EAAI,KAAK,MAAMib,EAAa,CAAC,EACvDI,EAAgB,GAAKrb,EAAS,EAAI,KAAK,MAAMkb,EAAiB,CAAC,GAE/D,KAAK,eACLE,EAAY,GAAKpb,EAAS,EAAI,KAAK,MAAMib,EAAa,EAAInC,CAAW,EACrEuC,EAAgB,GAAKrb,EAAS,EAAI,KAAK,MAAMkb,EAAiB,EAAIpC,CAAW,GAG1E,CACH,QAASsC,EACT,YAAaC,CACjB,CACJ,EAYA,SAAU,SACN5iB,EAAGC,EACHtD,EACA3P,EACAua,EACF,CACE,IAAIsY,EACAC,EACAzb,EACAiO,EACAF,EACA0R,EACArc,EACAvM,EACAsM,EACAU,EACA6b,EAAc,KAAK,YACnBjqB,EAAa,KAAK,OAEtB,OAAMiqB,EAAapnB,CAAM,IACrBonB,EAAapnB,CAAM,EAAI,CAAC,GAEtBonB,EAAapnB,CAAM,EAAGqD,CAAE,IAC1B+jB,EAAapnB,CAAM,EAAGqD,CAAE,EAAI,CAAC,IAG5B,CAAC+jB,EAAapnB,CAAM,EAAGqD,CAAE,EAAGC,CAAE,GAAK,CAAC8jB,EAAapnB,CAAM,EAAGqD,CAAE,EAAGC,CAAE,EAAE,SAAY,CAAC,KAAK,WACtF4f,GAAYtY,EAAS,EAAMvH,EAAIuH,EAAS,GAAQA,EAAS,EACzDuY,GAAYvY,EAAS,EAAMtH,EAAIsH,EAAS,GAAQA,EAAS,EACzDlD,EAAU,KAAK,cAAe1H,EAAOqD,EAAGC,CAAE,EAC1CqS,EAAexY,EAAW,cAAe6C,EAAOkjB,EAAMC,EAAM,EAAK,EACjE1N,EAAUtY,EAAW,WAAY6C,EAAOkjB,EAAMC,CAAK,EACnDgE,EAAkBhqB,EAAW,WAAY6C,EAAOkjB,EAAMC,CAAK,EAC3DrY,EAAU3N,EAAW,gBAAiB6C,EAAOkjB,EAAMC,CAAK,EAGpD,KAAK,mBACL5kB,EAAcpB,EAAW,mBAAoB6C,EAAOkjB,EAAMC,CAAK,EAE3Dp6B,EAAE,cAAc,KAAK,WAAW,IAChCwV,EAAcxV,EAAE,OAAO,CAAC,EAAG,KAAK,YAAawV,CAAW,IAG5DA,EAAc,KAGlBsM,EAAY1N,EAAW,aACnBA,EAAW,aAAa6C,EAAOkjB,EAAMC,CAAI,EAAI,OAEjD5X,EAAO,IAAIxiB,EAAE,KACTiX,EACAqD,EACAC,EACAoE,EACA+N,EACA0R,EACAtc,EACA,KAAK,kBACLtM,EACAoX,EACA7K,EACA3N,EAAW,eAAe6C,EAAOkjB,EAAMC,EAAMgE,EAAa5oB,EAAauM,CAAI,CAC/E,EAEI,KAAK,QAAQ,EACToY,IAAS,IACT3X,EAAK,YAAc,IAGnB2X,IAAStY,EAAS,EAAI,IACtBW,EAAK,YAAc,IAIvB4X,IAASvY,EAAS,EAAI,IACtBW,EAAK,aAAe,IAGxBA,EAAK,QAAU,KAAK,QAEpB6b,EAAapnB,CAAM,EAAGqD,CAAE,EAAGC,CAAE,EAAIiI,GAGrCA,EAAO6b,EAAapnB,CAAM,EAAGqD,CAAE,EAAGC,CAAE,EACpCiI,EAAK,cAAgBlb,EAEdkb,CACX,EAQA,UAAW,SAASA,EAAMlb,EAAO,CAC7B,IAAIoD,EAAQ,KACZ8X,EAAK,QAAU,GACf,KAAK,aAAa,OAAO,CACrB,IAAKA,EAAK,OAAO,EACjB,KAAMA,EACN,OAAQ,KAAK,OACb,SAAUA,EAAK,SACf,aAAcA,EAAK,aACnB,YAAaA,EAAK,YAClB,kBAAmB,KAAK,kBACxB,oBAAqB,KAAK,oBAC1B,SAAU,SAAUlB,EAAMgd,EAAUC,EAAa,CAC7C7zB,EAAM,YAAa8X,EAAMlb,EAAMga,EAAMgd,EAAUC,CAAY,CAC/D,EACA,MAAO,UAAW,CACd/b,EAAK,QAAU,EACnB,CACJ,CAAC,CACL,EAWA,YAAa,SAAUA,EAAMlb,EAAMga,EAAMgd,EAAUC,EAAc,CAC7D,GAAMjd,EAyBFkB,EAAK,OAAS,OAzBL,CACTxiB,EAAE,QAAQ,MAAO,yCAA0CwiB,EAAMA,EAAK,OAAO,EAAG8b,CAAS,EAazF,KAAK,OAAO,WAAW,mBAAoB,CACvC,KAAM9b,EACN,WAAY,KACZ,KAAMlb,EACN,QAASg3B,EACT,YAAaC,CACjB,CAAC,EACD/b,EAAK,QAAU,GACfA,EAAK,OAAS,GACd,MACJ,CAIA,GAAKlb,EAAO,KAAK,cAAgB,CAC7BtH,EAAE,QAAQ,KAAM,2CAA4CwiB,EAAMA,EAAK,OAAO,CAAE,EAChFA,EAAK,QAAU,GACf,MACJ,CAEA,IAAI9X,EAAQ,KACRwX,EAAS,UAAW,CAChB,IAAIsc,EAAM9zB,EAAM,OACZ+zB,EAASD,EAAI,gBAAgB,EACjC9zB,EAAM,eAAe8X,EAAMlB,EAAMmd,EAAQF,CAAW,CAC5D,EAGArc,EAAO,CACX,EASA,eAAgB,SAASM,EAAMlB,EAAMmd,EAAQF,EAAa,CACtD,IAAIG,EAAY,EACZC,EAAgB,GAChBj0B,EAAQ,KAEZ,SAASk0B,GAAwB,CAC7B,OAAID,GACA3+B,EAAE,QAAQ,MAAM,oIACuC,EAE3D0+B,IACOG,CACX,CAEA,SAASA,GAAqB,CAC1BH,IACIA,IAAc,IACdlc,EAAK,QAAU,GACfA,EAAK,OAAS,GACdA,EAAK,gBAAkB9X,EAAM,OAAO,gBAChC8X,EAAK,UAAWA,EAAK,OAAO,EAAGA,EAAK,YAAaA,EAAK,QAC1D,EACKA,EAAK,WACN9X,EAAM,WAAW,UAAU,CACvB,KAAM4W,EACN,KAAMkB,EACN,OAAQic,EACR,WAAY/zB,CAChB,CAAC,EAcLA,EAAM,OAAO,WAAW,aAAc,CAClC,KAAM8X,EACN,WAAY9X,EACZ,YAAa6zB,CACjB,CAAC,EACD7zB,EAAM,WAAa,GAE3B,CAoBA,IAAIo0B,EAAqBF,EAAsB,EAC/C,KAAK,OAAO,WAAW,cAAe,CAClC,KAAMpc,EACN,WAAY,KACZ,YAAa+b,EACb,IAAI,OAAQ,CACR,OAAAv+B,EAAE,QAAQ,MAAM,+EAA+E,EACxFshB,CACX,EACA,KAAMA,EACN,sBAAuBsd,CAC3B,CAAC,EACDD,EAAgB,GAEhBG,EAAmB,CACvB,EAaA,cAAe,SAAUC,EAAcvc,EAAMwc,EAAY,CACrD,OAAMD,GAGNA,EAAa,KAAKvc,CAAI,EACtB,KAAK,WAAWuc,CAAY,EACxBA,EAAa,OAASC,GACtBD,EAAa,IAAI,EAEdA,GAPI,CAACvc,CAAI,CAQpB,EAQA,WAAY,SAAUpC,EAAQ,CAC1BA,EAAM,KAAK,SAAU9X,EAAGC,EAAG,CACvB,OAAID,IAAM,KACC,EAEPC,IAAM,KACC,GAEPD,EAAE,aAAeC,EAAE,WAEXD,EAAE,gBAAkBC,EAAE,gBAGtBA,EAAE,WAAaD,EAAE,UAEjC,CAAC,CACL,EAmBA,kBAAmB,SAAU22B,EAAUhoB,EAAOqD,EAAGC,EAAI,CACjD,IAAIoN,EACAuX,EACA39B,EAAGkG,EAEP,GAAK,CAACw3B,EAAUhoB,CAAM,EAClB,MAAO,GAGX,GAAKqD,IAAM,QAAaC,IAAM,OAAY,CACtCoN,EAAOsX,EAAUhoB,CAAM,EACvB,IAAM1V,KAAKomB,EACP,GAAK,OAAO,UAAU,eAAe,KAAMA,EAAMpmB,CAAE,EAAI,CACnD29B,EAAOvX,EAAMpmB,CAAE,EACf,IAAMkG,KAAKy3B,EACP,GAAK,OAAO,UAAU,eAAe,KAAMA,EAAMz3B,CAAE,GAAK,CAACy3B,EAAMz3B,CAAE,EAC7D,MAAO,EAGnB,CAGJ,MAAO,EACX,CAEA,OACIw3B,EAAUhoB,CAAM,EAAGqD,CAAC,IAAM,QAC1B2kB,EAAUhoB,CAAM,EAAGqD,CAAE,EAAGC,CAAE,IAAM,QAChC0kB,EAAUhoB,CAAM,EAAGqD,CAAE,EAAGC,CAAE,IAAM,EAExC,EAcA,WAAY,SAAU0kB,EAAUhoB,EAAOqD,EAAGC,EAAI,CAC1C,OAAKD,IAAM,QAAaC,IAAM,OACnB,KAAK,kBAAmB0kB,EAAUhoB,EAAQ,CAAE,EAG/C,KAAK,kBAAmBgoB,EAAUhoB,EAAQ,EAAG,EAAIqD,EAAG,EAAIC,CAAE,GAC1D,KAAK,kBAAmB0kB,EAAUhoB,EAAQ,EAAG,EAAIqD,EAAG,EAAIC,EAAI,CAAE,GAC9D,KAAK,kBAAmB0kB,EAAUhoB,EAAQ,EAAG,EAAIqD,EAAI,EAAG,EAAIC,CAAE,GAC9D,KAAK,kBAAmB0kB,EAAUhoB,EAAQ,EAAG,EAAIqD,EAAI,EAAG,EAAIC,EAAI,CAAE,CAG9E,EAYA,aAAc,SAAU0kB,EAAUhoB,EAAOqD,EAAGC,EAAG4kB,EAAS,CACpD,GAAK,CAACF,EAAUhoB,CAAM,EAAI,CACtBjX,EAAE,QAAQ,KACN,6EACAiX,CACJ,EACA,MACJ,CAEMgoB,EAAUhoB,CAAM,EAAGqD,CAAE,IACvB2kB,EAAUhoB,CAAM,EAAGqD,CAAE,EAAI,CAAC,GAG9B2kB,EAAUhoB,CAAM,EAAGqD,CAAE,EAAGC,CAAE,EAAI4kB,CAClC,EAWA,eAAgB,SAAUF,EAAUhoB,EAAQ,CACxCgoB,EAAUhoB,CAAM,EAAI,CAAC,CACzB,CACJ,CAAC,CAID,EAAGnX,CAAc,EAoChB,SAAUE,EAAG,CAGd,IAAIo/B,EAAa,SAAUr/B,EAAU,CACjCC,EAAE,QAAQ,OAAQD,EAAS,2CAA4C,EACvEC,EAAE,QAAQ,OAAQD,EAAQ,KAAM,gDAAiD,EACjFC,EAAE,QAAQ,OAAQD,EAAQ,WAAY,sDAAuD,EAC7F,KAAK,KAAOA,EAAQ,KACpB,KAAK,WAAaA,EAAQ,UAC9B,EAGIs/B,EAAc,SAASt/B,EAAS,CAChCC,EAAE,QAAQ,OAAQD,EAAS,mCAAoC,EAC/DC,EAAE,QAAQ,OAAQD,EAAQ,KAAM,wCAAyC,EACzE,KAAK,OAAS,CAAC,EAEfA,EAAQ,OAAO,MAAM,KAAM,CAAC,KAAMA,EAAQ,KAAMA,EAAQ,SAAS,CAAC,EAClE,KAAK,uBAAyBA,EAAQ,QAAQ,KAAK,KAAM,IAAI,EAC7D,KAAK,SAAWA,EAAQ,SAAS,KAAK,KAAM,IAAI,EAChD,KAAK,QAAUA,EAAQ,QAAQ,KAAK,KAAM,IAAI,EAC9C,KAAK,mBAAqBA,EAAQ,mBAAmB,KAAK,KAAM,IAAI,CACxE,EAEAs/B,EAAY,UAAY,CACpB,QAAS,UAAW,CAChB,KAAK,uBAAuB,EAC5B,KAAK,OAAS,IAClB,EAEA,QAAS,SAAS7c,EAAM,CACpBxiB,EAAE,QAAQ,OAAOwiB,EAAM,wCAAwC,EAC/D,KAAK,OAAO,KAAKA,CAAI,CACzB,EAEA,WAAY,SAASA,EAAM,CACvB,QAASjhB,EAAI,EAAGA,EAAI,KAAK,OAAO,OAAQA,IACpC,GAAI,KAAK,OAAOA,CAAC,IAAMihB,EAAM,CACzB,KAAK,OAAO,OAAOjhB,EAAG,CAAC,EACvB,MACJ,CAGJvB,EAAE,QAAQ,KAAK,yDAA0DwiB,CAAI,CACjF,EAEA,aAAc,UAAW,CACrB,OAAO,KAAK,OAAO,MACvB,CACJ,EAWAxiB,EAAE,UAAY,SAAUD,EAAU,CAC9BA,EAAUA,GAAW,CAAC,EAEtB,KAAK,oBAAsBA,EAAQ,oBAAsBC,EAAE,iBAAiB,mBAC5E,KAAK,aAAe,CAAC,EACrB,KAAK,cAAgB,CAAC,EACtB,KAAK,mBAAqB,CAC9B,EAGAA,EAAE,UAAU,UAAY,CAKpB,eAAgB,UAAW,CACvB,OAAO,KAAK,aAAa,MAC7B,EAiBA,UAAW,SAAUD,EAAU,CAC3BC,EAAE,QAAQ,OAAQD,EAAS,2CAA4C,EACvEC,EAAE,QAAQ,OAAQD,EAAQ,KAAM,gDAAiD,EACjFC,EAAE,QAAQ,OAAQD,EAAQ,KAAK,SAAU,yDAA0D,EACnGC,EAAE,QAAQ,OAAQD,EAAQ,WAAY,sDAAuD,EAE7F,IAAI0+B,EAAS1+B,EAAQ,QAAU,EAC3Bu/B,EAAiB,KAAK,aAAa,OAEnCvB,EAAc,KAAK,cAAch+B,EAAQ,KAAK,QAAQ,EA4B1D,GA3BKg+B,IAEIh+B,EAAQ,OACTC,EAAE,QAAQ,MAAM,4IAC4C,EAC5DD,EAAQ,KAAOA,EAAQ,OAG3BC,EAAE,QAAQ,OAAQD,EAAQ,KAAM,yEAA0E,EAC1Gg+B,EAAc,KAAK,cAAch+B,EAAQ,KAAK,QAAQ,EAAI,IAAIs/B,EAAY,CACtE,KAAMt/B,EAAQ,KACd,UAAWA,EAAQ,KACnB,OAAQA,EAAQ,WAAW,OAAO,gBAClC,QAASA,EAAQ,WAAW,OAAO,iBACnC,SAAUA,EAAQ,WAAW,OAAO,wBACpC,QAASA,EAAQ,WAAW,OAAO,iBACnC,mBAAoBA,EAAQ,WAAW,OAAO,2BAClD,CAAC,EAED,KAAK,sBAGTg+B,EAAY,QAAQh+B,EAAQ,IAAI,EAChCA,EAAQ,KAAK,iBAAmBg+B,EAI3B,KAAK,mBAAqB,KAAK,oBAAsB,CAMtD,QALIwB,EAAkB,KAClBC,EAAkB,GAClBC,EAAkB,KAClBC,EAAUC,EAAWC,EAAYC,EAAUC,EAAWC,EAEhDx+B,EAAI,KAAK,aAAa,OAAS,EAAGA,GAAK,EAAGA,IAIhD,GAHAw+B,EAAiB,KAAK,aAAcx+B,CAAE,EACtCm+B,EAAWK,EAAe,KAErB,EAAAL,EAAS,OAASjB,GAAUiB,EAAS,YAEnC,IAAK,CAACH,EAAY,CACrBA,EAAkBG,EAClBF,EAAkBj+B,EAClBk+B,EAAkBM,EAClB,QACJ,CAEAF,EAAcH,EAAS,cACvBC,EAAcJ,EAAU,cACxBO,EAAcJ,EAAS,MACvBE,EAAcL,EAAU,OAEnBM,EAAWF,GACVE,IAAaF,GAAaG,EAAYF,KACxCL,EAAkBG,EAClBF,EAAkBj+B,EAClBk+B,EAAkBM,GAIrBR,GAAaC,GAAkB,IAChC,KAAK,YAAYC,CAAe,EAChCH,EAAiBE,EAEzB,CAEA,KAAK,aAAcF,CAAe,EAAI,IAAIF,EAAW,CACjD,KAAMr/B,EAAQ,KACd,WAAYA,EAAQ,UACxB,CAAC,CACL,EAMA,cAAe,SAAU8W,EAAa,CAClC7W,EAAE,QAAQ,OAAO6W,EAAY,kDAAkD,EAE/E,QADImpB,EACMz+B,EAAI,EAAGA,EAAI,KAAK,aAAa,OAAQ,EAAEA,EAC7Cy+B,EAAa,KAAK,aAAcz+B,CAAE,EAC7By+B,EAAW,aAAenpB,IAC3B,KAAK,YAAYmpB,CAAU,EAC3B,KAAK,aAAa,OAAQz+B,EAAG,CAAE,EAC/BA,IAGZ,EAGA,eAAgB,SAASsrB,EAAU,CAC/B,OAAA7sB,EAAE,QAAQ,OAAO6sB,EAAU,iDAAiD,EACrE,KAAK,cAAcA,CAAQ,CACtC,EAGA,YAAa,SAASmT,EAAY,CAC9BhgC,EAAE,QAAQ,OAAOggC,EAAY,gDAAgD,EAC7E,IAAIxd,EAAOwd,EAAW,KAClBnpB,EAAampB,EAAW,WAI5B,IAAIle,EAAYU,EAAK,kBAAoBA,EAAK,iBAAiB,EAE/DA,EAAK,OAAO,EACZA,EAAK,iBAAmB,KAExB,IAAIub,EAAc,KAAK,cAAcvb,EAAK,QAAQ,EAC9Cub,IAGJA,EAAY,WAAWvb,CAAI,EACtBub,EAAY,aAAa,IAE1BA,EAAY,QAAQ,EACpB,OAAO,KAAK,cAAcvb,EAAK,QAAQ,EACvC,KAAK,qBAEFV,IAMCA,EAAU,OAAO,MAAQ,EACzBA,EAAU,OAAO,OAAS,EAW1BjL,EAAW,OAAO,WAAW,iBAAkB,CAC3C,UAAWiL,EACX,KAAMU,CACV,CAAC,IAcT3L,EAAW,OAAO,WAAW,gBAAiB,CAC1C,KAAM2L,EACN,WAAY3L,CAChB,CAAC,EAEL,CACJ,CAEA,EAAG/W,CAAc,EAoChB,SAAUE,EAAG,CAUdA,EAAE,MAAQ,SAAUD,EAAU,CAC1B,IAAI2K,EAAQ,KAEZ1K,EAAE,QAAQ,OAAQD,EAAQ,OAAQ,oCAAqC,EAEvEC,EAAE,YAAY,KAAM,IAAK,EAEzB,KAAK,OAASD,EAAQ,OACtB,KAAK,OAAS,CAAC,EACf,KAAK,WAAa,GAClB,KAAK,mBAAqB,GAC1B,KAAK,mBAAqB,GAC1B,KAAK,sBAAwB,SAASoD,EAAO,CACrCuH,EAAM,mBACNA,EAAM,aAAa,EAEnBA,EAAM,mBAAqB,EAEnC,EAEA,KAAK,aAAa,CACtB,EAEA1K,EAAE,OAAQA,EAAE,MAAM,UAAWA,EAAE,YAAY,UAAsD,CAQ7F,QAAS,SAAUme,EAAMpe,EAAU,CAK/B,GAJAC,EAAE,QAAQ,OAAOme,EAAM,kCAAkC,EACzDne,EAAE,QAAQ,OAAOme,aAAgBne,EAAE,WAAY,yDAAyD,EAExGD,EAAUA,GAAW,CAAC,EAClBA,EAAQ,QAAU,OAAW,CAC7B,IAAImK,EAAQ,KAAK,IAAI,EAAG,KAAK,IAAI,KAAK,OAAO,OAAQnK,EAAQ,KAAK,CAAC,EACnE,KAAK,OAAO,OAAOmK,EAAO,EAAGiU,CAAI,CACrC,MACI,KAAK,OAAO,KAAMA,CAAK,EAGvB,KAAK,mBACL,KAAK,aAAa,EAElB,KAAK,mBAAqB,GAG9B,KAAK,WAAa,GAElBA,EAAK,WAAW,gBAAiB,KAAK,qBAAqB,EAC3DA,EAAK,WAAW,cAAe,KAAK,qBAAqB,EAWzD,KAAK,WAAY,WAAY,CACzB,KAAMA,CACV,CAAE,CACN,EAOA,UAAW,SAAUjU,EAAQ,CACzB,OAAAlK,EAAE,QAAQ,OAAOkK,IAAU,OAAW,qCAAqC,EACpE,KAAK,OAAQA,CAAM,CAC9B,EAOA,eAAgB,SAAUiU,EAAO,CAC7B,OAAAne,EAAE,QAAQ,OAAOme,EAAM,yCAAyC,EACzDne,EAAE,QAAS,KAAK,OAAQme,CAAK,CACxC,EAKA,aAAc,UAAW,CACrB,OAAO,KAAK,OAAO,MACvB,EAQA,aAAc,SAAUA,EAAMjU,EAAQ,CAClClK,EAAE,QAAQ,OAAOme,EAAM,uCAAuC,EAC9Dne,EAAE,QAAQ,OAAOkK,IAAU,OAAW,wCAAwC,EAE9E,IAAI+1B,EAAW,KAAK,eAAgB9hB,CAAK,EAEzC,GAAKjU,GAAS,KAAK,OAAO,OACtB,MAAM,IAAI,MAAO,qCAAsC,EAGtDA,IAAU+1B,GAAYA,IAAa,KAIxC,KAAK,OAAO,OAAQA,EAAU,CAAE,EAChC,KAAK,OAAO,OAAQ/1B,EAAO,EAAGiU,CAAK,EACnC,KAAK,WAAa,GAclB,KAAK,WAAY,oBAAqB,CAClC,KAAMA,EACN,cAAe8hB,EACf,SAAU/1B,CACd,CAAE,EACN,EAQA,WAAY,SAAUiU,EAAO,CACzBne,EAAE,QAAQ,OAAOme,EAAM,qCAAqC,EAE5D,IAAIjU,EAAQlK,EAAE,QAAQ,KAAK,OAAQme,CAAK,EACnCjU,IAAU,KAIfiU,EAAK,cAAc,gBAAiB,KAAK,qBAAqB,EAC9DA,EAAK,cAAc,cAAe,KAAK,qBAAqB,EAC5DA,EAAK,QAAQ,EACb,KAAK,OAAO,OAAQjU,EAAO,CAAE,EAC7B,KAAK,aAAa,EAClB,KAAK,WAAa,GAClB,KAAK,iBAAiBiU,CAAI,EAC9B,EAOA,UAAW,UAAW,CAElB,KAAK,OAAO,qBAAqB,EACjC,IAAIA,EACA5c,EACJ,IAAKA,EAAI,EAAGA,EAAI,KAAK,OAAO,OAAQA,IAChC4c,EAAO,KAAK,OAAO5c,CAAC,EACpB4c,EAAK,cAAc,gBAAiB,KAAK,qBAAqB,EAC9DA,EAAK,cAAc,cAAe,KAAK,qBAAqB,EAC5DA,EAAK,QAAQ,EAGjB,IAAI+hB,EAAe,KAAK,OAKxB,IAJA,KAAK,OAAS,CAAC,EACf,KAAK,aAAa,EAClB,KAAK,WAAa,GAEb3+B,EAAI,EAAGA,EAAI2+B,EAAa,OAAQ3+B,IACjC4c,EAAO+hB,EAAa3+B,CAAC,EACrB,KAAK,iBAAiB4c,CAAI,CAElC,EAKA,WAAY,UAAW,CACnB,QAAU5c,EAAI,EAAGA,EAAI,KAAK,OAAO,OAAQA,IACrC,KAAK,OAAOA,CAAC,EAAE,MAAM,CAE7B,EAQA,OAAQ,SAASm4B,EAAiB,CAE9B,QADIxc,EAAW,GACL,EAAI,EAAG,EAAI,KAAK,OAAO,OAAQ,IACrCA,EAAW,KAAK,OAAO,CAAC,EAAE,OAAOwc,CAAe,GAAKxc,EAGzD,OAAOA,CACX,EAKA,KAAM,UAAW,CACb,KAAK,OAAO,OAAO,KAAK,KAAK,MAAM,EACnC,KAAK,WAAa,GAClB,KAAK,OAAO,QAASiB,GAAS,CAC1B,KAAK,WAAaA,EAAK,SAAS,GAAK,KAAK,UAC9C,CAAC,CACL,EAKA,UAAW,UAAW,CAClB,QAAU5c,EAAI,EAAGA,EAAI,KAAK,OAAO,OAAQA,IACrC,GAAK,KAAK,OAAOA,CAAC,EAAE,UAAU,EAC1B,MAAO,GAGf,OAAO,KAAK,UAChB,EAKA,cAAe,UAAW,CACtB,OAAO,KAAK,YAAY,MAAM,CAClC,EAQA,iBAAkB,UAAW,CACzB,OAAO,KAAK,cAChB,EASA,qBAAsB,SAASwC,EAAO,CAClC,KAAK,mBAAqBA,EACtBA,EAAQ,KAAK,qBACb,KAAK,aAAa,EAClB,KAAK,mBAAqB,GAElC,EAaA,QAAS,SAAShE,EAAS,CACvBA,EAAUA,GAAW,CAAC,EACtB,IAAIke,EAAcle,EAAQ,aAAe,GACrCgS,EAAShS,EAAQ,QAAUC,EAAE,iBAAiB,iBAC9C2nB,EAAO5nB,EAAQ,MAAQC,EAAE,iBAAiB,eAC1CmgC,EAAUpgC,EAAQ,SAAWC,EAAE,iBAAiB,kBAChD0f,EAAW3f,EAAQ,UAAYC,EAAE,iBAAiB,mBAClDogC,EAAargC,EAAQ,YAAcC,EAAE,iBAAiB,qBACtD0+B,EAAYhf,EAAW0gB,EACvBlF,EACA,CAACn7B,EAAQ,MAAQogC,EACjBjF,EAAOiF,EAEPjF,EAAO,KAAK,KAAK,KAAK,OAAO,OAASvT,CAAI,EAE9C,IAAIrN,EAAI,EACJC,EAAI,EACJ4D,EAAMuQ,EAAKtU,EAAOC,EAAQ2S,EAE9B,KAAK,qBAAqB,EAAK,EAC/B,QAASzrB,EAAI,EAAGA,EAAI,KAAK,OAAO,OAAQA,IAChCA,GAAMA,EAAI25B,IAAU,IAChBnpB,IAAW,cACXwI,GAAKmkB,EACLpkB,EAAI,IAEJA,GAAKokB,EACLnkB,EAAI,IAIZ4D,EAAO,KAAK,OAAO5c,CAAC,EACpBmtB,EAAMvQ,EAAK,UAAU,EACjBuQ,EAAI,MAAQA,EAAI,OAChBtU,EAAQsF,EAERtF,EAAQsF,GAAYgP,EAAI,MAAQA,EAAI,QAGxCrU,EAASD,GAASsU,EAAI,OAASA,EAAI,OACnC1B,EAAW,IAAIhtB,EAAE,MAAMsa,GAAMoF,EAAWtF,GAAS,EAC7CG,GAAMmF,EAAWrF,GAAU,CAAE,EAEjC8D,EAAK,YAAY6O,EAAU/O,CAAW,EACtCE,EAAK,SAAS/D,EAAO6D,CAAW,EAE5BlM,IAAW,aACXuI,GAAKokB,EAELnkB,GAAKmkB,EAGb,KAAK,qBAAqB,EAAI,CAClC,EAGA,aAAc,UAAW,CACrB,IAAI2B,EAAgB,KAAK,YAAc,KAAK,YAAY,MAAM,EAAI,KAC9DC,EAAiB,KAAK,aAAe,KAAK,aAAa,MAAM,EAAI,KACjEC,EAAmB,KAAK,gBAAkB,EAE9C,GAAI,CAAC,KAAK,OAAO,OACb,KAAK,YAAc,IAAIvgC,EAAE,KAAK,EAAG,EAAG,EAAG,CAAC,EACxC,KAAK,aAAe,IAAIA,EAAE,MAAM,EAAG,CAAC,EACpC,KAAK,eAAiB,MACnB,CACH,IAAIme,EAAO,KAAK,OAAO,CAAC,EACpBQ,EAASR,EAAK,UAAU,EAC5B,KAAK,eAAiBA,EAAK,eAAe,EAAE,EAAIQ,EAAO,MAMvD,QALI6hB,EAAgBriB,EAAK,iBAAiB,EAAE,eAAe,EACvDwK,EAAO6X,EAAc,EACrB5X,EAAM4X,EAAc,EACpB3X,EAAQ2X,EAAc,EAAIA,EAAc,MACxC1X,EAAS0X,EAAc,EAAIA,EAAc,OACpCj/B,EAAI,EAAGA,EAAI,KAAK,OAAO,OAAQA,IACpC4c,EAAO,KAAK,OAAO5c,CAAC,EACpBod,EAASR,EAAK,UAAU,EACxB,KAAK,eAAiB,KAAK,IAAI,KAAK,eAChCA,EAAK,eAAe,EAAE,EAAIQ,EAAO,KAAK,EAC1C6hB,EAAgBriB,EAAK,iBAAiB,EAAE,eAAe,EACvDwK,EAAO,KAAK,IAAIA,EAAM6X,EAAc,CAAC,EACrC5X,EAAM,KAAK,IAAIA,EAAK4X,EAAc,CAAC,EACnC3X,EAAQ,KAAK,IAAIA,EAAO2X,EAAc,EAAIA,EAAc,KAAK,EAC7D1X,EAAS,KAAK,IAAIA,EAAQ0X,EAAc,EAAIA,EAAc,MAAM,EAGpE,KAAK,YAAc,IAAIxgC,EAAE,KAAK2oB,EAAMC,EAAKC,EAAQF,EAAMG,EAASF,CAAG,EACnE,KAAK,aAAe,IAAI5oB,EAAE,MACtB,KAAK,YAAY,MAAQ,KAAK,eAC9B,KAAK,YAAY,OAAS,KAAK,cAAc,CACrD,EAEI,KAAK,iBAAmBugC,GACxB,CAAC,KAAK,YAAY,OAAOF,CAAa,GACtC,CAAC,KAAK,aAAa,OAAOC,CAAc,IASxC,KAAK,WAAW,iBAAkB,CAAC,CAAC,CAE5C,EAGA,iBAAkB,SAASniB,EAAM,CAU7B,KAAK,WAAY,cAAe,CAAE,KAAMA,CAAK,CAAE,CACnD,CACJ,CAAC,CAED,EAAGre,CAAc,C","sources":["webpack://whitney/./node_modules/openseadragon/build/openseadragon/openseadragon.js"],"sourcesContent":["//! openseadragon 5.0.1\n//! Built on 2024-12-09\n//! Git commit: v5.0.1-0-480de92d\n//! http://openseadragon.github.io\n//! License: http://openseadragon.github.io/license/\n\n/*\n * OpenSeadragon\n *\n * Copyright (C) 2009 CodePlex Foundation\n * Copyright (C) 2010-2024 OpenSeadragon contributors\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n * - Redistributions of source code must retain the above copyright notice,\n * this list of conditions and the following disclaimer.\n *\n * - Redistributions in binary form must reproduce the above copyright\n * notice, this list of conditions and the following disclaimer in the\n * documentation and/or other materials provided with the distribution.\n *\n * - Neither the name of CodePlex Foundation nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\n * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n/*\n * Portions of this source file taken from jQuery:\n *\n * Copyright 2011 John Resig\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n */\n\n/*\n * Portions of this source file taken from mattsnider.com:\n *\n * Copyright (c) 2006-2013 Matt Snider\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included\n * in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\n * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\n * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT\n * OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR\n * THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n */\n\n\n/**\n * @namespace OpenSeadragon\n * @version openseadragon 5.0.1\n * @classdesc The root namespace for OpenSeadragon. All utility methods\n * and classes are defined on or below this namespace.\n *\n */\n\n\n// Typedefs\n\n /**\n * All required and optional settings for instantiating a new instance of an OpenSeadragon image viewer.\n *\n * @typedef {Object} Options\n * @memberof OpenSeadragon\n *\n * @property {String} id\n * Id of the element to append the viewer's container element to. If not provided, the 'element' property must be provided.\n * If both the element and id properties are specified, the viewer is appended to the element provided in the element property.\n *\n * @property {Element} element\n * The element to append the viewer's container element to. If not provided, the 'id' property must be provided.\n * If both the element and id properties are specified, the viewer is appended to the element provided in the element property.\n *\n * @property {Array|String|Function|Object} [tileSources=null]\n * Tile source(s) to open initially. This is a complex parameter; see\n * {@link OpenSeadragon.Viewer#open} for details.\n *\n * @property {Number} [tabIndex=0]\n * Tabbing order index to assign to the viewer element. Positive values are selected in increasing order. When tabIndex is 0\n * source order is used. A negative value omits the viewer from the tabbing order.\n *\n * @property {Array} overlays Array of objects defining permanent overlays of\n * the viewer. The overlays added via this option and later removed with\n * {@link OpenSeadragon.Viewer#removeOverlay} will be added back when a new\n * image is opened.\n * To add overlays which can be definitively removed, one must use\n * {@link OpenSeadragon.Viewer#addOverlay}\n * If displaying a sequence of images, the overlays can be associated\n * with a specific page by passing the overlays array to the page's\n * tile source configuration.\n * Expected properties:\n * * x, y, (or px, py for pixel coordinates) to define the location.\n * * width, height in point if using x,y or in pixels if using px,py. If width\n * and height are specified, the overlay size is adjusted when zooming,\n * otherwise the size stays the size of the content (or the size defined by CSS).\n * * className to associate a class to the overlay\n * * id to set the overlay element. If an element with this id already exists,\n * it is reused, otherwise it is created. If not specified, a new element is\n * created.\n * * placement a string to define the relative position to the viewport.\n * Only used if no width and height are specified. Default: 'TOP_LEFT'.\n * See {@link OpenSeadragon.Placement} for possible values.\n *\n * @property {String} [xmlPath=null]\n * DEPRECATED. A relative path to load a DZI file from the server.\n * Prefer the newer Options.tileSources.\n *\n * @property {String} [prefixUrl='/images/']\n * Prepends the prefixUrl to navImages paths, which is very useful\n * since the default paths are rarely useful for production\n * environments.\n *\n * @property {OpenSeadragon.NavImages} [navImages]\n * An object with a property for each button or other built-in navigation\n * control, eg the current 'zoomIn', 'zoomOut', 'home', and 'fullpage'.\n * Each of those in turn provides an image path for each state of the button\n * or navigation control, eg 'REST', 'GROUP', 'HOVER', 'PRESS'. Finally the\n * image paths, by default assume there is a folder on the servers root path\n * called '/images', eg '/images/zoomin_rest.png'. If you need to adjust\n * these paths, prefer setting the option.prefixUrl rather than overriding\n * every image path directly through this setting.\n *\n * @property {Boolean} [debugMode=false]\n * TODO: provide an in-screen panel providing event detail feedback.\n *\n * @property {String} [debugGridColor=['#437AB2', '#1B9E77', '#D95F02', '#7570B3', '#E7298A', '#66A61E', '#E6AB02', '#A6761D', '#666666']]\n * The colors of grids in debug mode. Each tiled image's grid uses a consecutive color.\n * If there are more tiled images than provided colors, the color vector is recycled.\n *\n * @property {Boolean} [silenceMultiImageWarnings=false]\n * Silences warnings when calling viewport coordinate functions with multi-image.\n * Useful when you're overlaying multiple images on top of one another.\n *\n * @property {Number} [blendTime=0]\n * Specifies the duration of animation as higher or lower level tiles are\n * replacing the existing tile.\n *\n * @property {Boolean} [alwaysBlend=false]\n * Forces the tile to always blend. By default the tiles skip blending\n * when the blendTime is surpassed and the current animation frame would\n * not complete the blend.\n *\n * @property {Boolean} [autoHideControls=true]\n * If the user stops interacting with the viewport, fade the navigation\n * controls. Useful for presentation since the controls are by default\n * floated on top of the image the user is viewing.\n *\n * @property {Boolean} [immediateRender=false]\n * Render the best closest level first, ignoring the lowering levels which\n * provide the effect of very blurry to sharp. It is recommended to change\n * setting to true for mobile devices.\n *\n * @property {Number} [defaultZoomLevel=0]\n * Zoom level to use when image is first opened or the home button is clicked.\n * If 0, adjusts to fit viewer.\n *\n * @property {String|DrawerImplementation|Array} [drawer = ['webgl', 'canvas', 'html']]\n * Which drawer to use. Valid strings are 'webgl', 'canvas', and 'html'. Valid drawer\n * implementations are constructors of classes that extend OpenSeadragon.DrawerBase.\n * An array of strings and/or constructors can be used to indicate the priority\n * of different implementations, which will be tried in order based on browser support.\n *\n * @property {Object} drawerOptions\n * Options to pass to the selected drawer implementation. For details\n * please see {@link OpenSeadragon.DrawerOptions}.\n *\n * @property {Number} [opacity=1]\n * Default proportional opacity of the tiled images (1=opaque, 0=hidden)\n * Hidden images do not draw and only load when preloading is allowed.\n *\n * @property {Boolean} [preload=false]\n * Default switch for loading hidden images (true loads, false blocks)\n *\n * @property {String} [compositeOperation=null]\n * Valid values are 'source-over', 'source-atop', 'source-in', 'source-out',\n * 'destination-over', 'destination-atop', 'destination-in', 'destination-out',\n * 'lighter', 'difference', 'copy', 'xor', etc.\n * For complete list of modes, please @see {@link https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/globalCompositeOperation/ globalCompositeOperation}\n *\n * @property {Boolean} [imageSmoothingEnabled=true]\n * Image smoothing for rendering (only if the canvas or webgl drawer is used). Note: Ignored\n * by some (especially older) browsers which do not support this canvas property.\n * This property can be changed in {@link Viewer.DrawerBase.setImageSmoothingEnabled}.\n *\n * @property {String|CanvasGradient|CanvasPattern|Function} [placeholderFillStyle=null]\n * Draws a colored rectangle behind the tile if it is not loaded yet.\n * You can pass a CSS color value like \"#FF8800\".\n * When passing a function the tiledImage and canvas context are available as argument which is useful when you draw a gradient or pattern.\n *\n * @property {Object} [subPixelRoundingForTransparency=null]\n * Determines when subpixel rounding should be applied for tiles when rendering images that support transparency.\n * This property is a subpixel rounding enum values dictionary [{@link BROWSERS}] --> {@link SUBPIXEL_ROUNDING_OCCURRENCES}.\n * The key is a {@link BROWSERS} value, and the value is one of {@link SUBPIXEL_ROUNDING_OCCURRENCES},\n * indicating, for a given browser, when to apply subpixel rounding.\n * Key '*' is the fallback value for any browser not specified in the dictionary.\n * This property has a simple mode, and one can set it directly to\n * {@link SUBPIXEL_ROUNDING_OCCURRENCES.NEVER}, {@link SUBPIXEL_ROUNDING_OCCURRENCES.ONLY_AT_REST} or {@link SUBPIXEL_ROUNDING_OCCURRENCES.ALWAYS}\n * in order to apply this rule for all browser. The values {@link SUBPIXEL_ROUNDING_OCCURRENCES.ALWAYS} would be equivalent to { '*', SUBPIXEL_ROUNDING_OCCURRENCES.ALWAYS }.\n * The default is {@link SUBPIXEL_ROUNDING_OCCURRENCES.NEVER} for all browsers, for backward compatibility reason.\n *\n * @property {Number} [degrees=0]\n * Initial rotation.\n *\n * @property {Boolean} [flipped=false]\n * Initial flip state.\n *\n * @property {Boolean} [overlayPreserveContentDirection=true]\n * When the viewport is flipped (by pressing 'f'), the overlay is flipped using ScaleX.\n * Normally, this setting (default true) keeps the overlay's content readable by flipping it back.\n * To make the content flip with the overlay, set overlayPreserveContentDirection to false.\n *\n * @property {Number} [minZoomLevel=null]\n *\n * @property {Number} [maxZoomLevel=null]\n *\n * @property {Boolean} [homeFillsViewer=false]\n * Make the 'home' button fill the viewer and clip the image, instead\n * of fitting the image to the viewer and letterboxing.\n *\n * @property {Boolean} [panHorizontal=true]\n * Allow horizontal pan.\n *\n * @property {Boolean} [panVertical=true]\n * Allow vertical pan.\n *\n * @property {Boolean} [constrainDuringPan=false]\n *\n * @property {Boolean} [wrapHorizontal=false]\n * Set to true to force the image to wrap horizontally within the viewport.\n * Useful for maps or images representing the surface of a sphere or cylinder.\n *\n * @property {Boolean} [wrapVertical=false]\n * Set to true to force the image to wrap vertically within the viewport.\n * Useful for maps or images representing the surface of a sphere or cylinder.\n *\n * @property {Number} [minZoomImageRatio=0.9]\n * The minimum percentage ( expressed as a number between 0 and 1 ) of\n * the viewport height or width at which the zoom out will be constrained.\n * Setting it to 0, for example will allow you to zoom out infinity.\n *\n * @property {Number} [maxZoomPixelRatio=1.1]\n * The maximum ratio to allow a zoom-in to affect the highest level pixel\n * ratio. This can be set to Infinity to allow 'infinite' zooming into the\n * image though it is less effective visually if the HTML5 Canvas is not\n * available on the viewing device.\n *\n * @property {Number} [smoothTileEdgesMinZoom=1.1]\n * A zoom percentage ( where 1 is 100% ) of the highest resolution level.\n * When zoomed in beyond this value alternative compositing will be used to\n * smooth out the edges between tiles. This will have a performance impact.\n * Can be set to Infinity to turn it off.\n * Note: This setting is ignored on iOS devices due to a known bug (See {@link https://github.com/openseadragon/openseadragon/issues/952})\n *\n * @property {Boolean} [iOSDevice=?]\n * True if running on an iOS device, false otherwise.\n * Used to disable certain features that behave differently on iOS devices.\n *\n * @property {Boolean} [autoResize=true]\n * Set to false to prevent polling for viewer size changes. Useful for providing custom resize behavior.\n *\n * @property {Boolean} [preserveImageSizeOnResize=false]\n * Set to true to have the image size preserved when the viewer is resized. This requires autoResize=true (default).\n *\n * @property {Number} [minScrollDeltaTime=50]\n * Number of milliseconds between canvas-scroll events. This value helps normalize the rate of canvas-scroll\n * events between different devices, causing the faster devices to slow down enough to make the zoom control\n * more manageable.\n *\n * @property {Number} [rotationIncrement=90]\n * The number of degrees to rotate right or left when the rotate buttons or keyboard shortcuts are activated.\n *\n * @property {Number} [maxTilesPerFrame=1]\n * The number of tiles loaded per frame. As the frame rate of the client's machine is usually high (e.g., 50 fps),\n * one tile per frame should be a good choice. However, for large screens or lower frame rates, the number of\n * loaded tiles per frame can be adjusted here. Reasonable values might be 2 or 3 tiles per frame.\n * (Note that the actual frame rate is given by the client's browser and machine).\n *\n * @property {Number} [pixelsPerWheelLine=40]\n * For pixel-resolution scrolling devices, the number of pixels equal to one scroll line.\n *\n * @property {Number} [pixelsPerArrowPress=40]\n * The number of pixels viewport moves when an arrow key is pressed.\n *\n * @property {Number} [visibilityRatio=0.5]\n * The percentage ( as a number from 0 to 1 ) of the source image which\n * must be kept within the viewport. If the image is dragged beyond that\n * limit, it will 'bounce' back until the minimum visibility ratio is\n * achieved. Setting this to 0 and wrapHorizontal ( or wrapVertical ) to\n * true will provide the effect of an infinitely scrolling viewport.\n *\n * @property {Object} [viewportMargins={}]\n * Pushes the \"home\" region in from the sides by the specified amounts.\n * Possible subproperties (Numbers, in screen coordinates): left, top, right, bottom.\n *\n * @property {Number} [imageLoaderLimit=0]\n * The maximum number of image requests to make concurrently. By default\n * it is set to 0 allowing the browser to make the maximum number of\n * image requests in parallel as allowed by the browsers policy.\n *\n * @property {Number} [clickTimeThreshold=300]\n * The number of milliseconds within which a pointer down-up event combination\n * will be treated as a click gesture.\n *\n * @property {Number} [clickDistThreshold=5]\n * The maximum distance allowed between a pointer down event and a pointer up event\n * to be treated as a click gesture.\n *\n * @property {Number} [dblClickTimeThreshold=300]\n * The number of milliseconds within which two pointer down-up event combinations\n * will be treated as a double-click gesture.\n *\n * @property {Number} [dblClickDistThreshold=20]\n * The maximum distance allowed between two pointer click events\n * to be treated as a double-click gesture.\n *\n * @property {Number} [springStiffness=6.5]\n *\n * @property {Number} [animationTime=1.2]\n * Specifies the animation duration per each {@link OpenSeadragon.Spring}\n * which occur when the image is dragged, zoomed or rotated.\n *\n * @property {OpenSeadragon.GestureSettings} [gestureSettingsMouse]\n * Settings for gestures generated by a mouse pointer device. (See {@link OpenSeadragon.GestureSettings})\n * @property {Boolean} [gestureSettingsMouse.dragToPan=true] - Pan on drag gesture\n * @property {Boolean} [gestureSettingsMouse.scrollToZoom=true] - Zoom on scroll gesture\n * @property {Boolean} [gestureSettingsMouse.clickToZoom=true] - Zoom on click gesture\n * @property {Boolean} [gestureSettingsMouse.dblClickToZoom=false] - Zoom on double-click gesture. Note: If set to true\n * then clickToZoom should be set to false to prevent multiple zooms.\n * @property {Boolean} [gestureSettingsMouse.dblClickDragToZoom=false] - Zoom on dragging through\n * double-click gesture ( single click and next click to drag). Note: If set to true\n * then clickToZoom should be set to false to prevent multiple zooms.\n * @property {Boolean} [gestureSettingsMouse.pinchToZoom=false] - Zoom on pinch gesture\n * @property {Boolean} [gestureSettingsMouse.zoomToRefPoint=true] - If zoomToRefPoint is true, the zoom is centered at the pointer position. Otherwise,\n * the zoom is centered at the canvas center.\n * @property {Boolean} [gestureSettingsMouse.flickEnabled=false] - Enable flick gesture\n * @property {Number} [gestureSettingsMouse.flickMinSpeed=120] - If flickEnabled is true, the minimum speed to initiate a flick gesture (pixels-per-second)\n * @property {Number} [gestureSettingsMouse.flickMomentum=0.25] - If flickEnabled is true, the momentum factor for the flick gesture\n * @property {Boolean} [gestureSettingsMouse.pinchRotate=false] - If pinchRotate is true, the user will have the ability to rotate the image using their fingers.\n *\n * @property {OpenSeadragon.GestureSettings} [gestureSettingsTouch]\n * Settings for gestures generated by a touch pointer device. (See {@link OpenSeadragon.GestureSettings})\n * @property {Boolean} [gestureSettingsTouch.dragToPan=true] - Pan on drag gesture\n * @property {Boolean} [gestureSettingsTouch.scrollToZoom=false] - Zoom on scroll gesture\n * @property {Boolean} [gestureSettingsTouch.clickToZoom=false] - Zoom on click gesture\n * @property {Boolean} [gestureSettingsTouch.dblClickToZoom=true] - Zoom on double-click gesture. Note: If set to true\n * then clickToZoom should be set to false to prevent multiple zooms.\n * @property {Boolean} [gestureSettingsTouch.dblClickDragToZoom=true] - Zoom on dragging through\n * double-click gesture ( single click and next click to drag). Note: If set to true\n * then clickToZoom should be set to false to prevent multiple zooms.\n\n * @property {Boolean} [gestureSettingsTouch.pinchToZoom=true] - Zoom on pinch gesture\n * @property {Boolean} [gestureSettingsTouch.zoomToRefPoint=true] - If zoomToRefPoint is true, the zoom is centered at the pointer position. Otherwise,\n * the zoom is centered at the canvas center.\n * @property {Boolean} [gestureSettingsTouch.flickEnabled=true] - Enable flick gesture\n * @property {Number} [gestureSettingsTouch.flickMinSpeed=120] - If flickEnabled is true, the minimum speed to initiate a flick gesture (pixels-per-second)\n * @property {Number} [gestureSettingsTouch.flickMomentum=0.25] - If flickEnabled is true, the momentum factor for the flick gesture\n * @property {Boolean} [gestureSettingsTouch.pinchRotate=false] - If pinchRotate is true, the user will have the ability to rotate the image using their fingers.\n *\n * @property {OpenSeadragon.GestureSettings} [gestureSettingsPen]\n * Settings for gestures generated by a pen pointer device. (See {@link OpenSeadragon.GestureSettings})\n * @property {Boolean} [gestureSettingsPen.dragToPan=true] - Pan on drag gesture\n * @property {Boolean} [gestureSettingsPen.scrollToZoom=false] - Zoom on scroll gesture\n * @property {Boolean} [gestureSettingsPen.clickToZoom=true] - Zoom on click gesture\n * @property {Boolean} [gestureSettingsPen.dblClickToZoom=false] - Zoom on double-click gesture. Note: If set to true\n * then clickToZoom should be set to false to prevent multiple zooms.\n * @property {Boolean} [gestureSettingsPen.pinchToZoom=false] - Zoom on pinch gesture\n * @property {Boolean} [gestureSettingsPen.zoomToRefPoint=true] - If zoomToRefPoint is true, the zoom is centered at the pointer position. Otherwise,\n * the zoom is centered at the canvas center.\n * @property {Boolean} [gestureSettingsPen.flickEnabled=false] - Enable flick gesture\n * @property {Number} [gestureSettingsPen.flickMinSpeed=120] - If flickEnabled is true, the minimum speed to initiate a flick gesture (pixels-per-second)\n * @property {Number} [gestureSettingsPen.flickMomentum=0.25] - If flickEnabled is true, the momentum factor for the flick gesture\n * @property {Boolean} [gestureSettingsPen.pinchRotate=false] - If pinchRotate is true, the user will have the ability to rotate the image using their fingers.\n *\n * @property {OpenSeadragon.GestureSettings} [gestureSettingsUnknown]\n * Settings for gestures generated by unknown pointer devices. (See {@link OpenSeadragon.GestureSettings})\n * @property {Boolean} [gestureSettingsUnknown.dragToPan=true] - Pan on drag gesture\n * @property {Boolean} [gestureSettingsUnknown.scrollToZoom=true] - Zoom on scroll gesture\n * @property {Boolean} [gestureSettingsUnknown.clickToZoom=false] - Zoom on click gesture\n * @property {Boolean} [gestureSettingsUnknown.dblClickToZoom=true] - Zoom on double-click gesture. Note: If set to true\n * then clickToZoom should be set to false to prevent multiple zooms.\n * @property {Boolean} [gestureSettingsUnknown.dblClickDragToZoom=false] - Zoom on dragging through\n * double-click gesture ( single click and next click to drag). Note: If set to true\n * then clickToZoom should be set to false to prevent multiple zooms.\n * @property {Boolean} [gestureSettingsUnknown.pinchToZoom=true] - Zoom on pinch gesture\n * @property {Boolean} [gestureSettingsUnknown.zoomToRefPoint=true] - If zoomToRefPoint is true, the zoom is centered at the pointer position. Otherwise,\n * the zoom is centered at the canvas center.\n * @property {Boolean} [gestureSettingsUnknown.flickEnabled=true] - Enable flick gesture\n * @property {Number} [gestureSettingsUnknown.flickMinSpeed=120] - If flickEnabled is true, the minimum speed to initiate a flick gesture (pixels-per-second)\n * @property {Number} [gestureSettingsUnknown.flickMomentum=0.25] - If flickEnabled is true, the momentum factor for the flick gesture\n * @property {Boolean} [gestureSettingsUnknown.pinchRotate=false] - If pinchRotate is true, the user will have the ability to rotate the image using their fingers.\n *\n * @property {Number} [zoomPerClick=2.0]\n * The \"zoom distance\" per mouse click or touch tap. Note: Setting this to 1.0 effectively disables the click-to-zoom feature (also see gestureSettings[Mouse|Touch|Pen].clickToZoom/dblClickToZoom).\n *\n * @property {Number} [zoomPerScroll=1.2]\n * The \"zoom distance\" per mouse scroll or touch pinch. Note: Setting this to 1.0 effectively disables the mouse-wheel zoom feature (also see gestureSettings[Mouse|Touch|Pen].scrollToZoom}).\n *\n * @property {Number} [zoomPerDblClickDrag=1.2]\n * The \"zoom distance\" per double-click mouse drag. Note: Setting this to 1.0 effectively disables the double-click-drag-to-Zoom feature (also see gestureSettings[Mouse|Touch|Pen].dblClickDragToZoom).\n *\n * @property {Number} [zoomPerSecond=1.0]\n * Sets the zoom amount per second when zoomIn/zoomOut buttons are pressed and held.\n * The value is a factor of the current zoom, so 1.0 (the default) disables zooming when the zoomIn/zoomOut buttons\n * are held. Higher values will increase the rate of zoom when the zoomIn/zoomOut buttons are held. Note that values\n * < 1.0 will reverse the operation of the zoomIn/zoomOut buttons (zoomIn button will decrease the zoom, zoomOut will\n * increase the zoom).\n *\n * @property {Boolean} [showNavigator=false]\n * Set to true to make the navigator minimap appear.\n *\n * @property {Element} [navigatorElement=null]\n * The element to hold the navigator minimap.\n * If an element is specified, the Id option (see navigatorId) is ignored.\n * If no element nor ID is specified, a div element will be generated accordingly.\n *\n * @property {String} [navigatorId=navigator-GENERATED DATE]\n * The ID of a div to hold the navigator minimap.\n * If an ID is specified, the navigatorPosition, navigatorSizeRatio, navigatorMaintainSizeRatio, navigator[Top|Left|Height|Width] and navigatorAutoFade options will be ignored.\n * If an ID is not specified, a div element will be generated and placed on top of the main image.\n *\n * @property {String} [navigatorPosition='TOP_RIGHT']\n * Valid values are 'TOP_LEFT', 'TOP_RIGHT', 'BOTTOM_LEFT', 'BOTTOM_RIGHT', or 'ABSOLUTE'.
\n * If 'ABSOLUTE' is specified, then navigator[Top|Left|Height|Width] determines the size and position of the navigator minimap in the viewer, and navigatorSizeRatio and navigatorMaintainSizeRatio are ignored.
\n * For 'TOP_LEFT', 'TOP_RIGHT', 'BOTTOM_LEFT', and 'BOTTOM_RIGHT', the navigatorSizeRatio or navigator[Height|Width] values determine the size of the navigator minimap.\n *\n * @property {Number} [navigatorSizeRatio=0.2]\n * Ratio of navigator size to viewer size. Ignored if navigator[Height|Width] are specified.\n *\n * @property {Boolean} [navigatorMaintainSizeRatio=false]\n * If true, the navigator minimap is resized (using navigatorSizeRatio) when the viewer size changes.\n *\n * @property {Number|String} [navigatorTop=null]\n * Specifies the location of the navigator minimap (see navigatorPosition).\n *\n * @property {Number|String} [navigatorLeft=null]\n * Specifies the location of the navigator minimap (see navigatorPosition).\n *\n * @property {Number|String} [navigatorHeight=null]\n * Specifies the size of the navigator minimap (see navigatorPosition).\n * If specified, navigatorSizeRatio and navigatorMaintainSizeRatio are ignored.\n *\n * @property {Number|String} [navigatorWidth=null]\n * Specifies the size of the navigator minimap (see navigatorPosition).\n * If specified, navigatorSizeRatio and navigatorMaintainSizeRatio are ignored.\n *\n * @property {Boolean} [navigatorAutoResize=true]\n * Set to false to prevent polling for navigator size changes. Useful for providing custom resize behavior.\n * Setting to false can also improve performance when the navigator is configured to a fixed size.\n *\n * @property {Boolean} [navigatorAutoFade=true]\n * If the user stops interacting with the viewport, fade the navigator minimap.\n * Setting to false will make the navigator minimap always visible.\n *\n * @property {Boolean} [navigatorRotate=true]\n * If true, the navigator will be rotated together with the viewer.\n *\n * @property {String} [navigatorBackground='#000']\n * Specifies the background color of the navigator minimap\n *\n * @property {Number} [navigatorOpacity=0.8]\n * Specifies the opacity of the navigator minimap.\n *\n * @property {String} [navigatorBorderColor='#555']\n * Specifies the border color of the navigator minimap\n *\n * @property {String} [navigatorDisplayRegionColor='#900']\n * Specifies the border color of the display region rectangle of the navigator minimap\n *\n * @property {Number} [controlsFadeDelay=2000]\n * The number of milliseconds to wait once the user has stopped interacting\n * with the interface before beginning to fade the controls. Assumes\n * showNavigationControl and autoHideControls are both true.\n *\n * @property {Number} [controlsFadeLength=1500]\n * The number of milliseconds to animate the controls fading out.\n *\n * @property {Number} [maxImageCacheCount=200]\n * The max number of images we should keep in memory (per drawer).\n *\n * @property {Number} [timeout=30000]\n * The max number of milliseconds that an image job may take to complete.\n *\n * @property {Number} [tileRetryMax=0]\n * The max number of retries when a tile download fails. By default it's 0, so retries are disabled.\n *\n * @property {Number} [tileRetryDelay=2500]\n * Milliseconds to wait after each tile retry if tileRetryMax is set.\n *\n * @property {Boolean} [useCanvas=true]\n * Deprecated. Use the `drawer` option to specify preferred renderer.\n *\n * @property {Number} [minPixelRatio=0.5]\n * The higher the minPixelRatio, the lower the quality of the image that\n * is considered sufficient to stop rendering a given zoom level. For\n * example, if you are targeting mobile devices with less bandwidth you may\n * try setting this to 1.5 or higher.\n *\n * @property {Boolean} [mouseNavEnabled=true]\n * Is the user able to interact with the image via mouse or touch. Default\n * interactions include draging the image in a plane, and zooming in toward\n * and away from the image.\n *\n * @property {Boolean} [showNavigationControl=true]\n * Set to false to prevent the appearance of the default navigation controls.
\n * Note that if set to false, the customs buttons set by the options\n * zoomInButton, zoomOutButton etc, are rendered inactive.\n *\n * @property {OpenSeadragon.ControlAnchor} [navigationControlAnchor=TOP_LEFT]\n * Placement of the default navigation controls.\n * To set the placement of the sequence controls, see the\n * sequenceControlAnchor option.\n *\n * @property {Boolean} [showZoomControl=true]\n * If true then + and - buttons to zoom in and out are displayed.
\n * Note: {@link OpenSeadragon.Options.showNavigationControl} is overriding\n * this setting when set to false.\n *\n * @property {Boolean} [showHomeControl=true]\n * If true then the 'Go home' button is displayed to go back to the original\n * zoom and pan.
\n * Note: {@link OpenSeadragon.Options.showNavigationControl} is overriding\n * this setting when set to false.\n *\n * @property {Boolean} [showFullPageControl=true]\n * If true then the 'Toggle full page' button is displayed to switch\n * between full page and normal mode.
\n * Note: {@link OpenSeadragon.Options.showNavigationControl} is overriding\n * this setting when set to false.\n *\n * @property {Boolean} [showRotationControl=false]\n * If true then the rotate left/right controls will be displayed as part of the\n * standard controls. This is also subject to the browser support for rotate\n * (e.g. viewer.drawer.canRotate()).
\n * Note: {@link OpenSeadragon.Options.showNavigationControl} is overriding\n * this setting when set to false.\n *\n * @property {Boolean} [showFlipControl=false]\n * If true then the flip controls will be displayed as part of the\n * standard controls.\n *\n * @property {Boolean} [showSequenceControl=true]\n * If sequenceMode is true, then provide buttons for navigating forward and\n * backward through the images.\n *\n * @property {OpenSeadragon.ControlAnchor} [sequenceControlAnchor=TOP_LEFT]\n * Placement of the default sequence controls.\n *\n * @property {Boolean} [navPrevNextWrap=false]\n * If true then the 'previous' button will wrap to the last image when\n * viewing the first image and the 'next' button will wrap to the first\n * image when viewing the last image.\n *\n *@property {String|Element} zoomInButton\n * Set the id or element of the custom 'Zoom in' button to use.\n * This is useful to have a custom button anywhere in the web page.
\n * To only change the button images, consider using\n * {@link OpenSeadragon.Options.navImages}\n *\n * @property {String|Element} zoomOutButton\n * Set the id or element of the custom 'Zoom out' button to use.\n * This is useful to have a custom button anywhere in the web page.
\n * To only change the button images, consider using\n * {@link OpenSeadragon.Options.navImages}\n *\n * @property {String|Element} homeButton\n * Set the id or element of the custom 'Go home' button to use.\n * This is useful to have a custom button anywhere in the web page.
\n * To only change the button images, consider using\n * {@link OpenSeadragon.Options.navImages}\n *\n * @property {String|Element} fullPageButton\n * Set the id or element of the custom 'Toggle full page' button to use.\n * This is useful to have a custom button anywhere in the web page.
\n * To only change the button images, consider using\n * {@link OpenSeadragon.Options.navImages}\n *\n * @property {String|Element} rotateLeftButton\n * Set the id or element of the custom 'Rotate left' button to use.\n * This is useful to have a custom button anywhere in the web page.
\n * To only change the button images, consider using\n * {@link OpenSeadragon.Options.navImages}\n *\n * @property {String|Element} rotateRightButton\n * Set the id or element of the custom 'Rotate right' button to use.\n * This is useful to have a custom button anywhere in the web page.
\n * To only change the button images, consider using\n * {@link OpenSeadragon.Options.navImages}\n *\n * @property {String|Element} previousButton\n * Set the id or element of the custom 'Previous page' button to use.\n * This is useful to have a custom button anywhere in the web page.
\n * To only change the button images, consider using\n * {@link OpenSeadragon.Options.navImages}\n *\n * @property {String|Element} nextButton\n * Set the id or element of the custom 'Next page' button to use.\n * This is useful to have a custom button anywhere in the web page.
\n * To only change the button images, consider using\n * {@link OpenSeadragon.Options.navImages}\n *\n * @property {Boolean} [sequenceMode=false]\n * Set to true to have the viewer treat your tilesources as a sequence of images to\n * be opened one at a time rather than all at once.\n *\n * @property {Number} [initialPage=0]\n * If sequenceMode is true, display this page initially.\n *\n * @property {Boolean} [preserveViewport=false]\n * If sequenceMode is true, then normally navigating through each image resets the\n * viewport to 'home' position. If preserveViewport is set to true, then the viewport\n * position is preserved when navigating between images in the sequence.\n *\n * @property {Boolean} [preserveOverlays=false]\n * If sequenceMode is true, then normally navigating through each image\n * resets the overlays.\n * If preserveOverlays is set to true, then the overlays added with {@link OpenSeadragon.Viewer#addOverlay}\n * are preserved when navigating between images in the sequence.\n * Note: setting preserveOverlays overrides any overlays specified in the global\n * \"overlays\" option for the Viewer. It's also not compatible with specifying\n * per-tileSource overlays via the options, as those overlays will persist\n * even after the tileSource is closed.\n *\n * @property {Boolean} [showReferenceStrip=false]\n * If sequenceMode is true, then display a scrolling strip of image thumbnails for\n * navigating through the images.\n *\n * @property {String} [referenceStripScroll='horizontal']\n *\n * @property {Element} [referenceStripElement=null]\n *\n * @property {Number} [referenceStripHeight=null]\n *\n * @property {Number} [referenceStripWidth=null]\n *\n * @property {String} [referenceStripPosition='BOTTOM_LEFT']\n *\n * @property {Number} [referenceStripSizeRatio=0.2]\n *\n * @property {Boolean} [collectionMode=false]\n * Set to true to have the viewer arrange your TiledImages in a grid or line.\n *\n * @property {Number} [collectionRows=3]\n * If collectionMode is true, specifies how many rows the grid should have. Use 1 to make a line.\n * If collectionLayout is 'vertical', specifies how many columns instead.\n *\n * @property {Number} [collectionColumns=0]\n * If collectionMode is true, specifies how many columns the grid should have. Use 1 to make a line.\n * If collectionLayout is 'vertical', specifies how many rows instead. Ignored if collectionRows is not set to a falsy value.\n *\n * @property {String} [collectionLayout='horizontal']\n * If collectionMode is true, specifies whether to arrange vertically or horizontally.\n *\n * @property {Number} [collectionTileSize=800]\n * If collectionMode is true, specifies the size, in viewport coordinates, for each TiledImage to fit into.\n * The TiledImage will be centered within a square of the specified size.\n *\n * @property {Number} [collectionTileMargin=80]\n * If collectionMode is true, specifies the margin, in viewport coordinates, between each TiledImage.\n *\n * @property {String|Boolean} [crossOriginPolicy=false]\n * Valid values are 'Anonymous', 'use-credentials', and false. If false, canvas requests will\n * not use CORS, and the canvas will be tainted.\n *\n * @property {Boolean} [ajaxWithCredentials=false]\n * Whether to set the withCredentials XHR flag for AJAX requests.\n * Note that this can be overridden at the {@link OpenSeadragon.TileSource} level.\n *\n * @property {Boolean} [loadTilesWithAjax=false]\n * Whether to load tile data using AJAX requests.\n * Note that this can be overridden at the {@link OpenSeadragon.TileSource} level.\n *\n * @property {Object} [ajaxHeaders={}]\n * A set of headers to include when making AJAX requests for tile sources or tiles.\n *\n * @property {Boolean} [splitHashDataForPost=false]\n * Allows to treat _first_ hash ('#') symbol as a separator for POST data:\n * URL to be opened by a {@link OpenSeadragon.TileSource} can thus look like: http://some.url#postdata=here.\n * The whole URL is used to fetch image info metadata and it is then split to 'http://some.url' and\n * 'postdata=here'; post data is given to the {@link OpenSeadragon.TileSource} of the choice and can be further\n * used within tile requests (see TileSource methods).\n * NOTE: {@link OpenSeadragon.TileSource.prototype.configure} return value should contain the post data\n * if you want to use it later - so that it is given to your constructor later.\n * NOTE: usually, post data is expected to be ampersand-separated (just like GET parameters), and is NOT USED\n * to fetch tile image data unless explicitly programmed, or if loadTilesWithAjax=false 4\n * (but it is still used for the initial image info request).\n * NOTE: passing POST data from URL by this feature only supports string values, however,\n * TileSource can send any data using POST as long as the header is correct\n * (@see OpenSeadragon.TileSource.prototype.getTilePostData)\n */\n\n /**\n * Settings for gestures generated by a pointer device.\n *\n * @typedef {Object} GestureSettings\n * @memberof OpenSeadragon\n *\n * @property {Boolean} dragToPan\n * Set to false to disable panning on drag gestures.\n *\n * @property {Boolean} scrollToZoom\n * Set to false to disable zooming on scroll gestures.\n *\n * @property {Boolean} clickToZoom\n * Set to false to disable zooming on click gestures.\n *\n * @property {Boolean} dblClickToZoom\n * Set to false to disable zooming on double-click gestures. Note: If set to true\n * then clickToZoom should be set to false to prevent multiple zooms.\n *\n * @property {Boolean} pinchToZoom\n * Set to false to disable zooming on pinch gestures.\n *\n * @property {Boolean} flickEnabled\n * Set to false to disable the kinetic panning effect (flick) at the end of a drag gesture.\n *\n * @property {Number} flickMinSpeed\n * If flickEnabled is true, the minimum speed (in pixels-per-second) required to cause the kinetic panning effect (flick) at the end of a drag gesture.\n *\n * @property {Number} flickMomentum\n * If flickEnabled is true, a constant multiplied by the velocity to determine the distance of the kinetic panning effect (flick) at the end of a drag gesture.\n * A larger value will make the flick feel \"lighter\", while a smaller value will make the flick feel \"heavier\".\n * Note: springStiffness and animationTime also affect the \"spring\" used to stop the flick animation.\n *\n */\n\n /**\n * @typedef {Object} DrawerOptions\n * @memberof OpenSeadragon\n * @property {Object} webgl - options if the WebGLDrawer is used. No options are currently supported.\n * @property {Object} canvas - options if the CanvasDrawer is used. No options are currently supported.\n * @property {Object} html - options if the HTMLDrawer is used. No options are currently supported.\n * @property {Object} custom - options if a custom drawer is used. No options are currently supported.\n */\n\n\n/**\n * The names for the image resources used for the image navigation buttons.\n *\n * @typedef {Object} NavImages\n * @memberof OpenSeadragon\n *\n * @property {Object} zoomIn - Images for the zoom-in button.\n * @property {String} zoomIn.REST\n * @property {String} zoomIn.GROUP\n * @property {String} zoomIn.HOVER\n * @property {String} zoomIn.DOWN\n *\n * @property {Object} zoomOut - Images for the zoom-out button.\n * @property {String} zoomOut.REST\n * @property {String} zoomOut.GROUP\n * @property {String} zoomOut.HOVER\n * @property {String} zoomOut.DOWN\n *\n * @property {Object} home - Images for the home button.\n * @property {String} home.REST\n * @property {String} home.GROUP\n * @property {String} home.HOVER\n * @property {String} home.DOWN\n *\n * @property {Object} fullpage - Images for the full-page button.\n * @property {String} fullpage.REST\n * @property {String} fullpage.GROUP\n * @property {String} fullpage.HOVER\n * @property {String} fullpage.DOWN\n *\n * @property {Object} rotateleft - Images for the rotate left button.\n * @property {String} rotateleft.REST\n * @property {String} rotateleft.GROUP\n * @property {String} rotateleft.HOVER\n * @property {String} rotateleft.DOWN\n *\n * @property {Object} rotateright - Images for the rotate right button.\n * @property {String} rotateright.REST\n * @property {String} rotateright.GROUP\n * @property {String} rotateright.HOVER\n * @property {String} rotateright.DOWN\n *\n * @property {Object} flip - Images for the flip button.\n * @property {String} flip.REST\n * @property {String} flip.GROUP\n * @property {String} flip.HOVER\n * @property {String} flip.DOWN\n *\n * @property {Object} previous - Images for the previous button.\n * @property {String} previous.REST\n * @property {String} previous.GROUP\n * @property {String} previous.HOVER\n * @property {String} previous.DOWN\n *\n * @property {Object} next - Images for the next button.\n * @property {String} next.REST\n * @property {String} next.GROUP\n * @property {String} next.HOVER\n * @property {String} next.DOWN\n *\n */\n\n/* eslint-disable no-redeclare */\nfunction OpenSeadragon( options ){\n return new OpenSeadragon.Viewer( options );\n}\n\n(function( $ ){\n\n\n /**\n * The OpenSeadragon version.\n *\n * @member {Object} OpenSeadragon.version\n * @property {String} versionStr - The version number as a string ('major.minor.revision').\n * @property {Number} major - The major version number.\n * @property {Number} minor - The minor version number.\n * @property {Number} revision - The revision number.\n * @since 1.0.0\n */\n $.version = {\n versionStr: '5.0.1',\n major: parseInt('5', 10),\n minor: parseInt('0', 10),\n revision: parseInt('1', 10)\n };\n\n\n /**\n * Taken from jquery 1.6.1\n * [[Class]] -> type pairs\n * @private\n */\n var class2type = {\n '[object Boolean]': 'boolean',\n '[object Number]': 'number',\n '[object String]': 'string',\n '[object Function]': 'function',\n '[object AsyncFunction]': 'function',\n '[object Promise]': 'promise',\n '[object Array]': 'array',\n '[object Date]': 'date',\n '[object RegExp]': 'regexp',\n '[object Object]': 'object'\n },\n // Save a reference to some core methods\n toString = Object.prototype.toString,\n hasOwn = Object.prototype.hasOwnProperty;\n\n /**\n * Taken from jQuery 1.6.1\n * @function isFunction\n * @memberof OpenSeadragon\n * @see {@link http://www.jquery.com/ jQuery}\n */\n $.isFunction = function( obj ) {\n return $.type(obj) === \"function\";\n };\n\n /**\n * Taken from jQuery 1.6.1\n * @function isArray\n * @memberof OpenSeadragon\n * @see {@link http://www.jquery.com/ jQuery}\n */\n $.isArray = Array.isArray || function( obj ) {\n return $.type(obj) === \"array\";\n };\n\n\n /**\n * A crude way of determining if an object is a window.\n * Taken from jQuery 1.6.1\n * @function isWindow\n * @memberof OpenSeadragon\n * @see {@link http://www.jquery.com/ jQuery}\n */\n $.isWindow = function( obj ) {\n return obj && typeof obj === \"object\" && \"setInterval\" in obj;\n };\n\n\n /**\n * Taken from jQuery 1.6.1\n * @function type\n * @memberof OpenSeadragon\n * @see {@link http://www.jquery.com/ jQuery}\n */\n $.type = function( obj ) {\n return ( obj === null ) || ( obj === undefined ) ?\n String( obj ) :\n class2type[ toString.call(obj) ] || \"object\";\n };\n\n\n /**\n * Taken from jQuery 1.6.1\n * @function isPlainObject\n * @memberof OpenSeadragon\n * @see {@link http://www.jquery.com/ jQuery}\n */\n $.isPlainObject = function( obj ) {\n // Must be an Object.\n // Because of IE, we also have to check the presence of the constructor property.\n // Make sure that DOM nodes and window objects don't pass through, as well\n if ( !obj || OpenSeadragon.type(obj) !== \"object\" || obj.nodeType || $.isWindow( obj ) ) {\n return false;\n }\n\n // Not own constructor property must be Object\n if ( obj.constructor &&\n !hasOwn.call(obj, \"constructor\") &&\n !hasOwn.call(obj.constructor.prototype, \"isPrototypeOf\") ) {\n return false;\n }\n\n // Own properties are enumerated firstly, so to speed up,\n // if last one is own, then all properties are own.\n\n var lastKey;\n for (var key in obj ) {\n lastKey = key;\n }\n\n return lastKey === undefined || hasOwn.call( obj, lastKey );\n };\n\n\n /**\n * Taken from jQuery 1.6.1\n * @function isEmptyObject\n * @memberof OpenSeadragon\n * @see {@link http://www.jquery.com/ jQuery}\n */\n $.isEmptyObject = function( obj ) {\n for ( var name in obj ) {\n return false;\n }\n return true;\n };\n\n /**\n * Shim around Object.freeze. Does nothing if Object.freeze is not supported.\n * @param {Object} obj The object to freeze.\n * @returns {Object} obj The frozen object.\n */\n $.freezeObject = function(obj) {\n if (Object.freeze) {\n $.freezeObject = Object.freeze;\n } else {\n $.freezeObject = function(obj) {\n return obj;\n };\n }\n return $.freezeObject(obj);\n };\n\n /**\n * True if the browser supports the HTML5 canvas element\n * @member {Boolean} supportsCanvas\n * @memberof OpenSeadragon\n */\n $.supportsCanvas = (function () {\n var canvasElement = document.createElement( 'canvas' );\n return !!( $.isFunction( canvasElement.getContext ) &&\n canvasElement.getContext( '2d' ) );\n }());\n\n /**\n * Test whether the submitted canvas is tainted or not.\n * @argument {Canvas} canvas The canvas to test.\n * @returns {Boolean} True if the canvas is tainted.\n */\n $.isCanvasTainted = function(canvas) {\n var isTainted = false;\n try {\n // We test if the canvas is tainted by retrieving data from it.\n // An exception will be raised if the canvas is tainted.\n canvas.getContext('2d').getImageData(0, 0, 1, 1);\n } catch (e) {\n isTainted = true;\n }\n return isTainted;\n };\n\n /**\n * True if the browser supports the EventTarget.addEventListener() method\n * @member {Boolean} supportsAddEventListener\n * @memberof OpenSeadragon\n */\n $.supportsAddEventListener = (function () {\n return !!(document.documentElement.addEventListener && document.addEventListener);\n }());\n\n /**\n * True if the browser supports the EventTarget.removeEventListener() method\n * @member {Boolean} supportsRemoveEventListener\n * @memberof OpenSeadragon\n */\n $.supportsRemoveEventListener = (function () {\n return !!(document.documentElement.removeEventListener && document.removeEventListener);\n }());\n\n /**\n * True if the browser supports the newer EventTarget.addEventListener options argument\n * @member {Boolean} supportsEventListenerOptions\n * @memberof OpenSeadragon\n */\n $.supportsEventListenerOptions = (function () {\n var supported = 0;\n\n if ( $.supportsAddEventListener ) {\n try {\n var options = {\n get capture() {\n supported++;\n return false;\n },\n get once() {\n supported++;\n return false;\n },\n get passive() {\n supported++;\n return false;\n }\n };\n window.addEventListener(\"test\", null, options);\n window.removeEventListener(\"test\", null, options);\n } catch ( e ) {\n supported = 0;\n }\n }\n\n return supported >= 3;\n }());\n\n /**\n * A ratio comparing the device screen's pixel density to the canvas's backing store pixel density,\n * clamped to a minimum of 1. Defaults to 1 if canvas isn't supported by the browser.\n * @function getCurrentPixelDensityRatio\n * @memberof OpenSeadragon\n * @returns {Number}\n */\n $.getCurrentPixelDensityRatio = function() {\n if ( $.supportsCanvas ) {\n var context = document.createElement('canvas').getContext('2d');\n var devicePixelRatio = window.devicePixelRatio || 1;\n var backingStoreRatio = context.webkitBackingStorePixelRatio ||\n context.mozBackingStorePixelRatio ||\n context.msBackingStorePixelRatio ||\n context.oBackingStorePixelRatio ||\n context.backingStorePixelRatio || 1;\n return Math.max(devicePixelRatio, 1) / backingStoreRatio;\n } else {\n return 1;\n }\n };\n\n /**\n * A ratio comparing the device screen's pixel density to the canvas's backing store pixel density,\n * clamped to a minimum of 1. Defaults to 1 if canvas isn't supported by the browser.\n * @member {Number} pixelDensityRatio\n * @memberof OpenSeadragon\n */\n $.pixelDensityRatio = $.getCurrentPixelDensityRatio();\n\n}( OpenSeadragon ));\n\n/**\n * This closure defines all static methods available to the OpenSeadragon\n * namespace. Many, if not most, are taken directly from jQuery for use\n * to simplify and reduce common programming patterns. More static methods\n * from jQuery may eventually make their way into this though we are\n * attempting to avoid an explicit dependency on jQuery only because\n * OpenSeadragon is a broadly useful code base and would be made less broad\n * by requiring jQuery fully.\n *\n * Some static methods have also been refactored from the original OpenSeadragon\n * project.\n */\n(function( $ ){\n\n /**\n * Taken from jQuery 1.6.1\n * @function extend\n * @memberof OpenSeadragon\n * @see {@link http://www.jquery.com/ jQuery}\n */\n $.extend = function() {\n var options,\n name,\n src,\n copy,\n copyIsArray,\n clone,\n target = arguments[ 0 ] || {},\n length = arguments.length,\n deep = false,\n i = 1;\n\n // Handle a deep copy situation\n if ( typeof target === \"boolean\" ) {\n deep = target;\n target = arguments[ 1 ] || {};\n // skip the boolean and the target\n i = 2;\n }\n\n // Handle case when target is a string or something (possible in deep copy)\n if ( typeof target !== \"object\" && !OpenSeadragon.isFunction( target ) ) {\n target = {};\n }\n\n // extend jQuery itself if only one argument is passed\n if ( length === i ) {\n target = this;\n --i;\n }\n\n for ( ; i < length; i++ ) {\n // Only deal with non-null/undefined values\n options = arguments[ i ];\n if ( options !== null || options !== undefined ) {\n // Extend the base object\n for ( name in options ) {\n var descriptor = Object.getOwnPropertyDescriptor(options, name);\n\n if (descriptor !== undefined) {\n if (descriptor.get || descriptor.set) {\n Object.defineProperty(target, name, descriptor);\n continue;\n }\n\n copy = descriptor.value;\n } else {\n $.console.warn('Could not copy inherited property \"' + name + '\".');\n continue;\n }\n\n // Prevent never-ending loop\n if ( target === copy ) {\n continue;\n }\n\n // Recurse if we're merging plain objects or arrays\n if ( deep && copy && ( OpenSeadragon.isPlainObject( copy ) || ( copyIsArray = OpenSeadragon.isArray( copy ) ) ) ) {\n src = target[ name ];\n\n if ( copyIsArray ) {\n copyIsArray = false;\n clone = src && OpenSeadragon.isArray( src ) ? src : [];\n\n } else {\n clone = src && OpenSeadragon.isPlainObject( src ) ? src : {};\n }\n\n // Never move original objects, clone them\n target[ name ] = OpenSeadragon.extend( deep, clone, copy );\n\n // Don't bring in undefined values\n } else if ( copy !== undefined ) {\n target[ name ] = copy;\n }\n }\n }\n }\n\n // Return the modified object\n return target;\n };\n\n var isIOSDevice = function () {\n if (typeof navigator !== 'object') {\n return false;\n }\n var userAgent = navigator.userAgent;\n if (typeof userAgent !== 'string') {\n return false;\n }\n return userAgent.indexOf('iPhone') !== -1 ||\n userAgent.indexOf('iPad') !== -1 ||\n userAgent.indexOf('iPod') !== -1;\n };\n\n $.extend( $, /** @lends OpenSeadragon */{\n /**\n * The default values for the optional settings documented at {@link OpenSeadragon.Options}.\n * @static\n * @type {Object}\n */\n DEFAULT_SETTINGS: {\n //DATA SOURCE DETAILS\n xmlPath: null,\n tileSources: null,\n tileHost: null,\n initialPage: 0,\n crossOriginPolicy: false,\n ajaxWithCredentials: false,\n loadTilesWithAjax: false,\n ajaxHeaders: {},\n splitHashDataForPost: false,\n\n //PAN AND ZOOM SETTINGS AND CONSTRAINTS\n panHorizontal: true,\n panVertical: true,\n constrainDuringPan: false,\n wrapHorizontal: false,\n wrapVertical: false,\n visibilityRatio: 0.5, //-> how much of the viewer can be negative space\n minPixelRatio: 0.5, //->closer to 0 draws tiles meant for a higher zoom at this zoom\n defaultZoomLevel: 0,\n minZoomLevel: null,\n maxZoomLevel: null,\n homeFillsViewer: false,\n\n //UI RESPONSIVENESS AND FEEL\n clickTimeThreshold: 300,\n clickDistThreshold: 5,\n dblClickTimeThreshold: 300,\n dblClickDistThreshold: 20,\n springStiffness: 6.5,\n animationTime: 1.2,\n gestureSettingsMouse: {\n dragToPan: true,\n scrollToZoom: true,\n clickToZoom: true,\n dblClickToZoom: false,\n dblClickDragToZoom: false,\n pinchToZoom: false,\n zoomToRefPoint: true,\n flickEnabled: false,\n flickMinSpeed: 120,\n flickMomentum: 0.25,\n pinchRotate: false\n },\n gestureSettingsTouch: {\n dragToPan: true,\n scrollToZoom: false,\n clickToZoom: false,\n dblClickToZoom: true,\n dblClickDragToZoom: true,\n pinchToZoom: true,\n zoomToRefPoint: true,\n flickEnabled: true,\n flickMinSpeed: 120,\n flickMomentum: 0.25,\n pinchRotate: false\n },\n gestureSettingsPen: {\n dragToPan: true,\n scrollToZoom: false,\n clickToZoom: true,\n dblClickToZoom: false,\n dblClickDragToZoom: false,\n pinchToZoom: false,\n zoomToRefPoint: true,\n flickEnabled: false,\n flickMinSpeed: 120,\n flickMomentum: 0.25,\n pinchRotate: false\n },\n gestureSettingsUnknown: {\n dragToPan: true,\n scrollToZoom: false,\n clickToZoom: false,\n dblClickToZoom: true,\n dblClickDragToZoom: false,\n pinchToZoom: true,\n zoomToRefPoint: true,\n flickEnabled: true,\n flickMinSpeed: 120,\n flickMomentum: 0.25,\n pinchRotate: false\n },\n zoomPerClick: 2,\n zoomPerScroll: 1.2,\n zoomPerDblClickDrag: 1.2,\n zoomPerSecond: 1.0,\n blendTime: 0,\n alwaysBlend: false,\n autoHideControls: true,\n immediateRender: false,\n minZoomImageRatio: 0.9, //-> closer to 0 allows zoom out to infinity\n maxZoomPixelRatio: 1.1, //-> higher allows 'over zoom' into pixels\n smoothTileEdgesMinZoom: 1.1, //-> higher than maxZoomPixelRatio disables it\n iOSDevice: isIOSDevice(),\n pixelsPerWheelLine: 40,\n pixelsPerArrowPress: 40,\n autoResize: true,\n preserveImageSizeOnResize: false, // requires autoResize=true\n minScrollDeltaTime: 50,\n rotationIncrement: 90,\n maxTilesPerFrame: 1,\n\n //DEFAULT CONTROL SETTINGS\n showSequenceControl: true, //SEQUENCE\n sequenceControlAnchor: null, //SEQUENCE\n preserveViewport: false, //SEQUENCE\n preserveOverlays: false, //SEQUENCE\n navPrevNextWrap: false, //SEQUENCE\n showNavigationControl: true, //ZOOM/HOME/FULL/ROTATION\n navigationControlAnchor: null, //ZOOM/HOME/FULL/ROTATION\n showZoomControl: true, //ZOOM\n showHomeControl: true, //HOME\n showFullPageControl: true, //FULL\n showRotationControl: false, //ROTATION\n showFlipControl: false, //FLIP\n controlsFadeDelay: 2000, //ZOOM/HOME/FULL/SEQUENCE\n controlsFadeLength: 1500, //ZOOM/HOME/FULL/SEQUENCE\n mouseNavEnabled: true, //GENERAL MOUSE INTERACTIVITY\n\n //VIEWPORT NAVIGATOR SETTINGS\n showNavigator: false,\n navigatorElement: null,\n navigatorId: null,\n navigatorPosition: null,\n navigatorSizeRatio: 0.2,\n navigatorMaintainSizeRatio: false,\n navigatorTop: null,\n navigatorLeft: null,\n navigatorHeight: null,\n navigatorWidth: null,\n navigatorAutoResize: true,\n navigatorAutoFade: true,\n navigatorRotate: true,\n navigatorBackground: '#000',\n navigatorOpacity: 0.8,\n navigatorBorderColor: '#555',\n navigatorDisplayRegionColor: '#900',\n\n // INITIAL ROTATION\n degrees: 0,\n\n // INITIAL FLIP STATE\n flipped: false,\n overlayPreserveContentDirection: true,\n\n // APPEARANCE\n opacity: 1, // to be passed into each TiledImage\n compositeOperation: null, // to be passed into each TiledImage\n\n // DRAWER SETTINGS\n drawer: ['webgl', 'canvas', 'html'], // prefer using webgl, then canvas (i.e. context2d), then fallback to html\n\n drawerOptions: {\n webgl: {\n\n },\n canvas: {\n\n },\n html: {\n\n },\n custom: {\n\n }\n },\n\n // TILED IMAGE SETTINGS\n preload: false, // to be passed into each TiledImage\n imageSmoothingEnabled: true, // to be passed into each TiledImage\n placeholderFillStyle: null, // to be passed into each TiledImage\n subPixelRoundingForTransparency: null, // to be passed into each TiledImage\n\n //REFERENCE STRIP SETTINGS\n showReferenceStrip: false,\n referenceStripScroll: 'horizontal',\n referenceStripElement: null,\n referenceStripHeight: null,\n referenceStripWidth: null,\n referenceStripPosition: 'BOTTOM_LEFT',\n referenceStripSizeRatio: 0.2,\n\n //COLLECTION VISUALIZATION SETTINGS\n collectionRows: 3, //or columns depending on layout\n collectionColumns: 0, //columns in horizontal layout, rows in vertical layout\n collectionLayout: 'horizontal', //vertical\n collectionMode: false,\n collectionTileSize: 800,\n collectionTileMargin: 80,\n\n //PERFORMANCE SETTINGS\n imageLoaderLimit: 0,\n maxImageCacheCount: 200,\n timeout: 30000,\n tileRetryMax: 0,\n tileRetryDelay: 2500,\n\n //INTERFACE RESOURCE SETTINGS\n prefixUrl: \"/images/\",\n navImages: {\n zoomIn: {\n REST: 'zoomin_rest.png',\n GROUP: 'zoomin_grouphover.png',\n HOVER: 'zoomin_hover.png',\n DOWN: 'zoomin_pressed.png'\n },\n zoomOut: {\n REST: 'zoomout_rest.png',\n GROUP: 'zoomout_grouphover.png',\n HOVER: 'zoomout_hover.png',\n DOWN: 'zoomout_pressed.png'\n },\n home: {\n REST: 'home_rest.png',\n GROUP: 'home_grouphover.png',\n HOVER: 'home_hover.png',\n DOWN: 'home_pressed.png'\n },\n fullpage: {\n REST: 'fullpage_rest.png',\n GROUP: 'fullpage_grouphover.png',\n HOVER: 'fullpage_hover.png',\n DOWN: 'fullpage_pressed.png'\n },\n rotateleft: {\n REST: 'rotateleft_rest.png',\n GROUP: 'rotateleft_grouphover.png',\n HOVER: 'rotateleft_hover.png',\n DOWN: 'rotateleft_pressed.png'\n },\n rotateright: {\n REST: 'rotateright_rest.png',\n GROUP: 'rotateright_grouphover.png',\n HOVER: 'rotateright_hover.png',\n DOWN: 'rotateright_pressed.png'\n },\n flip: { // Flip icon designed by Yaroslav Samoylov from the Noun Project and modified by Nelson Campos ncampos@criteriamarathon.com, https://thenounproject.com/term/flip/136289/\n REST: 'flip_rest.png',\n GROUP: 'flip_grouphover.png',\n HOVER: 'flip_hover.png',\n DOWN: 'flip_pressed.png'\n },\n previous: {\n REST: 'previous_rest.png',\n GROUP: 'previous_grouphover.png',\n HOVER: 'previous_hover.png',\n DOWN: 'previous_pressed.png'\n },\n next: {\n REST: 'next_rest.png',\n GROUP: 'next_grouphover.png',\n HOVER: 'next_hover.png',\n DOWN: 'next_pressed.png'\n }\n },\n\n //DEVELOPER SETTINGS\n debugMode: false,\n debugGridColor: ['#437AB2', '#1B9E77', '#D95F02', '#7570B3', '#E7298A', '#66A61E', '#E6AB02', '#A6761D', '#666666'],\n silenceMultiImageWarnings: false\n\n },\n\n /**\n * Returns a function which invokes the method as if it were a method belonging to the object.\n * @function\n * @param {Object} object\n * @param {Function} method\n * @returns {Function}\n */\n delegate: function( object, method ) {\n return function(){\n var args = arguments;\n if ( args === undefined ){\n args = [];\n }\n return method.apply( object, args );\n };\n },\n\n\n /**\n * An enumeration of Browser vendors.\n * @static\n * @type {Object}\n * @property {Number} UNKNOWN\n * @property {Number} IE\n * @property {Number} FIREFOX\n * @property {Number} SAFARI\n * @property {Number} CHROME\n * @property {Number} OPERA\n * @property {Number} EDGE\n * @property {Number} CHROMEEDGE\n */\n BROWSERS: {\n UNKNOWN: 0,\n IE: 1,\n FIREFOX: 2,\n SAFARI: 3,\n CHROME: 4,\n OPERA: 5,\n EDGE: 6,\n CHROMEEDGE: 7\n },\n\n /**\n * An enumeration of when subpixel rounding should occur.\n * @static\n * @type {Object}\n * @property {Number} NEVER Never apply subpixel rounding for transparency.\n * @property {Number} ONLY_AT_REST Do not apply subpixel rounding for transparency during animation (panning, zoom, rotation) and apply it once animation is over.\n * @property {Number} ALWAYS Apply subpixel rounding for transparency during animation and when animation is over.\n */\n SUBPIXEL_ROUNDING_OCCURRENCES: {\n NEVER: 0,\n ONLY_AT_REST: 1,\n ALWAYS: 2\n },\n\n /**\n * Keep track of which {@link Viewer}s have been created.\n * - Key: {@link Element} to which a Viewer is attached.\n * - Value: {@link Viewer} of the element defined by the key.\n * @private\n * @static\n * @type {Object}\n */\n _viewers: new Map(),\n\n /**\n * Returns the {@link Viewer} attached to a given DOM element. If there is\n * no viewer attached to the provided element, undefined is returned.\n * @function\n * @param {String|Element} element Accepts an id or element.\n * @returns {Viewer} The viewer attached to the given element, or undefined.\n */\n getViewer: function(element) {\n return $._viewers.get(this.getElement(element));\n },\n\n /**\n * Returns a DOM Element for the given id or element.\n * @function\n * @param {String|Element} element Accepts an id or element.\n * @returns {Element} The element with the given id, null, or the element itself.\n */\n getElement: function( element ) {\n if ( typeof ( element ) === \"string\" ) {\n element = document.getElementById( element );\n }\n return element;\n },\n\n\n /**\n * Determines the position of the upper-left corner of the element.\n * @function\n * @param {Element|String} element - the element we want the position for.\n * @returns {OpenSeadragon.Point} - the position of the upper left corner of the element.\n */\n getElementPosition: function( element ) {\n var result = new $.Point(),\n isFixed,\n offsetParent;\n\n element = $.getElement( element );\n isFixed = $.getElementStyle( element ).position === \"fixed\";\n offsetParent = getOffsetParent( element, isFixed );\n\n while ( offsetParent ) {\n\n result.x += element.offsetLeft;\n result.y += element.offsetTop;\n\n if ( isFixed ) {\n result = result.plus( $.getPageScroll() );\n }\n\n element = offsetParent;\n isFixed = $.getElementStyle( element ).position === \"fixed\";\n offsetParent = getOffsetParent( element, isFixed );\n }\n\n return result;\n },\n\n\n /**\n * Determines the position of the upper-left corner of the element adjusted for current page and/or element scroll.\n * @function\n * @param {Element|String} element - the element we want the position for.\n * @returns {OpenSeadragon.Point} - the position of the upper left corner of the element adjusted for current page and/or element scroll.\n */\n getElementOffset: function( element ) {\n element = $.getElement( element );\n\n var doc = element && element.ownerDocument,\n docElement,\n win,\n boundingRect = { top: 0, left: 0 };\n\n if ( !doc ) {\n return new $.Point();\n }\n\n docElement = doc.documentElement;\n\n if ( typeof element.getBoundingClientRect !== typeof undefined ) {\n boundingRect = element.getBoundingClientRect();\n }\n\n win = ( doc === doc.window ) ?\n doc :\n ( doc.nodeType === 9 ) ?\n doc.defaultView || doc.parentWindow :\n false;\n\n return new $.Point(\n boundingRect.left + ( win.pageXOffset || docElement.scrollLeft ) - ( docElement.clientLeft || 0 ),\n boundingRect.top + ( win.pageYOffset || docElement.scrollTop ) - ( docElement.clientTop || 0 )\n );\n },\n\n\n /**\n * Determines the height and width of the given element.\n * @function\n * @param {Element|String} element\n * @returns {OpenSeadragon.Point}\n */\n getElementSize: function( element ) {\n element = $.getElement( element );\n\n return new $.Point(\n element.clientWidth,\n element.clientHeight\n );\n },\n\n\n /**\n * Returns the CSSStyle object for the given element.\n * @function\n * @param {Element|String} element\n * @returns {CSSStyle}\n */\n getElementStyle:\n document.documentElement.currentStyle ?\n function( element ) {\n element = $.getElement( element );\n return element.currentStyle;\n } :\n function( element ) {\n element = $.getElement( element );\n return window.getComputedStyle( element, \"\" );\n },\n\n /**\n * Returns the property with the correct vendor prefix appended.\n * @param {String} property the property name\n * @returns {String} the property with the correct prefix or null if not\n * supported.\n */\n getCssPropertyWithVendorPrefix: function(property) {\n var memo = {};\n\n $.getCssPropertyWithVendorPrefix = function(property) {\n if (memo[property] !== undefined) {\n return memo[property];\n }\n var style = document.createElement('div').style;\n var result = null;\n if (style[property] !== undefined) {\n result = property;\n } else {\n var prefixes = ['Webkit', 'Moz', 'MS', 'O',\n 'webkit', 'moz', 'ms', 'o'];\n var suffix = $.capitalizeFirstLetter(property);\n for (var i = 0; i < prefixes.length; i++) {\n var prop = prefixes[i] + suffix;\n if (style[prop] !== undefined) {\n result = prop;\n break;\n }\n }\n }\n memo[property] = result;\n return result;\n };\n return $.getCssPropertyWithVendorPrefix(property);\n },\n\n /**\n * Capitalizes the first letter of a string\n * @param {String} string\n * @returns {String} The string with the first letter capitalized\n */\n capitalizeFirstLetter: function(string) {\n return string.charAt(0).toUpperCase() + string.slice(1);\n },\n\n /**\n * Compute the modulo of a number but makes sure to always return\n * a positive value (also known as Euclidean modulo).\n * @param {Number} number the number to compute the modulo of\n * @param {Number} modulo the modulo\n * @returns {Number} the result of the modulo of number\n */\n positiveModulo: function(number, modulo) {\n var result = number % modulo;\n if (result < 0) {\n result += modulo;\n }\n return result;\n },\n\n\n /**\n * Determines if a point is within the bounding rectangle of the given element (hit-test).\n * @function\n * @param {Element|String} element\n * @param {OpenSeadragon.Point} point\n * @returns {Boolean}\n */\n pointInElement: function( element, point ) {\n element = $.getElement( element );\n var offset = $.getElementOffset( element ),\n size = $.getElementSize( element );\n return point.x >= offset.x && point.x < offset.x + size.x && point.y < offset.y + size.y && point.y >= offset.y;\n },\n\n\n /**\n * Gets the position of the mouse on the screen for a given event.\n * @function\n * @param {Event} [event]\n * @returns {OpenSeadragon.Point}\n */\n getMousePosition: function( event ) {\n\n if ( typeof ( event.pageX ) === \"number\" ) {\n $.getMousePosition = function( event ){\n var result = new $.Point();\n\n result.x = event.pageX;\n result.y = event.pageY;\n\n return result;\n };\n } else if ( typeof ( event.clientX ) === \"number\" ) {\n $.getMousePosition = function( event ){\n var result = new $.Point();\n\n result.x =\n event.clientX +\n document.body.scrollLeft +\n document.documentElement.scrollLeft;\n result.y =\n event.clientY +\n document.body.scrollTop +\n document.documentElement.scrollTop;\n\n return result;\n };\n } else {\n throw new Error(\n \"Unknown event mouse position, no known technique.\"\n );\n }\n\n return $.getMousePosition( event );\n },\n\n\n /**\n * Determines the page's current scroll position.\n * @function\n * @returns {OpenSeadragon.Point}\n */\n getPageScroll: function() {\n var docElement = document.documentElement || {},\n body = document.body || {};\n\n if ( typeof ( window.pageXOffset ) === \"number\" ) {\n $.getPageScroll = function(){\n return new $.Point(\n window.pageXOffset,\n window.pageYOffset\n );\n };\n } else if ( body.scrollLeft || body.scrollTop ) {\n $.getPageScroll = function(){\n return new $.Point(\n document.body.scrollLeft,\n document.body.scrollTop\n );\n };\n } else if ( docElement.scrollLeft || docElement.scrollTop ) {\n $.getPageScroll = function(){\n return new $.Point(\n document.documentElement.scrollLeft,\n document.documentElement.scrollTop\n );\n };\n } else {\n // We can't reassign the function yet, as there was no scroll.\n return new $.Point(0, 0);\n }\n\n return $.getPageScroll();\n },\n\n /**\n * Set the page scroll position.\n * @function\n * @returns {OpenSeadragon.Point}\n */\n setPageScroll: function( scroll ) {\n if ( typeof ( window.scrollTo ) !== \"undefined\" ) {\n $.setPageScroll = function( scroll ) {\n window.scrollTo( scroll.x, scroll.y );\n };\n } else {\n var originalScroll = $.getPageScroll();\n if ( originalScroll.x === scroll.x &&\n originalScroll.y === scroll.y ) {\n // We are already correctly positioned and there\n // is no way to detect the correct method.\n return;\n }\n\n document.body.scrollLeft = scroll.x;\n document.body.scrollTop = scroll.y;\n var currentScroll = $.getPageScroll();\n if ( currentScroll.x !== originalScroll.x &&\n currentScroll.y !== originalScroll.y ) {\n $.setPageScroll = function( scroll ) {\n document.body.scrollLeft = scroll.x;\n document.body.scrollTop = scroll.y;\n };\n return;\n }\n\n document.documentElement.scrollLeft = scroll.x;\n document.documentElement.scrollTop = scroll.y;\n currentScroll = $.getPageScroll();\n if ( currentScroll.x !== originalScroll.x &&\n currentScroll.y !== originalScroll.y ) {\n $.setPageScroll = function( scroll ) {\n document.documentElement.scrollLeft = scroll.x;\n document.documentElement.scrollTop = scroll.y;\n };\n return;\n }\n\n // We can't find anything working, so we do nothing.\n $.setPageScroll = function( scroll ) {\n };\n }\n\n $.setPageScroll( scroll );\n },\n\n /**\n * Determines the size of the browsers window.\n * @function\n * @returns {OpenSeadragon.Point}\n */\n getWindowSize: function() {\n var docElement = document.documentElement || {},\n body = document.body || {};\n\n if ( typeof ( window.innerWidth ) === 'number' ) {\n $.getWindowSize = function(){\n return new $.Point(\n window.innerWidth,\n window.innerHeight\n );\n };\n } else if ( docElement.clientWidth || docElement.clientHeight ) {\n $.getWindowSize = function(){\n return new $.Point(\n document.documentElement.clientWidth,\n document.documentElement.clientHeight\n );\n };\n } else if ( body.clientWidth || body.clientHeight ) {\n $.getWindowSize = function(){\n return new $.Point(\n document.body.clientWidth,\n document.body.clientHeight\n );\n };\n } else {\n throw new Error(\"Unknown window size, no known technique.\");\n }\n\n return $.getWindowSize();\n },\n\n\n /**\n * Wraps the given element in a nest of divs so that the element can\n * be easily centered using CSS tables\n * @function\n * @param {Element|String} element\n * @returns {Element} outermost wrapper element\n */\n makeCenteredNode: function( element ) {\n // Convert a possible ID to an actual HTMLElement\n element = $.getElement( element );\n\n /*\n CSS tables require you to have a display:table/row/cell hierarchy so we need to create\n three nested wrapper divs:\n */\n\n var wrappers = [\n $.makeNeutralElement( 'div' ),\n $.makeNeutralElement( 'div' ),\n $.makeNeutralElement( 'div' )\n ];\n\n // It feels like we should be able to pass style dicts to makeNeutralElement:\n $.extend(wrappers[0].style, {\n display: \"table\",\n height: \"100%\",\n width: \"100%\"\n });\n\n $.extend(wrappers[1].style, {\n display: \"table-row\"\n });\n\n $.extend(wrappers[2].style, {\n display: \"table-cell\",\n verticalAlign: \"middle\",\n textAlign: \"center\"\n });\n\n wrappers[0].appendChild(wrappers[1]);\n wrappers[1].appendChild(wrappers[2]);\n wrappers[2].appendChild(element);\n\n return wrappers[0];\n },\n\n\n /**\n * Creates an easily positionable element of the given type that therefor\n * serves as an excellent container element.\n * @function\n * @param {String} tagName\n * @returns {Element}\n */\n makeNeutralElement: function( tagName ) {\n var element = document.createElement( tagName ),\n style = element.style;\n\n style.background = \"transparent none\";\n style.border = \"none\";\n style.margin = \"0px\";\n style.padding = \"0px\";\n style.position = \"static\";\n\n return element;\n },\n\n\n /**\n * Returns the current milliseconds, using Date.now() if available\n * @function\n */\n now: function( ) {\n if (Date.now) {\n $.now = Date.now;\n } else {\n $.now = function() {\n return new Date().getTime();\n };\n }\n\n return $.now();\n },\n\n\n /**\n * Ensures an image is loaded correctly to support alpha transparency.\n * @function\n * @param {String} src\n * @returns {Element}\n */\n makeTransparentImage: function( src ) {\n var img = $.makeNeutralElement( \"img\" );\n\n img.src = src;\n\n return img;\n },\n\n\n /**\n * Sets the opacity of the specified element.\n * @function\n * @param {Element|String} element\n * @param {Number} opacity\n * @param {Boolean} [usesAlpha]\n */\n setElementOpacity: function( element, opacity, usesAlpha ) {\n\n var ieOpacity,\n ieFilter;\n\n element = $.getElement( element );\n\n if ( usesAlpha && !$.Browser.alpha ) {\n opacity = Math.round( opacity );\n }\n\n if ( $.Browser.opacity ) {\n element.style.opacity = opacity < 1 ? opacity : \"\";\n } else {\n if ( opacity < 1 ) {\n ieOpacity = Math.round( 100 * opacity );\n ieFilter = \"alpha(opacity=\" + ieOpacity + \")\";\n element.style.filter = ieFilter;\n } else {\n element.style.filter = \"\";\n }\n }\n },\n\n\n /**\n * Sets the specified element's touch-action style attribute to 'none'.\n * @function\n * @param {Element|String} element\n */\n setElementTouchActionNone: function( element ) {\n element = $.getElement( element );\n if ( typeof element.style.touchAction !== 'undefined' ) {\n element.style.touchAction = 'none';\n } else if ( typeof element.style.msTouchAction !== 'undefined' ) {\n element.style.msTouchAction = 'none';\n }\n },\n\n\n /**\n * Sets the specified element's pointer-events style attribute to the passed value.\n * @function\n * @param {Element|String} element\n * @param {String} value\n */\n setElementPointerEvents: function( element, value ) {\n element = $.getElement( element );\n if (typeof element.style !== 'undefined' && typeof element.style.pointerEvents !== 'undefined' ) {\n element.style.pointerEvents = value;\n }\n },\n\n\n /**\n * Sets the specified element's pointer-events style attribute to 'none'.\n * @function\n * @param {Element|String} element\n */\n setElementPointerEventsNone: function( element ) {\n $.setElementPointerEvents( element, 'none' );\n },\n\n\n /**\n * Add the specified CSS class to the element if not present.\n * @function\n * @param {Element|String} element\n * @param {String} className\n */\n addClass: function( element, className ) {\n element = $.getElement( element );\n\n if (!element.className) {\n element.className = className;\n } else if ( ( ' ' + element.className + ' ' ).\n indexOf( ' ' + className + ' ' ) === -1 ) {\n element.className += ' ' + className;\n }\n },\n\n /**\n * Find the first index at which an element is found in an array or -1\n * if not present.\n *\n * Code taken and adapted from\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf#Compatibility\n *\n * @function\n * @param {Array} array The array from which to find the element\n * @param {Object} searchElement The element to find\n * @param {Number} [fromIndex=0] Index to start research.\n * @returns {Number} The index of the element in the array.\n */\n indexOf: function( array, searchElement, fromIndex ) {\n if ( Array.prototype.indexOf ) {\n this.indexOf = function( array, searchElement, fromIndex ) {\n return array.indexOf( searchElement, fromIndex );\n };\n } else {\n this.indexOf = function( array, searchElement, fromIndex ) {\n var i,\n pivot = ( fromIndex ) ? fromIndex : 0,\n length;\n if ( !array ) {\n throw new TypeError( );\n }\n\n length = array.length;\n if ( length === 0 || pivot >= length ) {\n return -1;\n }\n\n if ( pivot < 0 ) {\n pivot = length - Math.abs( pivot );\n }\n\n for ( i = pivot; i < length; i++ ) {\n if ( array[i] === searchElement ) {\n return i;\n }\n }\n return -1;\n };\n }\n return this.indexOf( array, searchElement, fromIndex );\n },\n\n /**\n * Remove the specified CSS class from the element.\n * @function\n * @param {Element|String} element\n * @param {String} className\n */\n removeClass: function( element, className ) {\n var oldClasses,\n newClasses = [],\n i;\n\n element = $.getElement( element );\n oldClasses = element.className.split( /\\s+/ );\n for ( i = 0; i < oldClasses.length; i++ ) {\n if ( oldClasses[ i ] && oldClasses[ i ] !== className ) {\n newClasses.push( oldClasses[ i ] );\n }\n }\n element.className = newClasses.join(' ');\n },\n\n /**\n * Convert passed addEventListener() options to boolean or options object,\n * depending on browser support.\n * @function\n * @param {Boolean|Object} [options] Boolean useCapture, or if [supportsEventListenerOptions]{@link OpenSeadragon.supportsEventListenerOptions}, can be an object\n * @param {Boolean} [options.capture]\n * @param {Boolean} [options.passive]\n * @param {Boolean} [options.once]\n * @returns {String} The protocol (http:, https:, file:, ftp: ...)\n */\n normalizeEventListenerOptions: function (options) {\n var opts;\n if ( typeof options !== 'undefined' ) {\n if ( typeof options === 'boolean' ) {\n // Legacy Boolean useCapture\n opts = $.supportsEventListenerOptions ? { capture: options } : options;\n } else {\n // Options object\n opts = $.supportsEventListenerOptions ? options :\n ( ( typeof options.capture !== 'undefined' ) ? options.capture : false );\n }\n } else {\n // No options specified - Legacy optional useCapture argument\n // (for IE, first supported on version 9, so we'll pass a Boolean)\n opts = $.supportsEventListenerOptions ? { capture: false } : false;\n }\n return opts;\n },\n\n /**\n * Adds an event listener for the given element, eventName and handler.\n * @function\n * @param {Element|String} element\n * @param {String} eventName\n * @param {Function} handler\n * @param {Boolean|Object} [options] Boolean useCapture, or if [supportsEventListenerOptions]{@link OpenSeadragon.supportsEventListenerOptions}, can be an object\n * @param {Boolean} [options.capture]\n * @param {Boolean} [options.passive]\n * @param {Boolean} [options.once]\n */\n addEvent: (function () {\n if ( $.supportsAddEventListener ) {\n return function ( element, eventName, handler, options ) {\n options = $.normalizeEventListenerOptions(options);\n element = $.getElement( element );\n element.addEventListener( eventName, handler, options );\n };\n } else if ( document.documentElement.attachEvent && document.attachEvent ) {\n return function ( element, eventName, handler ) {\n element = $.getElement( element );\n element.attachEvent( 'on' + eventName, handler );\n };\n } else {\n throw new Error( \"No known event model.\" );\n }\n }()),\n\n\n /**\n * Remove a given event listener for the given element, event type and\n * handler.\n * @function\n * @param {Element|String} element\n * @param {String} eventName\n * @param {Function} handler\n * @param {Boolean|Object} [options] Boolean useCapture, or if [supportsEventListenerOptions]{@link OpenSeadragon.supportsEventListenerOptions}, can be an object\n * @param {Boolean} [options.capture]\n */\n removeEvent: (function () {\n if ( $.supportsRemoveEventListener ) {\n return function ( element, eventName, handler, options ) {\n options = $.normalizeEventListenerOptions(options);\n element = $.getElement( element );\n element.removeEventListener( eventName, handler, options );\n };\n } else if ( document.documentElement.detachEvent && document.detachEvent ) {\n return function( element, eventName, handler ) {\n element = $.getElement( element );\n element.detachEvent( 'on' + eventName, handler );\n };\n } else {\n throw new Error( \"No known event model.\" );\n }\n }()),\n\n\n /**\n * Cancels the default browser behavior had the event propagated all\n * the way up the DOM to the window object.\n * @function\n * @param {Event} [event]\n */\n cancelEvent: function( event ) {\n event.preventDefault();\n },\n\n\n /**\n * Returns true if {@link OpenSeadragon.cancelEvent|cancelEvent} has been called on\n * the event, otherwise returns false.\n * @function\n * @param {Event} [event]\n */\n eventIsCanceled: function( event ) {\n return event.defaultPrevented;\n },\n\n\n /**\n * Stops the propagation of the event through the DOM in the capturing and bubbling phases.\n * @function\n * @param {Event} [event]\n */\n stopEvent: function( event ) {\n event.stopPropagation();\n },\n\n // Deprecated\n createCallback: function( object, method ) {\n //TODO: This pattern is painful to use and debug. It's much cleaner\n // to use pinning plus anonymous functions. Get rid of this\n // pattern!\n console.error('The createCallback function is deprecated and will be removed in future versions. Please use alternativeFunction instead.');\n var initialArgs = [],\n i;\n for ( i = 2; i < arguments.length; i++ ) {\n initialArgs.push( arguments[ i ] );\n }\n\n return function() {\n var args = initialArgs.concat( [] ),\n i;\n for ( i = 0; i < arguments.length; i++ ) {\n args.push( arguments[ i ] );\n }\n\n return method.apply( object, args );\n };\n },\n\n\n /**\n * Retrieves the value of a url parameter from the window.location string.\n * @function\n * @param {String} key\n * @returns {String} The value of the url parameter or null if no param matches.\n */\n getUrlParameter: function( key ) {\n // eslint-disable-next-line no-use-before-define\n var value = URLPARAMS[ key ];\n return value ? value : null;\n },\n\n /**\n * Retrieves the protocol used by the url. The url can either be absolute\n * or relative.\n * @function\n * @private\n * @param {String} url The url to retrieve the protocol from.\n * @returns {String} The protocol (http:, https:, file:, ftp: ...)\n */\n getUrlProtocol: function( url ) {\n var match = url.match(/^([a-z]+:)\\/\\//i);\n if ( match === null ) {\n // Relative URL, retrive the protocol from window.location\n return window.location.protocol;\n }\n return match[1].toLowerCase();\n },\n\n /**\n * Create an XHR object\n * @private\n * @param {type} [local] Deprecated. Ignored (IE/ActiveXObject file protocol no longer supported).\n * @returns {XMLHttpRequest}\n */\n createAjaxRequest: function() {\n if ( window.XMLHttpRequest ) {\n $.createAjaxRequest = function() {\n return new XMLHttpRequest();\n };\n return new XMLHttpRequest();\n } else {\n throw new Error( \"Browser doesn't support XMLHttpRequest.\" );\n }\n },\n\n /**\n * Makes an AJAX request.\n * @param {Object} options\n * @param {String} options.url - the url to request\n * @param {Function} options.success - a function to call on a successful response\n * @param {Function} options.error - a function to call on when an error occurs\n * @param {Object} options.headers - headers to add to the AJAX request\n * @param {String} options.responseType - the response type of the AJAX request\n * @param {String} options.postData - HTTP POST data (usually but not necessarily in k=v&k2=v2... form,\n * see TileSource::getPostData), GET method used if null\n * @param {Boolean} [options.withCredentials=false] - whether to set the XHR's withCredentials\n * @throws {Error}\n * @returns {XMLHttpRequest}\n */\n makeAjaxRequest: function( url, onSuccess, onError ) {\n var withCredentials;\n var headers;\n var responseType;\n var postData;\n\n // Note that our preferred API is that you pass in a single object; the named\n // arguments are for legacy support.\n if( $.isPlainObject( url ) ){\n onSuccess = url.success;\n onError = url.error;\n withCredentials = url.withCredentials;\n headers = url.headers;\n responseType = url.responseType || null;\n postData = url.postData || null;\n url = url.url;\n }\n\n var protocol = $.getUrlProtocol( url );\n var request = $.createAjaxRequest();\n\n if ( !$.isFunction( onSuccess ) ) {\n throw new Error( \"makeAjaxRequest requires a success callback\" );\n }\n\n request.onreadystatechange = function() {\n // 4 = DONE (https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest#Properties)\n if ( request.readyState === 4 ) {\n request.onreadystatechange = function(){};\n\n // With protocols other than http/https, a successful request status is in\n // the 200's on Firefox and 0 on other browsers\n if ( (request.status >= 200 && request.status < 300) ||\n ( request.status === 0 &&\n protocol !== \"http:\" &&\n protocol !== \"https:\" )) {\n onSuccess( request );\n } else {\n if ( $.isFunction( onError ) ) {\n onError( request );\n } else {\n $.console.error( \"AJAX request returned %d: %s\", request.status, url );\n }\n }\n }\n };\n\n var method = postData ? \"POST\" : \"GET\";\n try {\n request.open( method, url, true );\n\n if (responseType) {\n request.responseType = responseType;\n }\n\n if (headers) {\n for (var headerName in headers) {\n if (Object.prototype.hasOwnProperty.call(headers, headerName) && headers[headerName]) {\n request.setRequestHeader(headerName, headers[headerName]);\n }\n }\n }\n\n if (withCredentials) {\n request.withCredentials = true;\n }\n\n request.send(postData);\n } catch (e) {\n $.console.error( \"%s while making AJAX request: %s\", e.name, e.message );\n\n request.onreadystatechange = function(){};\n\n if ( $.isFunction( onError ) ) {\n onError( request, e );\n }\n }\n\n return request;\n },\n\n /**\n * Taken from jQuery 1.6.1\n * @function\n * @param {Object} options\n * @param {String} options.url\n * @param {Function} options.callback\n * @param {String} [options.param='callback'] The name of the url parameter\n * to request the jsonp provider with.\n * @param {String} [options.callbackName=] The name of the callback to\n * request the jsonp provider with.\n */\n jsonp: function( options ){\n var script,\n url = options.url,\n head = document.head ||\n document.getElementsByTagName( \"head\" )[ 0 ] ||\n document.documentElement,\n jsonpCallback = options.callbackName || 'openseadragon' + $.now(),\n previous = window[ jsonpCallback ],\n replace = \"$1\" + jsonpCallback + \"$2\",\n callbackParam = options.param || 'callback',\n callback = options.callback;\n\n url = url.replace( /(=)\\?(&|$)|\\?\\?/i, replace );\n // Add callback manually\n url += (/\\?/.test( url ) ? \"&\" : \"?\") + callbackParam + \"=\" + jsonpCallback;\n\n // Install callback\n window[ jsonpCallback ] = function( response ) {\n if ( !previous ){\n try{\n delete window[ jsonpCallback ];\n }catch(e){\n //swallow\n }\n } else {\n window[ jsonpCallback ] = previous;\n }\n if( callback && $.isFunction( callback ) ){\n callback( response );\n }\n };\n\n script = document.createElement( \"script\" );\n\n //TODO: having an issue with async info requests\n if( undefined !== options.async || false !== options.async ){\n script.async = \"async\";\n }\n\n if ( options.scriptCharset ) {\n script.charset = options.scriptCharset;\n }\n\n script.src = url;\n\n // Attach handlers for all browsers\n script.onload = script.onreadystatechange = function( _, isAbort ) {\n\n if ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) {\n\n // Handle memory leak in IE\n script.onload = script.onreadystatechange = null;\n\n // Remove the script\n if ( head && script.parentNode ) {\n head.removeChild( script );\n }\n\n // Dereference the script\n script = undefined;\n }\n };\n // Use insertBefore instead of appendChild to circumvent an IE6 bug.\n // This arises when a base node is used (#2709 and #4378).\n head.insertBefore( script, head.firstChild );\n\n },\n\n\n /**\n * Fully deprecated. Will throw an error.\n * @function\n * @deprecated use {@link OpenSeadragon.Viewer#open}\n */\n createFromDZI: function() {\n throw \"OpenSeadragon.createFromDZI is deprecated, use Viewer.open.\";\n },\n\n /**\n * Parses an XML string into a DOM Document.\n * @function\n * @param {String} string\n * @returns {Document}\n */\n parseXml: function( string ) {\n if ( window.DOMParser ) {\n\n $.parseXml = function( string ) {\n var xmlDoc = null,\n parser;\n\n parser = new DOMParser();\n xmlDoc = parser.parseFromString( string, \"text/xml\" );\n return xmlDoc;\n };\n\n } else {\n throw new Error( \"Browser doesn't support XML DOM.\" );\n }\n\n return $.parseXml( string );\n },\n\n /**\n * Parses a JSON string into a Javascript object.\n * @function\n * @param {String} string\n * @returns {Object}\n */\n parseJSON: function(string) {\n $.parseJSON = window.JSON.parse;\n return $.parseJSON(string);\n },\n\n /**\n * Reports whether the image format is supported for tiling in this\n * version.\n * @function\n * @param {String} [extension]\n * @returns {Boolean}\n */\n imageFormatSupported: function( extension ) {\n extension = extension ? extension : \"\";\n // eslint-disable-next-line no-use-before-define\n return !!FILEFORMATS[ extension.toLowerCase() ];\n },\n\n /**\n * Updates supported image formats with user-specified values.\n * Preexisting formats that are not being updated are left unchanged.\n * By default, the defined formats are\n *
{\n * avif: true,\n * bmp: false,\n * jpeg: true,\n * jpg: true,\n * png: true,\n * tif: false,\n * wdp: false,\n * webp: true\n * }\n *
\n * @function\n * @example\n * // sets bmp as supported and png as unsupported\n * setImageFormatsSupported({bmp: true, png: false});\n * @param {Object} formats An object containing format extensions as\n * keys and booleans as values.\n */\n setImageFormatsSupported: function(formats) {\n // eslint-disable-next-line no-use-before-define\n $.extend(FILEFORMATS, formats);\n }\n\n });\n\n\n //TODO: $.console is often used inside a try/catch block which generally\n // prevents allowings errors to occur with detection until a debugger\n // is attached. Although I've been guilty of the same anti-pattern\n // I eventually was convinced that errors should naturally propagate in\n // all but the most special cases.\n /**\n * A convenient alias for console when available, and a simple null\n * function when console is unavailable.\n * @static\n * @private\n */\n var nullfunction = function( msg ){\n //document.location.hash = msg;\n };\n\n $.console = window.console || {\n log: nullfunction,\n debug: nullfunction,\n info: nullfunction,\n warn: nullfunction,\n error: nullfunction,\n assert: nullfunction\n };\n\n\n /**\n * The current browser vendor, version, and related information regarding detected features.\n * @member {Object} Browser\n * @memberof OpenSeadragon\n * @static\n * @type {Object}\n * @property {OpenSeadragon.BROWSERS} vendor - One of the {@link OpenSeadragon.BROWSERS} enumeration values.\n * @property {Number} version\n * @property {Boolean} alpha - Does the browser support image alpha transparency.\n */\n $.Browser = {\n vendor: $.BROWSERS.UNKNOWN,\n version: 0,\n alpha: true\n };\n\n\n var FILEFORMATS = {\n avif: true,\n bmp: false,\n jpeg: true,\n jpg: true,\n png: true,\n tif: false,\n wdp: false,\n webp: true\n },\n URLPARAMS = {};\n\n (function() {\n //A small auto-executing routine to determine the browser vendor,\n //version and supporting feature sets.\n var ver = navigator.appVersion,\n ua = navigator.userAgent,\n regex;\n\n //console.error( 'appName: ' + navigator.appName );\n //console.error( 'appVersion: ' + navigator.appVersion );\n //console.error( 'userAgent: ' + navigator.userAgent );\n\n //TODO navigator.appName is deprecated. Should be 'Netscape' for all browsers\n // but could be dropped at any time\n // See https://developer.mozilla.org/en-US/docs/Web/API/Navigator/appName\n // https://developer.mozilla.org/en-US/docs/Web/HTTP/Browser_detection_using_the_user_agent\n switch( navigator.appName ){\n case \"Microsoft Internet Explorer\":\n if( !!window.attachEvent &&\n !!window.ActiveXObject ) {\n\n $.Browser.vendor = $.BROWSERS.IE;\n $.Browser.version = parseFloat(\n ua.substring(\n ua.indexOf( \"MSIE\" ) + 5,\n ua.indexOf( \";\", ua.indexOf( \"MSIE\" ) ) )\n );\n }\n break;\n case \"Netscape\":\n if (window.addEventListener) {\n if ( ua.indexOf( \"Edge\" ) >= 0 ) {\n $.Browser.vendor = $.BROWSERS.EDGE;\n $.Browser.version = parseFloat(\n ua.substring( ua.indexOf( \"Edge\" ) + 5 )\n );\n } else if ( ua.indexOf( \"Edg\" ) >= 0 ) {\n $.Browser.vendor = $.BROWSERS.CHROMEEDGE;\n $.Browser.version = parseFloat(\n ua.substring( ua.indexOf( \"Edg\" ) + 4 )\n );\n } else if ( ua.indexOf( \"Firefox\" ) >= 0 ) {\n $.Browser.vendor = $.BROWSERS.FIREFOX;\n $.Browser.version = parseFloat(\n ua.substring( ua.indexOf( \"Firefox\" ) + 8 )\n );\n } else if ( ua.indexOf( \"Safari\" ) >= 0 ) {\n $.Browser.vendor = ua.indexOf( \"Chrome\" ) >= 0 ?\n $.BROWSERS.CHROME :\n $.BROWSERS.SAFARI;\n $.Browser.version = parseFloat(\n ua.substring(\n ua.substring( 0, ua.indexOf( \"Safari\" ) ).lastIndexOf( \"/\" ) + 1,\n ua.indexOf( \"Safari\" )\n )\n );\n } else {\n regex = new RegExp( \"Trident/.*rv:([0-9]{1,}[.0-9]{0,})\");\n if ( regex.exec( ua ) !== null ) {\n $.Browser.vendor = $.BROWSERS.IE;\n $.Browser.version = parseFloat( RegExp.$1 );\n }\n }\n }\n break;\n case \"Opera\":\n $.Browser.vendor = $.BROWSERS.OPERA;\n $.Browser.version = parseFloat( ver );\n break;\n }\n\n // ignore '?' portion of query string\n var query = window.location.search.substring( 1 ),\n parts = query.split('&'),\n part,\n sep,\n i;\n\n for ( i = 0; i < parts.length; i++ ) {\n part = parts[ i ];\n sep = part.indexOf( '=' );\n\n if ( sep > 0 ) {\n var key = part.substring( 0, sep ),\n value = part.substring( sep + 1 );\n try {\n URLPARAMS[ key ] = decodeURIComponent( value );\n } catch (e) {\n $.console.error( \"Ignoring malformed URL parameter: %s=%s\", key, value );\n }\n }\n }\n\n //determine if this browser supports image alpha transparency\n $.Browser.alpha = !(\n $.Browser.vendor === $.BROWSERS.CHROME && $.Browser.version < 2\n );\n\n //determine if this browser supports element.style.opacity\n $.Browser.opacity = true;\n\n if ( $.Browser.vendor === $.BROWSERS.IE ) {\n $.console.error('Internet Explorer is not supported by OpenSeadragon');\n }\n })();\n\n\n // Adding support for HTML5's requestAnimationFrame as suggested by acdha.\n // Implementation taken from matt synder's post here:\n // http://mattsnider.com/cross-browser-and-legacy-supported-requestframeanimation/\n (function( w ) {\n\n // most browsers have an implementation\n var requestAnimationFrame = w.requestAnimationFrame ||\n w.mozRequestAnimationFrame ||\n w.webkitRequestAnimationFrame ||\n w.msRequestAnimationFrame;\n\n var cancelAnimationFrame = w.cancelAnimationFrame ||\n w.mozCancelAnimationFrame ||\n w.webkitCancelAnimationFrame ||\n w.msCancelAnimationFrame;\n\n // polyfill, when necessary\n if ( requestAnimationFrame && cancelAnimationFrame ) {\n // We can't assign these window methods directly to $ because they\n // expect their \"this\" to be \"window\", so we call them in wrappers.\n $.requestAnimationFrame = function(){\n return requestAnimationFrame.apply( w, arguments );\n };\n $.cancelAnimationFrame = function(){\n return cancelAnimationFrame.apply( w, arguments );\n };\n } else {\n var aAnimQueue = [],\n processing = [],\n iRequestId = 0,\n iIntervalId;\n\n // create a mock requestAnimationFrame function\n $.requestAnimationFrame = function( callback ) {\n aAnimQueue.push( [ ++iRequestId, callback ] );\n\n if ( !iIntervalId ) {\n iIntervalId = setInterval( function() {\n if ( aAnimQueue.length ) {\n var time = $.now();\n // Process all of the currently outstanding frame\n // requests, but none that get added during the\n // processing.\n // Swap the arrays so we don't have to create a new\n // array every frame.\n var temp = processing;\n processing = aAnimQueue;\n aAnimQueue = temp;\n while ( processing.length ) {\n processing.shift()[ 1 ]( time );\n }\n } else {\n // don't continue the interval, if unnecessary\n clearInterval( iIntervalId );\n iIntervalId = undefined;\n }\n }, 1000 / 50); // estimating support for 50 frames per second\n }\n\n return iRequestId;\n };\n\n // create a mock cancelAnimationFrame function\n $.cancelAnimationFrame = function( requestId ) {\n // find the request ID and remove it\n var i, j;\n for ( i = 0, j = aAnimQueue.length; i < j; i += 1 ) {\n if ( aAnimQueue[ i ][ 0 ] === requestId ) {\n aAnimQueue.splice( i, 1 );\n return;\n }\n }\n\n // If it's not in the queue, it may be in the set we're currently\n // processing (if cancelAnimationFrame is called from within a\n // requestAnimationFrame callback).\n for ( i = 0, j = processing.length; i < j; i += 1 ) {\n if ( processing[ i ][ 0 ] === requestId ) {\n processing.splice( i, 1 );\n return;\n }\n }\n };\n }\n })( window );\n\n /**\n * @private\n * @inner\n * @function\n * @param {Element} element\n * @param {Boolean} [isFixed]\n * @returns {Element}\n */\n function getOffsetParent( element, isFixed ) {\n if ( isFixed && element !== document.body ) {\n return document.body;\n } else {\n return element.offsetParent;\n }\n }\n\n}(OpenSeadragon));\n\n\n// Universal Module Definition, supports CommonJS, AMD and simple script tag\n(function (root, factory) {\n if (typeof define === 'function' && define.amd) {\n // expose as amd module\n define([], factory);\n } else if (typeof module === 'object' && module.exports) {\n // expose as commonjs module\n module.exports = factory();\n } else {\n // expose as window.OpenSeadragon\n root.OpenSeadragon = factory();\n }\n}(this, function () {\n return OpenSeadragon;\n}));\n\n/*\n * OpenSeadragon - Mat3\n *\n * Copyright (C) 2010-2024 OpenSeadragon contributors\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n * - Redistributions of source code must retain the above copyright notice,\n * this list of conditions and the following disclaimer.\n *\n * - Redistributions in binary form must reproduce the above copyright\n * notice, this list of conditions and the following disclaimer in the\n * documentation and/or other materials provided with the distribution.\n *\n * - Neither the name of CodePlex Foundation nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\n * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n */\n\n\n/*\n * Portions of this source file are taken from WegGL Fundamentals:\n *\n * Copyright 2012, Gregg Tavares.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n * * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following disclaimer\n * in the documentation and/or other materials provided with the\n * distribution.\n * * Neither the name of Gregg Tavares. nor the names of his\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n */\n\n\n\n\n(function( $ ){\n\n// Modified from https://webglfundamentals.org/webgl/lessons/webgl-2d-matrices.html\n\n/**\n *\n *\n * @class Mat3\n * @classdesc A left-to-right matrix representation, useful for affine transforms for\n * positioning tiles for drawing\n *\n * @memberof OpenSeadragon\n *\n * @param {Array} [values] - Initial values for the matrix\n *\n **/\nclass Mat3{\n constructor(values){\n if(!values) {\n values = [\n 0, 0, 0,\n 0, 0, 0,\n 0, 0, 0\n ];\n }\n this.values = values;\n }\n\n /**\n * @function makeIdentity\n * @memberof OpenSeadragon.Mat3\n * @static\n * @returns {OpenSeadragon.Mat3} an identity matrix\n */\n static makeIdentity(){\n return new Mat3([\n 1, 0, 0,\n 0, 1, 0,\n 0, 0, 1\n ]);\n }\n\n /**\n * @function makeTranslation\n * @memberof OpenSeadragon.Mat3\n * @static\n * @param {Number} tx The x value of the translation\n * @param {Number} ty The y value of the translation\n * @returns {OpenSeadragon.Mat3} A translation matrix\n */\n static makeTranslation(tx, ty) {\n return new Mat3([\n 1, 0, 0,\n 0, 1, 0,\n tx, ty, 1,\n ]);\n }\n\n /**\n * @function makeRotation\n * @memberof OpenSeadragon.Mat3\n * @static\n * @param {Number} angleInRadians The desired rotation angle, in radians\n * @returns {OpenSeadragon.Mat3} A rotation matrix\n */\n static makeRotation(angleInRadians) {\n var c = Math.cos(angleInRadians);\n var s = Math.sin(angleInRadians);\n return new Mat3([\n c, -s, 0,\n s, c, 0,\n 0, 0, 1,\n ]);\n }\n\n /**\n * @function makeScaling\n * @memberof OpenSeadragon.Mat3\n * @static\n * @param {Number} sx The x value of the scaling\n * @param {Number} sy The y value of the scaling\n * @returns {OpenSeadragon.Mat3} A scaling matrix\n */\n static makeScaling(sx, sy) {\n return new Mat3([\n sx, 0, 0,\n 0, sy, 0,\n 0, 0, 1,\n ]);\n }\n\n /**\n * @alias multiply\n * @memberof! OpenSeadragon.Mat3\n * @param {OpenSeadragon.Mat3} other the matrix to multiply with\n * @returns {OpenSeadragon.Mat3} The result of matrix multiplication\n */\n multiply(other) {\n let a = this.values;\n let b = other.values;\n\n var a00 = a[0 * 3 + 0];\n var a01 = a[0 * 3 + 1];\n var a02 = a[0 * 3 + 2];\n var a10 = a[1 * 3 + 0];\n var a11 = a[1 * 3 + 1];\n var a12 = a[1 * 3 + 2];\n var a20 = a[2 * 3 + 0];\n var a21 = a[2 * 3 + 1];\n var a22 = a[2 * 3 + 2];\n var b00 = b[0 * 3 + 0];\n var b01 = b[0 * 3 + 1];\n var b02 = b[0 * 3 + 2];\n var b10 = b[1 * 3 + 0];\n var b11 = b[1 * 3 + 1];\n var b12 = b[1 * 3 + 2];\n var b20 = b[2 * 3 + 0];\n var b21 = b[2 * 3 + 1];\n var b22 = b[2 * 3 + 2];\n return new Mat3([\n b00 * a00 + b01 * a10 + b02 * a20,\n b00 * a01 + b01 * a11 + b02 * a21,\n b00 * a02 + b01 * a12 + b02 * a22,\n b10 * a00 + b11 * a10 + b12 * a20,\n b10 * a01 + b11 * a11 + b12 * a21,\n b10 * a02 + b11 * a12 + b12 * a22,\n b20 * a00 + b21 * a10 + b22 * a20,\n b20 * a01 + b21 * a11 + b22 * a21,\n b20 * a02 + b21 * a12 + b22 * a22,\n ]);\n }\n}\n\n\n$.Mat3 = Mat3;\n\n}( OpenSeadragon ));\n\n/*\n * OpenSeadragon - full-screen support functions\n *\n * Copyright (C) 2009 CodePlex Foundation\n * Copyright (C) 2010-2024 OpenSeadragon contributors\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n * - Redistributions of source code must retain the above copyright notice,\n * this list of conditions and the following disclaimer.\n *\n * - Redistributions in binary form must reproduce the above copyright\n * notice, this list of conditions and the following disclaimer in the\n * documentation and/or other materials provided with the distribution.\n *\n * - Neither the name of CodePlex Foundation nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\n * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n(function( $ ) {\n /**\n * Determine native full screen support we can get from the browser.\n * @member fullScreenApi\n * @memberof OpenSeadragon\n * @type {object}\n * @property {Boolean} supportsFullScreen Return true if full screen API is supported.\n * @property {Function} isFullScreen Return true if currently in full screen mode.\n * @property {Function} getFullScreenElement Return the element currently in full screen mode.\n * @property {Function} requestFullScreen Make a request to go in full screen mode.\n * @property {Function} exitFullScreen Make a request to exit full screen mode.\n * @property {Function} cancelFullScreen Deprecated, use exitFullScreen instead.\n * @property {String} fullScreenEventName Event fired when the full screen mode change.\n * @property {String} fullScreenErrorEventName Event fired when a request to go\n * in full screen mode failed.\n */\n var fullScreenApi = {\n supportsFullScreen: false,\n isFullScreen: function() { return false; },\n getFullScreenElement: function() { return null; },\n requestFullScreen: function() {},\n exitFullScreen: function() {},\n cancelFullScreen: function() {},\n fullScreenEventName: '',\n fullScreenErrorEventName: ''\n };\n\n // check for native support\n if ( document.exitFullscreen ) {\n // W3C standard\n fullScreenApi.supportsFullScreen = true;\n fullScreenApi.getFullScreenElement = function() {\n return document.fullscreenElement;\n };\n fullScreenApi.requestFullScreen = function( element ) {\n return element.requestFullscreen().catch(function (msg) {\n $.console.error('Fullscreen request failed: ', msg);\n });\n };\n fullScreenApi.exitFullScreen = function() {\n document.exitFullscreen().catch(function (msg) {\n $.console.error('Error while exiting fullscreen: ', msg);\n });\n };\n fullScreenApi.fullScreenEventName = \"fullscreenchange\";\n fullScreenApi.fullScreenErrorEventName = \"fullscreenerror\";\n } else if ( document.msExitFullscreen ) {\n // IE 11\n fullScreenApi.supportsFullScreen = true;\n fullScreenApi.getFullScreenElement = function() {\n return document.msFullscreenElement;\n };\n fullScreenApi.requestFullScreen = function( element ) {\n return element.msRequestFullscreen();\n };\n fullScreenApi.exitFullScreen = function() {\n document.msExitFullscreen();\n };\n fullScreenApi.fullScreenEventName = \"MSFullscreenChange\";\n fullScreenApi.fullScreenErrorEventName = \"MSFullscreenError\";\n } else if ( document.webkitExitFullscreen ) {\n // Recent webkit\n fullScreenApi.supportsFullScreen = true;\n fullScreenApi.getFullScreenElement = function() {\n return document.webkitFullscreenElement;\n };\n fullScreenApi.requestFullScreen = function( element ) {\n return element.webkitRequestFullscreen();\n };\n fullScreenApi.exitFullScreen = function() {\n document.webkitExitFullscreen();\n };\n fullScreenApi.fullScreenEventName = \"webkitfullscreenchange\";\n fullScreenApi.fullScreenErrorEventName = \"webkitfullscreenerror\";\n } else if ( document.webkitCancelFullScreen ) {\n // Old webkit\n fullScreenApi.supportsFullScreen = true;\n fullScreenApi.getFullScreenElement = function() {\n return document.webkitCurrentFullScreenElement;\n };\n fullScreenApi.requestFullScreen = function( element ) {\n return element.webkitRequestFullScreen();\n };\n fullScreenApi.exitFullScreen = function() {\n document.webkitCancelFullScreen();\n };\n fullScreenApi.fullScreenEventName = \"webkitfullscreenchange\";\n fullScreenApi.fullScreenErrorEventName = \"webkitfullscreenerror\";\n } else if ( document.mozCancelFullScreen ) {\n // Firefox\n fullScreenApi.supportsFullScreen = true;\n fullScreenApi.getFullScreenElement = function() {\n return document.mozFullScreenElement;\n };\n fullScreenApi.requestFullScreen = function( element ) {\n return element.mozRequestFullScreen();\n };\n fullScreenApi.exitFullScreen = function() {\n document.mozCancelFullScreen();\n };\n fullScreenApi.fullScreenEventName = \"mozfullscreenchange\";\n fullScreenApi.fullScreenErrorEventName = \"mozfullscreenerror\";\n }\n fullScreenApi.isFullScreen = function() {\n return fullScreenApi.getFullScreenElement() !== null;\n };\n fullScreenApi.cancelFullScreen = function() {\n $.console.error(\"cancelFullScreen is deprecated. Use exitFullScreen instead.\");\n fullScreenApi.exitFullScreen();\n };\n\n // export api\n $.extend( $, fullScreenApi );\n\n})( OpenSeadragon );\n\n/*\n * OpenSeadragon - EventSource\n *\n * Copyright (C) 2009 CodePlex Foundation\n * Copyright (C) 2010-2024 OpenSeadragon contributors\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n * - Redistributions of source code must retain the above copyright notice,\n * this list of conditions and the following disclaimer.\n *\n * - Redistributions in binary form must reproduce the above copyright\n * notice, this list of conditions and the following disclaimer in the\n * documentation and/or other materials provided with the distribution.\n *\n * - Neither the name of CodePlex Foundation nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\n * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n(function($){\n\n/**\n * Event handler method signature used by all OpenSeadragon events.\n *\n * @callback EventHandler\n * @memberof OpenSeadragon\n * @param {Object} event - See individual events for event-specific properties.\n */\n\n\n/**\n * @class EventSource\n * @classdesc For use by classes which want to support custom, non-browser events.\n *\n * @memberof OpenSeadragon\n */\n$.EventSource = function() {\n this.events = {};\n this._rejectedEventList = {};\n};\n\n/** @lends OpenSeadragon.EventSource.prototype */\n$.EventSource.prototype = {\n\n /**\n * Add an event handler to be triggered only once (or a given number of times)\n * for a given event. It is not removable with removeHandler().\n * @function\n * @param {String} eventName - Name of event to register.\n * @param {OpenSeadragon.EventHandler} handler - Function to call when event\n * is triggered.\n * @param {Object} [userData=null] - Arbitrary object to be passed unchanged\n * to the handler.\n * @param {Number} [times=1] - The number of times to handle the event\n * before removing it.\n * @param {Number} [priority=0] - Handler priority. By default, all priorities are 0. Higher number = priority.\n * @returns {Boolean} - True if the handler was added, false if it was rejected\n */\n addOnceHandler: function(eventName, handler, userData, times, priority) {\n var self = this;\n times = times || 1;\n var count = 0;\n var onceHandler = function(event) {\n count++;\n if (count === times) {\n self.removeHandler(eventName, onceHandler);\n }\n return handler(event);\n };\n return this.addHandler(eventName, onceHandler, userData, priority);\n },\n\n /**\n * Add an event handler for a given event.\n * @function\n * @param {String} eventName - Name of event to register.\n * @param {OpenSeadragon.EventHandler} handler - Function to call when event is triggered.\n * @param {Object} [userData=null] - Arbitrary object to be passed unchanged to the handler.\n * @param {Number} [priority=0] - Handler priority. By default, all priorities are 0. Higher number = priority.\n * @returns {Boolean} - True if the handler was added, false if it was rejected\n */\n addHandler: function ( eventName, handler, userData, priority ) {\n\n if(Object.prototype.hasOwnProperty.call(this._rejectedEventList, eventName)){\n $.console.error(`Error adding handler for ${eventName}. ${this._rejectedEventList[eventName]}`);\n return false;\n }\n\n var events = this.events[ eventName ];\n if ( !events ) {\n this.events[ eventName ] = events = [];\n }\n if ( handler && $.isFunction( handler ) ) {\n var index = events.length,\n event = { handler: handler, userData: userData || null, priority: priority || 0 };\n events[ index ] = event;\n while ( index > 0 && events[ index - 1 ].priority < events[ index ].priority ) {\n events[ index ] = events[ index - 1 ];\n events[ index - 1 ] = event;\n index--;\n }\n }\n return true;\n },\n\n /**\n * Remove a specific event handler for a given event.\n * @function\n * @param {String} eventName - Name of event for which the handler is to be removed.\n * @param {OpenSeadragon.EventHandler} handler - Function to be removed.\n */\n removeHandler: function ( eventName, handler ) {\n var events = this.events[ eventName ],\n handlers = [],\n i;\n if ( !events ) {\n return;\n }\n if ( $.isArray( events ) ) {\n for ( i = 0; i < events.length; i++ ) {\n if ( events[i].handler !== handler ) {\n handlers.push( events[ i ] );\n }\n }\n this.events[ eventName ] = handlers;\n }\n },\n\n /**\n * Get the amount of handlers registered for a given event.\n * @param {String} eventName - Name of event to inspect.\n * @returns {number} amount of events\n */\n numberOfHandlers: function (eventName) {\n var events = this.events[ eventName ];\n if ( !events ) {\n return 0;\n }\n return events.length;\n },\n\n /**\n * Remove all event handlers for a given event type. If no type is given all\n * event handlers for every event type are removed.\n * @function\n * @param {String} eventName - Name of event for which all handlers are to be removed.\n */\n removeAllHandlers: function( eventName ) {\n if ( eventName ){\n this.events[ eventName ] = [];\n } else{\n for ( var eventType in this.events ) {\n this.events[ eventType ] = [];\n }\n }\n },\n\n /**\n * Get a function which iterates the list of all handlers registered for a given event, calling the handler for each.\n * @function\n * @param {String} eventName - Name of event to get handlers for.\n */\n getHandler: function ( eventName) {\n var events = this.events[ eventName ];\n if ( !events || !events.length ) {\n return null;\n }\n events = events.length === 1 ?\n [ events[ 0 ] ] :\n Array.apply( null, events );\n return function ( source, args ) {\n var i,\n length = events.length;\n for ( i = 0; i < length; i++ ) {\n if ( events[ i ] ) {\n args.eventSource = source;\n args.userData = events[ i ].userData;\n events[ i ].handler( args );\n }\n }\n };\n },\n\n /**\n * Trigger an event, optionally passing additional information.\n * @function\n * @param {String} eventName - Name of event to register.\n * @param {Object} eventArgs - Event-specific data.\n * @returns {Boolean} True if the event was fired, false if it was rejected because of rejectEventHandler(eventName)\n */\n raiseEvent: function( eventName, eventArgs ) {\n //uncomment if you want to get a log of all events\n //$.console.log( eventName );\n\n if(Object.prototype.hasOwnProperty.call(this._rejectedEventList, eventName)){\n $.console.error(`Error adding handler for ${eventName}. ${this._rejectedEventList[eventName]}`);\n return false;\n }\n\n var handler = this.getHandler( eventName );\n if ( handler ) {\n handler( this, eventArgs || {} );\n }\n return true;\n },\n\n /**\n * Set an event name as being disabled, and provide an optional error message\n * to be printed to the console\n * @param {String} eventName - Name of the event\n * @param {String} [errorMessage] - Optional string to print to the console\n * @private\n */\n rejectEventHandler(eventName, errorMessage = ''){\n this._rejectedEventList[eventName] = errorMessage;\n },\n\n /**\n * Explicitly allow an event handler to be added for this event type, undoing\n * the effects of rejectEventHandler\n * @param {String} eventName - Name of the event\n * @private\n */\n allowEventHandler(eventName){\n delete this._rejectedEventList[eventName];\n }\n\n};\n\n}( OpenSeadragon ));\n\n/*\n * OpenSeadragon - MouseTracker\n *\n * Copyright (C) 2009 CodePlex Foundation\n * Copyright (C) 2010-2024 OpenSeadragon contributors\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n * - Redistributions of source code must retain the above copyright notice,\n * this list of conditions and the following disclaimer.\n *\n * - Redistributions in binary form must reproduce the above copyright\n * notice, this list of conditions and the following disclaimer in the\n * documentation and/or other materials provided with the distribution.\n *\n * - Neither the name of CodePlex Foundation nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\n * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n(function ( $ ) {\n\n // All MouseTracker instances\n var MOUSETRACKERS = [];\n\n // dictionary from hash to private properties\n var THIS = {};\n\n\n /**\n * @class MouseTracker\n * @classdesc Provides simplified handling of common pointer device (mouse, touch, pen, etc.) gestures\n * and keyboard events on a specified element.\n * @memberof OpenSeadragon\n * @param {Object} options\n * Allows configurable properties to be entirely specified by passing\n * an options object to the constructor. The constructor also supports\n * the original positional arguments 'element', 'clickTimeThreshold',\n * and 'clickDistThreshold' in that order.\n * @param {Element|String} options.element\n * A reference to an element or an element id for which the pointer/key\n * events will be monitored.\n * @param {Boolean} [options.startDisabled=false]\n * If true, event tracking on the element will not start until\n * {@link OpenSeadragon.MouseTracker.setTracking|setTracking} is called.\n * @param {Number} [options.clickTimeThreshold=300]\n * The number of milliseconds within which a pointer down-up event combination\n * will be treated as a click gesture.\n * @param {Number} [options.clickDistThreshold=5]\n * The maximum distance allowed between a pointer down event and a pointer up event\n * to be treated as a click gesture.\n * @param {Number} [options.dblClickTimeThreshold=300]\n * The number of milliseconds within which two pointer down-up event combinations\n * will be treated as a double-click gesture.\n * @param {Number} [options.dblClickDistThreshold=20]\n * The maximum distance allowed between two pointer click events\n * to be treated as a click gesture.\n * @param {Number} [options.stopDelay=50]\n * The number of milliseconds without pointer move before the stop\n * event is fired.\n * @param {OpenSeadragon.EventHandler} [options.preProcessEventHandler=null]\n * An optional handler for controlling DOM event propagation and processing.\n * @param {OpenSeadragon.EventHandler} [options.contextMenuHandler=null]\n * An optional handler for contextmenu.\n * @param {OpenSeadragon.EventHandler} [options.enterHandler=null]\n * An optional handler for pointer enter.\n * @param {OpenSeadragon.EventHandler} [options.leaveHandler=null]\n * An optional handler for pointer leave.\n * @param {OpenSeadragon.EventHandler} [options.exitHandler=null]\n * An optional handler for pointer leave. Deprecated. Use leaveHandler instead.\n * @param {OpenSeadragon.EventHandler} [options.overHandler=null]\n * An optional handler for pointer over.\n * @param {OpenSeadragon.EventHandler} [options.outHandler=null]\n * An optional handler for pointer out.\n * @param {OpenSeadragon.EventHandler} [options.pressHandler=null]\n * An optional handler for pointer press.\n * @param {OpenSeadragon.EventHandler} [options.nonPrimaryPressHandler=null]\n * An optional handler for pointer non-primary button press.\n * @param {OpenSeadragon.EventHandler} [options.releaseHandler=null]\n * An optional handler for pointer release.\n * @param {OpenSeadragon.EventHandler} [options.nonPrimaryReleaseHandler=null]\n * An optional handler for pointer non-primary button release.\n * @param {OpenSeadragon.EventHandler} [options.moveHandler=null]\n * An optional handler for pointer move.\n * @param {OpenSeadragon.EventHandler} [options.scrollHandler=null]\n * An optional handler for mouse wheel scroll.\n * @param {OpenSeadragon.EventHandler} [options.clickHandler=null]\n * An optional handler for pointer click.\n * @param {OpenSeadragon.EventHandler} [options.dblClickHandler=null]\n * An optional handler for pointer double-click.\n * @param {OpenSeadragon.EventHandler} [options.dragHandler=null]\n * An optional handler for the drag gesture.\n * @param {OpenSeadragon.EventHandler} [options.dragEndHandler=null]\n * An optional handler for after a drag gesture.\n * @param {OpenSeadragon.EventHandler} [options.pinchHandler=null]\n * An optional handler for the pinch gesture.\n * @param {OpenSeadragon.EventHandler} [options.keyDownHandler=null]\n * An optional handler for keydown.\n * @param {OpenSeadragon.EventHandler} [options.keyUpHandler=null]\n * An optional handler for keyup.\n * @param {OpenSeadragon.EventHandler} [options.keyHandler=null]\n * An optional handler for keypress.\n * @param {OpenSeadragon.EventHandler} [options.focusHandler=null]\n * An optional handler for focus.\n * @param {OpenSeadragon.EventHandler} [options.blurHandler=null]\n * An optional handler for blur.\n * @param {Object} [options.userData=null]\n * Arbitrary object to be passed unchanged to any attached handler methods.\n */\n $.MouseTracker = function ( options ) {\n\n MOUSETRACKERS.push( this );\n\n var args = arguments;\n\n if ( !$.isPlainObject( options ) ) {\n options = {\n element: args[ 0 ],\n clickTimeThreshold: args[ 1 ],\n clickDistThreshold: args[ 2 ]\n };\n }\n\n this.hash = Math.random(); // An unique hash for this tracker.\n /**\n * The element for which pointer events are being monitored.\n * @member {Element} element\n * @memberof OpenSeadragon.MouseTracker#\n */\n this.element = $.getElement( options.element );\n /**\n * The number of milliseconds within which a pointer down-up event combination\n * will be treated as a click gesture.\n * @member {Number} clickTimeThreshold\n * @memberof OpenSeadragon.MouseTracker#\n */\n this.clickTimeThreshold = options.clickTimeThreshold || $.DEFAULT_SETTINGS.clickTimeThreshold;\n /**\n * The maximum distance allowed between a pointer down event and a pointer up event\n * to be treated as a click gesture.\n * @member {Number} clickDistThreshold\n * @memberof OpenSeadragon.MouseTracker#\n */\n this.clickDistThreshold = options.clickDistThreshold || $.DEFAULT_SETTINGS.clickDistThreshold;\n /**\n * The number of milliseconds within which two pointer down-up event combinations\n * will be treated as a double-click gesture.\n * @member {Number} dblClickTimeThreshold\n * @memberof OpenSeadragon.MouseTracker#\n */\n this.dblClickTimeThreshold = options.dblClickTimeThreshold || $.DEFAULT_SETTINGS.dblClickTimeThreshold;\n /**\n * The maximum distance allowed between two pointer click events\n * to be treated as a double-click gesture.\n * @member {Number} dblClickDistThreshold\n * @memberof OpenSeadragon.MouseTracker#\n */\n this.dblClickDistThreshold = options.dblClickDistThreshold || $.DEFAULT_SETTINGS.dblClickDistThreshold;\n /*eslint-disable no-multi-spaces*/\n this.userData = options.userData || null;\n this.stopDelay = options.stopDelay || 50;\n\n this.preProcessEventHandler = options.preProcessEventHandler || null;\n this.contextMenuHandler = options.contextMenuHandler || null;\n this.enterHandler = options.enterHandler || null;\n this.leaveHandler = options.leaveHandler || null;\n this.exitHandler = options.exitHandler || null; // Deprecated v2.5.0\n this.overHandler = options.overHandler || null;\n this.outHandler = options.outHandler || null;\n this.pressHandler = options.pressHandler || null;\n this.nonPrimaryPressHandler = options.nonPrimaryPressHandler || null;\n this.releaseHandler = options.releaseHandler || null;\n this.nonPrimaryReleaseHandler = options.nonPrimaryReleaseHandler || null;\n this.moveHandler = options.moveHandler || null;\n this.scrollHandler = options.scrollHandler || null;\n this.clickHandler = options.clickHandler || null;\n this.dblClickHandler = options.dblClickHandler || null;\n this.dragHandler = options.dragHandler || null;\n this.dragEndHandler = options.dragEndHandler || null;\n this.pinchHandler = options.pinchHandler || null;\n this.stopHandler = options.stopHandler || null;\n this.keyDownHandler = options.keyDownHandler || null;\n this.keyUpHandler = options.keyUpHandler || null;\n this.keyHandler = options.keyHandler || null;\n this.focusHandler = options.focusHandler || null;\n this.blurHandler = options.blurHandler || null;\n /*eslint-enable no-multi-spaces*/\n\n //Store private properties in a scope sealed hash map\n var _this = this;\n\n /**\n * @private\n * @property {Boolean} tracking\n * Are we currently tracking pointer events for this element.\n */\n THIS[ this.hash ] = {\n click: function ( event ) { onClick( _this, event ); },\n dblclick: function ( event ) { onDblClick( _this, event ); },\n keydown: function ( event ) { onKeyDown( _this, event ); },\n keyup: function ( event ) { onKeyUp( _this, event ); },\n keypress: function ( event ) { onKeyPress( _this, event ); },\n focus: function ( event ) { onFocus( _this, event ); },\n blur: function ( event ) { onBlur( _this, event ); },\n contextmenu: function ( event ) { onContextMenu( _this, event ); },\n\n wheel: function ( event ) { onWheel( _this, event ); },\n mousewheel: function ( event ) { onMouseWheel( _this, event ); },\n DOMMouseScroll: function ( event ) { onMouseWheel( _this, event ); },\n MozMousePixelScroll: function ( event ) { onMouseWheel( _this, event ); },\n\n losecapture: function ( event ) { onLoseCapture( _this, event ); },\n\n mouseenter: function ( event ) { onPointerEnter( _this, event ); },\n mouseleave: function ( event ) { onPointerLeave( _this, event ); },\n mouseover: function ( event ) { onPointerOver( _this, event ); },\n mouseout: function ( event ) { onPointerOut( _this, event ); },\n mousedown: function ( event ) { onPointerDown( _this, event ); },\n mouseup: function ( event ) { onPointerUp( _this, event ); },\n mousemove: function ( event ) { onPointerMove( _this, event ); },\n\n touchstart: function ( event ) { onTouchStart( _this, event ); },\n touchend: function ( event ) { onTouchEnd( _this, event ); },\n touchmove: function ( event ) { onTouchMove( _this, event ); },\n touchcancel: function ( event ) { onTouchCancel( _this, event ); },\n\n gesturestart: function ( event ) { onGestureStart( _this, event ); }, // Safari/Safari iOS\n gesturechange: function ( event ) { onGestureChange( _this, event ); }, // Safari/Safari iOS\n\n gotpointercapture: function ( event ) { onGotPointerCapture( _this, event ); },\n lostpointercapture: function ( event ) { onLostPointerCapture( _this, event ); },\n pointerenter: function ( event ) { onPointerEnter( _this, event ); },\n pointerleave: function ( event ) { onPointerLeave( _this, event ); },\n pointerover: function ( event ) { onPointerOver( _this, event ); },\n pointerout: function ( event ) { onPointerOut( _this, event ); },\n pointerdown: function ( event ) { onPointerDown( _this, event ); },\n pointerup: function ( event ) { onPointerUp( _this, event ); },\n pointermove: function ( event ) { onPointerMove( _this, event ); },\n pointercancel: function ( event ) { onPointerCancel( _this, event ); },\n pointerupcaptured: function ( event ) { onPointerUpCaptured( _this, event ); },\n pointermovecaptured: function ( event ) { onPointerMoveCaptured( _this, event ); },\n\n tracking: false,\n\n // Active pointers lists. Array of GesturePointList objects, one for each pointer device type.\n // GesturePointList objects are added each time a pointer is tracked by a new pointer device type (see getActivePointersListByType()).\n // Active pointers are any pointer being tracked for this element which are in the hit-test area\n // of the element (for hover-capable devices) and/or have contact or a button press initiated in the element.\n activePointersLists: [],\n\n // Tracking for double-click gesture\n lastClickPos: null,\n dblClickTimeOut: null,\n\n // Tracking for pinch gesture\n pinchGPoints: [],\n lastPinchDist: 0,\n currentPinchDist: 0,\n lastPinchCenter: null,\n currentPinchCenter: null,\n\n // Tracking for drag\n sentDragEvent: false\n };\n\n this.hasGestureHandlers = !!( this.pressHandler || this.nonPrimaryPressHandler ||\n this.releaseHandler || this.nonPrimaryReleaseHandler ||\n this.clickHandler || this.dblClickHandler ||\n this.dragHandler || this.dragEndHandler ||\n this.pinchHandler );\n this.hasScrollHandler = !!this.scrollHandler;\n\n if ( $.MouseTracker.havePointerEvents ) {\n $.setElementPointerEvents( this.element, 'auto' );\n }\n\n if (this.exitHandler) {\n $.console.error(\"MouseTracker.exitHandler is deprecated. Use MouseTracker.leaveHandler instead.\");\n }\n\n if ( !options.startDisabled ) {\n this.setTracking( true );\n }\n };\n\n /** @lends OpenSeadragon.MouseTracker.prototype */\n $.MouseTracker.prototype = {\n\n /**\n * Clean up any events or objects created by the tracker.\n * @function\n */\n destroy: function () {\n var i;\n\n stopTracking( this );\n this.element = null;\n\n for ( i = 0; i < MOUSETRACKERS.length; i++ ) {\n if ( MOUSETRACKERS[ i ] === this ) {\n MOUSETRACKERS.splice( i, 1 );\n break;\n }\n }\n\n THIS[ this.hash ] = null;\n delete THIS[ this.hash ];\n },\n\n /**\n * Are we currently tracking events on this element.\n * @deprecated Just use this.tracking\n * @function\n * @returns {Boolean} Are we currently tracking events on this element.\n */\n isTracking: function () {\n return THIS[ this.hash ].tracking;\n },\n\n /**\n * Enable or disable whether or not we are tracking events on this element.\n * @function\n * @param {Boolean} track True to start tracking, false to stop tracking.\n * @returns {OpenSeadragon.MouseTracker} Chainable.\n */\n setTracking: function ( track ) {\n if ( track ) {\n startTracking( this );\n } else {\n stopTracking( this );\n }\n //chain\n return this;\n },\n\n /**\n * Returns the {@link OpenSeadragon.MouseTracker.GesturePointList|GesturePointList} for the given pointer device type,\n * creating and caching a new {@link OpenSeadragon.MouseTracker.GesturePointList|GesturePointList} if one doesn't already exist for the type.\n * @function\n * @param {String} type - The pointer device type: \"mouse\", \"touch\", \"pen\", etc.\n * @returns {OpenSeadragon.MouseTracker.GesturePointList}\n */\n getActivePointersListByType: function ( type ) {\n var delegate = THIS[ this.hash ],\n i,\n len = delegate ? delegate.activePointersLists.length : 0,\n list;\n\n for ( i = 0; i < len; i++ ) {\n if ( delegate.activePointersLists[ i ].type === type ) {\n return delegate.activePointersLists[ i ];\n }\n }\n\n list = new $.MouseTracker.GesturePointList( type );\n if(delegate){\n delegate.activePointersLists.push( list );\n }\n return list;\n },\n\n /**\n * Returns the total number of pointers currently active on the tracked element.\n * @function\n * @returns {Number}\n */\n getActivePointerCount: function () {\n var delegate = THIS[ this.hash ],\n i,\n len = delegate.activePointersLists.length,\n count = 0;\n\n for ( i = 0; i < len; i++ ) {\n count += delegate.activePointersLists[ i ].getLength();\n }\n\n return count;\n },\n\n /**\n * Implement or assign implementation to these handlers during or after\n * calling the constructor.\n * @function\n * @param {OpenSeadragon.MouseTracker.EventProcessInfo} eventInfo\n */\n preProcessEventHandler: function () { },\n\n /**\n * Implement or assign implementation to these handlers during or after\n * calling the constructor.\n * @function\n * @param {Object} event\n * @param {OpenSeadragon.MouseTracker} event.eventSource\n * A reference to the tracker instance.\n * @param {OpenSeadragon.Point} event.position\n * The position of the event relative to the tracked element.\n * @param {Object} event.originalEvent\n * The original event object.\n * @param {Boolean} event.preventDefault\n * Set to true to prevent the default user-agent's handling of the contextmenu event.\n * @param {Object} event.userData\n * Arbitrary user-defined object.\n */\n contextMenuHandler: function () { },\n\n /**\n * Implement or assign implementation to these handlers during or after\n * calling the constructor.\n * @function\n * @param {Object} event\n * @param {OpenSeadragon.MouseTracker} event.eventSource\n * A reference to the tracker instance.\n * @param {String} event.pointerType\n * \"mouse\", \"touch\", \"pen\", etc.\n * @param {OpenSeadragon.Point} event.position\n * The position of the event relative to the tracked element.\n * @param {Number} event.buttons\n * Current buttons pressed.\n * Combination of bit flags 0: none, 1: primary (or touch contact), 2: secondary, 4: aux (often middle), 8: X1 (often back), 16: X2 (often forward), 32: pen eraser.\n * @param {Number} event.pointers\n * Number of pointers (all types) active in the tracked element.\n * @param {Boolean} event.insideElementPressed\n * True if the left mouse button is currently being pressed and was\n * initiated inside the tracked element, otherwise false.\n * @param {Boolean} event.buttonDownAny\n * Was the button down anywhere in the screen during the event. Deprecated. Use buttons instead.\n * @param {Boolean} event.isTouchEvent\n * True if the original event is a touch event, otherwise false. Deprecated. Use pointerType and/or originalEvent instead.\n * @param {Object} event.originalEvent\n * The original event object.\n * @param {Object} event.userData\n * Arbitrary user-defined object.\n */\n enterHandler: function () { },\n\n /**\n * Implement or assign implementation to these handlers during or after\n * calling the constructor.\n * @function\n * @since v2.5.0\n * @param {Object} event\n * @param {OpenSeadragon.MouseTracker} event.eventSource\n * A reference to the tracker instance.\n * @param {String} event.pointerType\n * \"mouse\", \"touch\", \"pen\", etc.\n * @param {OpenSeadragon.Point} event.position\n * The position of the event relative to the tracked element.\n * @param {Number} event.buttons\n * Current buttons pressed.\n * Combination of bit flags 0: none, 1: primary (or touch contact), 2: secondary, 4: aux (often middle), 8: X1 (often back), 16: X2 (often forward), 32: pen eraser.\n * @param {Number} event.pointers\n * Number of pointers (all types) active in the tracked element.\n * @param {Boolean} event.insideElementPressed\n * True if the left mouse button is currently being pressed and was\n * initiated inside the tracked element, otherwise false.\n * @param {Boolean} event.buttonDownAny\n * Was the button down anywhere in the screen during the event. Deprecated. Use buttons instead.\n * @param {Boolean} event.isTouchEvent\n * True if the original event is a touch event, otherwise false. Deprecated. Use pointerType and/or originalEvent instead.\n * @param {Object} event.originalEvent\n * The original event object.\n * @param {Object} event.userData\n * Arbitrary user-defined object.\n */\n leaveHandler: function () { },\n\n /**\n * Implement or assign implementation to these handlers during or after\n * calling the constructor.\n * @function\n * @deprecated v2.5.0 Use leaveHandler instead\n * @param {Object} event\n * @param {OpenSeadragon.MouseTracker} event.eventSource\n * A reference to the tracker instance.\n * @param {String} event.pointerType\n * \"mouse\", \"touch\", \"pen\", etc.\n * @param {OpenSeadragon.Point} event.position\n * The position of the event relative to the tracked element.\n * @param {Number} event.buttons\n * Current buttons pressed.\n * Combination of bit flags 0: none, 1: primary (or touch contact), 2: secondary, 4: aux (often middle), 8: X1 (often back), 16: X2 (often forward), 32: pen eraser.\n * @param {Number} event.pointers\n * Number of pointers (all types) active in the tracked element.\n * @param {Boolean} event.insideElementPressed\n * True if the left mouse button is currently being pressed and was\n * initiated inside the tracked element, otherwise false.\n * @param {Boolean} event.buttonDownAny\n * Was the button down anywhere in the screen during the event. Deprecated. Use buttons instead.\n * @param {Boolean} event.isTouchEvent\n * True if the original event is a touch event, otherwise false. Deprecated. Use pointerType and/or originalEvent instead.\n * @param {Object} event.originalEvent\n * The original event object.\n * @param {Object} event.userData\n * Arbitrary user-defined object.\n */\n exitHandler: function () { },\n\n /**\n * Implement or assign implementation to these handlers during or after\n * calling the constructor.\n * @function\n * @since v2.5.0\n * @param {Object} event\n * @param {OpenSeadragon.MouseTracker} event.eventSource\n * A reference to the tracker instance.\n * @param {String} event.pointerType\n * \"mouse\", \"touch\", \"pen\", etc.\n * @param {OpenSeadragon.Point} event.position\n * The position of the event relative to the tracked element.\n * @param {Number} event.buttons\n * Current buttons pressed.\n * Combination of bit flags 0: none, 1: primary (or touch contact), 2: secondary, 4: aux (often middle), 8: X1 (often back), 16: X2 (often forward), 32: pen eraser.\n * @param {Number} event.pointers\n * Number of pointers (all types) active in the tracked element.\n * @param {Boolean} event.insideElementPressed\n * True if the left mouse button is currently being pressed and was\n * initiated inside the tracked element, otherwise false.\n * @param {Boolean} event.buttonDownAny\n * Was the button down anywhere in the screen during the event. Deprecated. Use buttons instead.\n * @param {Boolean} event.isTouchEvent\n * True if the original event is a touch event, otherwise false. Deprecated. Use pointerType and/or originalEvent instead.\n * @param {Object} event.originalEvent\n * The original event object.\n * @param {Object} event.userData\n * Arbitrary user-defined object.\n */\n overHandler: function () { },\n\n /**\n * Implement or assign implementation to these handlers during or after\n * calling the constructor.\n * @function\n * @since v2.5.0\n * @param {Object} event\n * @param {OpenSeadragon.MouseTracker} event.eventSource\n * A reference to the tracker instance.\n * @param {String} event.pointerType\n * \"mouse\", \"touch\", \"pen\", etc.\n * @param {OpenSeadragon.Point} event.position\n * The position of the event relative to the tracked element.\n * @param {Number} event.buttons\n * Current buttons pressed.\n * Combination of bit flags 0: none, 1: primary (or touch contact), 2: secondary, 4: aux (often middle), 8: X1 (often back), 16: X2 (often forward), 32: pen eraser.\n * @param {Number} event.pointers\n * Number of pointers (all types) active in the tracked element.\n * @param {Boolean} event.insideElementPressed\n * True if the left mouse button is currently being pressed and was\n * initiated inside the tracked element, otherwise false.\n * @param {Boolean} event.buttonDownAny\n * Was the button down anywhere in the screen during the event. Deprecated. Use buttons instead.\n * @param {Boolean} event.isTouchEvent\n * True if the original event is a touch event, otherwise false. Deprecated. Use pointerType and/or originalEvent instead.\n * @param {Object} event.originalEvent\n * The original event object.\n * @param {Object} event.userData\n * Arbitrary user-defined object.\n */\n outHandler: function () { },\n\n /**\n * Implement or assign implementation to these handlers during or after\n * calling the constructor.\n * @function\n * @param {Object} event\n * @param {OpenSeadragon.MouseTracker} event.eventSource\n * A reference to the tracker instance.\n * @param {String} event.pointerType\n * \"mouse\", \"touch\", \"pen\", etc.\n * @param {OpenSeadragon.Point} event.position\n * The position of the event relative to the tracked element.\n * @param {Number} event.buttons\n * Current buttons pressed.\n * Combination of bit flags 0: none, 1: primary (or touch contact), 2: secondary, 4: aux (often middle), 8: X1 (often back), 16: X2 (often forward), 32: pen eraser.\n * @param {Boolean} event.isTouchEvent\n * True if the original event is a touch event, otherwise false. Deprecated. Use pointerType and/or originalEvent instead.\n * @param {Object} event.originalEvent\n * The original event object.\n * @param {Object} event.userData\n * Arbitrary user-defined object.\n */\n pressHandler: function () { },\n\n /**\n * Implement or assign implementation to these handlers during or after\n * calling the constructor.\n * @function\n * @param {Object} event\n * @param {OpenSeadragon.MouseTracker} event.eventSource\n * A reference to the tracker instance.\n * @param {String} event.pointerType\n * \"mouse\", \"touch\", \"pen\", etc.\n * @param {OpenSeadragon.Point} event.position\n * The position of the event relative to the tracked element.\n * @param {Number} event.button\n * Button which caused the event.\n * -1: none, 0: primary/left, 1: aux/middle, 2: secondary/right, 3: X1/back, 4: X2/forward, 5: pen eraser.\n * @param {Number} event.buttons\n * Current buttons pressed.\n * Combination of bit flags 0: none, 1: primary (or touch contact), 2: secondary, 4: aux (often middle), 8: X1 (often back), 16: X2 (often forward), 32: pen eraser.\n * @param {Boolean} event.isTouchEvent\n * True if the original event is a touch event, otherwise false. Deprecated. Use pointerType and/or originalEvent instead.\n * @param {Object} event.originalEvent\n * The original event object.\n * @param {Object} event.userData\n * Arbitrary user-defined object.\n */\n nonPrimaryPressHandler: function () { },\n\n /**\n * Implement or assign implementation to these handlers during or after\n * calling the constructor.\n * @function\n * @param {Object} event\n * @param {OpenSeadragon.MouseTracker} event.eventSource\n * A reference to the tracker instance.\n * @param {String} event.pointerType\n * \"mouse\", \"touch\", \"pen\", etc.\n * @param {OpenSeadragon.Point} event.position\n * The position of the event relative to the tracked element.\n * @param {Number} event.buttons\n * Current buttons pressed.\n * Combination of bit flags 0: none, 1: primary (or touch contact), 2: secondary, 4: aux (often middle), 8: X1 (often back), 16: X2 (often forward), 32: pen eraser.\n * @param {Boolean} event.insideElementPressed\n * True if the left mouse button is currently being pressed and was\n * initiated inside the tracked element, otherwise false.\n * @param {Boolean} event.insideElementReleased\n * True if the cursor inside the tracked element when the button was released.\n * @param {Boolean} event.isTouchEvent\n * True if the original event is a touch event, otherwise false. Deprecated. Use pointerType and/or originalEvent instead.\n * @param {Object} event.originalEvent\n * The original event object.\n * @param {Object} event.userData\n * Arbitrary user-defined object.\n */\n releaseHandler: function () { },\n\n /**\n * Implement or assign implementation to these handlers during or after\n * calling the constructor.\n * @function\n * @param {Object} event\n * @param {OpenSeadragon.MouseTracker} event.eventSource\n * A reference to the tracker instance.\n * @param {String} event.pointerType\n * \"mouse\", \"touch\", \"pen\", etc.\n * @param {OpenSeadragon.Point} event.position\n * The position of the event relative to the tracked element.\n * @param {Number} event.button\n * Button which caused the event.\n * -1: none, 0: primary/left, 1: aux/middle, 2: secondary/right, 3: X1/back, 4: X2/forward, 5: pen eraser.\n * @param {Number} event.buttons\n * Current buttons pressed.\n * Combination of bit flags 0: none, 1: primary (or touch contact), 2: secondary, 4: aux (often middle), 8: X1 (often back), 16: X2 (often forward), 32: pen eraser.\n * @param {Boolean} event.isTouchEvent\n * True if the original event is a touch event, otherwise false. Deprecated. Use pointerType and/or originalEvent instead.\n * @param {Object} event.originalEvent\n * The original event object.\n * @param {Object} event.userData\n * Arbitrary user-defined object.\n */\n nonPrimaryReleaseHandler: function () { },\n\n /**\n * Implement or assign implementation to these handlers during or after\n * calling the constructor.\n * @function\n * @param {Object} event\n * @param {OpenSeadragon.MouseTracker} event.eventSource\n * A reference to the tracker instance.\n * @param {String} event.pointerType\n * \"mouse\", \"touch\", \"pen\", etc.\n * @param {OpenSeadragon.Point} event.position\n * The position of the event relative to the tracked element.\n * @param {Number} event.buttons\n * Current buttons pressed.\n * Combination of bit flags 0: none, 1: primary (or touch contact), 2: secondary, 4: aux (often middle), 8: X1 (often back), 16: X2 (often forward), 32: pen eraser.\n * @param {Boolean} event.isTouchEvent\n * True if the original event is a touch event, otherwise false. Deprecated. Use pointerType and/or originalEvent instead.\n * @param {Object} event.originalEvent\n * The original event object.\n * @param {Object} event.userData\n * Arbitrary user-defined object.\n */\n moveHandler: function () { },\n\n /**\n * Implement or assign implementation to these handlers during or after\n * calling the constructor.\n * @function\n * @param {Object} event\n * @param {OpenSeadragon.MouseTracker} event.eventSource\n * A reference to the tracker instance.\n * @param {String} event.pointerType\n * \"mouse\", \"touch\", \"pen\", etc.\n * @param {OpenSeadragon.Point} event.position\n * The position of the event relative to the tracked element.\n * @param {Number} event.scroll\n * The scroll delta for the event.\n * @param {Boolean} event.shift\n * True if the shift key was pressed during this event.\n * @param {Boolean} event.isTouchEvent\n * True if the original event is a touch event, otherwise false. Deprecated. Use pointerType and/or originalEvent instead. Touch devices no longer generate scroll event.\n * @param {Object} event.originalEvent\n * The original event object.\n * @param {Boolean} event.preventDefault\n * Set to true to prevent the default user-agent's handling of the wheel event.\n * @param {Object} event.userData\n * Arbitrary user-defined object.\n */\n scrollHandler: function () { },\n\n /**\n * Implement or assign implementation to these handlers during or after\n * calling the constructor.\n * @function\n * @param {Object} event\n * @param {OpenSeadragon.MouseTracker} event.eventSource\n * A reference to the tracker instance.\n * @param {String} event.pointerType\n * \"mouse\", \"touch\", \"pen\", etc.\n * @param {OpenSeadragon.Point} event.position\n * The position of the event relative to the tracked element.\n * @param {Boolean} event.quick\n * True only if the clickDistThreshold and clickTimeThreshold are both passed. Useful for ignoring drag events.\n * @param {Boolean} event.shift\n * True if the shift key was pressed during this event.\n * @param {Boolean} event.isTouchEvent\n * True if the original event is a touch event, otherwise false. Deprecated. Use pointerType and/or originalEvent instead.\n * @param {Object} event.originalEvent\n * The original event object.\n * @param {Element} event.originalTarget\n * The DOM element clicked on.\n * @param {Object} event.userData\n * Arbitrary user-defined object.\n */\n clickHandler: function () { },\n\n /**\n * Implement or assign implementation to these handlers during or after\n * calling the constructor.\n * @function\n * @param {Object} event\n * @param {OpenSeadragon.MouseTracker} event.eventSource\n * A reference to the tracker instance.\n * @param {String} event.pointerType\n * \"mouse\", \"touch\", \"pen\", etc.\n * @param {OpenSeadragon.Point} event.position\n * The position of the event relative to the tracked element.\n * @param {Boolean} event.shift\n * True if the shift key was pressed during this event.\n * @param {Boolean} event.isTouchEvent\n * True if the original event is a touch event, otherwise false. Deprecated. Use pointerType and/or originalEvent instead.\n * @param {Object} event.originalEvent\n * The original event object.\n * @param {Object} event.userData\n * Arbitrary user-defined object.\n */\n dblClickHandler: function () { },\n\n /**\n * Implement or assign implementation to these handlers during or after\n * calling the constructor.\n * @function\n * @param {Object} event\n * @param {OpenSeadragon.MouseTracker} event.eventSource\n * A reference to the tracker instance.\n * @param {String} event.pointerType\n * \"mouse\", \"touch\", \"pen\", etc.\n * @param {OpenSeadragon.Point} event.position\n * The position of the event relative to the tracked element.\n * @param {Number} event.buttons\n * Current buttons pressed.\n * Combination of bit flags 0: none, 1: primary (or touch contact), 2: secondary, 4: aux (often middle), 8: X1 (often back), 16: X2 (often forward), 32: pen eraser.\n * @param {OpenSeadragon.Point} event.delta\n * The x,y components of the difference between the current position and the last drag event position. Useful for ignoring or weighting the events.\n * @param {Number} event.speed\n * Current computed speed, in pixels per second.\n * @param {Number} event.direction\n * Current computed direction, expressed as an angle counterclockwise relative to the positive X axis (-pi to pi, in radians). Only valid if speed > 0.\n * @param {Boolean} event.shift\n * True if the shift key was pressed during this event.\n * @param {Boolean} event.isTouchEvent\n * True if the original event is a touch event, otherwise false. Deprecated. Use pointerType and/or originalEvent instead.\n * @param {Object} event.originalEvent\n * The original event object.\n * @param {Object} event.userData\n * Arbitrary user-defined object.\n */\n dragHandler: function () { },\n\n /**\n * Implement or assign implementation to these handlers during or after\n * calling the constructor.\n * @function\n * @param {Object} event\n * @param {OpenSeadragon.MouseTracker} event.eventSource\n * A reference to the tracker instance.\n * @param {String} event.pointerType\n * \"mouse\", \"touch\", \"pen\", etc.\n * @param {OpenSeadragon.Point} event.position\n * The position of the event relative to the tracked element.\n * @param {Number} event.speed\n * Speed at the end of a drag gesture, in pixels per second.\n * @param {Number} event.direction\n * Direction at the end of a drag gesture, expressed as an angle counterclockwise relative to the positive X axis (-pi to pi, in radians). Only valid if speed > 0.\n * @param {Boolean} event.shift\n * True if the shift key was pressed during this event.\n * @param {Boolean} event.isTouchEvent\n * True if the original event is a touch event, otherwise false. Deprecated. Use pointerType and/or originalEvent instead.\n * @param {Object} event.originalEvent\n * The original event object.\n * @param {Object} event.userData\n * Arbitrary user-defined object.\n */\n dragEndHandler: function () { },\n\n /**\n * Implement or assign implementation to these handlers during or after\n * calling the constructor.\n * @function\n * @param {Object} event\n * @param {OpenSeadragon.MouseTracker} event.eventSource\n * A reference to the tracker instance.\n * @param {String} event.pointerType\n * \"mouse\", \"touch\", \"pen\", etc.\n * @param {Array.var viewer = new OpenSeadragon.Viewer(options);
var viewer = OpenSeadragon(options);
rendered
is the context with the pre-drawn image.\n * @param {Float} [scale=1] - Apply a scale to tile position and size. Defaults to 1.\n * @param {OpenSeadragon.Point} [translate] A translation vector to offset tile position\n * @param {Boolean} [shouldRoundPositionAndSize] - Tells whether to round\n * position and size of tiles supporting alpha channel in non-transparency\n * context.\n * @param {OpenSeadragon.TileSource} source - The source specification of the tile.\n */\n _drawTile( tile, tiledImage, useSketch, scale, translate, shouldRoundPositionAndSize, source) {\n $.console.assert(tile, '[Drawer._drawTile] tile is required');\n $.console.assert(tiledImage, '[Drawer._drawTile] drawingHandler is required');\n\n var context = this._getContext(useSketch);\n scale = scale || 1;\n this._drawTileToCanvas(tile, context, tiledImage, scale, translate, shouldRoundPositionAndSize, source);\n\n }\n\n /**\n * Renders the tile in a canvas-based context.\n * @private\n * @function\n * @param {OpenSeadragon.Tile} tile - the tile to draw to the canvas\n * @param {Canvas} context\n * @param {OpenSeadragon.TiledImage} tiledImage - Method for firing the drawing event.\n * drawingHandler({context, tile, rendered})\n * where rendered
is the context with the pre-drawn image.\n * @param {Number} [scale=1] - Apply a scale to position and size\n * @param {OpenSeadragon.Point} [translate] - A translation vector\n * @param {Boolean} [shouldRoundPositionAndSize] - Tells whether to round\n * position and size of tiles supporting alpha channel in non-transparency\n * context.\n * @param {OpenSeadragon.TileSource} source - The source specification of the tile.\n */\n _drawTileToCanvas( tile, context, tiledImage, scale, translate, shouldRoundPositionAndSize, source) {\n\n var position = tile.position.times($.pixelDensityRatio),\n size = tile.size.times($.pixelDensityRatio),\n rendered;\n\n if (!tile.context2D && !tile.cacheImageRecord) {\n $.console.warn(\n '[Drawer._drawTileToCanvas] attempting to draw tile %s when it\\'s not cached',\n tile.toString());\n return;\n }\n\n rendered = tile.getCanvasContext();\n\n if ( !tile.loaded || !rendered ){\n $.console.warn(\n \"Attempting to draw tile %s when it's not yet loaded.\",\n tile.toString()\n );\n\n return;\n }\n\n context.save();\n\n if (typeof scale === 'number' && scale !== 1) {\n // draw tile at a different scale\n position = position.times(scale);\n size = size.times(scale);\n }\n\n if (translate instanceof $.Point) {\n // shift tile position slightly\n position = position.plus(translate);\n }\n\n //if we are supposed to be rendering fully opaque rectangle,\n //ie its done fading or fading is turned off, and if we are drawing\n //an image with an alpha channel, then the only way\n //to avoid seeing the tile underneath is to clear the rectangle\n if (context.globalAlpha === 1 && tile.hasTransparency) {\n if (shouldRoundPositionAndSize) {\n // Round to the nearest whole pixel so we don't get seams from overlap.\n position.x = Math.round(position.x);\n position.y = Math.round(position.y);\n size.x = Math.round(size.x);\n size.y = Math.round(size.y);\n }\n\n //clearing only the inside of the rectangle occupied\n //by the png prevents edge flikering\n context.clearRect(\n position.x,\n position.y,\n size.x,\n size.y\n );\n }\n\n this._raiseTileDrawingEvent(tiledImage, context, tile, rendered);\n\n var sourceWidth, sourceHeight;\n if (tile.sourceBounds) {\n sourceWidth = Math.min(tile.sourceBounds.width, rendered.canvas.width);\n sourceHeight = Math.min(tile.sourceBounds.height, rendered.canvas.height);\n } else {\n sourceWidth = rendered.canvas.width;\n sourceHeight = rendered.canvas.height;\n }\n\n context.translate(position.x + size.x / 2, 0);\n if (tile.flipped) {\n context.scale(-1, 1);\n }\n context.drawImage(\n rendered.canvas,\n 0,\n 0,\n sourceWidth,\n sourceHeight,\n -size.x / 2,\n position.y,\n size.x,\n size.y\n );\n\n context.restore();\n }\n\n /**\n * Get the context of the main or sketch canvas\n * @private\n * @param {Boolean} useSketch\n * @returns {CanvasRenderingContext2D}\n */\n _getContext( useSketch ) {\n var context = this.context;\n if ( useSketch ) {\n if (this.sketchCanvas === null) {\n this.sketchCanvas = document.createElement( \"canvas\" );\n var sketchCanvasSize = this._calculateSketchCanvasSize();\n this.sketchCanvas.width = sketchCanvasSize.x;\n this.sketchCanvas.height = sketchCanvasSize.y;\n this.sketchContext = this.sketchCanvas.getContext( \"2d\" );\n\n // If the viewport is not currently rotated, the sketchCanvas\n // will have the same size as the main canvas. However, if\n // the viewport get rotated later on, we will need to resize it.\n if (this.viewport.getRotation() === 0) {\n var self = this;\n this.viewer.addHandler('rotate', function resizeSketchCanvas() {\n if (self.viewport.getRotation() === 0) {\n return;\n }\n self.viewer.removeHandler('rotate', resizeSketchCanvas);\n var sketchCanvasSize = self._calculateSketchCanvasSize();\n self.sketchCanvas.width = sketchCanvasSize.x;\n self.sketchCanvas.height = sketchCanvasSize.y;\n });\n }\n this._updateImageSmoothingEnabled(this.sketchContext);\n }\n context = this.sketchContext;\n }\n return context;\n }\n\n /**\n * Save the context of the main or sketch canvas\n * @private\n * @param {Boolean} useSketch\n */\n _saveContext( useSketch ) {\n this._getContext( useSketch ).save();\n }\n\n /**\n * Restore the context of the main or sketch canvas\n * @private\n * @param {Boolean} useSketch\n */\n _restoreContext( useSketch ) {\n this._getContext( useSketch ).restore();\n }\n\n // private\n _setClip(rect, useSketch) {\n var context = this._getContext( useSketch );\n context.beginPath();\n context.rect(rect.x, rect.y, rect.width, rect.height);\n context.clip();\n }\n\n // private\n // used to draw a placeholder rectangle\n _drawRectangle(rect, fillStyle, useSketch) {\n var context = this._getContext( useSketch );\n context.save();\n context.fillStyle = fillStyle;\n context.fillRect(rect.x, rect.y, rect.width, rect.height);\n context.restore();\n }\n\n /**\n * Blends the sketch canvas in the main canvas.\n * @param {Object} options The options\n * @param {Float} options.opacity The opacity of the blending.\n * @param {Float} [options.scale=1] The scale at which tiles were drawn on\n * the sketch. Default is 1.\n * Use scale to draw at a lower scale and then enlarge onto the main canvas.\n * @param {OpenSeadragon.Point} [options.translate] A translation vector\n * that was used to draw the tiles\n * @param {String} [options.compositeOperation] - How the image is\n * composited onto other images; see compositeOperation in\n * {@link OpenSeadragon.Options} for possible values.\n * @param {OpenSeadragon.Rect} [options.bounds] The part of the sketch\n * canvas to blend in the main canvas. If specified, options.scale and\n * options.translate get ignored.\n */\n blendSketch(opacity, scale, translate, compositeOperation) {\n var options = opacity;\n if (!$.isPlainObject(options)) {\n options = {\n opacity: opacity,\n scale: scale,\n translate: translate,\n compositeOperation: compositeOperation\n };\n }\n\n opacity = options.opacity;\n compositeOperation = options.compositeOperation;\n var bounds = options.bounds;\n\n this.context.save();\n this.context.globalAlpha = opacity;\n if (compositeOperation) {\n this.context.globalCompositeOperation = compositeOperation;\n }\n if (bounds) {\n // Internet Explorer, Microsoft Edge, and Safari have problems\n // when you call context.drawImage with negative x or y\n // or x + width or y + height greater than the canvas width or height respectively.\n if (bounds.x < 0) {\n bounds.width += bounds.x;\n bounds.x = 0;\n }\n if (bounds.x + bounds.width > this.canvas.width) {\n bounds.width = this.canvas.width - bounds.x;\n }\n if (bounds.y < 0) {\n bounds.height += bounds.y;\n bounds.y = 0;\n }\n if (bounds.y + bounds.height > this.canvas.height) {\n bounds.height = this.canvas.height - bounds.y;\n }\n\n this.context.drawImage(\n this.sketchCanvas,\n bounds.x,\n bounds.y,\n bounds.width,\n bounds.height,\n bounds.x,\n bounds.y,\n bounds.width,\n bounds.height\n );\n } else {\n scale = options.scale || 1;\n translate = options.translate;\n var position = translate instanceof $.Point ?\n translate : new $.Point(0, 0);\n\n var widthExt = 0;\n var heightExt = 0;\n if (translate) {\n var widthDiff = this.sketchCanvas.width - this.canvas.width;\n var heightDiff = this.sketchCanvas.height - this.canvas.height;\n widthExt = Math.round(widthDiff / 2);\n heightExt = Math.round(heightDiff / 2);\n }\n this.context.drawImage(\n this.sketchCanvas,\n position.x - widthExt * scale,\n position.y - heightExt * scale,\n (this.canvas.width + 2 * widthExt) * scale,\n (this.canvas.height + 2 * heightExt) * scale,\n -widthExt,\n -heightExt,\n this.canvas.width + 2 * widthExt,\n this.canvas.height + 2 * heightExt\n );\n }\n this.context.restore();\n }\n\n // private\n _drawDebugInfoOnTile(tile, count, i, tiledImage) {\n\n var colorIndex = this.viewer.world.getIndexOfItem(tiledImage) % this.debugGridColor.length;\n var context = this.context;\n context.save();\n context.lineWidth = 2 * $.pixelDensityRatio;\n context.font = 'small-caps bold ' + (13 * $.pixelDensityRatio) + 'px arial';\n context.strokeStyle = this.debugGridColor[colorIndex];\n context.fillStyle = this.debugGridColor[colorIndex];\n\n this._setRotations(tiledImage);\n\n if(this._viewportFlipped){\n this._flip({point: tile.position.plus(tile.size.divide(2))});\n }\n\n context.strokeRect(\n tile.position.x * $.pixelDensityRatio,\n tile.position.y * $.pixelDensityRatio,\n tile.size.x * $.pixelDensityRatio,\n tile.size.y * $.pixelDensityRatio\n );\n\n var tileCenterX = (tile.position.x + (tile.size.x / 2)) * $.pixelDensityRatio;\n var tileCenterY = (tile.position.y + (tile.size.y / 2)) * $.pixelDensityRatio;\n\n // Rotate the text the right way around.\n context.translate( tileCenterX, tileCenterY );\n const angleInDegrees = this.viewport.getRotation(true);\n context.rotate( Math.PI / 180 * -angleInDegrees );\n context.translate( -tileCenterX, -tileCenterY );\n\n if( tile.x === 0 && tile.y === 0 ){\n context.fillText(\n \"Zoom: \" + this.viewport.getZoom(),\n tile.position.x * $.pixelDensityRatio,\n (tile.position.y - 30) * $.pixelDensityRatio\n );\n context.fillText(\n \"Pan: \" + this.viewport.getBounds().toString(),\n tile.position.x * $.pixelDensityRatio,\n (tile.position.y - 20) * $.pixelDensityRatio\n );\n }\n context.fillText(\n \"Level: \" + tile.level,\n (tile.position.x + 10) * $.pixelDensityRatio,\n (tile.position.y + 20) * $.pixelDensityRatio\n );\n context.fillText(\n \"Column: \" + tile.x,\n (tile.position.x + 10) * $.pixelDensityRatio,\n (tile.position.y + 30) * $.pixelDensityRatio\n );\n context.fillText(\n \"Row: \" + tile.y,\n (tile.position.x + 10) * $.pixelDensityRatio,\n (tile.position.y + 40) * $.pixelDensityRatio\n );\n context.fillText(\n \"Order: \" + i + \" of \" + count,\n (tile.position.x + 10) * $.pixelDensityRatio,\n (tile.position.y + 50) * $.pixelDensityRatio\n );\n context.fillText(\n \"Size: \" + tile.size.toString(),\n (tile.position.x + 10) * $.pixelDensityRatio,\n (tile.position.y + 60) * $.pixelDensityRatio\n );\n context.fillText(\n \"Position: \" + tile.position.toString(),\n (tile.position.x + 10) * $.pixelDensityRatio,\n (tile.position.y + 70) * $.pixelDensityRatio\n );\n\n if (this.viewport.getRotation(true) % 360 !== 0 ) {\n this._restoreRotationChanges();\n }\n if (tiledImage.getRotation(true) % 360 !== 0) {\n this._restoreRotationChanges();\n }\n\n context.restore();\n }\n\n // private\n _updateImageSmoothingEnabled(context){\n context.msImageSmoothingEnabled = this._imageSmoothingEnabled;\n context.imageSmoothingEnabled = this._imageSmoothingEnabled;\n }\n\n /**\n * Get the canvas size\n * @private\n * @param {Boolean} sketch If set to true return the size of the sketch canvas\n * @returns {OpenSeadragon.Point} The size of the canvas\n */\n _getCanvasSize(sketch) {\n var canvas = this._getContext(sketch).canvas;\n return new $.Point(canvas.width, canvas.height);\n }\n\n /**\n * Get the canvas center\n * @private\n * @param {Boolean} sketch If set to true return the center point of the sketch canvas\n * @returns {OpenSeadragon.Point} The center point of the canvas\n */\n _getCanvasCenter() {\n return new $.Point(this.canvas.width / 2, this.canvas.height / 2);\n }\n\n /**\n * Set rotations for viewport & tiledImage\n * @private\n * @param {OpenSeadragon.TiledImage} tiledImage\n * @param {Boolean} [useSketch=false]\n */\n _setRotations(tiledImage, useSketch = false) {\n var saveContext = false;\n if (this.viewport.getRotation(true) % 360 !== 0) {\n this._offsetForRotation({\n degrees: this.viewport.getRotation(true),\n useSketch: useSketch,\n saveContext: saveContext\n });\n saveContext = false;\n }\n if (tiledImage.getRotation(true) % 360 !== 0) {\n this._offsetForRotation({\n degrees: tiledImage.getRotation(true),\n point: this.viewport.pixelFromPointNoRotate(\n tiledImage._getRotationPoint(true), true),\n useSketch: useSketch,\n saveContext: saveContext\n });\n }\n }\n\n // private\n _offsetForRotation(options) {\n var point = options.point ?\n options.point.times($.pixelDensityRatio) :\n this._getCanvasCenter();\n\n var context = this._getContext(options.useSketch);\n context.save();\n\n context.translate(point.x, point.y);\n context.rotate(Math.PI / 180 * options.degrees);\n context.translate(-point.x, -point.y);\n }\n\n // private\n _flip(options) {\n options = options || {};\n var point = options.point ?\n options.point.times($.pixelDensityRatio) :\n this._getCanvasCenter();\n var context = this._getContext(options.useSketch);\n\n context.translate(point.x, 0);\n context.scale(-1, 1);\n context.translate(-point.x, 0);\n }\n\n // private\n _restoreRotationChanges(useSketch) {\n var context = this._getContext(useSketch);\n context.restore();\n }\n\n // private\n _calculateCanvasSize() {\n var pixelDensityRatio = $.pixelDensityRatio;\n var viewportSize = this.viewport.getContainerSize();\n return {\n // canvas width and height are integers\n x: Math.round(viewportSize.x * pixelDensityRatio),\n y: Math.round(viewportSize.y * pixelDensityRatio)\n };\n }\n\n // private\n _calculateSketchCanvasSize() {\n var canvasSize = this._calculateCanvasSize();\n if (this.viewport.getRotation() === 0) {\n return canvasSize;\n }\n // If the viewport is rotated, we need a larger sketch canvas in order\n // to support edge smoothing.\n var sketchCanvasSize = Math.ceil(Math.sqrt(\n canvasSize.x * canvasSize.x +\n canvasSize.y * canvasSize.y));\n return {\n x: sketchCanvasSize,\n y: sketchCanvasSize\n };\n }\n}\n$.CanvasDrawer = CanvasDrawer;\n\n\n/**\n * Defines the value for subpixel rounding to fallback to in case of missing or\n * invalid value.\n * @private\n */\nvar DEFAULT_SUBPIXEL_ROUNDING_RULE = $.SUBPIXEL_ROUNDING_OCCURRENCES.NEVER;\n\n/**\n * Checks whether the input value is an invalid subpixel rounding enum value.\n * @private\n *\n * @param {SUBPIXEL_ROUNDING_OCCURRENCES} value - The subpixel rounding enum value to check.\n * @returns {Boolean} Returns true if the input value is none of the expected\n * {@link SUBPIXEL_ROUNDING_OCCURRENCES.ALWAYS}, {@link SUBPIXEL_ROUNDING_OCCURRENCES.ONLY_AT_REST} or {@link SUBPIXEL_ROUNDING_OCCURRENCES.NEVER} value.\n */\nfunction isSubPixelRoundingRuleUnknown(value) {\n return value !== $.SUBPIXEL_ROUNDING_OCCURRENCES.ALWAYS &&\n value !== $.SUBPIXEL_ROUNDING_OCCURRENCES.ONLY_AT_REST &&\n value !== $.SUBPIXEL_ROUNDING_OCCURRENCES.NEVER;\n}\n\n/**\n * Ensures the returned value is always a valid subpixel rounding enum value,\n * defaulting to {@link SUBPIXEL_ROUNDING_OCCURRENCES.NEVER} if input is missing or invalid.\n * @private\n * @param {SUBPIXEL_ROUNDING_OCCURRENCES} value - The subpixel rounding enum value to normalize.\n * @returns {SUBPIXEL_ROUNDING_OCCURRENCES} Returns a valid subpixel rounding enum value.\n */\nfunction normalizeSubPixelRoundingRule(value) {\n if (isSubPixelRoundingRuleUnknown(value)) {\n return DEFAULT_SUBPIXEL_ROUNDING_RULE;\n }\n return value;\n}\n\n/**\n * Ensures the returned value is always a valid subpixel rounding enum value,\n * defaulting to 'NEVER' if input is missing or invalid.\n * @private\n *\n * @param {Object} subPixelRoundingRules - A subpixel rounding enum values dictionary [{@link BROWSERS}] --> {@link SUBPIXEL_ROUNDING_OCCURRENCES}.\n * @returns {SUBPIXEL_ROUNDING_OCCURRENCES} Returns the determined subpixel rounding enum value for the\n * current browser.\n */\nfunction determineSubPixelRoundingRule(subPixelRoundingRules) {\n if (typeof subPixelRoundingRules === 'number') {\n return normalizeSubPixelRoundingRule(subPixelRoundingRules);\n }\n\n if (!subPixelRoundingRules || !$.Browser) {\n return DEFAULT_SUBPIXEL_ROUNDING_RULE;\n }\n\n var subPixelRoundingRule = subPixelRoundingRules[$.Browser.vendor];\n\n if (isSubPixelRoundingRuleUnknown(subPixelRoundingRule)) {\n subPixelRoundingRule = subPixelRoundingRules['*'];\n }\n\n return normalizeSubPixelRoundingRule(subPixelRoundingRule);\n}\n\n}( OpenSeadragon ));\n\n\n/*\n * OpenSeadragon - WebGLDrawer\n *\n * Copyright (C) 2009 CodePlex Foundation\n * Copyright (C) 2010-2024 OpenSeadragon contributors\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n * - Redistributions of source code must retain the above copyright notice,\n * this list of conditions and the following disclaimer.\n *\n * - Redistributions in binary form must reproduce the above copyright\n * notice, this list of conditions and the following disclaimer in the\n * documentation and/or other materials provided with the distribution.\n *\n * - Neither the name of CodePlex Foundation nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\n * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n(function( $ ){\n\n const OpenSeadragon = $; // alias for JSDoc\n\n /**\n * @class OpenSeadragon.WebGLDrawer\n * @classdesc Default implementation of WebGLDrawer for an {@link OpenSeadragon.Viewer}. The WebGLDrawer\n * loads tile data as textures to the graphics card as soon as it is available (via the tile-ready event),\n * and unloads the data (via the image-unloaded event). The drawer utilizes a context-dependent two pass drawing pipeline.\n * For the first pass, tile composition for a given TiledImage is always done using a canvas with a WebGL context.\n * This allows tiles to be stitched together without seams or artifacts, without requiring a tile source with overlap. If overlap is present,\n * overlapping pixels are discarded. The second pass copies all pixel data from the WebGL context onto an output canvas\n * with a Context2d context. This allows applications to have access to pixel data and other functionality provided by\n * Context2d, regardless of whether the CanvasDrawer or the WebGLDrawer is used. Certain options, including compositeOperation,\n * clip, croppingPolygons, and debugMode are implemented using Context2d operations; in these scenarios, each TiledImage is\n * drawn onto the output canvas immediately after the tile composition step (pass 1). Otherwise, for efficiency, all TiledImages\n * are copied over to the output canvas at once, after all tiles have been composited for all images.\n * @param {Object} options - Options for this Drawer.\n * @param {OpenSeadragon.Viewer} options.viewer - The Viewer that owns this Drawer.\n * @param {OpenSeadragon.Viewport} options.viewport - Reference to Viewer viewport.\n * @param {Element} options.element - Parent element.\n * @param {Number} [options.debugGridColor] - See debugGridColor in {@link OpenSeadragon.Options} for details.\n */\n\n OpenSeadragon.WebGLDrawer = class WebGLDrawer extends OpenSeadragon.DrawerBase{\n constructor(options){\n super(options);\n\n /**\n * The HTML element (canvas) that this drawer uses for drawing\n * @member {Element} canvas\n * @memberof OpenSeadragon.WebGLDrawer#\n */\n\n /**\n * The parent element of this Drawer instance, passed in when the Drawer was created.\n * The parent of {@link OpenSeadragon.WebGLDrawer#canvas}.\n * @member {Element} container\n * @memberof OpenSeadragon.WebGLDrawer#\n */\n\n // private members\n this._destroyed = false;\n this._TextureMap = new Map();\n this._TileMap = new Map();\n\n this._gl = null;\n this._firstPass = null;\n this._secondPass = null;\n this._glFrameBuffer = null;\n this._renderToTexture = null;\n this._glFramebufferToCanvasTransform = null;\n this._outputCanvas = null;\n this._outputContext = null;\n this._clippingCanvas = null;\n this._clippingContext = null;\n this._renderingCanvas = null;\n this._backupCanvasDrawer = null;\n\n this._imageSmoothingEnabled = true; // will be updated by setImageSmoothingEnabled\n\n // Add listeners for events that require modifying the scene or camera\n this._boundToTileReady = ev => this._tileReadyHandler(ev);\n this._boundToImageUnloaded = ev => this._imageUnloadedHandler(ev);\n this.viewer.addHandler(\"tile-ready\", this._boundToTileReady);\n this.viewer.addHandler(\"image-unloaded\", this._boundToImageUnloaded);\n\n // Reject listening for the tile-drawing and tile-drawn events, which this drawer does not fire\n this.viewer.rejectEventHandler(\"tile-drawn\", \"The WebGLDrawer does not raise the tile-drawn event\");\n this.viewer.rejectEventHandler(\"tile-drawing\", \"The WebGLDrawer does not raise the tile-drawing event\");\n\n // this.viewer and this.canvas are part of the public DrawerBase API\n // and are defined by the parent DrawerBase class. Additional setup is done by\n // the private _setupCanvases and _setupRenderer functions.\n this._setupCanvases();\n this._setupRenderer();\n\n this.context = this._outputContext; // API required by tests\n\n }\n\n // Public API required by all Drawer implementations\n /**\n * Clean up the renderer, removing all resources\n */\n destroy(){\n if(this._destroyed){\n return;\n }\n // clear all resources used by the renderer, geometries, textures etc\n let gl = this._gl;\n\n // adapted from https://stackoverflow.com/a/23606581/1214731\n var numTextureUnits = gl.getParameter(gl.MAX_TEXTURE_IMAGE_UNITS);\n for (let unit = 0; unit < numTextureUnits; ++unit) {\n gl.activeTexture(gl.TEXTURE0 + unit);\n gl.bindTexture(gl.TEXTURE_2D, null);\n gl.bindTexture(gl.TEXTURE_CUBE_MAP, null);\n }\n gl.bindBuffer(gl.ARRAY_BUFFER, null);\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, null);\n gl.bindRenderbuffer(gl.RENDERBUFFER, null);\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\n\n this._unloadTextures();\n\n // Delete all our created resources\n gl.deleteBuffer(this._secondPass.bufferOutputPosition);\n gl.deleteFramebuffer(this._glFrameBuffer);\n\n // make canvases 1 x 1 px and delete references\n this._renderingCanvas.width = this._renderingCanvas.height = 1;\n this._clippingCanvas.width = this._clippingCanvas.height = 1;\n this._outputCanvas.width = this._outputCanvas.height = 1;\n this._renderingCanvas = null;\n this._clippingCanvas = this._clippingContext = null;\n this._outputCanvas = this._outputContext = null;\n\n let ext = gl.getExtension('WEBGL_lose_context');\n if(ext){\n ext.loseContext();\n }\n\n // unbind our event listeners from the viewer\n this.viewer.removeHandler(\"tile-ready\", this._boundToTileReady);\n this.viewer.removeHandler(\"image-unloaded\", this._boundToImageUnloaded);\n this.viewer.removeHandler(\"resize\", this._resizeHandler);\n\n // set our webgl context reference to null to enable garbage collection\n this._gl = null;\n\n if(this._backupCanvasDrawer){\n this._backupCanvasDrawer.destroy();\n this._backupCanvasDrawer = null;\n }\n\n this.container.removeChild(this.canvas);\n if(this.viewer.drawer === this){\n this.viewer.drawer = null;\n }\n\n // set our destroyed flag to true\n this._destroyed = true;\n }\n\n // Public API required by all Drawer implementations\n /**\n *\n * @returns {Boolean} true\n */\n canRotate(){\n return true;\n }\n\n // Public API required by all Drawer implementations\n /**\n * @returns {Boolean} true if canvas and webgl are supported\n */\n static isSupported(){\n let canvasElement = document.createElement( 'canvas' );\n let webglContext = $.isFunction( canvasElement.getContext ) &&\n canvasElement.getContext( 'webgl' );\n let ext = webglContext && webglContext.getExtension('WEBGL_lose_context');\n if(ext){\n ext.loseContext();\n }\n return !!( webglContext );\n }\n\n /**\n *\n * @returns 'webgl'\n */\n getType(){\n return 'webgl';\n }\n\n /**\n * @param {TiledImage} tiledImage the tiled image that is calling the function\n * @returns {Boolean} Whether this drawer requires enforcing minimum tile overlap to avoid showing seams.\n * @private\n */\n minimumOverlapRequired(tiledImage) {\n // return true if the tiled image is tainted, since the backup canvas drawer will be used.\n return tiledImage.isTainted();\n }\n\n /**\n * create the HTML element (canvas in this case) that the image will be drawn into\n * @private\n * @returns {Element} the canvas to draw into\n */\n _createDrawingElement(){\n let canvas = $.makeNeutralElement(\"canvas\");\n let viewportSize = this._calculateCanvasSize();\n canvas.width = viewportSize.x;\n canvas.height = viewportSize.y;\n return canvas;\n }\n\n /**\n * Get the backup renderer (CanvasDrawer) to use if data cannot be used by webgl\n * Lazy loaded\n * @private\n * @returns {CanvasDrawer}\n */\n _getBackupCanvasDrawer(){\n if(!this._backupCanvasDrawer){\n this._backupCanvasDrawer = this.viewer.requestDrawer('canvas', {mainDrawer: false});\n this._backupCanvasDrawer.canvas.style.setProperty('visibility', 'hidden');\n }\n\n return this._backupCanvasDrawer;\n }\n\n /**\n *\n * @param {Array} tiledImages Array of TiledImage objects to draw\n */\n draw(tiledImages){\n let gl = this._gl;\n const bounds = this.viewport.getBoundsNoRotateWithMargins(true);\n let view = {\n bounds: bounds,\n center: new OpenSeadragon.Point(bounds.x + bounds.width / 2, bounds.y + bounds.height / 2),\n rotation: this.viewport.getRotation(true) * Math.PI / 180\n };\n\n let flipMultiplier = this.viewport.flipped ? -1 : 1;\n // calculate view matrix for viewer\n let posMatrix = $.Mat3.makeTranslation(-view.center.x, -view.center.y);\n let scaleMatrix = $.Mat3.makeScaling(2 / view.bounds.width * flipMultiplier, -2 / view.bounds.height);\n let rotMatrix = $.Mat3.makeRotation(-view.rotation);\n let viewMatrix = scaleMatrix.multiply(rotMatrix).multiply(posMatrix);\n\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\n gl.clear(gl.COLOR_BUFFER_BIT); // clear the back buffer\n\n // clear the output canvas\n this._outputContext.clearRect(0, 0, this._outputCanvas.width, this._outputCanvas.height);\n\n\n let renderingBufferHasImageData = false;\n\n //iterate over tiled images and draw each one using a two-pass rendering pipeline if needed\n tiledImages.forEach( (tiledImage, tiledImageIndex) => {\n\n if(tiledImage.isTainted()){\n // first, draw any data left in the rendering buffer onto the output canvas\n if(renderingBufferHasImageData){\n this._outputContext.drawImage(this._renderingCanvas, 0, 0);\n // clear the buffer\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\n gl.clear(gl.COLOR_BUFFER_BIT); // clear the back buffer\n renderingBufferHasImageData = false;\n }\n\n // next, use the backup canvas drawer to draw this tainted image\n const canvasDrawer = this._getBackupCanvasDrawer();\n canvasDrawer.draw([tiledImage]);\n this._outputContext.drawImage(canvasDrawer.canvas, 0, 0);\n\n } else {\n let tilesToDraw = tiledImage.getTilesToDraw();\n\n if ( tiledImage.placeholderFillStyle && tiledImage._hasOpaqueTile === false ) {\n this._drawPlaceholder(tiledImage);\n }\n\n if(tilesToDraw.length === 0 || tiledImage.getOpacity() === 0){\n return;\n }\n let firstTile = tilesToDraw[0];\n\n let useContext2dPipeline = ( tiledImage.compositeOperation ||\n this.viewer.compositeOperation ||\n tiledImage._clip ||\n tiledImage._croppingPolygons ||\n tiledImage.debugMode\n );\n\n let useTwoPassRendering = useContext2dPipeline || (tiledImage.opacity < 1) || firstTile.hasTransparency;\n\n // using the context2d pipeline requires a clean rendering (back) buffer to start\n if(useContext2dPipeline){\n // if the rendering buffer has image data currently, write it to the output canvas now and clear it\n\n if(renderingBufferHasImageData){\n this._outputContext.drawImage(this._renderingCanvas, 0, 0);\n }\n\n // clear the buffer\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\n gl.clear(gl.COLOR_BUFFER_BIT); // clear the back buffer\n }\n\n // First rendering pass: compose tiles that make up this tiledImage\n gl.useProgram(this._firstPass.shaderProgram);\n\n // bind to the framebuffer for render-to-texture if using two-pass rendering, otherwise back buffer (null)\n if(useTwoPassRendering){\n gl.bindFramebuffer(gl.FRAMEBUFFER, this._glFrameBuffer);\n // clear the buffer to draw a new image\n gl.clear(gl.COLOR_BUFFER_BIT);\n } else {\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\n // no need to clear, just draw on top of the existing pixels\n }\n\n let overallMatrix = viewMatrix;\n\n let imageRotation = tiledImage.getRotation(true);\n // if needed, handle the tiledImage being rotated\n if( imageRotation % 360 !== 0){\n let imageRotationMatrix = $.Mat3.makeRotation(-imageRotation * Math.PI / 180);\n let imageCenter = tiledImage.getBoundsNoRotate(true).getCenter();\n let t1 = $.Mat3.makeTranslation(imageCenter.x, imageCenter.y);\n let t2 = $.Mat3.makeTranslation(-imageCenter.x, -imageCenter.y);\n\n // update the view matrix to account for this image's rotation\n let localMatrix = t1.multiply(imageRotationMatrix).multiply(t2);\n overallMatrix = viewMatrix.multiply(localMatrix);\n }\n\n let maxTextures = this._gl.getParameter(this._gl.MAX_TEXTURE_IMAGE_UNITS);\n if(maxTextures <= 0){\n // This can apparently happen on some systems if too many WebGL contexts have been created\n // in which case maxTextures can be null, leading to out of bounds errors with the array.\n // For example, when viewers were created and not destroyed in the test suite, this error\n // occurred in the TravisCI tests, though it did not happen when testing locally either in\n // a browser or on the command line via grunt test.\n\n throw(new Error(`WegGL error: bad value for gl parameter MAX_TEXTURE_IMAGE_UNITS (${maxTextures}). This could happen\n if too many contexts have been created and not released, or there is another problem with the graphics card.`));\n }\n\n let texturePositionArray = new Float32Array(maxTextures * 12); // 6 vertices (2 triangles) x 2 coordinates per vertex\n let textureDataArray = new Array(maxTextures);\n let matrixArray = new Array(maxTextures);\n let opacityArray = new Array(maxTextures);\n\n // iterate over tiles and add data for each one to the buffers\n for(let tileIndex = 0; tileIndex < tilesToDraw.length; tileIndex++){\n let tile = tilesToDraw[tileIndex].tile;\n let indexInDrawArray = tileIndex % maxTextures;\n let numTilesToDraw = indexInDrawArray + 1;\n let tileContext = tile.getCanvasContext();\n\n let textureInfo = tileContext ? this._TextureMap.get(tileContext.canvas) : null;\n if(!textureInfo){\n // tile was not processed in the tile-ready event (this can happen\n // if this drawer was created after the tile was downloaded)\n this._tileReadyHandler({tile: tile, tiledImage: tiledImage});\n\n // retry getting textureInfo\n textureInfo = tileContext ? this._TextureMap.get(tileContext.canvas) : null;\n }\n\n if(textureInfo){\n this._getTileData(tile, tiledImage, textureInfo, overallMatrix, indexInDrawArray, texturePositionArray, textureDataArray, matrixArray, opacityArray);\n } else {\n // console.log('No tile info', tile);\n }\n if( (numTilesToDraw === maxTextures) || (tileIndex === tilesToDraw.length - 1)){\n // We've filled up the buffers: time to draw this set of tiles\n\n // bind each tile's texture to the appropriate gl.TEXTURE#\n for(let i = 0; i <= numTilesToDraw; i++){\n gl.activeTexture(gl.TEXTURE0 + i);\n gl.bindTexture(gl.TEXTURE_2D, textureDataArray[i]);\n }\n\n // set the buffer data for the texture coordinates to use for each tile\n gl.bindBuffer(gl.ARRAY_BUFFER, this._firstPass.bufferTexturePosition);\n gl.bufferData(gl.ARRAY_BUFFER, texturePositionArray, gl.DYNAMIC_DRAW);\n\n // set the transform matrix uniform for each tile\n matrixArray.forEach( (matrix, index) => {\n gl.uniformMatrix3fv(this._firstPass.uTransformMatrices[index], false, matrix);\n });\n // set the opacity uniform for each tile\n gl.uniform1fv(this._firstPass.uOpacities, new Float32Array(opacityArray));\n\n // bind vertex buffers and (re)set attributes before calling gl.drawArrays()\n gl.bindBuffer(gl.ARRAY_BUFFER, this._firstPass.bufferOutputPosition);\n gl.vertexAttribPointer(this._firstPass.aOutputPosition, 2, gl.FLOAT, false, 0, 0);\n\n gl.bindBuffer(gl.ARRAY_BUFFER, this._firstPass.bufferTexturePosition);\n gl.vertexAttribPointer(this._firstPass.aTexturePosition, 2, gl.FLOAT, false, 0, 0);\n\n gl.bindBuffer(gl.ARRAY_BUFFER, this._firstPass.bufferIndex);\n gl.vertexAttribPointer(this._firstPass.aIndex, 1, gl.FLOAT, false, 0, 0);\n\n // Draw! 6 vertices per tile (2 triangles per rectangle)\n gl.drawArrays(gl.TRIANGLES, 0, 6 * numTilesToDraw );\n }\n }\n\n if(useTwoPassRendering){\n // Second rendering pass: Render the tiled image from the framebuffer into the back buffer\n gl.useProgram(this._secondPass.shaderProgram);\n\n // set the rendering target to the back buffer (null)\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\n\n // bind the rendered texture from the first pass to use during this second pass\n gl.activeTexture(gl.TEXTURE0);\n gl.bindTexture(gl.TEXTURE_2D, this._renderToTexture);\n\n // set opacity to the value for the current tiledImage\n this._gl.uniform1f(this._secondPass.uOpacityMultiplier, tiledImage.opacity);\n\n // bind buffers and set attributes before calling gl.drawArrays\n gl.bindBuffer(gl.ARRAY_BUFFER, this._secondPass.bufferTexturePosition);\n gl.vertexAttribPointer(this._secondPass.aTexturePosition, 2, gl.FLOAT, false, 0, 0);\n gl.bindBuffer(gl.ARRAY_BUFFER, this._secondPass.bufferOutputPosition);\n gl.vertexAttribPointer(this._secondPass.aOutputPosition, 2, gl.FLOAT, false, 0, 0);\n\n // Draw the quad (two triangles)\n gl.drawArrays(gl.TRIANGLES, 0, 6);\n\n }\n\n renderingBufferHasImageData = true;\n\n if(useContext2dPipeline){\n // draw from the rendering canvas onto the output canvas, clipping/cropping if needed.\n this._applyContext2dPipeline(tiledImage, tilesToDraw, tiledImageIndex);\n renderingBufferHasImageData = false;\n // clear the buffer\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\n gl.clear(gl.COLOR_BUFFER_BIT); // clear the back buffer\n }\n\n // after drawing the first TiledImage, fire the tiled-image-drawn event (for testing)\n if(tiledImageIndex === 0){\n this._raiseTiledImageDrawnEvent(tiledImage, tilesToDraw.map(info=>info.tile));\n }\n }\n\n\n\n });\n\n if(renderingBufferHasImageData){\n this._outputContext.drawImage(this._renderingCanvas, 0, 0);\n }\n\n }\n\n // Public API required by all Drawer implementations\n /**\n * Sets whether image smoothing is enabled or disabled\n * @param {Boolean} enabled If true, uses gl.LINEAR as the TEXTURE_MIN_FILTER and TEXTURE_MAX_FILTER, otherwise gl.NEAREST.\n */\n setImageSmoothingEnabled(enabled){\n if( this._imageSmoothingEnabled !== enabled ){\n this._imageSmoothingEnabled = enabled;\n this._unloadTextures();\n this.viewer.world.draw();\n }\n }\n\n /**\n * Draw a rect onto the output canvas for debugging purposes\n * @param {OpenSeadragon.Rect} rect\n */\n drawDebuggingRect(rect){\n let context = this._outputContext;\n context.save();\n context.lineWidth = 2 * $.pixelDensityRatio;\n context.strokeStyle = this.debugGridColor[0];\n context.fillStyle = this.debugGridColor[0];\n\n context.strokeRect(\n rect.x * $.pixelDensityRatio,\n rect.y * $.pixelDensityRatio,\n rect.width * $.pixelDensityRatio,\n rect.height * $.pixelDensityRatio\n );\n\n context.restore();\n }\n\n // private\n _getTextureDataFromTile(tile){\n return tile.getCanvasContext().canvas;\n }\n\n /**\n * Draw data from the rendering canvas onto the output canvas, with clipping,\n * cropping and/or debug info as requested.\n * @private\n * @param {OpenSeadragon.TiledImage} tiledImage - the tiledImage to draw\n * @param {Array} tilesToDraw - array of objects containing tiles that were drawn\n */\n _applyContext2dPipeline(tiledImage, tilesToDraw, tiledImageIndex){\n // composite onto the output canvas, clipping if necessary\n this._outputContext.save();\n\n // set composite operation; ignore for first image drawn\n this._outputContext.globalCompositeOperation = tiledImageIndex === 0 ? null : tiledImage.compositeOperation || this.viewer.compositeOperation;\n if(tiledImage._croppingPolygons || tiledImage._clip){\n this._renderToClippingCanvas(tiledImage);\n this._outputContext.drawImage(this._clippingCanvas, 0, 0);\n\n } else {\n this._outputContext.drawImage(this._renderingCanvas, 0, 0);\n }\n this._outputContext.restore();\n if(tiledImage.debugMode){\n const flipped = this.viewer.viewport.getFlip();\n if(flipped){\n this._flip();\n }\n this._drawDebugInfo(tilesToDraw, tiledImage, flipped);\n if(flipped){\n this._flip();\n }\n }\n\n\n }\n\n // private\n _getTileData(tile, tiledImage, textureInfo, viewMatrix, index, texturePositionArray, textureDataArray, matrixArray, opacityArray){\n\n let texture = textureInfo.texture;\n let textureQuad = textureInfo.position;\n\n // set the position of this texture\n texturePositionArray.set(textureQuad, index * 12);\n\n // compute offsets that account for tile overlap; needed for calculating the transform matrix appropriately\n let overlapFraction = this._calculateOverlapFraction(tile, tiledImage);\n let xOffset = tile.positionedBounds.width * overlapFraction.x;\n let yOffset = tile.positionedBounds.height * overlapFraction.y;\n\n // x, y, w, h in viewport coords\n let x = tile.positionedBounds.x + (tile.x === 0 ? 0 : xOffset);\n let y = tile.positionedBounds.y + (tile.y === 0 ? 0 : yOffset);\n let right = tile.positionedBounds.x + tile.positionedBounds.width - (tile.isRightMost ? 0 : xOffset);\n let bottom = tile.positionedBounds.y + tile.positionedBounds.height - (tile.isBottomMost ? 0 : yOffset);\n let w = right - x;\n let h = bottom - y;\n\n let matrix = new $.Mat3([\n w, 0, 0,\n 0, h, 0,\n x, y, 1,\n ]);\n\n if(tile.flipped){\n // flip the tile around the center of the unit quad\n let t1 = $.Mat3.makeTranslation(0.5, 0);\n let t2 = $.Mat3.makeTranslation(-0.5, 0);\n\n // update the view matrix to account for this image's rotation\n let localMatrix = t1.multiply($.Mat3.makeScaling(-1, 1)).multiply(t2);\n matrix = matrix.multiply(localMatrix);\n }\n\n let overallMatrix = viewMatrix.multiply(matrix);\n\n opacityArray[index] = tile.opacity;\n textureDataArray[index] = texture;\n matrixArray[index] = overallMatrix.values;\n\n }\n\n // private\n _textureFilter(){\n return this._imageSmoothingEnabled ? this._gl.LINEAR : this._gl.NEAREST;\n }\n\n // private\n _setupRenderer(){\n let gl = this._gl;\n if(!gl){\n $.console.error('_setupCanvases must be called before _setupRenderer');\n }\n this._unitQuad = this._makeQuadVertexBuffer(0, 1, 0, 1); // used a few places; create once and store the result\n\n this._makeFirstPassShaderProgram();\n this._makeSecondPassShaderProgram();\n\n // set up the texture to render to in the first pass, and which will be used for rendering the second pass\n this._renderToTexture = gl.createTexture();\n gl.activeTexture(gl.TEXTURE0);\n gl.bindTexture(gl.TEXTURE_2D, this._renderToTexture);\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, this._renderingCanvas.width, this._renderingCanvas.height, 0, gl.RGBA, gl.UNSIGNED_BYTE, null);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, this._textureFilter());\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n\n // set up the framebuffer for render-to-texture\n this._glFrameBuffer = gl.createFramebuffer();\n gl.bindFramebuffer(gl.FRAMEBUFFER, this._glFrameBuffer);\n gl.framebufferTexture2D(\n gl.FRAMEBUFFER,\n gl.COLOR_ATTACHMENT0, // attach texture as COLOR_ATTACHMENT0\n gl.TEXTURE_2D, // attach a 2D texture\n this._renderToTexture, // the texture to attach\n 0\n );\n\n gl.enable(gl.BLEND);\n gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA);\n\n }\n\n //private\n _makeFirstPassShaderProgram(){\n let numTextures = this._glNumTextures = this._gl.getParameter(this._gl.MAX_TEXTURE_IMAGE_UNITS);\n let makeMatrixUniforms = () => {\n return [...Array(numTextures).keys()].map(index => `uniform mat3 u_matrix_${index};`).join('\\n');\n };\n let makeConditionals = () => {\n return [...Array(numTextures).keys()].map(index => `${index > 0 ? 'else ' : ''}if(int(a_index) == ${index}) { transform_matrix = u_matrix_${index}; }`).join('\\n');\n };\n\n const vertexShaderProgram = `\n attribute vec2 a_output_position;\n attribute vec2 a_texture_position;\n attribute float a_index;\n\n ${makeMatrixUniforms()} // create a uniform mat3 for each potential tile to draw\n\n varying vec2 v_texture_position;\n varying float v_image_index;\n\n void main() {\n\n mat3 transform_matrix; // value will be set by the if/elses in makeConditional()\n\n ${makeConditionals()}\n\n gl_Position = vec4(transform_matrix * vec3(a_output_position, 1), 1);\n\n v_texture_position = a_texture_position;\n v_image_index = a_index;\n }\n `;\n\n const fragmentShaderProgram = `\n precision mediump float;\n\n // our textures\n uniform sampler2D u_images[${numTextures}];\n // our opacities\n uniform float u_opacities[${numTextures}];\n\n // the varyings passed in from the vertex shader.\n varying vec2 v_texture_position;\n varying float v_image_index;\n\n void main() {\n // can't index directly with a variable, need to use a loop iterator hack\n for(int i = 0; i < ${numTextures}; ++i){\n if(i == int(v_image_index)){\n gl_FragColor = texture2D(u_images[i], v_texture_position) * u_opacities[i];\n }\n }\n }\n `;\n\n let gl = this._gl;\n\n let program = this.constructor.initShaderProgram(gl, vertexShaderProgram, fragmentShaderProgram);\n gl.useProgram(program);\n\n // get locations of attributes and uniforms, and create buffers for each attribute\n this._firstPass = {\n shaderProgram: program,\n aOutputPosition: gl.getAttribLocation(program, 'a_output_position'),\n aTexturePosition: gl.getAttribLocation(program, 'a_texture_position'),\n aIndex: gl.getAttribLocation(program, 'a_index'),\n uTransformMatrices: [...Array(this._glNumTextures).keys()].map(i=>gl.getUniformLocation(program, `u_matrix_${i}`)),\n uImages: gl.getUniformLocation(program, 'u_images'),\n uOpacities: gl.getUniformLocation(program, 'u_opacities'),\n bufferOutputPosition: gl.createBuffer(),\n bufferTexturePosition: gl.createBuffer(),\n bufferIndex: gl.createBuffer(),\n };\n\n gl.uniform1iv(this._firstPass.uImages, [...Array(numTextures).keys()]);\n\n // provide coordinates for the rectangle in output space, i.e. a unit quad for each one.\n let outputQuads = new Float32Array(numTextures * 12);\n for(let i = 0; i < numTextures; ++i){\n outputQuads.set(Float32Array.from(this._unitQuad), i * 12);\n }\n gl.bindBuffer(gl.ARRAY_BUFFER, this._firstPass.bufferOutputPosition);\n gl.bufferData(gl.ARRAY_BUFFER, outputQuads, gl.STATIC_DRAW); // bind data statically here, since it's unchanging\n gl.enableVertexAttribArray(this._firstPass.aOutputPosition);\n\n // provide texture coordinates for the rectangle in image (texture) space. Data will be set later.\n gl.bindBuffer(gl.ARRAY_BUFFER, this._firstPass.bufferTexturePosition);\n gl.enableVertexAttribArray(this._firstPass.aTexturePosition);\n\n // for each vertex, provide an index into the array of textures/matrices to use for the correct tile\n gl.bindBuffer(gl.ARRAY_BUFFER, this._firstPass.bufferIndex);\n let indices = [...Array(this._glNumTextures).keys()].map(i => Array(6).fill(i)).flat(); // repeat each index 6 times, for the 6 vertices per tile (2 triangles)\n gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(indices), gl.STATIC_DRAW); // bind data statically here, since it's unchanging\n gl.enableVertexAttribArray(this._firstPass.aIndex);\n\n }\n\n // private\n _makeSecondPassShaderProgram(){\n const vertexShaderProgram = `\n attribute vec2 a_output_position;\n attribute vec2 a_texture_position;\n\n uniform mat3 u_matrix;\n\n varying vec2 v_texture_position;\n\n void main() {\n gl_Position = vec4(u_matrix * vec3(a_output_position, 1), 1);\n\n v_texture_position = a_texture_position;\n }\n `;\n\n const fragmentShaderProgram = `\n precision mediump float;\n\n // our texture\n uniform sampler2D u_image;\n\n // the texCoords passed in from the vertex shader.\n varying vec2 v_texture_position;\n\n // the opacity multiplier for the image\n uniform float u_opacity_multiplier;\n\n void main() {\n gl_FragColor = texture2D(u_image, v_texture_position);\n gl_FragColor *= u_opacity_multiplier;\n }\n `;\n\n let gl = this._gl;\n\n let program = this.constructor.initShaderProgram(gl, vertexShaderProgram, fragmentShaderProgram);\n gl.useProgram(program);\n\n // get locations of attributes and uniforms, and create buffers for each attribute\n this._secondPass = {\n shaderProgram: program,\n aOutputPosition: gl.getAttribLocation(program, 'a_output_position'),\n aTexturePosition: gl.getAttribLocation(program, 'a_texture_position'),\n uMatrix: gl.getUniformLocation(program, 'u_matrix'),\n uImage: gl.getUniformLocation(program, 'u_image'),\n uOpacityMultiplier: gl.getUniformLocation(program, 'u_opacity_multiplier'),\n bufferOutputPosition: gl.createBuffer(),\n bufferTexturePosition: gl.createBuffer(),\n };\n\n\n // provide coordinates for the rectangle in output space, i.e. a unit quad for each one.\n gl.bindBuffer(gl.ARRAY_BUFFER, this._secondPass.bufferOutputPosition);\n gl.bufferData(gl.ARRAY_BUFFER, this._unitQuad, gl.STATIC_DRAW); // bind data statically here since it's unchanging\n gl.enableVertexAttribArray(this._secondPass.aOutputPosition);\n\n // provide texture coordinates for the rectangle in image (texture) space.\n gl.bindBuffer(gl.ARRAY_BUFFER, this._secondPass.bufferTexturePosition);\n gl.bufferData(gl.ARRAY_BUFFER, this._unitQuad, gl.DYNAMIC_DRAW); // bind data statically here since it's unchanging\n gl.enableVertexAttribArray(this._secondPass.aTexturePosition);\n\n // set the matrix that transforms the framebuffer to clip space\n let matrix = $.Mat3.makeScaling(2, 2).multiply($.Mat3.makeTranslation(-0.5, -0.5));\n gl.uniformMatrix3fv(this._secondPass.uMatrix, false, matrix.values);\n }\n\n // private\n _resizeRenderer(){\n let gl = this._gl;\n let w = this._renderingCanvas.width;\n let h = this._renderingCanvas.height;\n gl.viewport(0, 0, w, h);\n\n //release the old texture\n gl.deleteTexture(this._renderToTexture);\n //create a new texture and set it up\n this._renderToTexture = gl.createTexture();\n gl.activeTexture(gl.TEXTURE0);\n gl.bindTexture(gl.TEXTURE_2D, this._renderToTexture);\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, w, h, 0, gl.RGBA, gl.UNSIGNED_BYTE, null);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, this._textureFilter());\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n\n //bind the frame buffer to the new texture\n gl.bindFramebuffer(gl.FRAMEBUFFER, this._glFrameBuffer);\n gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, this._renderToTexture, 0);\n\n }\n\n // private\n _setupCanvases(){\n let _this = this;\n\n this._outputCanvas = this.canvas; //output canvas\n this._outputContext = this._outputCanvas.getContext('2d');\n\n this._renderingCanvas = document.createElement('canvas');\n\n this._clippingCanvas = document.createElement('canvas');\n this._clippingContext = this._clippingCanvas.getContext('2d');\n this._renderingCanvas.width = this._clippingCanvas.width = this._outputCanvas.width;\n this._renderingCanvas.height = this._clippingCanvas.height = this._outputCanvas.height;\n\n this._gl = this._renderingCanvas.getContext('webgl');\n\n this._resizeHandler = function(){\n\n if(_this._outputCanvas !== _this.viewer.drawer.canvas){\n _this._outputCanvas.style.width = _this.viewer.drawer.canvas.clientWidth + 'px';\n _this._outputCanvas.style.height = _this.viewer.drawer.canvas.clientHeight + 'px';\n }\n\n let viewportSize = _this._calculateCanvasSize();\n if( _this._outputCanvas.width !== viewportSize.x ||\n _this._outputCanvas.height !== viewportSize.y ) {\n _this._outputCanvas.width = viewportSize.x;\n _this._outputCanvas.height = viewportSize.y;\n }\n\n _this._renderingCanvas.style.width = _this._outputCanvas.clientWidth + 'px';\n _this._renderingCanvas.style.height = _this._outputCanvas.clientHeight + 'px';\n _this._renderingCanvas.width = _this._clippingCanvas.width = _this._outputCanvas.width;\n _this._renderingCanvas.height = _this._clippingCanvas.height = _this._outputCanvas.height;\n\n // important - update the size of the rendering viewport!\n _this._resizeRenderer();\n };\n\n //make the additional canvas elements mirror size changes to the output canvas\n this.viewer.addHandler(\"resize\", this._resizeHandler);\n }\n\n // private\n _makeQuadVertexBuffer(left, right, top, bottom){\n return new Float32Array([\n left, bottom,\n right, bottom,\n left, top,\n left, top,\n right, bottom,\n right, top]);\n }\n\n // private\n _tileReadyHandler(event){\n let tile = event.tile;\n let tiledImage = event.tiledImage;\n\n // If a tiledImage is already known to be tainted, don't try to upload any\n // textures to webgl, because they won't be used even if it succeeds\n if(tiledImage.isTainted()){\n return;\n }\n\n let tileContext = tile.getCanvasContext();\n let canvas = tileContext && tileContext.canvas;\n // if the tile doesn't provide a canvas, or is tainted by cross-origin\n // data, marked the TiledImage as tainted so the canvas drawer can be\n // used instead, and return immediately - tainted data cannot be uploaded to webgl\n if(!canvas || $.isCanvasTainted(canvas)){\n const wasTainted = tiledImage.isTainted();\n if(!wasTainted){\n tiledImage.setTainted(true);\n $.console.warn('WebGL cannot be used to draw this TiledImage because it has tainted data. Does crossOriginPolicy need to be set?');\n this._raiseDrawerErrorEvent(tiledImage, 'Tainted data cannot be used by the WebGLDrawer. Falling back to CanvasDrawer for this TiledImage.');\n }\n return;\n }\n\n let textureInfo = this._TextureMap.get(canvas);\n\n // if this is a new image for us, create a texture\n if(!textureInfo){\n let gl = this._gl;\n\n // create a gl Texture for this tile and bind the canvas with the image data\n let texture = gl.createTexture();\n let position;\n let overlap = tiledImage.source.tileOverlap;\n\n // deal with tiles where there is padding, i.e. the pixel data doesn't take up the entire provided canvas\n let sourceWidthFraction, sourceHeightFraction;\n if (tile.sourceBounds) {\n sourceWidthFraction = Math.min(tile.sourceBounds.width, canvas.width) / canvas.width;\n sourceHeightFraction = Math.min(tile.sourceBounds.height, canvas.height) / canvas.height;\n } else {\n sourceWidthFraction = 1;\n sourceHeightFraction = 1;\n }\n\n if( overlap > 0){\n // calculate the normalized position of the rect to actually draw\n // discarding overlap.\n let overlapFraction = this._calculateOverlapFraction(tile, tiledImage);\n\n let left = (tile.x === 0 ? 0 : overlapFraction.x) * sourceWidthFraction;\n let top = (tile.y === 0 ? 0 : overlapFraction.y) * sourceHeightFraction;\n let right = (tile.isRightMost ? 1 : 1 - overlapFraction.x) * sourceWidthFraction;\n let bottom = (tile.isBottomMost ? 1 : 1 - overlapFraction.y) * sourceHeightFraction;\n position = this._makeQuadVertexBuffer(left, right, top, bottom);\n } else if (sourceWidthFraction === 1 && sourceHeightFraction === 1) {\n // no overlap and no padding: this texture can use the unit quad as its position data\n position = this._unitQuad;\n } else {\n position = this._makeQuadVertexBuffer(0, sourceWidthFraction, 0, sourceHeightFraction);\n }\n\n let textureInfo = {\n texture: texture,\n position: position,\n };\n\n // add it to our _TextureMap\n this._TextureMap.set(canvas, textureInfo);\n gl.activeTexture(gl.TEXTURE0);\n gl.bindTexture(gl.TEXTURE_2D, texture);\n // Set the parameters so we can render any size image.\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, this._textureFilter());\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, this._textureFilter());\n\n // Upload the image into the texture.\n this._uploadImageData(tileContext);\n\n }\n\n }\n\n // private\n _calculateOverlapFraction(tile, tiledImage){\n let overlap = tiledImage.source.tileOverlap;\n let nativeWidth = tile.sourceBounds.width; // in pixels\n let nativeHeight = tile.sourceBounds.height; // in pixels\n let overlapWidth = (tile.x === 0 ? 0 : overlap) + (tile.isRightMost ? 0 : overlap); // in pixels\n let overlapHeight = (tile.y === 0 ? 0 : overlap) + (tile.isBottomMost ? 0 : overlap); // in pixels\n let widthOverlapFraction = overlap / (nativeWidth + overlapWidth); // as a fraction of image including overlap\n let heightOverlapFraction = overlap / (nativeHeight + overlapHeight); // as a fraction of image including overlap\n return {\n x: widthOverlapFraction,\n y: heightOverlapFraction\n };\n }\n\n // private\n _unloadTextures(){\n let canvases = Array.from(this._TextureMap.keys());\n canvases.forEach(canvas => {\n this._cleanupImageData(canvas); // deletes texture, removes from _TextureMap\n });\n }\n\n // private\n _uploadImageData(tileContext){\n\n let gl = this._gl;\n let canvas = tileContext.canvas;\n\n try{\n if(!canvas){\n throw('Tile context does not have a canvas', tileContext);\n }\n // This depends on gl.TEXTURE_2D being bound to the texture\n // associated with this canvas before calling this function\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, canvas);\n } catch (e){\n $.console.error('Error uploading image data to WebGL', e);\n }\n }\n\n // private\n _imageUnloadedHandler(event){\n let canvas = event.context2D.canvas;\n this._cleanupImageData(canvas);\n }\n\n // private\n _cleanupImageData(tileCanvas){\n let textureInfo = this._TextureMap.get(tileCanvas);\n //remove from the map\n this._TextureMap.delete(tileCanvas);\n\n //release the texture from the GPU\n if(textureInfo){\n this._gl.deleteTexture(textureInfo.texture);\n }\n\n }\n\n // private\n _setClip(){\n // no-op: called by _renderToClippingCanvas when tiledImage._clip is truthy\n // so that tests will pass.\n }\n\n // private\n _renderToClippingCanvas(item){\n\n this._clippingContext.clearRect(0, 0, this._clippingCanvas.width, this._clippingCanvas.height);\n this._clippingContext.save();\n if(this.viewer.viewport.getFlip()){\n const point = new $.Point(this.canvas.width / 2, this.canvas.height / 2);\n this._clippingContext.translate(point.x, 0);\n this._clippingContext.scale(-1, 1);\n this._clippingContext.translate(-point.x, 0);\n }\n\n if(item._clip){\n const polygon = [\n {x: item._clip.x, y: item._clip.y},\n {x: item._clip.x + item._clip.width, y: item._clip.y},\n {x: item._clip.x + item._clip.width, y: item._clip.y + item._clip.height},\n {x: item._clip.x, y: item._clip.y + item._clip.height},\n ];\n let clipPoints = polygon.map(coord => {\n let point = item.imageToViewportCoordinates(coord.x, coord.y, true)\n .rotate(this.viewer.viewport.getRotation(true), this.viewer.viewport.getCenter(true));\n let clipPoint = this.viewportCoordToDrawerCoord(point);\n return clipPoint;\n });\n this._clippingContext.beginPath();\n clipPoints.forEach( (coord, i) => {\n this._clippingContext[i === 0 ? 'moveTo' : 'lineTo'](coord.x, coord.y);\n });\n this._clippingContext.clip();\n this._setClip();\n }\n if(item._croppingPolygons){\n let polygons = item._croppingPolygons.map(polygon => {\n return polygon.map(coord => {\n let point = item.imageToViewportCoordinates(coord.x, coord.y, true)\n .rotate(this.viewer.viewport.getRotation(true), this.viewer.viewport.getCenter(true));\n let clipPoint = this.viewportCoordToDrawerCoord(point);\n return clipPoint;\n });\n });\n this._clippingContext.beginPath();\n polygons.forEach((polygon) => {\n polygon.forEach( (coord, i) => {\n this._clippingContext[i === 0 ? 'moveTo' : 'lineTo'](coord.x, coord.y);\n });\n });\n this._clippingContext.clip();\n }\n\n if(this.viewer.viewport.getFlip()){\n const point = new $.Point(this.canvas.width / 2, this.canvas.height / 2);\n this._clippingContext.translate(point.x, 0);\n this._clippingContext.scale(-1, 1);\n this._clippingContext.translate(-point.x, 0);\n }\n\n this._clippingContext.drawImage(this._renderingCanvas, 0, 0);\n\n this._clippingContext.restore();\n }\n\n /**\n * Set rotations for viewport & tiledImage\n * @private\n * @param {OpenSeadragon.TiledImage} tiledImage\n */\n _setRotations(tiledImage) {\n var saveContext = false;\n if (this.viewport.getRotation(true) % 360 !== 0) {\n this._offsetForRotation({\n degrees: this.viewport.getRotation(true),\n saveContext: saveContext\n });\n saveContext = false;\n }\n if (tiledImage.getRotation(true) % 360 !== 0) {\n this._offsetForRotation({\n degrees: tiledImage.getRotation(true),\n point: this.viewport.pixelFromPointNoRotate(\n tiledImage._getRotationPoint(true), true),\n saveContext: saveContext\n });\n }\n }\n\n // private\n _offsetForRotation(options) {\n var point = options.point ?\n options.point.times($.pixelDensityRatio) :\n this._getCanvasCenter();\n\n var context = this._outputContext;\n context.save();\n\n context.translate(point.x, point.y);\n context.rotate(Math.PI / 180 * options.degrees);\n context.translate(-point.x, -point.y);\n }\n\n // private\n _flip(options) {\n options = options || {};\n var point = options.point ?\n options.point.times($.pixelDensityRatio) :\n this._getCanvasCenter();\n var context = this._outputContext;\n\n context.translate(point.x, 0);\n context.scale(-1, 1);\n context.translate(-point.x, 0);\n }\n\n // private\n _drawDebugInfo( tilesToDraw, tiledImage, flipped ) {\n\n for ( var i = tilesToDraw.length - 1; i >= 0; i-- ) {\n var tile = tilesToDraw[ i ].tile;\n try {\n this._drawDebugInfoOnTile(tile, tilesToDraw.length, i, tiledImage, flipped);\n } catch(e) {\n $.console.error(e);\n }\n }\n }\n\n // private\n _drawDebugInfoOnTile(tile, count, i, tiledImage, flipped) {\n\n var colorIndex = this.viewer.world.getIndexOfItem(tiledImage) % this.debugGridColor.length;\n var context = this.context;\n context.save();\n context.lineWidth = 2 * $.pixelDensityRatio;\n context.font = 'small-caps bold ' + (13 * $.pixelDensityRatio) + 'px arial';\n context.strokeStyle = this.debugGridColor[colorIndex];\n context.fillStyle = this.debugGridColor[colorIndex];\n\n this._setRotations(tiledImage);\n\n if(flipped){\n this._flip({point: tile.position.plus(tile.size.divide(2))});\n }\n\n context.strokeRect(\n tile.position.x * $.pixelDensityRatio,\n tile.position.y * $.pixelDensityRatio,\n tile.size.x * $.pixelDensityRatio,\n tile.size.y * $.pixelDensityRatio\n );\n\n var tileCenterX = (tile.position.x + (tile.size.x / 2)) * $.pixelDensityRatio;\n var tileCenterY = (tile.position.y + (tile.size.y / 2)) * $.pixelDensityRatio;\n\n // Rotate the text the right way around.\n context.translate( tileCenterX, tileCenterY );\n const angleInDegrees = this.viewport.getRotation(true);\n context.rotate( Math.PI / 180 * -angleInDegrees );\n context.translate( -tileCenterX, -tileCenterY );\n\n if( tile.x === 0 && tile.y === 0 ){\n context.fillText(\n \"Zoom: \" + this.viewport.getZoom(),\n tile.position.x * $.pixelDensityRatio,\n (tile.position.y - 30) * $.pixelDensityRatio\n );\n context.fillText(\n \"Pan: \" + this.viewport.getBounds().toString(),\n tile.position.x * $.pixelDensityRatio,\n (tile.position.y - 20) * $.pixelDensityRatio\n );\n }\n context.fillText(\n \"Level: \" + tile.level,\n (tile.position.x + 10) * $.pixelDensityRatio,\n (tile.position.y + 20) * $.pixelDensityRatio\n );\n context.fillText(\n \"Column: \" + tile.x,\n (tile.position.x + 10) * $.pixelDensityRatio,\n (tile.position.y + 30) * $.pixelDensityRatio\n );\n context.fillText(\n \"Row: \" + tile.y,\n (tile.position.x + 10) * $.pixelDensityRatio,\n (tile.position.y + 40) * $.pixelDensityRatio\n );\n context.fillText(\n \"Order: \" + i + \" of \" + count,\n (tile.position.x + 10) * $.pixelDensityRatio,\n (tile.position.y + 50) * $.pixelDensityRatio\n );\n context.fillText(\n \"Size: \" + tile.size.toString(),\n (tile.position.x + 10) * $.pixelDensityRatio,\n (tile.position.y + 60) * $.pixelDensityRatio\n );\n context.fillText(\n \"Position: \" + tile.position.toString(),\n (tile.position.x + 10) * $.pixelDensityRatio,\n (tile.position.y + 70) * $.pixelDensityRatio\n );\n\n if (this.viewport.getRotation(true) % 360 !== 0 ) {\n this._restoreRotationChanges();\n }\n if (tiledImage.getRotation(true) % 360 !== 0) {\n this._restoreRotationChanges();\n }\n\n context.restore();\n }\n\n _drawPlaceholder(tiledImage){\n\n const bounds = tiledImage.getBounds(true);\n const rect = this.viewportToDrawerRectangle(tiledImage.getBounds(true));\n const context = this._outputContext;\n\n let fillStyle;\n if ( typeof tiledImage.placeholderFillStyle === \"function\" ) {\n fillStyle = tiledImage.placeholderFillStyle(tiledImage, context);\n }\n else {\n fillStyle = tiledImage.placeholderFillStyle;\n }\n\n this._offsetForRotation({degrees: this.viewer.viewport.getRotation(true)});\n context.fillStyle = fillStyle;\n context.translate(rect.x, rect.y);\n context.rotate(Math.PI / 180 * bounds.degrees);\n context.translate(-rect.x, -rect.y);\n context.fillRect(rect.x, rect.y, rect.width, rect.height);\n this._restoreRotationChanges();\n\n }\n\n /**\n * Get the canvas center\n * @private\n * @returns {OpenSeadragon.Point} The center point of the canvas\n */\n _getCanvasCenter() {\n return new $.Point(this.canvas.width / 2, this.canvas.height / 2);\n }\n\n // private\n _restoreRotationChanges() {\n var context = this._outputContext;\n context.restore();\n }\n\n // modified from https://developer.mozilla.org/en-US/docs/Web/API/WebGL_API/Tutorial/Adding_2D_content_to_a_WebGL_context\n static initShaderProgram(gl, vsSource, fsSource) {\n\n function loadShader(gl, type, source) {\n const shader = gl.createShader(type);\n\n // Send the source to the shader object\n\n gl.shaderSource(shader, source);\n\n // Compile the shader program\n\n gl.compileShader(shader);\n\n // See if it compiled successfully\n\n if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {\n $.console.error(\n `An error occurred compiling the shaders: ${gl.getShaderInfoLog(shader)}`\n );\n gl.deleteShader(shader);\n return null;\n }\n\n return shader;\n }\n\n const vertexShader = loadShader(gl, gl.VERTEX_SHADER, vsSource);\n const fragmentShader = loadShader(gl, gl.FRAGMENT_SHADER, fsSource);\n\n // Create the shader program\n\n const shaderProgram = gl.createProgram();\n gl.attachShader(shaderProgram, vertexShader);\n gl.attachShader(shaderProgram, fragmentShader);\n gl.linkProgram(shaderProgram);\n\n // If creating the shader program failed, alert\n\n if (!gl.getProgramParameter(shaderProgram, gl.LINK_STATUS)) {\n $.console.error(\n `Unable to initialize the shader program: ${gl.getProgramInfoLog(\n shaderProgram\n )}`\n );\n return null;\n }\n\n return shaderProgram;\n }\n\n };\n\n\n\n}( OpenSeadragon ));\n\n/*\n * OpenSeadragon - Viewport\n *\n * Copyright (C) 2009 CodePlex Foundation\n * Copyright (C) 2010-2024 OpenSeadragon contributors\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n * - Redistributions of source code must retain the above copyright notice,\n * this list of conditions and the following disclaimer.\n *\n * - Redistributions in binary form must reproduce the above copyright\n * notice, this list of conditions and the following disclaimer in the\n * documentation and/or other materials provided with the distribution.\n *\n * - Neither the name of CodePlex Foundation nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\n * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n(function( $ ){\n\n\n/**\n * @class Viewport\n * @memberof OpenSeadragon\n * @classdesc Handles coordinate-related functionality (zoom, pan, rotation, etc.)\n * for an {@link OpenSeadragon.Viewer}.\n * @param {Object} options - Options for this Viewport.\n * @param {Object} [options.margins] - See viewportMargins in {@link OpenSeadragon.Options}.\n * @param {Number} [options.springStiffness] - See springStiffness in {@link OpenSeadragon.Options}.\n * @param {Number} [options.animationTime] - See animationTime in {@link OpenSeadragon.Options}.\n * @param {Number} [options.minZoomImageRatio] - See minZoomImageRatio in {@link OpenSeadragon.Options}.\n * @param {Number} [options.maxZoomPixelRatio] - See maxZoomPixelRatio in {@link OpenSeadragon.Options}.\n * @param {Number} [options.visibilityRatio] - See visibilityRatio in {@link OpenSeadragon.Options}.\n * @param {Boolean} [options.wrapHorizontal] - See wrapHorizontal in {@link OpenSeadragon.Options}.\n * @param {Boolean} [options.wrapVertical] - See wrapVertical in {@link OpenSeadragon.Options}.\n * @param {Number} [options.defaultZoomLevel] - See defaultZoomLevel in {@link OpenSeadragon.Options}.\n * @param {Number} [options.minZoomLevel] - See minZoomLevel in {@link OpenSeadragon.Options}.\n * @param {Number} [options.maxZoomLevel] - See maxZoomLevel in {@link OpenSeadragon.Options}.\n * @param {Number} [options.degrees] - See degrees in {@link OpenSeadragon.Options}.\n * @param {Boolean} [options.homeFillsViewer] - See homeFillsViewer in {@link OpenSeadragon.Options}.\n * @param {Boolean} [options.silenceMultiImageWarnings] - See silenceMultiImageWarnings in {@link OpenSeadragon.Options}.\n */\n$.Viewport = function( options ) {\n\n //backward compatibility for positional args while preferring more\n //idiomatic javascript options object as the only argument\n var args = arguments;\n if (args.length && args[0] instanceof $.Point) {\n options = {\n containerSize: args[0],\n contentSize: args[1],\n config: args[2]\n };\n }\n\n //options.config and the general config argument are deprecated\n //in favor of the more direct specification of optional settings\n //being passed directly on the options object\n if ( options.config ){\n $.extend( true, options, options.config );\n delete options.config;\n }\n\n this._margins = $.extend({\n left: 0,\n top: 0,\n right: 0,\n bottom: 0\n }, options.margins || {});\n\n delete options.margins;\n\n options.initialDegrees = options.degrees;\n delete options.degrees;\n\n $.extend( true, this, {\n\n //required settings\n containerSize: null,\n contentSize: null,\n\n //internal state properties\n zoomPoint: null,\n rotationPivot: null,\n viewer: null,\n\n //configurable options\n springStiffness: $.DEFAULT_SETTINGS.springStiffness,\n animationTime: $.DEFAULT_SETTINGS.animationTime,\n minZoomImageRatio: $.DEFAULT_SETTINGS.minZoomImageRatio,\n maxZoomPixelRatio: $.DEFAULT_SETTINGS.maxZoomPixelRatio,\n visibilityRatio: $.DEFAULT_SETTINGS.visibilityRatio,\n wrapHorizontal: $.DEFAULT_SETTINGS.wrapHorizontal,\n wrapVertical: $.DEFAULT_SETTINGS.wrapVertical,\n defaultZoomLevel: $.DEFAULT_SETTINGS.defaultZoomLevel,\n minZoomLevel: $.DEFAULT_SETTINGS.minZoomLevel,\n maxZoomLevel: $.DEFAULT_SETTINGS.maxZoomLevel,\n initialDegrees: $.DEFAULT_SETTINGS.degrees,\n flipped: $.DEFAULT_SETTINGS.flipped,\n homeFillsViewer: $.DEFAULT_SETTINGS.homeFillsViewer,\n silenceMultiImageWarnings: $.DEFAULT_SETTINGS.silenceMultiImageWarnings\n\n }, options );\n\n this._updateContainerInnerSize();\n\n this.centerSpringX = new $.Spring({\n initial: 0,\n springStiffness: this.springStiffness,\n animationTime: this.animationTime\n });\n this.centerSpringY = new $.Spring({\n initial: 0,\n springStiffness: this.springStiffness,\n animationTime: this.animationTime\n });\n this.zoomSpring = new $.Spring({\n exponential: true,\n initial: 1,\n springStiffness: this.springStiffness,\n animationTime: this.animationTime\n });\n\n this.degreesSpring = new $.Spring({\n initial: options.initialDegrees,\n springStiffness: this.springStiffness,\n animationTime: this.animationTime\n });\n\n this._oldCenterX = this.centerSpringX.current.value;\n this._oldCenterY = this.centerSpringY.current.value;\n this._oldZoom = this.zoomSpring.current.value;\n this._oldDegrees = this.degreesSpring.current.value;\n\n this._setContentBounds(new $.Rect(0, 0, 1, 1), 1);\n\n this.goHome(true);\n this.update();\n};\n\n/** @lends OpenSeadragon.Viewport.prototype */\n$.Viewport.prototype = {\n\n // deprecated\n get degrees () {\n $.console.warn('Accessing [Viewport.degrees] is deprecated. Use viewport.getRotation instead.');\n return this.getRotation();\n },\n\n // deprecated\n set degrees (degrees) {\n $.console.warn('Setting [Viewport.degrees] is deprecated. Use viewport.rotateTo, viewport.rotateBy, or viewport.setRotation instead.');\n this.rotateTo(degrees);\n },\n\n /**\n * Updates the viewport's home bounds and constraints for the given content size.\n * @function\n * @param {OpenSeadragon.Point} contentSize - size of the content in content units\n * @returns {OpenSeadragon.Viewport} Chainable.\n * @fires OpenSeadragon.Viewer.event:reset-size\n */\n resetContentSize: function(contentSize) {\n $.console.assert(contentSize, \"[Viewport.resetContentSize] contentSize is required\");\n $.console.assert(contentSize instanceof $.Point, \"[Viewport.resetContentSize] contentSize must be an OpenSeadragon.Point\");\n $.console.assert(contentSize.x > 0, \"[Viewport.resetContentSize] contentSize.x must be greater than 0\");\n $.console.assert(contentSize.y > 0, \"[Viewport.resetContentSize] contentSize.y must be greater than 0\");\n\n this._setContentBounds(new $.Rect(0, 0, 1, contentSize.y / contentSize.x), contentSize.x);\n return this;\n },\n\n // deprecated\n setHomeBounds: function(bounds, contentFactor) {\n $.console.error(\"[Viewport.setHomeBounds] this function is deprecated; The content bounds should not be set manually.\");\n this._setContentBounds(bounds, contentFactor);\n },\n\n // Set the viewport's content bounds\n // @param {OpenSeadragon.Rect} bounds - the new bounds in viewport coordinates\n // without rotation\n // @param {Number} contentFactor - how many content units per viewport unit\n // @fires OpenSeadragon.Viewer.event:reset-size\n // @private\n _setContentBounds: function(bounds, contentFactor) {\n $.console.assert(bounds, \"[Viewport._setContentBounds] bounds is required\");\n $.console.assert(bounds instanceof $.Rect, \"[Viewport._setContentBounds] bounds must be an OpenSeadragon.Rect\");\n $.console.assert(bounds.width > 0, \"[Viewport._setContentBounds] bounds.width must be greater than 0\");\n $.console.assert(bounds.height > 0, \"[Viewport._setContentBounds] bounds.height must be greater than 0\");\n\n this._contentBoundsNoRotate = bounds.clone();\n this._contentSizeNoRotate = this._contentBoundsNoRotate.getSize().times(\n contentFactor);\n\n this._contentBounds = bounds.rotate(this.getRotation()).getBoundingBox();\n this._contentSize = this._contentBounds.getSize().times(contentFactor);\n this._contentAspectRatio = this._contentSize.x / this._contentSize.y;\n\n if (this.viewer) {\n /**\n * Raised when the viewer's content size or home bounds are reset\n * (see {@link OpenSeadragon.Viewport#resetContentSize}).\n *\n * @event reset-size\n * @memberof OpenSeadragon.Viewer\n * @type {object}\n * @property {OpenSeadragon.Viewer} eventSource - A reference to the Viewer which raised this event.\n * @property {OpenSeadragon.Point} contentSize\n * @property {OpenSeadragon.Rect} contentBounds - Content bounds.\n * @property {OpenSeadragon.Rect} homeBounds - Content bounds.\n * Deprecated use contentBounds instead.\n * @property {Number} contentFactor\n * @property {?Object} userData - Arbitrary subscriber-defined object.\n */\n this.viewer.raiseEvent('reset-size', {\n contentSize: this._contentSizeNoRotate.clone(),\n contentFactor: contentFactor,\n homeBounds: this._contentBoundsNoRotate.clone(),\n contentBounds: this._contentBounds.clone()\n });\n }\n },\n\n /**\n * Returns the home zoom in \"viewport zoom\" value.\n * @function\n * @returns {Number} The home zoom in \"viewport zoom\".\n */\n getHomeZoom: function() {\n if (this.defaultZoomLevel) {\n return this.defaultZoomLevel;\n }\n\n var aspectFactor = this._contentAspectRatio / this.getAspectRatio();\n var output;\n if (this.homeFillsViewer) { // fill the viewer and clip the image\n output = aspectFactor >= 1 ? aspectFactor : 1;\n } else {\n output = aspectFactor >= 1 ? 1 : aspectFactor;\n }\n\n return output / this._contentBounds.width;\n },\n\n /**\n * Returns the home bounds in viewport coordinates.\n * @function\n * @returns {OpenSeadragon.Rect} The home bounds in vewport coordinates.\n */\n getHomeBounds: function() {\n return this.getHomeBoundsNoRotate().rotate(-this.getRotation());\n },\n\n /**\n * Returns the home bounds in viewport coordinates.\n * This method ignores the viewport rotation. Use\n * {@link OpenSeadragon.Viewport#getHomeBounds} to take it into account.\n * @function\n * @returns {OpenSeadragon.Rect} The home bounds in vewport coordinates.\n */\n getHomeBoundsNoRotate: function() {\n var center = this._contentBounds.getCenter();\n var width = 1.0 / this.getHomeZoom();\n var height = width / this.getAspectRatio();\n\n return new $.Rect(\n center.x - (width / 2.0),\n center.y - (height / 2.0),\n width,\n height\n );\n },\n\n /**\n * @function\n * @param {Boolean} immediately\n * @fires OpenSeadragon.Viewer.event:home\n */\n goHome: function(immediately) {\n if (this.viewer) {\n /**\n * Raised when the \"home\" operation occurs (see {@link OpenSeadragon.Viewport#goHome}).\n *\n * @event home\n * @memberof OpenSeadragon.Viewer\n * @type {object}\n * @property {OpenSeadragon.Viewer} eventSource - A reference to the Viewer which raised this event.\n * @property {Boolean} immediately\n * @property {?Object} userData - Arbitrary subscriber-defined object.\n */\n this.viewer.raiseEvent('home', {\n immediately: immediately\n });\n }\n return this.fitBounds(this.getHomeBounds(), immediately);\n },\n\n /**\n * @function\n */\n getMinZoom: function() {\n var homeZoom = this.getHomeZoom(),\n zoom = this.minZoomLevel ?\n this.minZoomLevel :\n this.minZoomImageRatio * homeZoom;\n\n return zoom;\n },\n\n /**\n * @function\n */\n getMaxZoom: function() {\n var zoom = this.maxZoomLevel;\n if (!zoom) {\n zoom = this._contentSize.x * this.maxZoomPixelRatio / this._containerInnerSize.x;\n zoom /= this._contentBounds.width;\n }\n\n return Math.max( zoom, this.getHomeZoom() );\n },\n\n /**\n * @function\n */\n getAspectRatio: function() {\n return this._containerInnerSize.x / this._containerInnerSize.y;\n },\n\n /**\n * @function\n * @returns {OpenSeadragon.Point} The size of the container, in screen coordinates.\n */\n getContainerSize: function() {\n return new $.Point(\n this.containerSize.x,\n this.containerSize.y\n );\n },\n\n /**\n * The margins push the \"home\" region in from the sides by the specified amounts.\n * @function\n * @returns {Object} Properties (Numbers, in screen coordinates): left, top, right, bottom.\n */\n getMargins: function() {\n return $.extend({}, this._margins); // Make a copy so we are not returning our original\n },\n\n /**\n * The margins push the \"home\" region in from the sides by the specified amounts.\n * @function\n * @param {Object} margins - Properties (Numbers, in screen coordinates): left, top, right, bottom.\n */\n setMargins: function(margins) {\n $.console.assert($.type(margins) === 'object', '[Viewport.setMargins] margins must be an object');\n\n this._margins = $.extend({\n left: 0,\n top: 0,\n right: 0,\n bottom: 0\n }, margins);\n\n this._updateContainerInnerSize();\n if (this.viewer) {\n this.viewer.forceRedraw();\n }\n },\n\n /**\n * Returns the bounds of the visible area in viewport coordinates.\n * @function\n * @param {Boolean} current - Pass true for the current location; defaults to false (target location).\n * @returns {OpenSeadragon.Rect} The location you are zoomed/panned to, in viewport coordinates.\n */\n getBounds: function(current) {\n return this.getBoundsNoRotate(current).rotate(-this.getRotation(current));\n },\n\n /**\n * Returns the bounds of the visible area in viewport coordinates.\n * This method ignores the viewport rotation. Use\n * {@link OpenSeadragon.Viewport#getBounds} to take it into account.\n * @function\n * @param {Boolean} current - Pass true for the current location; defaults to false (target location).\n * @returns {OpenSeadragon.Rect} The location you are zoomed/panned to, in viewport coordinates.\n */\n getBoundsNoRotate: function(current) {\n var center = this.getCenter(current);\n var width = 1.0 / this.getZoom(current);\n var height = width / this.getAspectRatio();\n\n return new $.Rect(\n center.x - (width / 2.0),\n center.y - (height / 2.0),\n width,\n height\n );\n },\n\n /**\n * @function\n * @param {Boolean} current - Pass true for the current location; defaults to false (target location).\n * @returns {OpenSeadragon.Rect} The location you are zoomed/panned to,\n * including the space taken by margins, in viewport coordinates.\n */\n getBoundsWithMargins: function(current) {\n return this.getBoundsNoRotateWithMargins(current).rotate(\n -this.getRotation(current), this.getCenter(current));\n },\n\n /**\n * @function\n * @param {Boolean} current - Pass true for the current location; defaults to false (target location).\n * @returns {OpenSeadragon.Rect} The location you are zoomed/panned to,\n * including the space taken by margins, in viewport coordinates.\n */\n getBoundsNoRotateWithMargins: function(current) {\n var bounds = this.getBoundsNoRotate(current);\n var factor = this._containerInnerSize.x * this.getZoom(current);\n bounds.x -= this._margins.left / factor;\n bounds.y -= this._margins.top / factor;\n bounds.width += (this._margins.left + this._margins.right) / factor;\n bounds.height += (this._margins.top + this._margins.bottom) / factor;\n return bounds;\n },\n\n /**\n * @function\n * @param {Boolean} current - Pass true for the current location; defaults to false (target location).\n */\n getCenter: function( current ) {\n var centerCurrent = new $.Point(\n this.centerSpringX.current.value,\n this.centerSpringY.current.value\n ),\n centerTarget = new $.Point(\n this.centerSpringX.target.value,\n this.centerSpringY.target.value\n ),\n oldZoomPixel,\n zoom,\n width,\n height,\n bounds,\n newZoomPixel,\n deltaZoomPixels,\n deltaZoomPoints;\n\n if ( current ) {\n return centerCurrent;\n } else if ( !this.zoomPoint ) {\n return centerTarget;\n }\n\n oldZoomPixel = this.pixelFromPoint(this.zoomPoint, true);\n\n zoom = this.getZoom();\n width = 1.0 / zoom;\n height = width / this.getAspectRatio();\n bounds = new $.Rect(\n centerCurrent.x - width / 2.0,\n centerCurrent.y - height / 2.0,\n width,\n height\n );\n\n newZoomPixel = this._pixelFromPoint(this.zoomPoint, bounds);\n deltaZoomPixels = newZoomPixel.minus( oldZoomPixel ).rotate(-this.getRotation(true));\n deltaZoomPoints = deltaZoomPixels.divide( this._containerInnerSize.x * zoom );\n\n return centerTarget.plus( deltaZoomPoints );\n },\n\n /**\n * @function\n * @param {Boolean} current - Pass true for the current location; defaults to false (target location).\n */\n getZoom: function( current ) {\n if ( current ) {\n return this.zoomSpring.current.value;\n } else {\n return this.zoomSpring.target.value;\n }\n },\n\n // private\n _applyZoomConstraints: function(zoom) {\n return Math.max(\n Math.min(zoom, this.getMaxZoom()),\n this.getMinZoom());\n },\n\n /**\n * @function\n * @private\n * @param {OpenSeadragon.Rect} bounds\n * @returns {OpenSeadragon.Rect} constrained bounds.\n */\n _applyBoundaryConstraints: function(bounds) {\n var newBounds = this.viewportToViewerElementRectangle(bounds).getBoundingBox();\n var cb = this.viewportToViewerElementRectangle(this._contentBoundsNoRotate).getBoundingBox();\n\n var xConstrained = false;\n var yConstrained = false;\n\n if (this.wrapHorizontal) {\n //do nothing\n } else {\n var boundsRight = newBounds.x + newBounds.width;\n var contentRight = cb.x + cb.width;\n\n var horizontalThreshold, leftDx, rightDx;\n if (newBounds.width > cb.width) {\n horizontalThreshold = this.visibilityRatio * cb.width;\n } else {\n horizontalThreshold = this.visibilityRatio * newBounds.width;\n }\n\n leftDx = cb.x - boundsRight + horizontalThreshold;\n rightDx = contentRight - newBounds.x - horizontalThreshold;\n if (horizontalThreshold > cb.width) {\n newBounds.x += (leftDx + rightDx) / 2;\n xConstrained = true;\n } else if (rightDx < 0) {\n newBounds.x += rightDx;\n xConstrained = true;\n } else if (leftDx > 0) {\n newBounds.x += leftDx;\n xConstrained = true;\n }\n\n }\n\n if (this.wrapVertical) {\n //do nothing\n } else {\n var boundsBottom = newBounds.y + newBounds.height;\n var contentBottom = cb.y + cb.height;\n\n var verticalThreshold, topDy, bottomDy;\n if (newBounds.height > cb.height) {\n verticalThreshold = this.visibilityRatio * cb.height;\n } else{\n verticalThreshold = this.visibilityRatio * newBounds.height;\n }\n\n topDy = cb.y - boundsBottom + verticalThreshold;\n bottomDy = contentBottom - newBounds.y - verticalThreshold;\n if (verticalThreshold > cb.height) {\n newBounds.y += (topDy + bottomDy) / 2;\n yConstrained = true;\n } else if (bottomDy < 0) {\n newBounds.y += bottomDy;\n yConstrained = true;\n } else if (topDy > 0) {\n newBounds.y += topDy;\n yConstrained = true;\n }\n\n }\n\n var constraintApplied = xConstrained || yConstrained;\n var newViewportBounds = constraintApplied ? this.viewerElementToViewportRectangle(newBounds) : bounds.clone();\n newViewportBounds.xConstrained = xConstrained;\n newViewportBounds.yConstrained = yConstrained;\n newViewportBounds.constraintApplied = constraintApplied;\n\n return newViewportBounds;\n },\n\n /**\n * @function\n * @private\n * @param {Boolean} [immediately=false] - whether the function that triggered this event was\n * called with the \"immediately\" flag\n */\n _raiseConstraintsEvent: function(immediately) {\n if (this.viewer) {\n /**\n * Raised when the viewport constraints are applied (see {@link OpenSeadragon.Viewport#applyConstraints}).\n *\n * @event constrain\n * @memberof OpenSeadragon.Viewer\n * @type {object}\n * @property {OpenSeadragon.Viewer} eventSource - A reference to the Viewer which raised this event.\n * @property {Boolean} immediately - whether the function that triggered this event was\n * called with the \"immediately\" flag\n * @property {?Object} userData - Arbitrary subscriber-defined object.\n */\n this.viewer.raiseEvent( 'constrain', {\n immediately: immediately\n });\n }\n },\n\n /**\n * Enforces the minZoom, maxZoom and visibilityRatio constraints by\n * zooming and panning to the closest acceptable zoom and location.\n * @function\n * @param {Boolean} [immediately=false]\n * @returns {OpenSeadragon.Viewport} Chainable.\n * @fires OpenSeadragon.Viewer.event:constrain if constraints were applied\n */\n applyConstraints: function(immediately) {\n var actualZoom = this.getZoom();\n var constrainedZoom = this._applyZoomConstraints(actualZoom);\n\n if (actualZoom !== constrainedZoom) {\n this.zoomTo(constrainedZoom, this.zoomPoint, immediately);\n }\n\n var constrainedBounds = this.getConstrainedBounds(false);\n\n if(constrainedBounds.constraintApplied){\n this.fitBounds(constrainedBounds, immediately);\n this._raiseConstraintsEvent(immediately);\n }\n\n return this;\n },\n\n /**\n * Equivalent to {@link OpenSeadragon.Viewport#applyConstraints}\n * @function\n * @param {Boolean} [immediately=false]\n * @returns {OpenSeadragon.Viewport} Chainable.\n * @fires OpenSeadragon.Viewer.event:constrain\n */\n ensureVisible: function(immediately) {\n return this.applyConstraints(immediately);\n },\n\n /**\n * @function\n * @private\n * @param {OpenSeadragon.Rect} bounds\n * @param {Object} options (immediately=false, constraints=false)\n * @returns {OpenSeadragon.Viewport} Chainable.\n */\n _fitBounds: function(bounds, options) {\n options = options || {};\n var immediately = options.immediately || false;\n var constraints = options.constraints || false;\n\n var aspect = this.getAspectRatio();\n var center = bounds.getCenter();\n\n // Compute width and height of bounding box.\n var newBounds = new $.Rect(\n bounds.x,\n bounds.y,\n bounds.width,\n bounds.height,\n bounds.degrees + this.getRotation())\n .getBoundingBox();\n\n if (newBounds.getAspectRatio() >= aspect) {\n newBounds.height = newBounds.width / aspect;\n } else {\n newBounds.width = newBounds.height * aspect;\n }\n\n // Compute x and y from width, height and center position\n newBounds.x = center.x - newBounds.width / 2;\n newBounds.y = center.y - newBounds.height / 2;\n var newZoom = 1.0 / newBounds.width;\n\n if (immediately) {\n this.panTo(center, true);\n this.zoomTo(newZoom, null, true);\n if(constraints){\n this.applyConstraints(true);\n }\n return this;\n }\n\n var currentCenter = this.getCenter(true);\n var currentZoom = this.getZoom(true);\n this.panTo(currentCenter, true);\n this.zoomTo(currentZoom, null, true);\n\n var oldBounds = this.getBounds();\n var oldZoom = this.getZoom();\n\n if (oldZoom === 0 || Math.abs(newZoom / oldZoom - 1) < 0.00000001) {\n this.zoomTo(newZoom, null, true);\n this.panTo(center, immediately);\n if(constraints){\n this.applyConstraints(false);\n }\n return this;\n }\n\n if(constraints){\n this.panTo(center, false);\n\n newZoom = this._applyZoomConstraints(newZoom);\n this.zoomTo(newZoom, null, false);\n\n var constrainedBounds = this.getConstrainedBounds();\n\n this.panTo(currentCenter, true);\n this.zoomTo(currentZoom, null, true);\n\n this.fitBounds(constrainedBounds);\n } else {\n var rotatedNewBounds = newBounds.rotate(-this.getRotation());\n var referencePoint = rotatedNewBounds.getTopLeft().times(newZoom)\n .minus(oldBounds.getTopLeft().times(oldZoom))\n .divide(newZoom - oldZoom);\n\n this.zoomTo(newZoom, referencePoint, immediately);\n }\n return this;\n },\n\n /**\n * Makes the viewport zoom and pan so that the specified bounds take\n * as much space as possible in the viewport.\n * Note: this method ignores the constraints (minZoom, maxZoom and\n * visibilityRatio).\n * Use {@link OpenSeadragon.Viewport#fitBoundsWithConstraints} to enforce\n * them.\n * @function\n * @param {OpenSeadragon.Rect} bounds\n * @param {Boolean} [immediately=false]\n * @returns {OpenSeadragon.Viewport} Chainable.\n */\n fitBounds: function(bounds, immediately) {\n return this._fitBounds(bounds, {\n immediately: immediately,\n constraints: false\n });\n },\n\n /**\n * Makes the viewport zoom and pan so that the specified bounds take\n * as much space as possible in the viewport while enforcing the constraints\n * (minZoom, maxZoom and visibilityRatio).\n * Note: because this method enforces the constraints, part of the\n * provided bounds may end up outside of the viewport.\n * Use {@link OpenSeadragon.Viewport#fitBounds} to ignore them.\n * @function\n * @param {OpenSeadragon.Rect} bounds\n * @param {Boolean} [immediately=false]\n * @returns {OpenSeadragon.Viewport} Chainable.\n */\n fitBoundsWithConstraints: function(bounds, immediately) {\n return this._fitBounds(bounds, {\n immediately: immediately,\n constraints: true\n });\n },\n\n /**\n * Zooms so the image just fills the viewer vertically.\n * @param {Boolean} immediately\n * @returns {OpenSeadragon.Viewport} Chainable.\n */\n fitVertically: function(immediately) {\n var box = new $.Rect(\n this._contentBounds.x + (this._contentBounds.width / 2),\n this._contentBounds.y,\n 0,\n this._contentBounds.height);\n return this.fitBounds(box, immediately);\n },\n\n /**\n * Zooms so the image just fills the viewer horizontally.\n * @param {Boolean} immediately\n * @returns {OpenSeadragon.Viewport} Chainable.\n */\n fitHorizontally: function(immediately) {\n var box = new $.Rect(\n this._contentBounds.x,\n this._contentBounds.y + (this._contentBounds.height / 2),\n this._contentBounds.width,\n 0);\n return this.fitBounds(box, immediately);\n },\n\n\n /**\n * Returns bounds taking constraints into account\n * Added to improve constrained panning\n * @param {Boolean} current - Pass true for the current location; defaults to false (target location).\n * @returns {OpenSeadragon.Rect} The bounds in viewport coordinates after applying constraints. The returned $.Rect\n * contains additional properties constraintsApplied, xConstrained and yConstrained.\n * These flags indicate whether the viewport bounds were modified by the constraints\n * of the viewer rectangle, and in which dimension(s).\n */\n getConstrainedBounds: function(current) {\n var bounds,\n constrainedBounds;\n\n bounds = this.getBounds(current);\n\n constrainedBounds = this._applyBoundaryConstraints(bounds);\n\n return constrainedBounds;\n },\n\n /**\n * @function\n * @param {OpenSeadragon.Point} delta\n * @param {Boolean} immediately\n * @returns {OpenSeadragon.Viewport} Chainable.\n * @fires OpenSeadragon.Viewer.event:pan\n */\n panBy: function( delta, immediately ) {\n var center = new $.Point(\n this.centerSpringX.target.value,\n this.centerSpringY.target.value\n );\n return this.panTo( center.plus( delta ), immediately );\n },\n\n /**\n * @function\n * @param {OpenSeadragon.Point} center\n * @param {Boolean} immediately\n * @returns {OpenSeadragon.Viewport} Chainable.\n * @fires OpenSeadragon.Viewer.event:pan\n */\n panTo: function( center, immediately ) {\n if ( immediately ) {\n this.centerSpringX.resetTo( center.x );\n this.centerSpringY.resetTo( center.y );\n } else {\n this.centerSpringX.springTo( center.x );\n this.centerSpringY.springTo( center.y );\n }\n\n if( this.viewer ){\n /**\n * Raised when the viewport is panned (see {@link OpenSeadragon.Viewport#panBy} and {@link OpenSeadragon.Viewport#panTo}).\n *\n * @event pan\n * @memberof OpenSeadragon.Viewer\n * @type {object}\n * @property {OpenSeadragon.Viewer} eventSource - A reference to the Viewer which raised this event.\n * @property {OpenSeadragon.Point} center\n * @property {Boolean} immediately\n * @property {?Object} userData - Arbitrary subscriber-defined object.\n */\n this.viewer.raiseEvent( 'pan', {\n center: center,\n immediately: immediately\n });\n }\n\n return this;\n },\n\n /**\n * @function\n * @returns {OpenSeadragon.Viewport} Chainable.\n * @fires OpenSeadragon.Viewer.event:zoom\n */\n zoomBy: function(factor, refPoint, immediately) {\n return this.zoomTo(\n this.zoomSpring.target.value * factor, refPoint, immediately);\n },\n\n /**\n * Zooms to the specified zoom level\n * @function\n * @param {Number} zoom The zoom level to zoom to.\n * @param {OpenSeadragon.Point} [refPoint] The point which will stay at\n * the same screen location. Defaults to the viewport center.\n * @param {Boolean} [immediately=false]\n * @returns {OpenSeadragon.Viewport} Chainable.\n * @fires OpenSeadragon.Viewer.event:zoom\n */\n zoomTo: function(zoom, refPoint, immediately) {\n var _this = this;\n\n this.zoomPoint = refPoint instanceof $.Point &&\n !isNaN(refPoint.x) &&\n !isNaN(refPoint.y) ?\n refPoint :\n null;\n\n if (immediately) {\n this._adjustCenterSpringsForZoomPoint(function() {\n _this.zoomSpring.resetTo(zoom);\n });\n } else {\n this.zoomSpring.springTo(zoom);\n }\n\n if (this.viewer) {\n /**\n * Raised when the viewport zoom level changes (see {@link OpenSeadragon.Viewport#zoomBy} and {@link OpenSeadragon.Viewport#zoomTo}).\n *\n * @event zoom\n * @memberof OpenSeadragon.Viewer\n * @type {object}\n * @property {OpenSeadragon.Viewer} eventSource - A reference to the Viewer which raised this event.\n * @property {Number} zoom\n * @property {OpenSeadragon.Point} refPoint\n * @property {Boolean} immediately\n * @property {?Object} userData - Arbitrary subscriber-defined object.\n */\n this.viewer.raiseEvent('zoom', {\n zoom: zoom,\n refPoint: refPoint,\n immediately: immediately\n });\n }\n\n return this;\n },\n\n /**\n * Rotates this viewport to the angle specified.\n * @function\n * @param {Number} degrees The degrees to set the rotation to.\n * @param {Boolean} [immediately=false] Whether to animate to the new angle\n * or rotate immediately.\n * * @returns {OpenSeadragon.Viewport} Chainable.\n */\n setRotation: function(degrees, immediately) {\n return this.rotateTo(degrees, null, immediately);\n },\n\n /**\n * Gets the current rotation in degrees.\n * @function\n * @param {Boolean} [current=false] True for current rotation, false for target.\n * @returns {Number} The current rotation in degrees.\n */\n getRotation: function(current) {\n return current ?\n this.degreesSpring.current.value :\n this.degreesSpring.target.value;\n },\n\n /**\n * Rotates this viewport to the angle specified around a pivot point. Alias for rotateTo.\n * @function\n * @param {Number} degrees The degrees to set the rotation to.\n * @param {OpenSeadragon.Point} [pivot] (Optional) point in viewport coordinates\n * around which the rotation should be performed. Defaults to the center of the viewport.\n * @param {Boolean} [immediately=false] Whether to animate to the new angle\n * or rotate immediately.\n * * @returns {OpenSeadragon.Viewport} Chainable.\n */\n setRotationWithPivot: function(degrees, pivot, immediately) {\n return this.rotateTo(degrees, pivot, immediately);\n },\n\n /**\n * Rotates this viewport to the angle specified.\n * @function\n * @param {Number} degrees The degrees to set the rotation to.\n * @param {OpenSeadragon.Point} [pivot] (Optional) point in viewport coordinates\n * around which the rotation should be performed. Defaults to the center of the viewport.\n * @param {Boolean} [immediately=false] Whether to animate to the new angle\n * or rotate immediately.\n * @returns {OpenSeadragon.Viewport} Chainable.\n */\n rotateTo: function(degrees, pivot, immediately){\n if (!this.viewer || !this.viewer.drawer.canRotate()) {\n return this;\n }\n\n if (this.degreesSpring.target.value === degrees &&\n this.degreesSpring.isAtTargetValue()) {\n return this;\n }\n this.rotationPivot = pivot instanceof $.Point &&\n !isNaN(pivot.x) &&\n !isNaN(pivot.y) ?\n pivot :\n null;\n if (immediately) {\n if(this.rotationPivot){\n var changeInDegrees = degrees - this._oldDegrees;\n if(!changeInDegrees){\n this.rotationPivot = null;\n return this;\n }\n this._rotateAboutPivot(degrees);\n } else{\n this.degreesSpring.resetTo(degrees);\n }\n } else {\n var normalizedFrom = $.positiveModulo(this.degreesSpring.current.value, 360);\n var normalizedTo = $.positiveModulo(degrees, 360);\n var diff = normalizedTo - normalizedFrom;\n if (diff > 180) {\n normalizedTo -= 360;\n } else if (diff < -180) {\n normalizedTo += 360;\n }\n\n var reverseDiff = normalizedFrom - normalizedTo;\n this.degreesSpring.resetTo(degrees + reverseDiff);\n this.degreesSpring.springTo(degrees);\n }\n\n this._setContentBounds(\n this.viewer.world.getHomeBounds(),\n this.viewer.world.getContentFactor());\n this.viewer.forceRedraw();\n\n /**\n * Raised when rotation has been changed.\n *\n * @event rotate\n * @memberof OpenSeadragon.Viewer\n * @type {object}\n * @property {OpenSeadragon.Viewer} eventSource - A reference to the Viewer which raised the event.\n * @property {Number} degrees - The number of degrees the rotation was set to.\n * @property {Boolean} immediately - Whether the rotation happened immediately or was animated\n * @property {OpenSeadragon.Point} pivot - The point in viewport coordinates around which the rotation (if any) happened\n * @property {?Object} userData - Arbitrary subscriber-defined object.\n */\n this.viewer.raiseEvent('rotate', {degrees: degrees, immediately: !!immediately, pivot: this.rotationPivot || this.getCenter()});\n return this;\n },\n\n /**\n * Rotates this viewport by the angle specified.\n * @function\n * @param {Number} degrees The degrees by which to rotate the viewport.\n * @param {OpenSeadragon.Point} [pivot] (Optional) point in viewport coordinates\n * around which the rotation should be performed. Defaults to the center of the viewport.\n * * @param {Boolean} [immediately=false] Whether to animate to the new angle\n * or rotate immediately.\n * @returns {OpenSeadragon.Viewport} Chainable.\n */\n rotateBy: function(degrees, pivot, immediately){\n return this.rotateTo(this.degreesSpring.target.value + degrees, pivot, immediately);\n },\n\n /**\n * @function\n * @returns {OpenSeadragon.Viewport} Chainable.\n * @fires OpenSeadragon.Viewer.event:resize\n */\n resize: function( newContainerSize, maintain ) {\n var oldBounds = this.getBoundsNoRotate(),\n newBounds = oldBounds,\n widthDeltaFactor;\n\n this.containerSize.x = newContainerSize.x;\n this.containerSize.y = newContainerSize.y;\n\n this._updateContainerInnerSize();\n\n if ( maintain ) {\n // TODO: widthDeltaFactor will always be 1; probably not what's intended\n widthDeltaFactor = newContainerSize.x / this.containerSize.x;\n newBounds.width = oldBounds.width * widthDeltaFactor;\n newBounds.height = newBounds.width / this.getAspectRatio();\n }\n\n if( this.viewer ){\n /**\n * Raised when a viewer resize operation is initiated (see {@link OpenSeadragon.Viewport#resize}).\n * This event happens before the viewport bounds have been updated.\n * See also {@link OpenSeadragon.Viewer#after-resize} which reflects\n * the new viewport bounds following the resize action.\n *\n * @event resize\n * @memberof OpenSeadragon.Viewer\n * @type {object}\n * @property {OpenSeadragon.Viewer} eventSource - A reference to the Viewer which raised this event.\n * @property {OpenSeadragon.Point} newContainerSize\n * @property {Boolean} maintain\n * @property {?Object} userData - Arbitrary subscriber-defined object.\n */\n this.viewer.raiseEvent( 'resize', {\n newContainerSize: newContainerSize,\n maintain: maintain\n });\n }\n\n var output = this.fitBounds( newBounds, true );\n\n if( this.viewer ){\n /**\n * Raised after the viewer is resized (see {@link OpenSeadragon.Viewport#resize}).\n * See also {@link OpenSeadragon.Viewer#resize} event which happens\n * before the new bounds have been calculated and applied.\n *\n * @event after-resize\n * @memberof OpenSeadragon.Viewer\n * @type {object}\n * @property {OpenSeadragon.Viewer} eventSource - A reference to the Viewer which raised this event.\n * @property {OpenSeadragon.Point} newContainerSize\n * @property {Boolean} maintain\n * @property {?Object} userData - Arbitrary subscriber-defined object.\n */\n this.viewer.raiseEvent( 'after-resize', {\n newContainerSize: newContainerSize,\n maintain: maintain\n });\n }\n\n return output;\n },\n\n // private\n _updateContainerInnerSize: function() {\n this._containerInnerSize = new $.Point(\n Math.max(1, this.containerSize.x - (this._margins.left + this._margins.right)),\n Math.max(1, this.containerSize.y - (this._margins.top + this._margins.bottom))\n );\n },\n\n /**\n * Update the zoom, degrees, and center (X and Y) springs.\n * @function\n * @returns {Boolean} True if the viewport is still animating, false otherwise.\n */\n update: function() {\n var _this = this;\n this._adjustCenterSpringsForZoomPoint(function() {\n _this.zoomSpring.update();\n });\n if(this.degreesSpring.isAtTargetValue()){\n this.rotationPivot = null;\n }\n this.centerSpringX.update();\n this.centerSpringY.update();\n\n if(this.rotationPivot){\n this._rotateAboutPivot(true);\n }\n else{\n this.degreesSpring.update();\n }\n\n\n var changed = this.centerSpringX.current.value !== this._oldCenterX ||\n this.centerSpringY.current.value !== this._oldCenterY ||\n this.zoomSpring.current.value !== this._oldZoom ||\n this.degreesSpring.current.value !== this._oldDegrees;\n\n\n this._oldCenterX = this.centerSpringX.current.value;\n this._oldCenterY = this.centerSpringY.current.value;\n this._oldZoom = this.zoomSpring.current.value;\n this._oldDegrees = this.degreesSpring.current.value;\n\n var isAnimating = changed ||\n !this.zoomSpring.isAtTargetValue() ||\n !this.centerSpringX.isAtTargetValue() ||\n !this.centerSpringY.isAtTargetValue() ||\n !this.degreesSpring.isAtTargetValue();\n\n return isAnimating;\n },\n\n // private - pass true to use spring, or a number for degrees for immediate rotation\n _rotateAboutPivot: function(degreesOrUseSpring){\n var useSpring = degreesOrUseSpring === true;\n\n var delta = this.rotationPivot.minus(this.getCenter());\n this.centerSpringX.shiftBy(delta.x);\n this.centerSpringY.shiftBy(delta.y);\n\n if(useSpring){\n this.degreesSpring.update();\n } else {\n this.degreesSpring.resetTo(degreesOrUseSpring);\n }\n\n var changeInDegrees = this.degreesSpring.current.value - this._oldDegrees;\n var rdelta = delta.rotate(changeInDegrees * -1).times(-1);\n this.centerSpringX.shiftBy(rdelta.x);\n this.centerSpringY.shiftBy(rdelta.y);\n },\n\n // private\n _adjustCenterSpringsForZoomPoint: function(zoomSpringHandler) {\n if (this.zoomPoint) {\n var oldZoomPixel = this.pixelFromPoint(this.zoomPoint, true);\n zoomSpringHandler();\n var newZoomPixel = this.pixelFromPoint(this.zoomPoint, true);\n\n var deltaZoomPixels = newZoomPixel.minus(oldZoomPixel);\n var deltaZoomPoints = this.deltaPointsFromPixels(\n deltaZoomPixels, true);\n\n this.centerSpringX.shiftBy(deltaZoomPoints.x);\n this.centerSpringY.shiftBy(deltaZoomPoints.y);\n\n if (this.zoomSpring.isAtTargetValue()) {\n this.zoomPoint = null;\n }\n } else {\n zoomSpringHandler();\n }\n },\n\n /**\n * Convert a delta (translation vector) from viewport coordinates to pixels\n * coordinates. This method does not take rotation into account.\n * Consider using deltaPixelsFromPoints if you need to account for rotation.\n * @param {OpenSeadragon.Point} deltaPoints - The translation vector to convert.\n * @param {Boolean} [current=false] - Pass true for the current location;\n * defaults to false (target location).\n * @returns {OpenSeadragon.Point}\n */\n deltaPixelsFromPointsNoRotate: function(deltaPoints, current) {\n return deltaPoints.times(\n this._containerInnerSize.x * this.getZoom(current)\n );\n },\n\n /**\n * Convert a delta (translation vector) from viewport coordinates to pixels\n * coordinates.\n * @param {OpenSeadragon.Point} deltaPoints - The translation vector to convert.\n * @param {Boolean} [current=false] - Pass true for the current location;\n * defaults to false (target location).\n * @returns {OpenSeadragon.Point}\n */\n deltaPixelsFromPoints: function(deltaPoints, current) {\n return this.deltaPixelsFromPointsNoRotate(\n deltaPoints.rotate(this.getRotation(current)),\n current);\n },\n\n /**\n * Convert a delta (translation vector) from pixels coordinates to viewport\n * coordinates. This method does not take rotation into account.\n * Consider using deltaPointsFromPixels if you need to account for rotation.\n * @param {OpenSeadragon.Point} deltaPixels - The translation vector to convert.\n * @param {Boolean} [current=false] - Pass true for the current location;\n * defaults to false (target location).\n * @returns {OpenSeadragon.Point}\n */\n deltaPointsFromPixelsNoRotate: function(deltaPixels, current) {\n return deltaPixels.divide(\n this._containerInnerSize.x * this.getZoom(current)\n );\n },\n\n /**\n * Convert a delta (translation vector) from pixels coordinates to viewport\n * coordinates.\n * @param {OpenSeadragon.Point} deltaPixels - The translation vector to convert.\n * @param {Boolean} [current=false] - Pass true for the current location;\n * defaults to false (target location).\n * @returns {OpenSeadragon.Point}\n */\n deltaPointsFromPixels: function(deltaPixels, current) {\n return this.deltaPointsFromPixelsNoRotate(deltaPixels, current)\n .rotate(-this.getRotation(current));\n },\n\n /**\n * Convert viewport coordinates to pixels coordinates.\n * This method does not take rotation into account.\n * Consider using pixelFromPoint if you need to account for rotation.\n * @param {OpenSeadragon.Point} point the viewport coordinates\n * @param {Boolean} [current=false] - Pass true for the current location;\n * defaults to false (target location).\n * @returns {OpenSeadragon.Point}\n */\n pixelFromPointNoRotate: function(point, current) {\n return this._pixelFromPointNoRotate(\n point, this.getBoundsNoRotate(current));\n },\n\n /**\n * Convert viewport coordinates to pixel coordinates.\n * @param {OpenSeadragon.Point} point the viewport coordinates\n * @param {Boolean} [current=false] - Pass true for the current location;\n * defaults to false (target location).\n * @returns {OpenSeadragon.Point}\n */\n pixelFromPoint: function(point, current) {\n return this._pixelFromPoint(point, this.getBoundsNoRotate(current));\n },\n\n // private\n _pixelFromPointNoRotate: function(point, bounds) {\n return point.minus(\n bounds.getTopLeft()\n ).times(\n this._containerInnerSize.x / bounds.width\n ).plus(\n new $.Point(this._margins.left, this._margins.top)\n );\n },\n\n // private\n _pixelFromPoint: function(point, bounds) {\n return this._pixelFromPointNoRotate(\n point.rotate(this.getRotation(true), this.getCenter(true)),\n bounds);\n },\n\n /**\n * Convert pixel coordinates to viewport coordinates.\n * This method does not take rotation into account.\n * Consider using pointFromPixel if you need to account for rotation.\n * @param {OpenSeadragon.Point} pixel Pixel coordinates\n * @param {Boolean} [current=false] - Pass true for the current location;\n * defaults to false (target location).\n * @returns {OpenSeadragon.Point}\n */\n pointFromPixelNoRotate: function(pixel, current) {\n var bounds = this.getBoundsNoRotate(current);\n return pixel.minus(\n new $.Point(this._margins.left, this._margins.top)\n ).divide(\n this._containerInnerSize.x / bounds.width\n ).plus(\n bounds.getTopLeft()\n );\n },\n\n /**\n * Convert pixel coordinates to viewport coordinates.\n * @param {OpenSeadragon.Point} pixel Pixel coordinates\n * @param {Boolean} [current=false] - Pass true for the current location;\n * defaults to false (target location).\n * @returns {OpenSeadragon.Point}\n */\n pointFromPixel: function(pixel, current) {\n return this.pointFromPixelNoRotate(pixel, current).rotate(\n -this.getRotation(current),\n this.getCenter(current)\n );\n },\n\n // private\n _viewportToImageDelta: function( viewerX, viewerY ) {\n var scale = this._contentBoundsNoRotate.width;\n return new $.Point(\n viewerX * this._contentSizeNoRotate.x / scale,\n viewerY * this._contentSizeNoRotate.x / scale);\n },\n\n /**\n * Translates from OpenSeadragon viewer coordinate system to image coordinate system.\n * This method can be called either by passing X,Y coordinates or an\n * OpenSeadragon.Point\n * Note: not accurate with multi-image; use TiledImage.viewportToImageCoordinates instead.\n * @function\n * @param {(OpenSeadragon.Point|Number)} viewerX either a point or the X\n * coordinate in viewport coordinate system.\n * @param {Number} [viewerY] Y coordinate in viewport coordinate system.\n * @returns {OpenSeadragon.Point} a point representing the coordinates in the image.\n */\n viewportToImageCoordinates: function(viewerX, viewerY) {\n if (viewerX instanceof $.Point) {\n //they passed a point instead of individual components\n return this.viewportToImageCoordinates(viewerX.x, viewerX.y);\n }\n\n if (this.viewer) {\n var count = this.viewer.world.getItemCount();\n if (count > 1) {\n if (!this.silenceMultiImageWarnings) {\n $.console.error('[Viewport.viewportToImageCoordinates] is not accurate ' +\n 'with multi-image; use TiledImage.viewportToImageCoordinates instead.');\n }\n } else if (count === 1) {\n // It is better to use TiledImage.viewportToImageCoordinates\n // because this._contentBoundsNoRotate can not be relied on\n // with clipping.\n var item = this.viewer.world.getItemAt(0);\n return item.viewportToImageCoordinates(viewerX, viewerY, true);\n }\n }\n\n return this._viewportToImageDelta(\n viewerX - this._contentBoundsNoRotate.x,\n viewerY - this._contentBoundsNoRotate.y);\n },\n\n // private\n _imageToViewportDelta: function( imageX, imageY ) {\n var scale = this._contentBoundsNoRotate.width;\n return new $.Point(\n imageX / this._contentSizeNoRotate.x * scale,\n imageY / this._contentSizeNoRotate.x * scale);\n },\n\n /**\n * Translates from image coordinate system to OpenSeadragon viewer coordinate system\n * This method can be called either by passing X,Y coordinates or an\n * OpenSeadragon.Point\n * Note: not accurate with multi-image; use TiledImage.imageToViewportCoordinates instead.\n * @function\n * @param {(OpenSeadragon.Point | Number)} imageX the point or the\n * X coordinate in image coordinate system.\n * @param {Number} [imageY] Y coordinate in image coordinate system.\n * @returns {OpenSeadragon.Point} a point representing the coordinates in the viewport.\n */\n imageToViewportCoordinates: function(imageX, imageY) {\n if (imageX instanceof $.Point) {\n //they passed a point instead of individual components\n return this.imageToViewportCoordinates(imageX.x, imageX.y);\n }\n\n if (this.viewer) {\n var count = this.viewer.world.getItemCount();\n if (count > 1) {\n if (!this.silenceMultiImageWarnings) {\n $.console.error('[Viewport.imageToViewportCoordinates] is not accurate ' +\n 'with multi-image; use TiledImage.imageToViewportCoordinates instead.');\n }\n } else if (count === 1) {\n // It is better to use TiledImage.viewportToImageCoordinates\n // because this._contentBoundsNoRotate can not be relied on\n // with clipping.\n var item = this.viewer.world.getItemAt(0);\n return item.imageToViewportCoordinates(imageX, imageY, true);\n }\n }\n\n var point = this._imageToViewportDelta(imageX, imageY);\n point.x += this._contentBoundsNoRotate.x;\n point.y += this._contentBoundsNoRotate.y;\n return point;\n },\n\n /**\n * Translates from a rectangle which describes a portion of the image in\n * pixel coordinates to OpenSeadragon viewport rectangle coordinates.\n * This method can be called either by passing X,Y,width,height or an\n * OpenSeadragon.Rect\n * Note: not accurate with multi-image; use TiledImage.imageToViewportRectangle instead.\n * @function\n * @param {(OpenSeadragon.Rect | Number)} imageX the rectangle or the X\n * coordinate of the top left corner of the rectangle in image coordinate system.\n * @param {Number} [imageY] the Y coordinate of the top left corner of the rectangle\n * in image coordinate system.\n * @param {Number} [pixelWidth] the width in pixel of the rectangle.\n * @param {Number} [pixelHeight] the height in pixel of the rectangle.\n * @returns {OpenSeadragon.Rect} This image's bounds in viewport coordinates\n */\n imageToViewportRectangle: function(imageX, imageY, pixelWidth, pixelHeight) {\n var rect = imageX;\n if (!(rect instanceof $.Rect)) {\n //they passed individual components instead of a rectangle\n rect = new $.Rect(imageX, imageY, pixelWidth, pixelHeight);\n }\n\n if (this.viewer) {\n var count = this.viewer.world.getItemCount();\n if (count > 1) {\n if (!this.silenceMultiImageWarnings) {\n $.console.error('[Viewport.imageToViewportRectangle] is not accurate ' +\n 'with multi-image; use TiledImage.imageToViewportRectangle instead.');\n }\n } else if (count === 1) {\n // It is better to use TiledImage.imageToViewportRectangle\n // because this._contentBoundsNoRotate can not be relied on\n // with clipping.\n var item = this.viewer.world.getItemAt(0);\n return item.imageToViewportRectangle(\n imageX, imageY, pixelWidth, pixelHeight, true);\n }\n }\n\n var coordA = this.imageToViewportCoordinates(rect.x, rect.y);\n var coordB = this._imageToViewportDelta(rect.width, rect.height);\n return new $.Rect(\n coordA.x,\n coordA.y,\n coordB.x,\n coordB.y,\n rect.degrees\n );\n },\n\n /**\n * Translates from a rectangle which describes a portion of\n * the viewport in point coordinates to image rectangle coordinates.\n * This method can be called either by passing X,Y,width,height or an\n * OpenSeadragon.Rect\n * Note: not accurate with multi-image; use TiledImage.viewportToImageRectangle instead.\n * @function\n * @param {(OpenSeadragon.Rect | Number)} viewerX either a rectangle or\n * the X coordinate of the top left corner of the rectangle in viewport\n * coordinate system.\n * @param {Number} [viewerY] the Y coordinate of the top left corner of the rectangle\n * in viewport coordinate system.\n * @param {Number} [pointWidth] the width of the rectangle in viewport coordinate system.\n * @param {Number} [pointHeight] the height of the rectangle in viewport coordinate system.\n */\n viewportToImageRectangle: function(viewerX, viewerY, pointWidth, pointHeight) {\n var rect = viewerX;\n if (!(rect instanceof $.Rect)) {\n //they passed individual components instead of a rectangle\n rect = new $.Rect(viewerX, viewerY, pointWidth, pointHeight);\n }\n\n if (this.viewer) {\n var count = this.viewer.world.getItemCount();\n if (count > 1) {\n if (!this.silenceMultiImageWarnings) {\n $.console.error('[Viewport.viewportToImageRectangle] is not accurate ' +\n 'with multi-image; use TiledImage.viewportToImageRectangle instead.');\n }\n } else if (count === 1) {\n // It is better to use TiledImage.viewportToImageCoordinates\n // because this._contentBoundsNoRotate can not be relied on\n // with clipping.\n var item = this.viewer.world.getItemAt(0);\n return item.viewportToImageRectangle(\n viewerX, viewerY, pointWidth, pointHeight, true);\n }\n }\n\n var coordA = this.viewportToImageCoordinates(rect.x, rect.y);\n var coordB = this._viewportToImageDelta(rect.width, rect.height);\n return new $.Rect(\n coordA.x,\n coordA.y,\n coordB.x,\n coordB.y,\n rect.degrees\n );\n },\n\n /**\n * Convert pixel coordinates relative to the viewer element to image\n * coordinates.\n * Note: not accurate with multi-image.\n * @param {OpenSeadragon.Point} pixel\n * @returns {OpenSeadragon.Point}\n */\n viewerElementToImageCoordinates: function( pixel ) {\n var point = this.pointFromPixel( pixel, true );\n return this.viewportToImageCoordinates( point );\n },\n\n /**\n * Convert pixel coordinates relative to the image to\n * viewer element coordinates.\n * Note: not accurate with multi-image.\n * @param {OpenSeadragon.Point} pixel\n * @returns {OpenSeadragon.Point}\n */\n imageToViewerElementCoordinates: function( pixel ) {\n var point = this.imageToViewportCoordinates( pixel );\n return this.pixelFromPoint( point, true );\n },\n\n /**\n * Convert pixel coordinates relative to the window to image coordinates.\n * Note: not accurate with multi-image.\n * @param {OpenSeadragon.Point} pixel\n * @returns {OpenSeadragon.Point}\n */\n windowToImageCoordinates: function(pixel) {\n $.console.assert(this.viewer,\n \"[Viewport.windowToImageCoordinates] the viewport must have a viewer.\");\n var viewerCoordinates = pixel.minus(\n $.getElementPosition(this.viewer.element));\n return this.viewerElementToImageCoordinates(viewerCoordinates);\n },\n\n /**\n * Convert image coordinates to pixel coordinates relative to the window.\n * Note: not accurate with multi-image.\n * @param {OpenSeadragon.Point} pixel\n * @returns {OpenSeadragon.Point}\n */\n imageToWindowCoordinates: function(pixel) {\n $.console.assert(this.viewer,\n \"[Viewport.imageToWindowCoordinates] the viewport must have a viewer.\");\n var viewerCoordinates = this.imageToViewerElementCoordinates(pixel);\n return viewerCoordinates.plus(\n $.getElementPosition(this.viewer.element));\n },\n\n /**\n * Convert pixel coordinates relative to the viewer element to viewport\n * coordinates.\n * @param {OpenSeadragon.Point} pixel\n * @returns {OpenSeadragon.Point}\n */\n viewerElementToViewportCoordinates: function( pixel ) {\n return this.pointFromPixel( pixel, true );\n },\n\n /**\n * Convert viewport coordinates to pixel coordinates relative to the\n * viewer element.\n * @param {OpenSeadragon.Point} point\n * @returns {OpenSeadragon.Point}\n */\n viewportToViewerElementCoordinates: function( point ) {\n return this.pixelFromPoint( point, true );\n },\n\n /**\n * Convert a rectangle in pixel coordinates relative to the viewer element\n * to viewport coordinates.\n * @param {OpenSeadragon.Rect} rectangle the rectangle to convert\n * @returns {OpenSeadragon.Rect} the converted rectangle\n */\n viewerElementToViewportRectangle: function(rectangle) {\n return $.Rect.fromSummits(\n this.pointFromPixel(rectangle.getTopLeft(), true),\n this.pointFromPixel(rectangle.getTopRight(), true),\n this.pointFromPixel(rectangle.getBottomLeft(), true)\n );\n },\n\n /**\n * Convert a rectangle in viewport coordinates to pixel coordinates relative\n * to the viewer element.\n * @param {OpenSeadragon.Rect} rectangle the rectangle to convert\n * @returns {OpenSeadragon.Rect} the converted rectangle\n */\n viewportToViewerElementRectangle: function(rectangle) {\n return $.Rect.fromSummits(\n this.pixelFromPoint(rectangle.getTopLeft(), true),\n this.pixelFromPoint(rectangle.getTopRight(), true),\n this.pixelFromPoint(rectangle.getBottomLeft(), true)\n );\n },\n\n /**\n * Convert pixel coordinates relative to the window to viewport coordinates.\n * @param {OpenSeadragon.Point} pixel\n * @returns {OpenSeadragon.Point}\n */\n windowToViewportCoordinates: function(pixel) {\n $.console.assert(this.viewer,\n \"[Viewport.windowToViewportCoordinates] the viewport must have a viewer.\");\n var viewerCoordinates = pixel.minus(\n $.getElementPosition(this.viewer.element));\n return this.viewerElementToViewportCoordinates(viewerCoordinates);\n },\n\n /**\n * Convert viewport coordinates to pixel coordinates relative to the window.\n * @param {OpenSeadragon.Point} point\n * @returns {OpenSeadragon.Point}\n */\n viewportToWindowCoordinates: function(point) {\n $.console.assert(this.viewer,\n \"[Viewport.viewportToWindowCoordinates] the viewport must have a viewer.\");\n var viewerCoordinates = this.viewportToViewerElementCoordinates(point);\n return viewerCoordinates.plus(\n $.getElementPosition(this.viewer.element));\n },\n\n /**\n * Convert a viewport zoom to an image zoom.\n * Image zoom: ratio of the original image size to displayed image size.\n * 1 means original image size, 0.5 half size...\n * Viewport zoom: ratio of the displayed image's width to viewport's width.\n * 1 means identical width, 2 means image's width is twice the viewport's width...\n * Note: not accurate with multi-image.\n * @function\n * @param {Number} viewportZoom The viewport zoom\n * target zoom.\n * @returns {Number} imageZoom The image zoom\n */\n viewportToImageZoom: function(viewportZoom) {\n if (this.viewer) {\n var count = this.viewer.world.getItemCount();\n if (count > 1) {\n if (!this.silenceMultiImageWarnings) {\n $.console.error('[Viewport.viewportToImageZoom] is not ' +\n 'accurate with multi-image.');\n }\n } else if (count === 1) {\n // It is better to use TiledImage.viewportToImageZoom\n // because this._contentBoundsNoRotate can not be relied on\n // with clipping.\n var item = this.viewer.world.getItemAt(0);\n return item.viewportToImageZoom(viewportZoom);\n }\n }\n\n var imageWidth = this._contentSizeNoRotate.x;\n var containerWidth = this._containerInnerSize.x;\n var scale = this._contentBoundsNoRotate.width;\n var viewportToImageZoomRatio = (containerWidth / imageWidth) * scale;\n return viewportZoom * viewportToImageZoomRatio;\n },\n\n /**\n * Convert an image zoom to a viewport zoom.\n * Image zoom: ratio of the original image size to displayed image size.\n * 1 means original image size, 0.5 half size...\n * Viewport zoom: ratio of the displayed image's width to viewport's width.\n * 1 means identical width, 2 means image's width is twice the viewport's width...\n * Note: not accurate with multi-image; use [TiledImage.imageToViewportZoom] for the specific image of interest.\n * @function\n * @param {Number} imageZoom The image zoom\n * target zoom.\n * @returns {Number} viewportZoom The viewport zoom\n */\n imageToViewportZoom: function(imageZoom) {\n if (this.viewer) {\n var count = this.viewer.world.getItemCount();\n if (count > 1) {\n if (!this.silenceMultiImageWarnings) {\n $.console.error('[Viewport.imageToViewportZoom] is not accurate ' +\n 'with multi-image. Instead, use [TiledImage.imageToViewportZoom] for the specific image of interest');\n }\n } else if (count === 1) {\n // It is better to use TiledImage.imageToViewportZoom\n // because this._contentBoundsNoRotate can not be relied on\n // with clipping.\n var item = this.viewer.world.getItemAt(0);\n return item.imageToViewportZoom(imageZoom);\n }\n }\n\n var imageWidth = this._contentSizeNoRotate.x;\n var containerWidth = this._containerInnerSize.x;\n var scale = this._contentBoundsNoRotate.width;\n var viewportToImageZoomRatio = (imageWidth / containerWidth) / scale;\n return imageZoom * viewportToImageZoomRatio;\n },\n\n /**\n * Toggles flip state and demands a new drawing on navigator and viewer objects.\n * @function\n * @returns {OpenSeadragon.Viewport} Chainable.\n */\n toggleFlip: function() {\n this.setFlip(!this.getFlip());\n return this;\n },\n\n /**\n * Get flip state stored on viewport.\n * @function\n * @returns {Boolean} Flip state.\n */\n getFlip: function() {\n return this.flipped;\n },\n\n /**\n * Sets flip state according to the state input argument.\n * @function\n * @param {Boolean} state - Flip state to set.\n * @returns {OpenSeadragon.Viewport} Chainable.\n */\n setFlip: function( state ) {\n if ( this.flipped === state ) {\n return this;\n }\n\n this.flipped = state;\n if(this.viewer.navigator){\n this.viewer.navigator.setFlip(this.getFlip());\n }\n this.viewer.forceRedraw();\n\n /**\n * Raised when flip state has been changed.\n *\n * @event flip\n * @memberof OpenSeadragon.Viewer\n * @type {object}\n * @property {OpenSeadragon.Viewer} eventSource - A reference to the Viewer which raised the event.\n * @property {Number} flipped - The flip state after this change.\n * @property {?Object} userData - Arbitrary subscriber-defined object.\n */\n this.viewer.raiseEvent('flip', {flipped: state});\n return this;\n },\n\n /**\n * Gets current max zoom pixel ratio\n * @function\n * @returns {Number} Max zoom pixel ratio\n */\n getMaxZoomPixelRatio: function() {\n return this.maxZoomPixelRatio;\n },\n\n /**\n * Sets max zoom pixel ratio\n * @function\n * @param {Number} ratio - Max zoom pixel ratio\n * @param {Boolean} [applyConstraints=true] - Apply constraints after setting ratio;\n * Takes effect only if current zoom is greater than set max zoom pixel ratio\n * @param {Boolean} [immediately=false] - Whether to animate to new zoom\n */\n setMaxZoomPixelRatio: function(ratio, applyConstraints = true, immediately = false) {\n\n $.console.assert(!isNaN(ratio), \"[Viewport.setMaxZoomPixelRatio] ratio must be a number\");\n\n if (isNaN(ratio)) {\n return;\n }\n\n this.maxZoomPixelRatio = ratio;\n\n if (applyConstraints) {\n if (this.getZoom() > this.getMaxZoom()) {\n this.applyConstraints(immediately);\n }\n }\n },\n\n};\n\n}( OpenSeadragon ));\n\n/*\n * OpenSeadragon - TiledImage\n *\n * Copyright (C) 2009 CodePlex Foundation\n * Copyright (C) 2010-2024 OpenSeadragon contributors\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n * - Redistributions of source code must retain the above copyright notice,\n * this list of conditions and the following disclaimer.\n *\n * - Redistributions in binary form must reproduce the above copyright\n * notice, this list of conditions and the following disclaimer in the\n * documentation and/or other materials provided with the distribution.\n *\n * - Neither the name of CodePlex Foundation nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\n * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n(function( $ ){\n\n/**\n * You shouldn't have to create a TiledImage instance directly; get it asynchronously by\n * using {@link OpenSeadragon.Viewer#open} or {@link OpenSeadragon.Viewer#addTiledImage} instead.\n * @class TiledImage\n * @memberof OpenSeadragon\n * @extends OpenSeadragon.EventSource\n * @classdesc Handles rendering of tiles for an {@link OpenSeadragon.Viewer}.\n * A new instance is created for each TileSource opened.\n * @param {Object} options - Configuration for this TiledImage.\n * @param {OpenSeadragon.TileSource} options.source - The TileSource that defines this TiledImage.\n * @param {OpenSeadragon.Viewer} options.viewer - The Viewer that owns this TiledImage.\n * @param {OpenSeadragon.TileCache} options.tileCache - The TileCache for this TiledImage to use.\n * @param {OpenSeadragon.Drawer} options.drawer - The Drawer for this TiledImage to draw onto.\n * @param {OpenSeadragon.ImageLoader} options.imageLoader - The ImageLoader for this TiledImage to use.\n * @param {Number} [options.x=0] - Left position, in viewport coordinates.\n * @param {Number} [options.y=0] - Top position, in viewport coordinates.\n * @param {Number} [options.width=1] - Width, in viewport coordinates.\n * @param {Number} [options.height] - Height, in viewport coordinates.\n * @param {OpenSeadragon.Rect} [options.fitBounds] The bounds in viewport coordinates\n * to fit the image into. If specified, x, y, width and height get ignored.\n * @param {OpenSeadragon.Placement} [options.fitBoundsPlacement=OpenSeadragon.Placement.CENTER]\n * How to anchor the image in the bounds if options.fitBounds is set.\n * @param {OpenSeadragon.Rect} [options.clip] - An area, in image pixels, to clip to\n * (portions of the image outside of this area will not be visible). Only works on\n * browsers that support the HTML5 canvas.\n * @param {Number} [options.springStiffness] - See {@link OpenSeadragon.Options}.\n * @param {Boolean} [options.animationTime] - See {@link OpenSeadragon.Options}.\n * @param {Number} [options.minZoomImageRatio] - See {@link OpenSeadragon.Options}.\n * @param {Boolean} [options.wrapHorizontal] - See {@link OpenSeadragon.Options}.\n * @param {Boolean} [options.wrapVertical] - See {@link OpenSeadragon.Options}.\n * @param {Boolean} [options.immediateRender] - See {@link OpenSeadragon.Options}.\n * @param {Number} [options.blendTime] - See {@link OpenSeadragon.Options}.\n * @param {Boolean} [options.alwaysBlend] - See {@link OpenSeadragon.Options}.\n * @param {Number} [options.minPixelRatio] - See {@link OpenSeadragon.Options}.\n * @param {Number} [options.smoothTileEdgesMinZoom] - See {@link OpenSeadragon.Options}.\n * @param {Boolean} [options.iOSDevice] - See {@link OpenSeadragon.Options}.\n * @param {Number} [options.opacity=1] - Set to draw at proportional opacity. If zero, images will not draw.\n * @param {Boolean} [options.preload=false] - Set true to load even when the image is hidden by zero opacity.\n * @param {String} [options.compositeOperation] - How the image is composited onto other images;\n * see compositeOperation in {@link OpenSeadragon.Options} for possible values.\n * @param {Boolean} [options.debugMode] - See {@link OpenSeadragon.Options}.\n * @param {String|CanvasGradient|CanvasPattern|Function} [options.placeholderFillStyle] - See {@link OpenSeadragon.Options}.\n * @param {String|Boolean} [options.crossOriginPolicy] - See {@link OpenSeadragon.Options}.\n * @param {Boolean} [options.ajaxWithCredentials] - See {@link OpenSeadragon.Options}.\n * @param {Boolean} [options.loadTilesWithAjax]\n * Whether to load tile data using AJAX requests.\n * Defaults to the setting in {@link OpenSeadragon.Options}.\n * @param {Object} [options.ajaxHeaders={}]\n * A set of headers to include when making tile AJAX requests.\n */\n$.TiledImage = function( options ) {\n this._initialized = false;\n /**\n * The {@link OpenSeadragon.TileSource} that defines this TiledImage.\n * @member {OpenSeadragon.TileSource} source\n * @memberof OpenSeadragon.TiledImage#\n */\n $.console.assert( options.tileCache, \"[TiledImage] options.tileCache is required\" );\n $.console.assert( options.drawer, \"[TiledImage] options.drawer is required\" );\n $.console.assert( options.viewer, \"[TiledImage] options.viewer is required\" );\n $.console.assert( options.imageLoader, \"[TiledImage] options.imageLoader is required\" );\n $.console.assert( options.source, \"[TiledImage] options.source is required\" );\n $.console.assert(!options.clip || options.clip instanceof $.Rect,\n \"[TiledImage] options.clip must be an OpenSeadragon.Rect if present\");\n\n $.EventSource.call( this );\n\n this._tileCache = options.tileCache;\n delete options.tileCache;\n\n this._drawer = options.drawer;\n delete options.drawer;\n\n this._imageLoader = options.imageLoader;\n delete options.imageLoader;\n\n if (options.clip instanceof $.Rect) {\n this._clip = options.clip.clone();\n }\n\n delete options.clip;\n\n var x = options.x || 0;\n delete options.x;\n var y = options.y || 0;\n delete options.y;\n\n // Ratio of zoomable image height to width.\n this.normHeight = options.source.dimensions.y / options.source.dimensions.x;\n this.contentAspectX = options.source.dimensions.x / options.source.dimensions.y;\n\n var scale = 1;\n if ( options.width ) {\n scale = options.width;\n delete options.width;\n\n if ( options.height ) {\n $.console.error( \"specifying both width and height to a tiledImage is not supported\" );\n delete options.height;\n }\n } else if ( options.height ) {\n scale = options.height / this.normHeight;\n delete options.height;\n }\n\n var fitBounds = options.fitBounds;\n delete options.fitBounds;\n var fitBoundsPlacement = options.fitBoundsPlacement || OpenSeadragon.Placement.CENTER;\n delete options.fitBoundsPlacement;\n\n var degrees = options.degrees || 0;\n delete options.degrees;\n\n var ajaxHeaders = options.ajaxHeaders;\n delete options.ajaxHeaders;\n\n $.extend( true, this, {\n\n //internal state properties\n viewer: null,\n tilesMatrix: {}, // A '3d' dictionary [level][x][y] --> Tile.\n coverage: {}, // A '3d' dictionary [level][x][y] --> Boolean; shows what areas have been drawn.\n loadingCoverage: {}, // A '3d' dictionary [level][x][y] --> Boolean; shows what areas are loaded or are being loaded/blended.\n lastDrawn: [], // An unordered list of Tiles drawn last frame.\n lastResetTime: 0, // Last time for which the tiledImage was reset.\n _needsDraw: true, // Does the tiledImage need to be drawn again?\n _needsUpdate: true, // Does the tiledImage need to update the viewport again?\n _hasOpaqueTile: false, // Do we have even one fully opaque tile?\n _tilesLoading: 0, // The number of pending tile requests.\n _tilesToDraw: [], // info about the tiles currently in the viewport, two deep: array[level][tile]\n _lastDrawn: [], // array of tiles that were last fetched by the drawer\n _isBlending: false, // Are any tiles still being blended?\n _wasBlending: false, // Were any tiles blending before the last draw?\n _isTainted: false, // Has a Tile been found with tainted data?\n //configurable settings\n springStiffness: $.DEFAULT_SETTINGS.springStiffness,\n animationTime: $.DEFAULT_SETTINGS.animationTime,\n minZoomImageRatio: $.DEFAULT_SETTINGS.minZoomImageRatio,\n wrapHorizontal: $.DEFAULT_SETTINGS.wrapHorizontal,\n wrapVertical: $.DEFAULT_SETTINGS.wrapVertical,\n immediateRender: $.DEFAULT_SETTINGS.immediateRender,\n blendTime: $.DEFAULT_SETTINGS.blendTime,\n alwaysBlend: $.DEFAULT_SETTINGS.alwaysBlend,\n minPixelRatio: $.DEFAULT_SETTINGS.minPixelRatio,\n smoothTileEdgesMinZoom: $.DEFAULT_SETTINGS.smoothTileEdgesMinZoom,\n iOSDevice: $.DEFAULT_SETTINGS.iOSDevice,\n debugMode: $.DEFAULT_SETTINGS.debugMode,\n crossOriginPolicy: $.DEFAULT_SETTINGS.crossOriginPolicy,\n ajaxWithCredentials: $.DEFAULT_SETTINGS.ajaxWithCredentials,\n placeholderFillStyle: $.DEFAULT_SETTINGS.placeholderFillStyle,\n opacity: $.DEFAULT_SETTINGS.opacity,\n preload: $.DEFAULT_SETTINGS.preload,\n compositeOperation: $.DEFAULT_SETTINGS.compositeOperation,\n subPixelRoundingForTransparency: $.DEFAULT_SETTINGS.subPixelRoundingForTransparency,\n maxTilesPerFrame: $.DEFAULT_SETTINGS.maxTilesPerFrame\n }, options );\n\n this._preload = this.preload;\n delete this.preload;\n\n this._fullyLoaded = false;\n\n this._xSpring = new $.Spring({\n initial: x,\n springStiffness: this.springStiffness,\n animationTime: this.animationTime\n });\n\n this._ySpring = new $.Spring({\n initial: y,\n springStiffness: this.springStiffness,\n animationTime: this.animationTime\n });\n\n this._scaleSpring = new $.Spring({\n initial: scale,\n springStiffness: this.springStiffness,\n animationTime: this.animationTime\n });\n\n this._degreesSpring = new $.Spring({\n initial: degrees,\n springStiffness: this.springStiffness,\n animationTime: this.animationTime\n });\n\n this._updateForScale();\n\n if (fitBounds) {\n this.fitBounds(fitBounds, fitBoundsPlacement, true);\n }\n\n this._ownAjaxHeaders = {};\n this.setAjaxHeaders(ajaxHeaders, false);\n this._initialized = true;\n};\n\n$.extend($.TiledImage.prototype, $.EventSource.prototype, /** @lends OpenSeadragon.TiledImage.prototype */{\n /**\n * @returns {Boolean} Whether the TiledImage needs to be drawn.\n */\n needsDraw: function() {\n return this._needsDraw;\n },\n\n /**\n * Mark the tiled image as needing to be (re)drawn\n */\n redraw: function() {\n this._needsDraw = true;\n },\n\n /**\n * @returns {Boolean} Whether all tiles necessary for this TiledImage to draw at the current view have been loaded.\n */\n getFullyLoaded: function() {\n return this._fullyLoaded;\n },\n\n // private\n _setFullyLoaded: function(flag) {\n if (flag === this._fullyLoaded) {\n return;\n }\n\n this._fullyLoaded = flag;\n\n /**\n * Fired when the TiledImage's \"fully loaded\" flag (whether all tiles necessary for this TiledImage\n * to draw at the current view have been loaded) changes.\n *\n * @event fully-loaded-change\n * @memberof OpenSeadragon.TiledImage\n * @type {object}\n * @property {Boolean} fullyLoaded - The new \"fully loaded\" value.\n * @property {OpenSeadragon.TiledImage} eventSource - A reference to the TiledImage which raised the event.\n * @property {?Object} userData - Arbitrary subscriber-defined object.\n */\n this.raiseEvent('fully-loaded-change', {\n fullyLoaded: this._fullyLoaded\n });\n },\n\n /**\n * Clears all tiles and triggers an update on the next call to\n * {@link OpenSeadragon.TiledImage#update}.\n */\n reset: function() {\n this._tileCache.clearTilesFor(this);\n this.lastResetTime = $.now();\n this._needsDraw = true;\n },\n\n /**\n * Updates the TiledImage's bounds, animating if needed. Based on the new\n * bounds, updates the levels and tiles to be drawn into the viewport.\n * @param viewportChanged Whether the viewport changed meaning tiles need to be updated.\n * @returns {Boolean} Whether the TiledImage needs to be drawn.\n */\n update: function(viewportChanged) {\n let xUpdated = this._xSpring.update();\n let yUpdated = this._ySpring.update();\n let scaleUpdated = this._scaleSpring.update();\n let degreesUpdated = this._degreesSpring.update();\n\n let updated = (xUpdated || yUpdated || scaleUpdated || degreesUpdated || this._needsUpdate);\n\n if (updated || viewportChanged || !this._fullyLoaded){\n let fullyLoadedFlag = this._updateLevelsForViewport();\n this._setFullyLoaded(fullyLoadedFlag);\n }\n\n this._needsUpdate = false;\n\n if (updated) {\n this._updateForScale();\n this._raiseBoundsChange();\n this._needsDraw = true;\n return true;\n }\n\n return false;\n },\n\n /**\n * Mark this TiledImage as having been drawn, so that it will only be drawn\n * again if something changes about the image. If the image is still blending,\n * this will have no effect.\n * @returns {Boolean} whether the item still needs to be drawn due to blending\n */\n setDrawn: function(){\n this._needsDraw = this._isBlending || this._wasBlending;\n return this._needsDraw;\n },\n\n /**\n * Set the internal _isTainted flag for this TiledImage. Lazy loaded - not\n * checked each time a Tile is loaded, but can be set if a consumer of the\n * tiles (e.g. a Drawer) discovers a Tile to have tainted data so that further\n * checks are not needed and alternative rendering strategies can be used.\n * @private\n */\n setTainted(isTainted){\n this._isTainted = isTainted;\n },\n\n /**\n * @private\n * @returns {Boolean} whether the TiledImage has been marked as tainted\n */\n isTainted(){\n return this._isTainted;\n },\n\n /**\n * Destroy the TiledImage (unload current loaded tiles).\n */\n destroy: function() {\n this.reset();\n\n if (this.source.destroy) {\n this.source.destroy(this.viewer);\n }\n },\n\n /**\n * Get this TiledImage's bounds in viewport coordinates.\n * @param {Boolean} [current=false] - Pass true for the current location;\n * false for target location.\n * @returns {OpenSeadragon.Rect} This TiledImage's bounds in viewport coordinates.\n */\n getBounds: function(current) {\n return this.getBoundsNoRotate(current)\n .rotate(this.getRotation(current), this._getRotationPoint(current));\n },\n\n /**\n * Get this TiledImage's bounds in viewport coordinates without taking\n * rotation into account.\n * @param {Boolean} [current=false] - Pass true for the current location;\n * false for target location.\n * @returns {OpenSeadragon.Rect} This TiledImage's bounds in viewport coordinates.\n */\n getBoundsNoRotate: function(current) {\n return current ?\n new $.Rect(\n this._xSpring.current.value,\n this._ySpring.current.value,\n this._worldWidthCurrent,\n this._worldHeightCurrent) :\n new $.Rect(\n this._xSpring.target.value,\n this._ySpring.target.value,\n this._worldWidthTarget,\n this._worldHeightTarget);\n },\n\n // deprecated\n getWorldBounds: function() {\n $.console.error('[TiledImage.getWorldBounds] is deprecated; use TiledImage.getBounds instead');\n return this.getBounds();\n },\n\n /**\n * Get the bounds of the displayed part of the tiled image.\n * @param {Boolean} [current=false] Pass true for the current location,\n * false for the target location.\n * @returns {$.Rect} The clipped bounds in viewport coordinates.\n */\n getClippedBounds: function(current) {\n var bounds = this.getBoundsNoRotate(current);\n if (this._clip) {\n var worldWidth = current ?\n this._worldWidthCurrent : this._worldWidthTarget;\n var ratio = worldWidth / this.source.dimensions.x;\n var clip = this._clip.times(ratio);\n bounds = new $.Rect(\n bounds.x + clip.x,\n bounds.y + clip.y,\n clip.width,\n clip.height);\n }\n return bounds.rotate(this.getRotation(current), this._getRotationPoint(current));\n },\n\n /**\n * @function\n * @param {Number} level\n * @param {Number} x\n * @param {Number} y\n * @returns {OpenSeadragon.Rect} Where this tile fits (in normalized coordinates).\n */\n getTileBounds: function( level, x, y ) {\n var numTiles = this.source.getNumTiles(level);\n var xMod = ( numTiles.x + ( x % numTiles.x ) ) % numTiles.x;\n var yMod = ( numTiles.y + ( y % numTiles.y ) ) % numTiles.y;\n var bounds = this.source.getTileBounds(level, xMod, yMod);\n if (this.getFlip()) {\n bounds.x = Math.max(0, 1 - bounds.x - bounds.width);\n }\n bounds.x += (x - xMod) / numTiles.x;\n bounds.y += (this._worldHeightCurrent / this._worldWidthCurrent) * ((y - yMod) / numTiles.y);\n return bounds;\n },\n\n /**\n * @returns {OpenSeadragon.Point} This TiledImage's content size, in original pixels.\n */\n getContentSize: function() {\n return new $.Point(this.source.dimensions.x, this.source.dimensions.y);\n },\n\n /**\n * @returns {OpenSeadragon.Point} The TiledImage's content size, in window coordinates.\n */\n getSizeInWindowCoordinates: function() {\n var topLeft = this.imageToWindowCoordinates(new $.Point(0, 0));\n var bottomRight = this.imageToWindowCoordinates(this.getContentSize());\n return new $.Point(bottomRight.x - topLeft.x, bottomRight.y - topLeft.y);\n },\n\n // private\n _viewportToImageDelta: function( viewerX, viewerY, current ) {\n var scale = (current ? this._scaleSpring.current.value : this._scaleSpring.target.value);\n return new $.Point(viewerX * (this.source.dimensions.x / scale),\n viewerY * ((this.source.dimensions.y * this.contentAspectX) / scale));\n },\n\n /**\n * Translates from OpenSeadragon viewer coordinate system to image coordinate system.\n * This method can be called either by passing X,Y coordinates or an {@link OpenSeadragon.Point}.\n * @param {Number|OpenSeadragon.Point} viewerX - The X coordinate or point in viewport coordinate system.\n * @param {Number} [viewerY] - The Y coordinate in viewport coordinate system.\n * @param {Boolean} [current=false] - Pass true to use the current location; false for target location.\n * @returns {OpenSeadragon.Point} A point representing the coordinates in the image.\n */\n viewportToImageCoordinates: function(viewerX, viewerY, current) {\n var point;\n if (viewerX instanceof $.Point) {\n //they passed a point instead of individual components\n current = viewerY;\n point = viewerX;\n } else {\n point = new $.Point(viewerX, viewerY);\n }\n\n point = point.rotate(-this.getRotation(current), this._getRotationPoint(current));\n return current ?\n this._viewportToImageDelta(\n point.x - this._xSpring.current.value,\n point.y - this._ySpring.current.value) :\n this._viewportToImageDelta(\n point.x - this._xSpring.target.value,\n point.y - this._ySpring.target.value);\n },\n\n // private\n _imageToViewportDelta: function( imageX, imageY, current ) {\n var scale = (current ? this._scaleSpring.current.value : this._scaleSpring.target.value);\n return new $.Point((imageX / this.source.dimensions.x) * scale,\n (imageY / this.source.dimensions.y / this.contentAspectX) * scale);\n },\n\n /**\n * Translates from image coordinate system to OpenSeadragon viewer coordinate system\n * This method can be called either by passing X,Y coordinates or an {@link OpenSeadragon.Point}.\n * @param {Number|OpenSeadragon.Point} imageX - The X coordinate or point in image coordinate system.\n * @param {Number} [imageY] - The Y coordinate in image coordinate system.\n * @param {Boolean} [current=false] - Pass true to use the current location; false for target location.\n * @returns {OpenSeadragon.Point} A point representing the coordinates in the viewport.\n */\n imageToViewportCoordinates: function(imageX, imageY, current) {\n if (imageX instanceof $.Point) {\n //they passed a point instead of individual components\n current = imageY;\n imageY = imageX.y;\n imageX = imageX.x;\n }\n\n var point = this._imageToViewportDelta(imageX, imageY, current);\n if (current) {\n point.x += this._xSpring.current.value;\n point.y += this._ySpring.current.value;\n } else {\n point.x += this._xSpring.target.value;\n point.y += this._ySpring.target.value;\n }\n\n return point.rotate(this.getRotation(current), this._getRotationPoint(current));\n },\n\n /**\n * Translates from a rectangle which describes a portion of the image in\n * pixel coordinates to OpenSeadragon viewport rectangle coordinates.\n * This method can be called either by passing X,Y,width,height or an {@link OpenSeadragon.Rect}.\n * @param {Number|OpenSeadragon.Rect} imageX - The left coordinate or rectangle in image coordinate system.\n * @param {Number} [imageY] - The top coordinate in image coordinate system.\n * @param {Number} [pixelWidth] - The width in pixel of the rectangle.\n * @param {Number} [pixelHeight] - The height in pixel of the rectangle.\n * @param {Boolean} [current=false] - Pass true to use the current location; false for target location.\n * @returns {OpenSeadragon.Rect} A rect representing the coordinates in the viewport.\n */\n imageToViewportRectangle: function(imageX, imageY, pixelWidth, pixelHeight, current) {\n var rect = imageX;\n if (rect instanceof $.Rect) {\n //they passed a rect instead of individual components\n current = imageY;\n } else {\n rect = new $.Rect(imageX, imageY, pixelWidth, pixelHeight);\n }\n\n var coordA = this.imageToViewportCoordinates(rect.getTopLeft(), current);\n var coordB = this._imageToViewportDelta(rect.width, rect.height, current);\n\n return new $.Rect(\n coordA.x,\n coordA.y,\n coordB.x,\n coordB.y,\n rect.degrees + this.getRotation(current)\n );\n },\n\n /**\n * Translates from a rectangle which describes a portion of\n * the viewport in point coordinates to image rectangle coordinates.\n * This method can be called either by passing X,Y,width,height or an {@link OpenSeadragon.Rect}.\n * @param {Number|OpenSeadragon.Rect} viewerX - The left coordinate or rectangle in viewport coordinate system.\n * @param {Number} [viewerY] - The top coordinate in viewport coordinate system.\n * @param {Number} [pointWidth] - The width in viewport coordinate system.\n * @param {Number} [pointHeight] - The height in viewport coordinate system.\n * @param {Boolean} [current=false] - Pass true to use the current location; false for target location.\n * @returns {OpenSeadragon.Rect} A rect representing the coordinates in the image.\n */\n viewportToImageRectangle: function( viewerX, viewerY, pointWidth, pointHeight, current ) {\n var rect = viewerX;\n if (viewerX instanceof $.Rect) {\n //they passed a rect instead of individual components\n current = viewerY;\n } else {\n rect = new $.Rect(viewerX, viewerY, pointWidth, pointHeight);\n }\n\n var coordA = this.viewportToImageCoordinates(rect.getTopLeft(), current);\n var coordB = this._viewportToImageDelta(rect.width, rect.height, current);\n\n return new $.Rect(\n coordA.x,\n coordA.y,\n coordB.x,\n coordB.y,\n rect.degrees - this.getRotation(current)\n );\n },\n\n /**\n * Convert pixel coordinates relative to the viewer element to image\n * coordinates.\n * @param {OpenSeadragon.Point} pixel\n * @returns {OpenSeadragon.Point}\n */\n viewerElementToImageCoordinates: function( pixel ) {\n var point = this.viewport.pointFromPixel( pixel, true );\n return this.viewportToImageCoordinates( point );\n },\n\n /**\n * Convert pixel coordinates relative to the image to\n * viewer element coordinates.\n * @param {OpenSeadragon.Point} pixel\n * @returns {OpenSeadragon.Point}\n */\n imageToViewerElementCoordinates: function( pixel ) {\n var point = this.imageToViewportCoordinates( pixel );\n return this.viewport.pixelFromPoint( point, true );\n },\n\n /**\n * Convert pixel coordinates relative to the window to image coordinates.\n * @param {OpenSeadragon.Point} pixel\n * @returns {OpenSeadragon.Point}\n */\n windowToImageCoordinates: function( pixel ) {\n var viewerCoordinates = pixel.minus(\n OpenSeadragon.getElementPosition( this.viewer.element ));\n return this.viewerElementToImageCoordinates( viewerCoordinates );\n },\n\n /**\n * Convert image coordinates to pixel coordinates relative to the window.\n * @param {OpenSeadragon.Point} pixel\n * @returns {OpenSeadragon.Point}\n */\n imageToWindowCoordinates: function( pixel ) {\n var viewerCoordinates = this.imageToViewerElementCoordinates( pixel );\n return viewerCoordinates.plus(\n OpenSeadragon.getElementPosition( this.viewer.element ));\n },\n\n // private\n // Convert rectangle in viewport coordinates to this tiled image point\n // coordinates (x in [0, 1] and y in [0, aspectRatio])\n _viewportToTiledImageRectangle: function(rect) {\n var scale = this._scaleSpring.current.value;\n rect = rect.rotate(-this.getRotation(true), this._getRotationPoint(true));\n return new $.Rect(\n (rect.x - this._xSpring.current.value) / scale,\n (rect.y - this._ySpring.current.value) / scale,\n rect.width / scale,\n rect.height / scale,\n rect.degrees);\n },\n\n /**\n * Convert a viewport zoom to an image zoom.\n * Image zoom: ratio of the original image size to displayed image size.\n * 1 means original image size, 0.5 half size...\n * Viewport zoom: ratio of the displayed image's width to viewport's width.\n * 1 means identical width, 2 means image's width is twice the viewport's width...\n * @function\n * @param {Number} viewportZoom The viewport zoom\n * @returns {Number} imageZoom The image zoom\n */\n viewportToImageZoom: function( viewportZoom ) {\n var ratio = this._scaleSpring.current.value *\n this.viewport._containerInnerSize.x / this.source.dimensions.x;\n return ratio * viewportZoom;\n },\n\n /**\n * Convert an image zoom to a viewport zoom.\n * Image zoom: ratio of the original image size to displayed image size.\n * 1 means original image size, 0.5 half size...\n * Viewport zoom: ratio of the displayed image's width to viewport's width.\n * 1 means identical width, 2 means image's width is twice the viewport's width...\n * Note: not accurate with multi-image.\n * @function\n * @param {Number} imageZoom The image zoom\n * @returns {Number} viewportZoom The viewport zoom\n */\n imageToViewportZoom: function( imageZoom ) {\n var ratio = this._scaleSpring.current.value *\n this.viewport._containerInnerSize.x / this.source.dimensions.x;\n return imageZoom / ratio;\n },\n\n /**\n * Sets the TiledImage's position in the world.\n * @param {OpenSeadragon.Point} position - The new position, in viewport coordinates.\n * @param {Boolean} [immediately=false] - Whether to animate to the new position or snap immediately.\n * @fires OpenSeadragon.TiledImage.event:bounds-change\n */\n setPosition: function(position, immediately) {\n var sameTarget = (this._xSpring.target.value === position.x &&\n this._ySpring.target.value === position.y);\n\n if (immediately) {\n if (sameTarget && this._xSpring.current.value === position.x &&\n this._ySpring.current.value === position.y) {\n return;\n }\n\n this._xSpring.resetTo(position.x);\n this._ySpring.resetTo(position.y);\n this._needsDraw = true;\n this._needsUpdate = true;\n } else {\n if (sameTarget) {\n return;\n }\n\n this._xSpring.springTo(position.x);\n this._ySpring.springTo(position.y);\n this._needsDraw = true;\n this._needsUpdate = true;\n }\n\n if (!sameTarget) {\n this._raiseBoundsChange();\n }\n },\n\n /**\n * Sets the TiledImage's width in the world, adjusting the height to match based on aspect ratio.\n * @param {Number} width - The new width, in viewport coordinates.\n * @param {Boolean} [immediately=false] - Whether to animate to the new size or snap immediately.\n * @fires OpenSeadragon.TiledImage.event:bounds-change\n */\n setWidth: function(width, immediately) {\n this._setScale(width, immediately);\n },\n\n /**\n * Sets the TiledImage's height in the world, adjusting the width to match based on aspect ratio.\n * @param {Number} height - The new height, in viewport coordinates.\n * @param {Boolean} [immediately=false] - Whether to animate to the new size or snap immediately.\n * @fires OpenSeadragon.TiledImage.event:bounds-change\n */\n setHeight: function(height, immediately) {\n this._setScale(height / this.normHeight, immediately);\n },\n\n /**\n * Sets an array of polygons to crop the TiledImage during draw tiles.\n * The render function will use the default non-zero winding rule.\n * @param {OpenSeadragon.Point[][]} polygons - represented in an array of point object in image coordinates.\n * Example format: [\n * [{x: 197, y:172}, {x: 226, y:172}, {x: 226, y:198}, {x: 197, y:198}], // First polygon\n * [{x: 328, y:200}, {x: 330, y:199}, {x: 332, y:201}, {x: 329, y:202}] // Second polygon\n * [{x: 321, y:201}, {x: 356, y:205}, {x: 341, y:250}] // Third polygon\n * ]\n */\n setCroppingPolygons: function( polygons ) {\n var isXYObject = function(obj) {\n return obj instanceof $.Point || (typeof obj.x === 'number' && typeof obj.y === 'number');\n };\n\n var objectToSimpleXYObject = function(objs) {\n return objs.map(function(obj) {\n try {\n if (isXYObject(obj)) {\n return { x: obj.x, y: obj.y };\n } else {\n throw new Error();\n }\n } catch(e) {\n throw new Error('A Provided cropping polygon point is not supported');\n }\n });\n };\n\n try {\n if (!$.isArray(polygons)) {\n throw new Error('Provided cropping polygon is not an array');\n }\n this._croppingPolygons = polygons.map(function(polygon){\n return objectToSimpleXYObject(polygon);\n });\n this._needsDraw = true;\n } catch (e) {\n $.console.error('[TiledImage.setCroppingPolygons] Cropping polygon format not supported');\n $.console.error(e);\n this.resetCroppingPolygons();\n }\n },\n\n /**\n * Resets the cropping polygons, thus next render will remove all cropping\n * polygon effects.\n */\n resetCroppingPolygons: function() {\n this._croppingPolygons = null;\n this._needsDraw = true;\n },\n\n /**\n * Positions and scales the TiledImage to fit in the specified bounds.\n * Note: this method fires OpenSeadragon.TiledImage.event:bounds-change\n * twice\n * @param {OpenSeadragon.Rect} bounds The bounds to fit the image into.\n * @param {OpenSeadragon.Placement} [anchor=OpenSeadragon.Placement.CENTER]\n * How to anchor the image in the bounds.\n * @param {Boolean} [immediately=false] Whether to animate to the new size\n * or snap immediately.\n * @fires OpenSeadragon.TiledImage.event:bounds-change\n */\n fitBounds: function(bounds, anchor, immediately) {\n anchor = anchor || $.Placement.CENTER;\n var anchorProperties = $.Placement.properties[anchor];\n var aspectRatio = this.contentAspectX;\n var xOffset = 0;\n var yOffset = 0;\n var displayedWidthRatio = 1;\n var displayedHeightRatio = 1;\n if (this._clip) {\n aspectRatio = this._clip.getAspectRatio();\n displayedWidthRatio = this._clip.width / this.source.dimensions.x;\n displayedHeightRatio = this._clip.height / this.source.dimensions.y;\n if (bounds.getAspectRatio() > aspectRatio) {\n xOffset = this._clip.x / this._clip.height * bounds.height;\n yOffset = this._clip.y / this._clip.height * bounds.height;\n } else {\n xOffset = this._clip.x / this._clip.width * bounds.width;\n yOffset = this._clip.y / this._clip.width * bounds.width;\n }\n }\n\n if (bounds.getAspectRatio() > aspectRatio) {\n // We will have margins on the X axis\n var height = bounds.height / displayedHeightRatio;\n var marginLeft = 0;\n if (anchorProperties.isHorizontallyCentered) {\n marginLeft = (bounds.width - bounds.height * aspectRatio) / 2;\n } else if (anchorProperties.isRight) {\n marginLeft = bounds.width - bounds.height * aspectRatio;\n }\n this.setPosition(\n new $.Point(bounds.x - xOffset + marginLeft, bounds.y - yOffset),\n immediately);\n this.setHeight(height, immediately);\n } else {\n // We will have margins on the Y axis\n var width = bounds.width / displayedWidthRatio;\n var marginTop = 0;\n if (anchorProperties.isVerticallyCentered) {\n marginTop = (bounds.height - bounds.width / aspectRatio) / 2;\n } else if (anchorProperties.isBottom) {\n marginTop = bounds.height - bounds.width / aspectRatio;\n }\n this.setPosition(\n new $.Point(bounds.x - xOffset, bounds.y - yOffset + marginTop),\n immediately);\n this.setWidth(width, immediately);\n }\n },\n\n /**\n * @returns {OpenSeadragon.Rect|null} The TiledImage's current clip rectangle,\n * in image pixels, or null if none.\n */\n getClip: function() {\n if (this._clip) {\n return this._clip.clone();\n }\n\n return null;\n },\n\n /**\n * @param {OpenSeadragon.Rect|null} newClip - An area, in image pixels, to clip to\n * (portions of the image outside of this area will not be visible). Only works on\n * browsers that support the HTML5 canvas.\n * @fires OpenSeadragon.TiledImage.event:clip-change\n */\n setClip: function(newClip) {\n $.console.assert(!newClip || newClip instanceof $.Rect,\n \"[TiledImage.setClip] newClip must be an OpenSeadragon.Rect or null\");\n\n if (newClip instanceof $.Rect) {\n this._clip = newClip.clone();\n } else {\n this._clip = null;\n }\n\n this._needsUpdate = true;\n this._needsDraw = true;\n /**\n * Raised when the TiledImage's clip is changed.\n * @event clip-change\n * @memberOf OpenSeadragon.TiledImage\n * @type {object}\n * @property {OpenSeadragon.TiledImage} eventSource - A reference to the\n * TiledImage which raised the event.\n * @property {?Object} userData - Arbitrary subscriber-defined object.\n */\n this.raiseEvent('clip-change');\n },\n\n /**\n * @returns {Boolean} Whether the TiledImage should be flipped before rendering.\n */\n getFlip: function() {\n return this.flipped;\n },\n\n /**\n * @param {Boolean} flip Whether the TiledImage should be flipped before rendering.\n * @fires OpenSeadragon.TiledImage.event:bounds-change\n */\n setFlip: function(flip) {\n this.flipped = flip;\n },\n\n get flipped(){\n return this._flipped;\n },\n set flipped(flipped){\n let changed = this._flipped !== !!flipped;\n this._flipped = !!flipped;\n if(changed){\n this.update(true);\n this._needsDraw = true;\n this._raiseBoundsChange();\n }\n },\n\n get wrapHorizontal(){\n return this._wrapHorizontal;\n },\n set wrapHorizontal(wrap){\n let changed = this._wrapHorizontal !== !!wrap;\n this._wrapHorizontal = !!wrap;\n if(this._initialized && changed){\n this.update(true);\n this._needsDraw = true;\n // this._raiseBoundsChange();\n }\n },\n\n get wrapVertical(){\n return this._wrapVertical;\n },\n set wrapVertical(wrap){\n let changed = this._wrapVertical !== !!wrap;\n this._wrapVertical = !!wrap;\n if(this._initialized && changed){\n this.update(true);\n this._needsDraw = true;\n // this._raiseBoundsChange();\n }\n },\n\n get debugMode(){\n return this._debugMode;\n },\n set debugMode(debug){\n this._debugMode = !!debug;\n this._needsDraw = true;\n },\n\n /**\n * @returns {Number} The TiledImage's current opacity.\n */\n getOpacity: function() {\n return this.opacity;\n },\n\n /**\n * @param {Number} opacity Opacity the tiled image should be drawn at.\n * @fires OpenSeadragon.TiledImage.event:opacity-change\n */\n setOpacity: function(opacity) {\n this.opacity = opacity;\n },\n\n get opacity() {\n return this._opacity;\n },\n\n set opacity(opacity) {\n if (opacity === this.opacity) {\n return;\n }\n\n this._opacity = opacity;\n this._needsDraw = true;\n /**\n * Raised when the TiledImage's opacity is changed.\n * @event opacity-change\n * @memberOf OpenSeadragon.TiledImage\n * @type {object}\n * @property {Number} opacity - The new opacity value.\n * @property {OpenSeadragon.TiledImage} eventSource - A reference to the\n * TiledImage which raised the event.\n * @property {?Object} userData - Arbitrary subscriber-defined object.\n */\n this.raiseEvent('opacity-change', {\n opacity: this.opacity\n });\n },\n\n /**\n * @returns {Boolean} whether the tiledImage can load its tiles even when it has zero opacity.\n */\n getPreload: function() {\n return this._preload;\n },\n\n /**\n * Set true to load even when hidden. Set false to block loading when hidden.\n */\n setPreload: function(preload) {\n this._preload = !!preload;\n this._needsDraw = true;\n },\n\n /**\n * Get the rotation of this tiled image in degrees.\n * @param {Boolean} [current=false] True for current rotation, false for target.\n * @returns {Number} the rotation of this tiled image in degrees.\n */\n getRotation: function(current) {\n return current ?\n this._degreesSpring.current.value :\n this._degreesSpring.target.value;\n },\n\n /**\n * Set the current rotation of this tiled image in degrees.\n * @param {Number} degrees the rotation in degrees.\n * @param {Boolean} [immediately=false] Whether to animate to the new angle\n * or rotate immediately.\n * @fires OpenSeadragon.TiledImage.event:bounds-change\n */\n setRotation: function(degrees, immediately) {\n if (this._degreesSpring.target.value === degrees &&\n this._degreesSpring.isAtTargetValue()) {\n return;\n }\n if (immediately) {\n this._degreesSpring.resetTo(degrees);\n } else {\n this._degreesSpring.springTo(degrees);\n }\n this._needsDraw = true;\n this._needsUpdate = true;\n this._raiseBoundsChange();\n },\n\n /**\n * Get the region of this tiled image that falls within the viewport.\n * @returns {OpenSeadragon.Rect} the region of this tiled image that falls within the viewport.\n * Returns false for images with opacity==0 unless preload==true\n */\n getDrawArea: function(){\n\n if( this._opacity === 0 && !this._preload){\n return false;\n }\n\n var drawArea = this._viewportToTiledImageRectangle(\n this.viewport.getBoundsWithMargins(true));\n\n if (!this.wrapHorizontal && !this.wrapVertical) {\n var tiledImageBounds = this._viewportToTiledImageRectangle(\n this.getClippedBounds(true));\n drawArea = drawArea.intersection(tiledImageBounds);\n }\n\n return drawArea;\n },\n\n /**\n *\n * @returns {Array} Array of Tiles that make up the current view\n */\n getTilesToDraw: function(){\n // start with all the tiles added to this._tilesToDraw during the most recent\n // call to this.update. Then update them so the blending and coverage properties\n // are updated based on the current time\n let tileArray = this._tilesToDraw.flat();\n\n // update all tiles, which can change the coverage provided\n this._updateTilesInViewport(tileArray);\n\n // _tilesToDraw might have been updated by the update; refresh it\n tileArray = this._tilesToDraw.flat();\n\n // mark the tiles as being drawn, so that they won't be discarded from\n // the tileCache\n tileArray.forEach(tileInfo => {\n tileInfo.tile.beingDrawn = true;\n });\n this._lastDrawn = tileArray;\n return tileArray;\n },\n\n /**\n * Get the point around which this tiled image is rotated\n * @private\n * @param {Boolean} current True for current rotation point, false for target.\n * @returns {OpenSeadragon.Point}\n */\n _getRotationPoint: function(current) {\n return this.getBoundsNoRotate(current).getCenter();\n },\n\n get compositeOperation(){\n return this._compositeOperation;\n },\n\n set compositeOperation(compositeOperation){\n\n if (compositeOperation === this._compositeOperation) {\n return;\n }\n this._compositeOperation = compositeOperation;\n this._needsDraw = true;\n /**\n * Raised when the TiledImage's opacity is changed.\n * @event composite-operation-change\n * @memberOf OpenSeadragon.TiledImage\n * @type {object}\n * @property {String} compositeOperation - The new compositeOperation value.\n * @property {OpenSeadragon.TiledImage} eventSource - A reference to the\n * TiledImage which raised the event.\n * @property {?Object} userData - Arbitrary subscriber-defined object.\n */\n this.raiseEvent('composite-operation-change', {\n compositeOperation: this._compositeOperation\n });\n\n },\n\n /**\n * @returns {String} The TiledImage's current compositeOperation.\n */\n getCompositeOperation: function() {\n return this._compositeOperation;\n },\n\n /**\n * @param {String} compositeOperation the tiled image should be drawn with this globalCompositeOperation.\n * @fires OpenSeadragon.TiledImage.event:composite-operation-change\n */\n setCompositeOperation: function(compositeOperation) {\n this.compositeOperation = compositeOperation; //invokes setter\n },\n\n /**\n * Update headers to include when making AJAX requests.\n *\n * Unless `propagate` is set to false (which is likely only useful in rare circumstances),\n * the updated headers are propagated to all tiles and queued image loader jobs.\n *\n * Note that the rules for merging headers still apply, i.e. headers returned by\n * {@link OpenSeadragon.TileSource#getTileAjaxHeaders} take precedence over\n * the headers here in the tiled image (`TiledImage.ajaxHeaders`).\n *\n * @function\n * @param {Object} ajaxHeaders Updated AJAX headers, which will be merged over any headers specified in {@link OpenSeadragon.Options}.\n * @param {Boolean} [propagate=true] Whether to propagate updated headers to existing tiles and queued image loader jobs.\n */\n setAjaxHeaders: function(ajaxHeaders, propagate) {\n if (ajaxHeaders === null) {\n ajaxHeaders = {};\n }\n if (!$.isPlainObject(ajaxHeaders)) {\n console.error('[TiledImage.setAjaxHeaders] Ignoring invalid headers, must be a plain object');\n return;\n }\n\n this._ownAjaxHeaders = ajaxHeaders;\n this._updateAjaxHeaders(propagate);\n },\n\n /**\n * Update headers to include when making AJAX requests.\n *\n * This function has the same effect as calling {@link OpenSeadragon.TiledImage#setAjaxHeaders},\n * except that the headers for this tiled image do not change. This is especially useful\n * for propagating updated headers from {@link OpenSeadragon.TileSource#getTileAjaxHeaders}\n * to existing tiles.\n *\n * @private\n * @function\n * @param {Boolean} [propagate=true] Whether to propagate updated headers to existing tiles and queued image loader jobs.\n */\n _updateAjaxHeaders: function(propagate) {\n if (propagate === undefined) {\n propagate = true;\n }\n\n // merge with viewer's headers\n if ($.isPlainObject(this.viewer.ajaxHeaders)) {\n this.ajaxHeaders = $.extend({}, this.viewer.ajaxHeaders, this._ownAjaxHeaders);\n } else {\n this.ajaxHeaders = this._ownAjaxHeaders;\n }\n\n // propagate header updates to all tiles and queued image loader jobs\n if (propagate) {\n var numTiles, xMod, yMod, tile;\n\n for (var level in this.tilesMatrix) {\n numTiles = this.source.getNumTiles(level);\n\n for (var x in this.tilesMatrix[level]) {\n xMod = ( numTiles.x + ( x % numTiles.x ) ) % numTiles.x;\n\n for (var y in this.tilesMatrix[level][x]) {\n yMod = ( numTiles.y + ( y % numTiles.y ) ) % numTiles.y;\n tile = this.tilesMatrix[level][x][y];\n\n tile.loadWithAjax = this.loadTilesWithAjax;\n if (tile.loadWithAjax) {\n var tileAjaxHeaders = this.source.getTileAjaxHeaders( level, xMod, yMod );\n tile.ajaxHeaders = $.extend({}, this.ajaxHeaders, tileAjaxHeaders);\n } else {\n tile.ajaxHeaders = null;\n }\n }\n }\n }\n\n for (var i = 0; i < this._imageLoader.jobQueue.length; i++) {\n var job = this._imageLoader.jobQueue[i];\n job.loadWithAjax = job.tile.loadWithAjax;\n job.ajaxHeaders = job.tile.loadWithAjax ? job.tile.ajaxHeaders : null;\n }\n }\n },\n\n // private\n _setScale: function(scale, immediately) {\n var sameTarget = (this._scaleSpring.target.value === scale);\n if (immediately) {\n if (sameTarget && this._scaleSpring.current.value === scale) {\n return;\n }\n\n this._scaleSpring.resetTo(scale);\n this._updateForScale();\n this._needsDraw = true;\n this._needsUpdate = true;\n } else {\n if (sameTarget) {\n return;\n }\n\n this._scaleSpring.springTo(scale);\n this._updateForScale();\n this._needsDraw = true;\n this._needsUpdate = true;\n }\n\n if (!sameTarget) {\n this._raiseBoundsChange();\n }\n },\n\n // private\n _updateForScale: function() {\n this._worldWidthTarget = this._scaleSpring.target.value;\n this._worldHeightTarget = this.normHeight * this._scaleSpring.target.value;\n this._worldWidthCurrent = this._scaleSpring.current.value;\n this._worldHeightCurrent = this.normHeight * this._scaleSpring.current.value;\n },\n\n // private\n _raiseBoundsChange: function() {\n /**\n * Raised when the TiledImage's bounds are changed.\n * Note that this event is triggered only when the animation target is changed;\n * not for every frame of animation.\n * @event bounds-change\n * @memberOf OpenSeadragon.TiledImage\n * @type {object}\n * @property {OpenSeadragon.TiledImage} eventSource - A reference to the\n * TiledImage which raised the event.\n * @property {?Object} userData - Arbitrary subscriber-defined object.\n */\n this.raiseEvent('bounds-change');\n },\n\n // private\n _isBottomItem: function() {\n return this.viewer.world.getItemAt(0) === this;\n },\n\n // private\n _getLevelsInterval: function() {\n var lowestLevel = Math.max(\n this.source.minLevel,\n Math.floor(Math.log(this.minZoomImageRatio) / Math.log(2))\n );\n var currentZeroRatio = this.viewport.deltaPixelsFromPointsNoRotate(\n this.source.getPixelRatio(0), true).x *\n this._scaleSpring.current.value;\n var highestLevel = Math.min(\n Math.abs(this.source.maxLevel),\n Math.abs(Math.floor(\n Math.log(currentZeroRatio / this.minPixelRatio) / Math.log(2)\n ))\n );\n\n // Calculations for the interval of levels to draw\n // can return invalid intervals; fix that here if necessary\n highestLevel = Math.max(highestLevel, this.source.minLevel || 0);\n lowestLevel = Math.min(lowestLevel, highestLevel);\n return {\n lowestLevel: lowestLevel,\n highestLevel: highestLevel\n };\n },\n\n // returns boolean flag of whether the image should be marked as fully loaded\n _updateLevelsForViewport: function(){\n var levelsInterval = this._getLevelsInterval();\n var lowestLevel = levelsInterval.lowestLevel; // the lowest level we should draw at our current zoom\n var highestLevel = levelsInterval.highestLevel; // the highest level we should draw at our current zoom\n var bestTiles = [];\n var drawArea = this.getDrawArea();\n var currentTime = $.now();\n\n // reset each tile's beingDrawn flag\n this._lastDrawn.forEach(tileinfo => {\n tileinfo.tile.beingDrawn = false;\n });\n // clear the list of tiles to draw\n this._tilesToDraw = [];\n this._tilesLoading = 0;\n this.loadingCoverage = {};\n\n if(!drawArea){\n this._needsDraw = false;\n return this._fullyLoaded;\n }\n\n // make a list of levels to use for the current zoom level\n var levelList = new Array(highestLevel - lowestLevel + 1);\n // go from highest to lowest resolution\n for(let i = 0, level = highestLevel; level >= lowestLevel; level--, i++){\n levelList[i] = level;\n }\n\n // if a single-tile level is loaded, add that to the end of the list\n // as a fallback to use during zooming out, until a lower-res tile is\n // loaded\n for(let level = highestLevel + 1; level <= this.source.maxLevel; level++){\n var tile = (\n this.tilesMatrix[level] &&\n this.tilesMatrix[level][0] &&\n this.tilesMatrix[level][0][0]\n );\n if(tile && tile.isBottomMost && tile.isRightMost && tile.loaded){\n levelList.push(level);\n break;\n }\n }\n\n\n // Update any level that will be drawn.\n // We are iterating from highest resolution to lowest resolution\n // Once a level fully covers the viewport the loop is halted and\n // lower-resolution levels are skipped\n let useLevel = false;\n for (let i = 0; i < levelList.length; i++) {\n let level = levelList[i];\n\n var currentRenderPixelRatio = this.viewport.deltaPixelsFromPointsNoRotate(\n this.source.getPixelRatio(level),\n true\n ).x * this._scaleSpring.current.value;\n\n // make sure we skip levels until currentRenderPixelRatio becomes >= minPixelRatio\n // but always use the last level in the list so we draw something\n if (i === levelList.length - 1 || currentRenderPixelRatio >= this.minPixelRatio ) {\n useLevel = true;\n } else if (!useLevel) {\n continue;\n }\n\n var targetRenderPixelRatio = this.viewport.deltaPixelsFromPointsNoRotate(\n this.source.getPixelRatio(level),\n false\n ).x * this._scaleSpring.current.value;\n\n var targetZeroRatio = this.viewport.deltaPixelsFromPointsNoRotate(\n this.source.getPixelRatio(\n Math.max(\n this.source.getClosestLevel(),\n 0\n )\n ),\n false\n ).x * this._scaleSpring.current.value;\n\n var optimalRatio = this.immediateRender ? 1 : targetZeroRatio;\n var levelOpacity = Math.min(1, (currentRenderPixelRatio - 0.5) / 0.5);\n var levelVisibility = optimalRatio / Math.abs(\n optimalRatio - targetRenderPixelRatio\n );\n\n // Update the level and keep track of 'best' tiles to load\n var result = this._updateLevel(\n level,\n levelOpacity,\n levelVisibility,\n drawArea,\n currentTime,\n bestTiles\n );\n\n bestTiles = result.bestTiles;\n var tiles = result.updatedTiles.filter(tile => tile.loaded);\n var makeTileInfoObject = (function(level, levelOpacity, currentTime){\n return function(tile){\n return {\n tile: tile,\n level: level,\n levelOpacity: levelOpacity,\n currentTime: currentTime\n };\n };\n })(level, levelOpacity, currentTime);\n\n this._tilesToDraw[level] = tiles.map(makeTileInfoObject);\n\n // Stop the loop if lower-res tiles would all be covered by\n // already drawn tiles\n if (this._providesCoverage(this.coverage, level)) {\n break;\n }\n }\n\n\n // Load the new 'best' n tiles\n if (bestTiles && bestTiles.length > 0) {\n bestTiles.forEach(function (tile) {\n if (tile && !tile.context2D) {\n this._loadTile(tile, currentTime);\n }\n }, this);\n\n this._needsDraw = true;\n return false;\n } else {\n return this._tilesLoading === 0;\n }\n\n // Update\n\n },\n\n /**\n * Update all tiles that contribute to the current view\n * @private\n *\n */\n _updateTilesInViewport: function(tiles) {\n let currentTime = $.now();\n let _this = this;\n this._tilesLoading = 0;\n this._wasBlending = this._isBlending;\n this._isBlending = false;\n this.loadingCoverage = {};\n let lowestLevel = tiles.length ? tiles[0].level : 0;\n\n let drawArea = this.getDrawArea();\n if(!drawArea){\n return;\n }\n\n function updateTile(info){\n let tile = info.tile;\n if(tile && tile.loaded){\n let tileIsBlending = _this._blendTile(\n tile,\n tile.x,\n tile.y,\n info.level,\n info.levelOpacity,\n currentTime,\n lowestLevel\n );\n _this._isBlending = _this._isBlending || tileIsBlending;\n _this._needsDraw = _this._needsDraw || tileIsBlending || _this._wasBlending;\n }\n }\n\n // Update each tile in the list of tiles. As the tiles are updated,\n // the coverage provided is also updated. If a level provides coverage\n // as part of this process, discard tiles from lower levels\n let level = 0;\n for(let i = 0; i < tiles.length; i++){\n let tile = tiles[i];\n updateTile(tile);\n if(this._providesCoverage(this.coverage, tile.level)){\n level = Math.max(level, tile.level);\n }\n }\n if(level > 0){\n for( let levelKey in this._tilesToDraw ){\n if( levelKey < level ){\n delete this._tilesToDraw[levelKey];\n }\n }\n }\n\n },\n\n /**\n * Updates the opacity of a tile according to the time it has been on screen\n * to perform a fade-in.\n * Updates coverage once a tile is fully opaque.\n * Returns whether the fade-in has completed.\n * @private\n *\n * @param {OpenSeadragon.Tile} tile\n * @param {Number} x\n * @param {Number} y\n * @param {Number} level\n * @param {Number} levelOpacity\n * @param {Number} currentTime\n * @param {Boolean} lowestLevel\n * @returns {Boolean} true if blending did not yet finish\n */\n _blendTile: function(tile, x, y, level, levelOpacity, currentTime, lowestLevel ){\n let blendTimeMillis = 1000 * this.blendTime,\n deltaTime,\n opacity;\n\n if ( !tile.blendStart ) {\n tile.blendStart = currentTime;\n }\n\n deltaTime = currentTime - tile.blendStart;\n opacity = blendTimeMillis ? Math.min( 1, deltaTime / ( blendTimeMillis ) ) : 1;\n\n // if this tile is at the lowest level being drawn, render at opacity=1\n if(level === lowestLevel){\n opacity = 1;\n deltaTime = blendTimeMillis;\n }\n\n if ( this.alwaysBlend ) {\n opacity *= levelOpacity;\n }\n tile.opacity = opacity;\n\n if ( opacity === 1 ) {\n this._setCoverage( this.coverage, level, x, y, true );\n this._hasOpaqueTile = true;\n }\n // return true if the tile is still blending\n return deltaTime < blendTimeMillis;\n },\n\n /**\n * Updates all tiles at a given resolution level.\n * @private\n * @param {Number} level\n * @param {Number} levelOpacity\n * @param {Number} levelVisibility\n * @param {OpenSeadragon.Rect} drawArea\n * @param {Number} currentTime\n * @param {OpenSeadragon.Tile[]} best Array of the current best tiles\n * @returns {Object} Dictionary {bestTiles: OpenSeadragon.Tile - the current \"best\" tiles to draw, updatedTiles: OpenSeadragon.Tile) - the updated tiles}.\n */\n _updateLevel: function(level, levelOpacity,\n levelVisibility, drawArea, currentTime, best) {\n\n var topLeftBound = drawArea.getBoundingBox().getTopLeft();\n var bottomRightBound = drawArea.getBoundingBox().getBottomRight();\n\n if (this.viewer) {\n /**\n * - Needs documentation -\n *\n * @event update-level\n * @memberof OpenSeadragon.Viewer\n * @type {object}\n * @property {OpenSeadragon.Viewer} eventSource - A reference to the Viewer which raised the event.\n * @property {OpenSeadragon.TiledImage} tiledImage - Which TiledImage is being drawn.\n * @property {Object} havedrawn - deprecated, always true (kept for backwards compatibility)\n * @property {Object} level\n * @property {Object} opacity\n * @property {Object} visibility\n * @property {OpenSeadragon.Rect} drawArea\n * @property {Object} topleft deprecated, use drawArea instead\n * @property {Object} bottomright deprecated, use drawArea instead\n * @property {Object} currenttime\n * @property {Object[]} best\n * @property {?Object} userData - Arbitrary subscriber-defined object.\n */\n this.viewer.raiseEvent('update-level', {\n tiledImage: this,\n havedrawn: true, // deprecated, kept for backwards compatibility\n level: level,\n opacity: levelOpacity,\n visibility: levelVisibility,\n drawArea: drawArea,\n topleft: topLeftBound,\n bottomright: bottomRightBound,\n currenttime: currentTime,\n best: best\n });\n }\n\n this._resetCoverage(this.coverage, level);\n this._resetCoverage(this.loadingCoverage, level);\n\n //OK, a new drawing so do your calculations\n var cornerTiles = this._getCornerTiles(level, topLeftBound, bottomRightBound);\n var topLeftTile = cornerTiles.topLeft;\n var bottomRightTile = cornerTiles.bottomRight;\n var numberOfTiles = this.source.getNumTiles(level);\n\n var viewportCenter = this.viewport.pixelFromPoint(this.viewport.getCenter());\n\n if (this.getFlip()) {\n // The right-most tile can be narrower than the others. When flipped,\n // this tile is now on the left. Because it is narrower than the normal\n // left-most tile, the subsequent tiles may not be wide enough to completely\n // fill the viewport. Fix this by rendering an extra column of tiles. If we\n // are not wrapping, make sure we never render more than the number of tiles\n // in the image.\n bottomRightTile.x += 1;\n if (!this.wrapHorizontal) {\n bottomRightTile.x = Math.min(bottomRightTile.x, numberOfTiles.x - 1);\n }\n }\n var numTiles = Math.max(0, (bottomRightTile.x - topLeftTile.x) * (bottomRightTile.y - topLeftTile.y));\n var tiles = new Array(numTiles);\n var tileIndex = 0;\n for (var x = topLeftTile.x; x <= bottomRightTile.x; x++) {\n for (var y = topLeftTile.y; y <= bottomRightTile.y; y++) {\n\n var flippedX;\n if (this.getFlip()) {\n var xMod = ( numberOfTiles.x + ( x % numberOfTiles.x ) ) % numberOfTiles.x;\n flippedX = x + numberOfTiles.x - xMod - xMod - 1;\n } else {\n flippedX = x;\n }\n\n if (drawArea.intersection(this.getTileBounds(level, flippedX, y)) === null) {\n // This tile is outside of the viewport, no need to draw it\n continue;\n }\n\n var result = this._updateTile(\n flippedX, y,\n level,\n levelVisibility,\n viewportCenter,\n numberOfTiles,\n currentTime,\n best\n );\n best = result.bestTiles;\n tiles[tileIndex] = result.tile;\n tileIndex += 1;\n }\n }\n\n return {\n bestTiles: best,\n updatedTiles: tiles\n };\n },\n\n /**\n * @private\n * @param {OpenSeadragon.Tile} tile\n * @param {Boolean} overlap\n * @param {OpenSeadragon.Viewport} viewport\n * @param {OpenSeadragon.Point} viewportCenter\n * @param {Number} levelVisibility\n */\n _positionTile: function( tile, overlap, viewport, viewportCenter, levelVisibility ){\n var boundsTL = tile.bounds.getTopLeft();\n\n boundsTL.x *= this._scaleSpring.current.value;\n boundsTL.y *= this._scaleSpring.current.value;\n boundsTL.x += this._xSpring.current.value;\n boundsTL.y += this._ySpring.current.value;\n\n var boundsSize = tile.bounds.getSize();\n\n boundsSize.x *= this._scaleSpring.current.value;\n boundsSize.y *= this._scaleSpring.current.value;\n\n tile.positionedBounds.x = boundsTL.x;\n tile.positionedBounds.y = boundsTL.y;\n tile.positionedBounds.width = boundsSize.x;\n tile.positionedBounds.height = boundsSize.y;\n\n var positionC = viewport.pixelFromPointNoRotate(boundsTL, true),\n positionT = viewport.pixelFromPointNoRotate(boundsTL, false),\n sizeC = viewport.deltaPixelsFromPointsNoRotate(boundsSize, true),\n sizeT = viewport.deltaPixelsFromPointsNoRotate(boundsSize, false),\n tileCenter = positionT.plus( sizeT.divide( 2 ) ),\n tileSquaredDistance = viewportCenter.squaredDistanceTo( tileCenter );\n\n if(this.viewer.drawer.minimumOverlapRequired(this)){\n if ( !overlap ) {\n sizeC = sizeC.plus( new $.Point(1, 1));\n }\n\n if (tile.isRightMost && this.wrapHorizontal) {\n sizeC.x += 0.75; // Otherwise Firefox and Safari show seams\n }\n\n if (tile.isBottomMost && this.wrapVertical) {\n sizeC.y += 0.75; // Otherwise Firefox and Safari show seams\n }\n }\n\n tile.position = positionC;\n tile.size = sizeC;\n tile.squaredDistance = tileSquaredDistance;\n tile.visibility = levelVisibility;\n },\n\n /**\n * Update a single tile at a particular resolution level.\n * @private\n * @param {Number} x\n * @param {Number} y\n * @param {Number} level\n * @param {Number} levelVisibility\n * @param {OpenSeadragon.Point} viewportCenter\n * @param {Number} numberOfTiles\n * @param {Number} currentTime\n * @param {OpenSeadragon.Tile} best - The current \"best\" tile to draw.\n * @returns {Object} Dictionary {bestTiles: OpenSeadragon.Tile[] - the current best tiles, tile: OpenSeadragon.Tile the current tile}\n */\n _updateTile: function( x, y, level,\n levelVisibility, viewportCenter, numberOfTiles, currentTime, best){\n\n var tile = this._getTile(\n x, y,\n level,\n currentTime,\n numberOfTiles\n );\n\n if( this.viewer ){\n /**\n * - Needs documentation -\n *\n * @event update-tile\n * @memberof OpenSeadragon.Viewer\n * @type {object}\n * @property {OpenSeadragon.Viewer} eventSource - A reference to the Viewer which raised the event.\n * @property {OpenSeadragon.TiledImage} tiledImage - Which TiledImage is being drawn.\n * @property {OpenSeadragon.Tile} tile\n * @property {?Object} userData - Arbitrary subscriber-defined object.\n */\n this.viewer.raiseEvent( 'update-tile', {\n tiledImage: this,\n tile: tile\n });\n }\n\n this._setCoverage( this.coverage, level, x, y, false );\n\n var loadingCoverage = tile.loaded || tile.loading || this._isCovered(this.loadingCoverage, level, x, y);\n this._setCoverage(this.loadingCoverage, level, x, y, loadingCoverage);\n\n if ( !tile.exists ) {\n return {\n bestTiles: best,\n tile: tile\n };\n }\n if (tile.loaded && tile.opacity === 1){\n this._setCoverage( this.coverage, level, x, y, true );\n }\n\n this._positionTile(\n tile,\n this.source.tileOverlap,\n this.viewport,\n viewportCenter,\n levelVisibility\n );\n\n if (!tile.loaded) {\n if (tile.context2D) {\n this._setTileLoaded(tile);\n } else {\n var imageRecord = this._tileCache.getImageRecord(tile.cacheKey);\n if (imageRecord) {\n this._setTileLoaded(tile, imageRecord.getData());\n }\n }\n }\n\n if ( tile.loading ) {\n // the tile is already in the download queue\n this._tilesLoading++;\n } else if (!loadingCoverage) {\n best = this._compareTiles( best, tile, this.maxTilesPerFrame );\n }\n\n return {\n bestTiles: best,\n tile: tile\n };\n },\n\n // private\n _getCornerTiles: function(level, topLeftBound, bottomRightBound) {\n var leftX;\n var rightX;\n if (this.wrapHorizontal) {\n leftX = $.positiveModulo(topLeftBound.x, 1);\n rightX = $.positiveModulo(bottomRightBound.x, 1);\n } else {\n leftX = Math.max(0, topLeftBound.x);\n rightX = Math.min(1, bottomRightBound.x);\n }\n var topY;\n var bottomY;\n var aspectRatio = 1 / this.source.aspectRatio;\n if (this.wrapVertical) {\n topY = $.positiveModulo(topLeftBound.y, aspectRatio);\n bottomY = $.positiveModulo(bottomRightBound.y, aspectRatio);\n } else {\n topY = Math.max(0, topLeftBound.y);\n bottomY = Math.min(aspectRatio, bottomRightBound.y);\n }\n\n var topLeftTile = this.source.getTileAtPoint(level, new $.Point(leftX, topY));\n var bottomRightTile = this.source.getTileAtPoint(level, new $.Point(rightX, bottomY));\n var numTiles = this.source.getNumTiles(level);\n\n if (this.wrapHorizontal) {\n topLeftTile.x += numTiles.x * Math.floor(topLeftBound.x);\n bottomRightTile.x += numTiles.x * Math.floor(bottomRightBound.x);\n }\n if (this.wrapVertical) {\n topLeftTile.y += numTiles.y * Math.floor(topLeftBound.y / aspectRatio);\n bottomRightTile.y += numTiles.y * Math.floor(bottomRightBound.y / aspectRatio);\n }\n\n return {\n topLeft: topLeftTile,\n bottomRight: bottomRightTile,\n };\n },\n\n /**\n * Obtains a tile at the given location.\n * @private\n * @param {Number} x\n * @param {Number} y\n * @param {Number} level\n * @param {Number} time\n * @param {Number} numTiles\n * @returns {OpenSeadragon.Tile}\n */\n _getTile: function(\n x, y,\n level,\n time,\n numTiles\n ) {\n var xMod,\n yMod,\n bounds,\n sourceBounds,\n exists,\n urlOrGetter,\n post,\n ajaxHeaders,\n context2D,\n tile,\n tilesMatrix = this.tilesMatrix,\n tileSource = this.source;\n\n if ( !tilesMatrix[ level ] ) {\n tilesMatrix[ level ] = {};\n }\n if ( !tilesMatrix[ level ][ x ] ) {\n tilesMatrix[ level ][ x ] = {};\n }\n\n if ( !tilesMatrix[ level ][ x ][ y ] || !tilesMatrix[ level ][ x ][ y ].flipped !== !this.flipped ) {\n xMod = ( numTiles.x + ( x % numTiles.x ) ) % numTiles.x;\n yMod = ( numTiles.y + ( y % numTiles.y ) ) % numTiles.y;\n bounds = this.getTileBounds( level, x, y );\n sourceBounds = tileSource.getTileBounds( level, xMod, yMod, true );\n exists = tileSource.tileExists( level, xMod, yMod );\n urlOrGetter = tileSource.getTileUrl( level, xMod, yMod );\n post = tileSource.getTilePostData( level, xMod, yMod );\n\n // Headers are only applicable if loadTilesWithAjax is set\n if (this.loadTilesWithAjax) {\n ajaxHeaders = tileSource.getTileAjaxHeaders( level, xMod, yMod );\n // Combine tile AJAX headers with tiled image AJAX headers (if applicable)\n if ($.isPlainObject(this.ajaxHeaders)) {\n ajaxHeaders = $.extend({}, this.ajaxHeaders, ajaxHeaders);\n }\n } else {\n ajaxHeaders = null;\n }\n\n context2D = tileSource.getContext2D ?\n tileSource.getContext2D(level, xMod, yMod) : undefined;\n\n tile = new $.Tile(\n level,\n x,\n y,\n bounds,\n exists,\n urlOrGetter,\n context2D,\n this.loadTilesWithAjax,\n ajaxHeaders,\n sourceBounds,\n post,\n tileSource.getTileHashKey(level, xMod, yMod, urlOrGetter, ajaxHeaders, post)\n );\n\n if (this.getFlip()) {\n if (xMod === 0) {\n tile.isRightMost = true;\n }\n } else {\n if (xMod === numTiles.x - 1) {\n tile.isRightMost = true;\n }\n }\n\n if (yMod === numTiles.y - 1) {\n tile.isBottomMost = true;\n }\n\n tile.flipped = this.flipped;\n\n tilesMatrix[ level ][ x ][ y ] = tile;\n }\n\n tile = tilesMatrix[ level ][ x ][ y ];\n tile.lastTouchTime = time;\n\n return tile;\n },\n\n /**\n * Dispatch a job to the ImageLoader to load the Image for a Tile.\n * @private\n * @param {OpenSeadragon.Tile} tile\n * @param {Number} time\n */\n _loadTile: function(tile, time ) {\n var _this = this;\n tile.loading = true;\n this._imageLoader.addJob({\n src: tile.getUrl(),\n tile: tile,\n source: this.source,\n postData: tile.postData,\n loadWithAjax: tile.loadWithAjax,\n ajaxHeaders: tile.ajaxHeaders,\n crossOriginPolicy: this.crossOriginPolicy,\n ajaxWithCredentials: this.ajaxWithCredentials,\n callback: function( data, errorMsg, tileRequest ){\n _this._onTileLoad( tile, time, data, errorMsg, tileRequest );\n },\n abort: function() {\n tile.loading = false;\n }\n });\n },\n\n /**\n * Callback fired when a Tile's Image finished downloading.\n * @private\n * @param {OpenSeadragon.Tile} tile\n * @param {Number} time\n * @param {*} data image data\n * @param {String} errorMsg\n * @param {XMLHttpRequest} tileRequest\n */\n _onTileLoad: function( tile, time, data, errorMsg, tileRequest ) {\n if ( !data ) {\n $.console.error( \"Tile %s failed to load: %s - error: %s\", tile, tile.getUrl(), errorMsg );\n /**\n * Triggered when a tile fails to load.\n *\n * @event tile-load-failed\n * @memberof OpenSeadragon.Viewer\n * @type {object}\n * @property {OpenSeadragon.Tile} tile - The tile that failed to load.\n * @property {OpenSeadragon.TiledImage} tiledImage - The tiled image the tile belongs to.\n * @property {number} time - The time in milliseconds when the tile load began.\n * @property {string} message - The error message.\n * @property {XMLHttpRequest} tileRequest - The XMLHttpRequest used to load the tile if available.\n */\n this.viewer.raiseEvent(\"tile-load-failed\", {\n tile: tile,\n tiledImage: this,\n time: time,\n message: errorMsg,\n tileRequest: tileRequest\n });\n tile.loading = false;\n tile.exists = false;\n return;\n } else {\n tile.exists = true;\n }\n\n if ( time < this.lastResetTime ) {\n $.console.warn( \"Ignoring tile %s loaded before reset: %s\", tile, tile.getUrl() );\n tile.loading = false;\n return;\n }\n\n var _this = this,\n finish = function() {\n var ccc = _this.source;\n var cutoff = ccc.getClosestLevel();\n _this._setTileLoaded(tile, data, cutoff, tileRequest);\n };\n\n\n finish();\n },\n\n /**\n * @private\n * @param {OpenSeadragon.Tile} tile\n * @param {*} data image data, the data sent to ImageJob.prototype.finish(), by default an Image object\n * @param {Number|undefined} cutoff\n * @param {XMLHttpRequest|undefined} tileRequest\n */\n _setTileLoaded: function(tile, data, cutoff, tileRequest) {\n var increment = 0,\n eventFinished = false,\n _this = this;\n\n function getCompletionCallback() {\n if (eventFinished) {\n $.console.error(\"Event 'tile-loaded' argument getCompletionCallback must be called synchronously. \" +\n \"Its return value should be called asynchronously.\");\n }\n increment++;\n return completionCallback;\n }\n\n function completionCallback() {\n increment--;\n if (increment === 0) {\n tile.loading = false;\n tile.loaded = true;\n tile.hasTransparency = _this.source.hasTransparency(\n tile.context2D, tile.getUrl(), tile.ajaxHeaders, tile.postData\n );\n if (!tile.context2D) {\n _this._tileCache.cacheTile({\n data: data,\n tile: tile,\n cutoff: cutoff,\n tiledImage: _this\n });\n }\n /**\n * Triggered when a tile is loaded and pre-processing is compelete,\n * and the tile is ready to draw.\n *\n * @event tile-ready\n * @memberof OpenSeadragon.Viewer\n * @type {object}\n * @property {OpenSeadragon.Tile} tile - The tile which has been loaded.\n * @property {OpenSeadragon.TiledImage} tiledImage - The tiled image of the loaded tile.\n * @property {XMLHttpRequest} tileRequest - The AJAX request that loaded this tile (if applicable).\n * @private\n */\n _this.viewer.raiseEvent(\"tile-ready\", {\n tile: tile,\n tiledImage: _this,\n tileRequest: tileRequest\n });\n _this._needsDraw = true;\n }\n }\n\n /**\n * Triggered when a tile has just been loaded in memory. That means that the\n * image has been downloaded and can be modified before being drawn to the canvas.\n *\n * @event tile-loaded\n * @memberof OpenSeadragon.Viewer\n * @type {object}\n * @property {Image|*} image - The image (data) of the tile. Deprecated.\n * @property {*} data image data, the data sent to ImageJob.prototype.finish(), by default an Image object\n * @property {OpenSeadragon.TiledImage} tiledImage - The tiled image of the loaded tile.\n * @property {OpenSeadragon.Tile} tile - The tile which has been loaded.\n * @property {XMLHttpRequest} tileRequest - The AJAX request that loaded this tile (if applicable).\n * @property {function} getCompletionCallback - A function giving a callback to call\n * when the asynchronous processing of the image is done. The image will be\n * marked as entirely loaded when the callback has been called once for each\n * call to getCompletionCallback.\n */\n\n var fallbackCompletion = getCompletionCallback();\n this.viewer.raiseEvent(\"tile-loaded\", {\n tile: tile,\n tiledImage: this,\n tileRequest: tileRequest,\n get image() {\n $.console.error(\"[tile-loaded] event 'image' has been deprecated. Use 'data' property instead.\");\n return data;\n },\n data: data,\n getCompletionCallback: getCompletionCallback\n });\n eventFinished = true;\n // In case the completion callback is never called, we at least force it once.\n fallbackCompletion();\n },\n\n\n /**\n * Determines the 'best tiles' from the given 'last best' tiles and the\n * tile in question.\n * @private\n *\n * @param {OpenSeadragon.Tile[]} previousBest The best tiles so far.\n * @param {OpenSeadragon.Tile} tile The new tile to consider.\n * @param {Number} maxNTiles The max number of best tiles.\n * @returns {OpenSeadragon.Tile[]} The new best tiles.\n */\n _compareTiles: function( previousBest, tile, maxNTiles ) {\n if ( !previousBest ) {\n return [tile];\n }\n previousBest.push(tile);\n this._sortTiles(previousBest);\n if (previousBest.length > maxNTiles) {\n previousBest.pop();\n }\n return previousBest;\n },\n\n /**\n * Sorts tiles in an array according to distance and visibility.\n * @private\n *\n * @param {OpenSeadragon.Tile[]} tiles The tiles.\n */\n _sortTiles: function( tiles ) {\n tiles.sort(function (a, b) {\n if (a === null) {\n return 1;\n }\n if (b === null) {\n return -1;\n }\n if (a.visibility === b.visibility) {\n // sort by smallest squared distance\n return (a.squaredDistance - b.squaredDistance);\n } else {\n // sort by largest visibility value\n return (b.visibility - a.visibility);\n }\n });\n },\n\n\n /**\n * Returns true if the given tile provides coverage to lower-level tiles of\n * lower resolution representing the same content. If neither x nor y is\n * given, returns true if the entire visible level provides coverage.\n *\n * Note that out-of-bounds tiles provide coverage in this sense, since\n * there's no content that they would need to cover. Tiles at non-existent\n * levels that are within the image bounds, however, do not.\n * @private\n *\n * @param {Object} coverage - A '3d' dictionary [level][x][y] --> Boolean.\n * @param {Number} level - The resolution level of the tile.\n * @param {Number} x - The X position of the tile.\n * @param {Number} y - The Y position of the tile.\n * @returns {Boolean}\n */\n _providesCoverage: function( coverage, level, x, y ) {\n var rows,\n cols,\n i, j;\n\n if ( !coverage[ level ] ) {\n return false;\n }\n\n if ( x === undefined || y === undefined ) {\n rows = coverage[ level ];\n for ( i in rows ) {\n if ( Object.prototype.hasOwnProperty.call( rows, i ) ) {\n cols = rows[ i ];\n for ( j in cols ) {\n if ( Object.prototype.hasOwnProperty.call( cols, j ) && !cols[ j ] ) {\n return false;\n }\n }\n }\n }\n\n return true;\n }\n\n return (\n coverage[ level ][ x] === undefined ||\n coverage[ level ][ x ][ y ] === undefined ||\n coverage[ level ][ x ][ y ] === true\n );\n },\n\n /**\n * Returns true if the given tile is completely covered by higher-level\n * tiles of higher resolution representing the same content. If neither x\n * nor y is given, returns true if the entire visible level is covered.\n * @private\n *\n * @param {Object} coverage - A '3d' dictionary [level][x][y] --> Boolean.\n * @param {Number} level - The resolution level of the tile.\n * @param {Number} x - The X position of the tile.\n * @param {Number} y - The Y position of the tile.\n * @returns {Boolean}\n */\n _isCovered: function( coverage, level, x, y ) {\n if ( x === undefined || y === undefined ) {\n return this._providesCoverage( coverage, level + 1 );\n } else {\n return (\n this._providesCoverage( coverage, level + 1, 2 * x, 2 * y ) &&\n this._providesCoverage( coverage, level + 1, 2 * x, 2 * y + 1 ) &&\n this._providesCoverage( coverage, level + 1, 2 * x + 1, 2 * y ) &&\n this._providesCoverage( coverage, level + 1, 2 * x + 1, 2 * y + 1 )\n );\n }\n },\n\n /**\n * Sets whether the given tile provides coverage or not.\n * @private\n *\n * @param {Object} coverage - A '3d' dictionary [level][x][y] --> Boolean.\n * @param {Number} level - The resolution level of the tile.\n * @param {Number} x - The X position of the tile.\n * @param {Number} y - The Y position of the tile.\n * @param {Boolean} covers - Whether the tile provides coverage.\n */\n _setCoverage: function( coverage, level, x, y, covers ) {\n if ( !coverage[ level ] ) {\n $.console.warn(\n \"Setting coverage for a tile before its level's coverage has been reset: %s\",\n level\n );\n return;\n }\n\n if ( !coverage[ level ][ x ] ) {\n coverage[ level ][ x ] = {};\n }\n\n coverage[ level ][ x ][ y ] = covers;\n },\n\n /**\n * Resets coverage information for the given level. This should be called\n * after every draw routine. Note that at the beginning of the next draw\n * routine, coverage for every visible tile should be explicitly set.\n * @private\n *\n * @param {Object} coverage - A '3d' dictionary [level][x][y] --> Boolean.\n * @param {Number} level - The resolution level of tiles to completely reset.\n */\n _resetCoverage: function( coverage, level ) {\n coverage[ level ] = {};\n }\n});\n\n\n\n}( OpenSeadragon ));\n\n/*\n * OpenSeadragon - TileCache\n *\n * Copyright (C) 2009 CodePlex Foundation\n * Copyright (C) 2010-2024 OpenSeadragon contributors\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n * - Redistributions of source code must retain the above copyright notice,\n * this list of conditions and the following disclaimer.\n *\n * - Redistributions in binary form must reproduce the above copyright\n * notice, this list of conditions and the following disclaimer in the\n * documentation and/or other materials provided with the distribution.\n *\n * - Neither the name of CodePlex Foundation nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\n * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n(function( $ ){\n\n// private class\nvar TileRecord = function( options ) {\n $.console.assert( options, \"[TileCache.cacheTile] options is required\" );\n $.console.assert( options.tile, \"[TileCache.cacheTile] options.tile is required\" );\n $.console.assert( options.tiledImage, \"[TileCache.cacheTile] options.tiledImage is required\" );\n this.tile = options.tile;\n this.tiledImage = options.tiledImage;\n};\n\n// private class\nvar ImageRecord = function(options) {\n $.console.assert( options, \"[ImageRecord] options is required\" );\n $.console.assert( options.data, \"[ImageRecord] options.data is required\" );\n this._tiles = [];\n\n options.create.apply(null, [this, options.data, options.ownerTile]);\n this._destroyImplementation = options.destroy.bind(null, this);\n this.getImage = options.getImage.bind(null, this);\n this.getData = options.getData.bind(null, this);\n this.getRenderedContext = options.getRenderedContext.bind(null, this);\n};\n\nImageRecord.prototype = {\n destroy: function() {\n this._destroyImplementation();\n this._tiles = null;\n },\n\n addTile: function(tile) {\n $.console.assert(tile, '[ImageRecord.addTile] tile is required');\n this._tiles.push(tile);\n },\n\n removeTile: function(tile) {\n for (var i = 0; i < this._tiles.length; i++) {\n if (this._tiles[i] === tile) {\n this._tiles.splice(i, 1);\n return;\n }\n }\n\n $.console.warn('[ImageRecord.removeTile] trying to remove unknown tile', tile);\n },\n\n getTileCount: function() {\n return this._tiles.length;\n }\n};\n\n/**\n * @class TileCache\n * @memberof OpenSeadragon\n * @classdesc Stores all the tiles displayed in a {@link OpenSeadragon.Viewer}.\n * You generally won't have to interact with the TileCache directly.\n * @param {Object} options - Configuration for this TileCache.\n * @param {Number} [options.maxImageCacheCount] - See maxImageCacheCount in\n * {@link OpenSeadragon.Options} for details.\n */\n$.TileCache = function( options ) {\n options = options || {};\n\n this._maxImageCacheCount = options.maxImageCacheCount || $.DEFAULT_SETTINGS.maxImageCacheCount;\n this._tilesLoaded = [];\n this._imagesLoaded = [];\n this._imagesLoadedCount = 0;\n};\n\n/** @lends OpenSeadragon.TileCache.prototype */\n$.TileCache.prototype = {\n /**\n * @returns {Number} The total number of tiles that have been loaded by\n * this TileCache.\n */\n numTilesLoaded: function() {\n return this._tilesLoaded.length;\n },\n\n /**\n * Caches the specified tile, removing an old tile if necessary to stay under the\n * maxImageCacheCount specified on construction. Note that if multiple tiles reference\n * the same image, there may be more tiles than maxImageCacheCount; the goal is to keep\n * the number of images below that number. Note, as well, that even the number of images\n * may temporarily surpass that number, but should eventually come back down to the max specified.\n * @param {Object} options - Tile info.\n * @param {OpenSeadragon.Tile} options.tile - The tile to cache.\n * @param {String} options.tile.cacheKey - The unique key used to identify this tile in the cache.\n * @param {Image} options.image - The image of the tile to cache.\n * @param {OpenSeadragon.TiledImage} options.tiledImage - The TiledImage that owns that tile.\n * @param {Number} [options.cutoff=0] - If adding this tile goes over the cache max count, this\n * function will release an old tile. The cutoff option specifies a tile level at or below which\n * tiles will not be released.\n */\n cacheTile: function( options ) {\n $.console.assert( options, \"[TileCache.cacheTile] options is required\" );\n $.console.assert( options.tile, \"[TileCache.cacheTile] options.tile is required\" );\n $.console.assert( options.tile.cacheKey, \"[TileCache.cacheTile] options.tile.cacheKey is required\" );\n $.console.assert( options.tiledImage, \"[TileCache.cacheTile] options.tiledImage is required\" );\n\n var cutoff = options.cutoff || 0;\n var insertionIndex = this._tilesLoaded.length;\n\n var imageRecord = this._imagesLoaded[options.tile.cacheKey];\n if (!imageRecord) {\n\n if (!options.data) {\n $.console.error(\"[TileCache.cacheTile] options.image was renamed to options.data. '.image' attribute \" +\n \"has been deprecated and will be removed in the future.\");\n options.data = options.image;\n }\n\n $.console.assert( options.data, \"[TileCache.cacheTile] options.data is required to create an ImageRecord\" );\n imageRecord = this._imagesLoaded[options.tile.cacheKey] = new ImageRecord({\n data: options.data,\n ownerTile: options.tile,\n create: options.tiledImage.source.createTileCache,\n destroy: options.tiledImage.source.destroyTileCache,\n getImage: options.tiledImage.source.getTileCacheDataAsImage,\n getData: options.tiledImage.source.getTileCacheData,\n getRenderedContext: options.tiledImage.source.getTileCacheDataAsContext2D,\n });\n\n this._imagesLoadedCount++;\n }\n\n imageRecord.addTile(options.tile);\n options.tile.cacheImageRecord = imageRecord;\n\n // Note that just because we're unloading a tile doesn't necessarily mean\n // we're unloading an image. With repeated calls it should sort itself out, though.\n if ( this._imagesLoadedCount > this._maxImageCacheCount ) {\n var worstTile = null;\n var worstTileIndex = -1;\n var worstTileRecord = null;\n var prevTile, worstTime, worstLevel, prevTime, prevLevel, prevTileRecord;\n\n for ( var i = this._tilesLoaded.length - 1; i >= 0; i-- ) {\n prevTileRecord = this._tilesLoaded[ i ];\n prevTile = prevTileRecord.tile;\n\n if ( prevTile.level <= cutoff || prevTile.beingDrawn ) {\n continue;\n } else if ( !worstTile ) {\n worstTile = prevTile;\n worstTileIndex = i;\n worstTileRecord = prevTileRecord;\n continue;\n }\n\n prevTime = prevTile.lastTouchTime;\n worstTime = worstTile.lastTouchTime;\n prevLevel = prevTile.level;\n worstLevel = worstTile.level;\n\n if ( prevTime < worstTime ||\n ( prevTime === worstTime && prevLevel > worstLevel ) ) {\n worstTile = prevTile;\n worstTileIndex = i;\n worstTileRecord = prevTileRecord;\n }\n }\n\n if ( worstTile && worstTileIndex >= 0 ) {\n this._unloadTile(worstTileRecord);\n insertionIndex = worstTileIndex;\n }\n }\n\n this._tilesLoaded[ insertionIndex ] = new TileRecord({\n tile: options.tile,\n tiledImage: options.tiledImage\n });\n },\n\n /**\n * Clears all tiles associated with the specified tiledImage.\n * @param {OpenSeadragon.TiledImage} tiledImage\n */\n clearTilesFor: function( tiledImage ) {\n $.console.assert(tiledImage, '[TileCache.clearTilesFor] tiledImage is required');\n var tileRecord;\n for ( var i = 0; i < this._tilesLoaded.length; ++i ) {\n tileRecord = this._tilesLoaded[ i ];\n if ( tileRecord.tiledImage === tiledImage ) {\n this._unloadTile(tileRecord);\n this._tilesLoaded.splice( i, 1 );\n i--;\n }\n }\n },\n\n // private\n getImageRecord: function(cacheKey) {\n $.console.assert(cacheKey, '[TileCache.getImageRecord] cacheKey is required');\n return this._imagesLoaded[cacheKey];\n },\n\n // private\n _unloadTile: function(tileRecord) {\n $.console.assert(tileRecord, '[TileCache._unloadTile] tileRecord is required');\n var tile = tileRecord.tile;\n var tiledImage = tileRecord.tiledImage;\n\n // tile.getCanvasContext should always exist in normal usage (with $.Tile)\n // but the tile cache test passes in a dummy object\n let context2D = tile.getCanvasContext && tile.getCanvasContext();\n\n tile.unload();\n tile.cacheImageRecord = null;\n\n var imageRecord = this._imagesLoaded[tile.cacheKey];\n if(!imageRecord){\n return;\n }\n imageRecord.removeTile(tile);\n if (!imageRecord.getTileCount()) {\n\n imageRecord.destroy();\n delete this._imagesLoaded[tile.cacheKey];\n this._imagesLoadedCount--;\n\n if(context2D){\n /**\n * Free up canvas memory\n * (iOS 12 or higher on 2GB RAM device has only 224MB canvas memory,\n * and Safari keeps canvas until its height and width will be set to 0).\n */\n context2D.canvas.width = 0;\n context2D.canvas.height = 0;\n\n /**\n * Triggered when an image has just been unloaded\n *\n * @event image-unloaded\n * @memberof OpenSeadragon.Viewer\n * @type {object}\n * @property {CanvasRenderingContext2D} context2D - The context that is being unloaded\n * @private\n */\n tiledImage.viewer.raiseEvent(\"image-unloaded\", {\n context2D: context2D,\n tile: tile\n });\n }\n\n }\n\n /**\n * Triggered when a tile has just been unloaded from the cache.\n *\n * @event tile-unloaded\n * @memberof OpenSeadragon.Viewer\n * @type {object}\n * @property {OpenSeadragon.TiledImage} tiledImage - The tiled image of the unloaded tile.\n * @property {OpenSeadragon.Tile} tile - The tile which has been unloaded.\n */\n tiledImage.viewer.raiseEvent(\"tile-unloaded\", {\n tile: tile,\n tiledImage: tiledImage\n });\n\n }\n};\n\n}( OpenSeadragon ));\n\n/*\n * OpenSeadragon - World\n *\n * Copyright (C) 2009 CodePlex Foundation\n * Copyright (C) 2010-2024 OpenSeadragon contributors\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n * - Redistributions of source code must retain the above copyright notice,\n * this list of conditions and the following disclaimer.\n *\n * - Redistributions in binary form must reproduce the above copyright\n * notice, this list of conditions and the following disclaimer in the\n * documentation and/or other materials provided with the distribution.\n *\n * - Neither the name of CodePlex Foundation nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\n * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n(function( $ ){\n\n/**\n * @class World\n * @memberof OpenSeadragon\n * @extends OpenSeadragon.EventSource\n * @classdesc Keeps track of all of the tiled images in the scene.\n * @param {Object} options - World options.\n * @param {OpenSeadragon.Viewer} options.viewer - The Viewer that owns this World.\n **/\n$.World = function( options ) {\n var _this = this;\n\n $.console.assert( options.viewer, \"[World] options.viewer is required\" );\n\n $.EventSource.call( this );\n\n this.viewer = options.viewer;\n this._items = [];\n this._needsDraw = false;\n this._autoRefigureSizes = true;\n this._needsSizesFigured = false;\n this._delegatedFigureSizes = function(event) {\n if (_this._autoRefigureSizes) {\n _this._figureSizes();\n } else {\n _this._needsSizesFigured = true;\n }\n };\n\n this._figureSizes();\n};\n\n$.extend( $.World.prototype, $.EventSource.prototype, /** @lends OpenSeadragon.World.prototype */{\n /**\n * Add the specified item.\n * @param {OpenSeadragon.TiledImage} item - The item to add.\n * @param {Number} [options.index] - Index for the item. If not specified, goes at the top.\n * @fires OpenSeadragon.World.event:add-item\n * @fires OpenSeadragon.World.event:metrics-change\n */\n addItem: function( item, options ) {\n $.console.assert(item, \"[World.addItem] item is required\");\n $.console.assert(item instanceof $.TiledImage, \"[World.addItem] only TiledImages supported at this time\");\n\n options = options || {};\n if (options.index !== undefined) {\n var index = Math.max(0, Math.min(this._items.length, options.index));\n this._items.splice(index, 0, item);\n } else {\n this._items.push( item );\n }\n\n if (this._autoRefigureSizes) {\n this._figureSizes();\n } else {\n this._needsSizesFigured = true;\n }\n\n this._needsDraw = true;\n\n item.addHandler('bounds-change', this._delegatedFigureSizes);\n item.addHandler('clip-change', this._delegatedFigureSizes);\n\n /**\n * Raised when an item is added to the World.\n * @event add-item\n * @memberOf OpenSeadragon.World\n * @type {object}\n * @property {OpenSeadragon.Viewer} eventSource - A reference to the World which raised the event.\n * @property {OpenSeadragon.TiledImage} item - The item that has been added.\n * @property {?Object} userData - Arbitrary subscriber-defined object.\n */\n this.raiseEvent( 'add-item', {\n item: item\n } );\n },\n\n /**\n * Get the item at the specified index.\n * @param {Number} index - The item's index.\n * @returns {OpenSeadragon.TiledImage} The item at the specified index.\n */\n getItemAt: function( index ) {\n $.console.assert(index !== undefined, \"[World.getItemAt] index is required\");\n return this._items[ index ];\n },\n\n /**\n * Get the index of the given item or -1 if not present.\n * @param {OpenSeadragon.TiledImage} item - The item.\n * @returns {Number} The index of the item or -1 if not present.\n */\n getIndexOfItem: function( item ) {\n $.console.assert(item, \"[World.getIndexOfItem] item is required\");\n return $.indexOf( this._items, item );\n },\n\n /**\n * @returns {Number} The number of items used.\n */\n getItemCount: function() {\n return this._items.length;\n },\n\n /**\n * Change the index of a item so that it appears over or under others.\n * @param {OpenSeadragon.TiledImage} item - The item to move.\n * @param {Number} index - The new index.\n * @fires OpenSeadragon.World.event:item-index-change\n */\n setItemIndex: function( item, index ) {\n $.console.assert(item, \"[World.setItemIndex] item is required\");\n $.console.assert(index !== undefined, \"[World.setItemIndex] index is required\");\n\n var oldIndex = this.getIndexOfItem( item );\n\n if ( index >= this._items.length ) {\n throw new Error( \"Index bigger than number of layers.\" );\n }\n\n if ( index === oldIndex || oldIndex === -1 ) {\n return;\n }\n\n this._items.splice( oldIndex, 1 );\n this._items.splice( index, 0, item );\n this._needsDraw = true;\n\n /**\n * Raised when the order of the indexes has been changed.\n * @event item-index-change\n * @memberOf OpenSeadragon.World\n * @type {object}\n * @property {OpenSeadragon.World} eventSource - A reference to the World which raised the event.\n * @property {OpenSeadragon.TiledImage} item - The item whose index has\n * been changed\n * @property {Number} previousIndex - The previous index of the item\n * @property {Number} newIndex - The new index of the item\n * @property {?Object} userData - Arbitrary subscriber-defined object.\n */\n this.raiseEvent( 'item-index-change', {\n item: item,\n previousIndex: oldIndex,\n newIndex: index\n } );\n },\n\n /**\n * Remove an item.\n * @param {OpenSeadragon.TiledImage} item - The item to remove.\n * @fires OpenSeadragon.World.event:remove-item\n * @fires OpenSeadragon.World.event:metrics-change\n */\n removeItem: function( item ) {\n $.console.assert(item, \"[World.removeItem] item is required\");\n\n var index = $.indexOf(this._items, item );\n if ( index === -1 ) {\n return;\n }\n\n item.removeHandler('bounds-change', this._delegatedFigureSizes);\n item.removeHandler('clip-change', this._delegatedFigureSizes);\n item.destroy();\n this._items.splice( index, 1 );\n this._figureSizes();\n this._needsDraw = true;\n this._raiseRemoveItem(item);\n },\n\n /**\n * Remove all items.\n * @fires OpenSeadragon.World.event:remove-item\n * @fires OpenSeadragon.World.event:metrics-change\n */\n removeAll: function() {\n // We need to make sure any pending images are canceled so the world items don't get messed up\n this.viewer._cancelPendingImages();\n var item;\n var i;\n for (i = 0; i < this._items.length; i++) {\n item = this._items[i];\n item.removeHandler('bounds-change', this._delegatedFigureSizes);\n item.removeHandler('clip-change', this._delegatedFigureSizes);\n item.destroy();\n }\n\n var removedItems = this._items;\n this._items = [];\n this._figureSizes();\n this._needsDraw = true;\n\n for (i = 0; i < removedItems.length; i++) {\n item = removedItems[i];\n this._raiseRemoveItem(item);\n }\n },\n\n /**\n * Clears all tiles and triggers updates for all items.\n */\n resetItems: function() {\n for ( var i = 0; i < this._items.length; i++ ) {\n this._items[i].reset();\n }\n },\n\n /**\n * Updates (i.e. animates bounds of) all items.\n * @function\n * @param viewportChanged Whether the viewport changed, which indicates that\n * all TiledImages need to be updated.\n */\n update: function(viewportChanged) {\n var animated = false;\n for ( var i = 0; i < this._items.length; i++ ) {\n animated = this._items[i].update(viewportChanged) || animated;\n }\n\n return animated;\n },\n\n /**\n * Draws all items.\n */\n draw: function() {\n this.viewer.drawer.draw(this._items);\n this._needsDraw = false;\n this._items.forEach((item) => {\n this._needsDraw = item.setDrawn() || this._needsDraw;\n });\n },\n\n /**\n * @returns {Boolean} true if any items need updating.\n */\n needsDraw: function() {\n for ( var i = 0; i < this._items.length; i++ ) {\n if ( this._items[i].needsDraw() ) {\n return true;\n }\n }\n return this._needsDraw;\n },\n\n /**\n * @returns {OpenSeadragon.Rect} The smallest rectangle that encloses all items, in viewport coordinates.\n */\n getHomeBounds: function() {\n return this._homeBounds.clone();\n },\n\n /**\n * To facilitate zoom constraints, we keep track of the pixel density of the\n * densest item in the World (i.e. the item whose content size to viewport size\n * ratio is the highest) and save it as this \"content factor\".\n * @returns {Number} the number of content units per viewport unit.\n */\n getContentFactor: function() {\n return this._contentFactor;\n },\n\n /**\n * As a performance optimization, setting this flag to false allows the bounds-change event handler\n * on tiledImages to skip calculations on the world bounds. If a lot of images are going to be positioned in\n * rapid succession, this is a good idea. When finished, setAutoRefigureSizes should be called with true\n * or the system may behave oddly.\n * @param {Boolean} [value] The value to which to set the flag.\n */\n setAutoRefigureSizes: function(value) {\n this._autoRefigureSizes = value;\n if (value & this._needsSizesFigured) {\n this._figureSizes();\n this._needsSizesFigured = false;\n }\n },\n\n /**\n * Arranges all of the TiledImages with the specified settings.\n * @param {Object} options - Specifies how to arrange.\n * @param {Boolean} [options.immediately=false] - Whether to animate to the new arrangement.\n * @param {String} [options.layout] - See collectionLayout in {@link OpenSeadragon.Options}.\n * @param {Number} [options.rows] - See collectionRows in {@link OpenSeadragon.Options}.\n * @param {Number} [options.columns] - See collectionColumns in {@link OpenSeadragon.Options}.\n * @param {Number} [options.tileSize] - See collectionTileSize in {@link OpenSeadragon.Options}.\n * @param {Number} [options.tileMargin] - See collectionTileMargin in {@link OpenSeadragon.Options}.\n * @fires OpenSeadragon.World.event:metrics-change\n */\n arrange: function(options) {\n options = options || {};\n var immediately = options.immediately || false;\n var layout = options.layout || $.DEFAULT_SETTINGS.collectionLayout;\n var rows = options.rows || $.DEFAULT_SETTINGS.collectionRows;\n var columns = options.columns || $.DEFAULT_SETTINGS.collectionColumns;\n var tileSize = options.tileSize || $.DEFAULT_SETTINGS.collectionTileSize;\n var tileMargin = options.tileMargin || $.DEFAULT_SETTINGS.collectionTileMargin;\n var increment = tileSize + tileMargin;\n var wrap;\n if (!options.rows && columns) {\n wrap = columns;\n } else {\n wrap = Math.ceil(this._items.length / rows);\n }\n var x = 0;\n var y = 0;\n var item, box, width, height, position;\n\n this.setAutoRefigureSizes(false);\n for (var i = 0; i < this._items.length; i++) {\n if (i && (i % wrap) === 0) {\n if (layout === 'horizontal') {\n y += increment;\n x = 0;\n } else {\n x += increment;\n y = 0;\n }\n }\n\n item = this._items[i];\n box = item.getBounds();\n if (box.width > box.height) {\n width = tileSize;\n } else {\n width = tileSize * (box.width / box.height);\n }\n\n height = width * (box.height / box.width);\n position = new $.Point(x + ((tileSize - width) / 2),\n y + ((tileSize - height) / 2));\n\n item.setPosition(position, immediately);\n item.setWidth(width, immediately);\n\n if (layout === 'horizontal') {\n x += increment;\n } else {\n y += increment;\n }\n }\n this.setAutoRefigureSizes(true);\n },\n\n // private\n _figureSizes: function() {\n var oldHomeBounds = this._homeBounds ? this._homeBounds.clone() : null;\n var oldContentSize = this._contentSize ? this._contentSize.clone() : null;\n var oldContentFactor = this._contentFactor || 0;\n\n if (!this._items.length) {\n this._homeBounds = new $.Rect(0, 0, 1, 1);\n this._contentSize = new $.Point(1, 1);\n this._contentFactor = 1;\n } else {\n var item = this._items[0];\n var bounds = item.getBounds();\n this._contentFactor = item.getContentSize().x / bounds.width;\n var clippedBounds = item.getClippedBounds().getBoundingBox();\n var left = clippedBounds.x;\n var top = clippedBounds.y;\n var right = clippedBounds.x + clippedBounds.width;\n var bottom = clippedBounds.y + clippedBounds.height;\n for (var i = 1; i < this._items.length; i++) {\n item = this._items[i];\n bounds = item.getBounds();\n this._contentFactor = Math.max(this._contentFactor,\n item.getContentSize().x / bounds.width);\n clippedBounds = item.getClippedBounds().getBoundingBox();\n left = Math.min(left, clippedBounds.x);\n top = Math.min(top, clippedBounds.y);\n right = Math.max(right, clippedBounds.x + clippedBounds.width);\n bottom = Math.max(bottom, clippedBounds.y + clippedBounds.height);\n }\n\n this._homeBounds = new $.Rect(left, top, right - left, bottom - top);\n this._contentSize = new $.Point(\n this._homeBounds.width * this._contentFactor,\n this._homeBounds.height * this._contentFactor);\n }\n\n if (this._contentFactor !== oldContentFactor ||\n !this._homeBounds.equals(oldHomeBounds) ||\n !this._contentSize.equals(oldContentSize)) {\n /**\n * Raised when the home bounds or content factor change.\n * @event metrics-change\n * @memberOf OpenSeadragon.World\n * @type {object}\n * @property {OpenSeadragon.World} eventSource - A reference to the World which raised the event.\n * @property {?Object} userData - Arbitrary subscriber-defined object.\n */\n this.raiseEvent('metrics-change', {});\n }\n },\n\n // private\n _raiseRemoveItem: function(item) {\n /**\n * Raised when an item is removed.\n * @event remove-item\n * @memberOf OpenSeadragon.World\n * @type {object}\n * @property {OpenSeadragon.World} eventSource - A reference to the World which raised the event.\n * @property {OpenSeadragon.TiledImage} item - The item's underlying item.\n * @property {?Object} userData - Arbitrary subscriber-defined object.\n */\n this.raiseEvent( 'remove-item', { item: item } );\n }\n});\n\n}( OpenSeadragon ));\n\n//# sourceMappingURL=openseadragon.js.map"],"names":["OpenSeadragon","options","$","class2type","toString","hasOwn","obj","lastKey","key","name","canvasElement","canvas","isTainted","e","supported","context","devicePixelRatio","backingStoreRatio","src","copy","copyIsArray","clone","target","length","deep","i","descriptor","isIOSDevice","userAgent","object","method","args","element","result","isFixed","offsetParent","getOffsetParent","doc","docElement","win","boundingRect","property","memo","style","prefixes","suffix","prop","string","number","modulo","point","offset","size","event","body","scroll","originalScroll","currentScroll","wrappers","tagName","img","opacity","usesAlpha","ieOpacity","ieFilter","value","className","array","searchElement","fromIndex","pivot","oldClasses","newClasses","opts","eventName","handler","initialArgs","URLPARAMS","url","match","onSuccess","onError","withCredentials","headers","responseType","postData","protocol","request","headerName","script","head","jsonpCallback","previous","replace","callbackParam","callback","response","_","isAbort","xmlDoc","parser","extension","FILEFORMATS","formats","nullfunction","msg","ver","ua","regex","query","parts","part","sep","w","requestAnimationFrame","cancelAnimationFrame","aAnimQueue","processing","iRequestId","iIntervalId","time","temp","requestId","j","root","factory","Mat3","values","tx","ty","angleInRadians","c","s","sx","sy","other","a","b","a00","a01","a02","a10","a11","a12","a20","a21","a22","b00","b01","b02","b10","b11","b12","b20","b21","b22","fullScreenApi","userData","times","priority","self","count","onceHandler","events","index","handlers","eventType","source","eventArgs","errorMessage","MOUSETRACKERS","THIS","_this","onClick","onDblClick","onKeyDown","onKeyUp","onKeyPress","onFocus","onBlur","onContextMenu","onWheel","onMouseWheel","onLoseCapture","onPointerEnter","onPointerLeave","onPointerOver","onPointerOut","onPointerDown","onPointerUp","onPointerMove","onTouchStart","onTouchEnd","onTouchMove","onTouchCancel","onGestureStart","onGestureChange","onGotPointerCapture","onLostPointerCapture","onPointerCancel","onPointerUpCaptured","onPointerMoveCaptured","stopTracking","track","startTracking","type","delegate","len","list","isInIframe","canAccessEvents","trackerPoints","intervalId","lastTime","_generateGuid","tracker","gPoint","_doTracking","trackPoint","now","elapsedTime","distance","speed","addPoint","guid","removePoint","divElement","gp","id","clearTrackedPointers","pointsList","gPoints","gPointsToRemove","pointerListCount","stopTrackingPointer","getCaptureEventParams","pointerType","capturePointer","eventParams","updatePointerCaptured","releasePointer","cachedGPoint","getPointerId","getPointerType","getIsPrimary","getMouseAbsolute","getMouseRelative","getPointRelativeToAbsolute","getCenterPoint","point1","point2","eventInfo","preProcessEvent","handleWheelEvent","simulatedEvent","originalEvent","nDelta","touchCount","updatePointerEnter","updatePointerDown","updatePointerUp","updatePointerLeave","updatePointerMove","updatePointerCancel","updatePointerOver","updatePointerOut","implicitlyCaptured","handlePointerUp","handlePointerMove","startTrackingPointer","listLength","trackedGPoint","getEventProcessDefaults","isCaptured","updateGPoint","dispatchEventObj","buttonChanged","releasePoint","releaseTime","wasCaptured","quick","gPointArray","delta","handlePointerStop","originalMoveEvent","container","parent","visible","layouts","layout","controlOptions","div","getControlIndex","enabled","dock","controls","nextHash","drawerOptionList","drawerOptions","option","onCanvasContextMenu","onCanvasKeyDown","onCanvasKeyPress","onCanvasClick","onCanvasDblClick","onCanvasDrag","onCanvasDragEnd","onCanvasEnter","onCanvasLeave","onCanvasPress","onCanvasRelease","onCanvasNonPrimaryPress","onCanvasNonPrimaryRelease","onCanvasScroll","onCanvasPinch","onCanvasFocus","onCanvasBlur","onContainerEnter","onContainerLeave","_getSafeElemSize","scheduleUpdate","updateMulti","drawerCandidates","drawerCandidate","beginControlsAutoHide","dzi","tileSource","tileSources","initialPage","expected","successes","failures","failEvent","checkCompletion","getOverlayObject","doOne","originalSuccess","originalError","defaultOpts","mainDrawer","redrawImmediately","oldDrawer","Drawer","newDrawer","abortControlsAutoHide","debugMode","ajaxHeaders","propagate","button","fullPage","bodyStyle","docStyle","nodes","fullPageEventArgs","restoreScrollCounter","restoreScroll","pageScroll","fullScreen","fullScreeEventArgs","onFullScreenChange","isFullScreen","myQueueItem","raiseAddItemFailed","refreshWorld","theItem","processReadyItems","queueItem","tiledImage","optionsClone","newIndex","getTileSourceImplementation","level","drawer","onFocusHandler","onBlurHandler","onNextHandler","onPreviousHandler","navImages","useGroup","resolveUrl","beginZoomingInHandler","beginZoomingIn","endZoomingHandler","endZooming","doSingleZoomInHandler","doSingleZoomIn","beginZoomingOutHandler","beginZoomingOut","doSingleZoomOutHandler","doSingleZoomOut","onHomeHandler","onHome","onFullScreenHandler","onFullScreen","onRotateLeftHandler","onRotateLeft","onRotateRightHandler","onRotateRight","onFlipHandler","onFlip","buttons","lightUp","page","location","placement","onDraw","getOverlayIndex","overlay","message","previusPixelDensityRatio","currentPixelDensityRatio","next","oElement","viewer","imgOptions","successCallback","failCallback","tileSourceJ","waitUntilReady","originalTileSource","customTileSource","$TileSource","width","height","x","y","rect","overlays","updateFunc","scheduleControlsFade","updateControlsFade","currentTime","deltaTime","canvasKeyDownEventArgs","canvasKeyPressEventArgs","gestureSettings","haveKeyboardFocus","canvasClickEventArgs","canvasDblClickEventArgs","canvasDragEventArgs","factor","constrainedBounds","canvasDragEndEventArgs","amplitudeX","amplitudeY","center","lastClickTime","currClickTime","centerPt","lastCenterPt","panByPt","canvasPinchEventArgs","angle1","angle2","canvasScrollEventArgs","thisScrollTime","deltaScrollTime","updateOnce","doViewerResize","containerSize","viewport","zoom","resizeRatio","origin","prevDiag","newDiag","prevContainerSize","viewportChange","animated","currentAnimating","isAnimationFinished","drawWorld","prefix","scheduleZoom","doZoom","adjustedFactor","currRotation","proto","viewerSize","navigatorSize","borderWidth","rotate","degrees","immediately","_setTransformRotate","item","theirItem","myItem","state","rule","setElementTransform","newWidth","newHeight","bounds","topleft","bottomright","original","matchBounds","matchOpacity","matchCompositeOperation","I18N","props","capture","func","cos","sin","d","angle","tileSize","tileOverlap","minLevel","maxLevel","levelScaleCache","_level","scale","imageSizeScaled","rx","ry","tiles","validPoint","widthScaled","pixelX","pixelY","EPSILON","isSource","dimensionsScaled","tileWidth","tileHeight","px","py","callbackName","readySource","urlParts","filename","lastDot","hashIdx","data","xhr","processResponse","exc","formattedExc","withHeaders","hash","numTiles","context2D","post","dataStore","image","finish","error","blb","BlobBuilder","bb","cacheObject","tile","responseText","status","statusText","tilesUrl","fileFormat","displayRects","ns","configureFromObject","configureFromXML","rects","xMin","yMin","xMax","yMax","rootName","configuration","dispRectNodes","dispRectNode","rectNode","sizeNode","messageNode","imageData","sizeData","dispRectData","rectData","t","sf","scaleFactor","canBeTiled","shortDim","tileOptions","smallerTiles","constructLevels","maxScaleFactor","sizeLength","size1","size2","f","configureFromXml10","levelScale","levelSize","IIIF_ROTATION","levelWidth","levelHeight","iiifTileSizeWidth","iiifTileSizeHeight","iiifRegion","iiifTileX","iiifTileY","iiifTileW","iiifTileH","iiifSize","iiifSizeW","iiifSizeH","iiifQuality","uri","level0Profiles","profileLevel","isLevel0","hasCanoncicalSizeFeature","levels","parseXML10","node","bufferedWidth","bufferedHeight","max","yTiles","currentImageSize","num","z","filterFiles","dataUrl","files","filtered","file","conf","currentWidth","currentHeight","bigCanvas","bigContext","smallCanvas","smallContext","rows","inTo","outTo","scheduleFade","updateFade","beginFading","stopFading","newState","newTopLeft","topLeft","topRight","bottomLeft","diff","radians","thisBoundingBox","otherBoundingBox","left","top","right","bottom","intersectionPoints","thisTopLeft","thisTopRight","thisBottomLeft","thisBottomRight","rectTopLeft","rectTopRight","rectBottomLeft","rectBottomRight","thisSegments","rectSegments","thisSegment","rectSegment","intersect","getIntersection","abVector","cdVector","denom","minX","maxX","minY","maxY","k","bottomRight","newTopRight","boundingBox","epsilon","topDiff","leftDiff","onStripClick","onStripDrag","onStripScroll","onStripEnter","onStripLeave","loadPanels","scrollWidth","scrollHeight","offsetLeft","offsetTop","strip","panelSize","activePanelsStart","activePanelsEnd","miniViewer","miniTileSource","startValue","targetValue","currentValue","transform","stiffness","selfAbort","implementation","complete","job","completeJob","jobOptions","newJob","loader","nextJob","exists","loadWithAjax","sourceBounds","cacheKey","canvasSize","sketchCanvasSize","position","properties","transformOriginProp","transformProp","positionAndSize","outerScale","innerStyle","scaledSize","eltSize","refPoint","tiledImages","imageSmoothingEnabled","rectangle","vpPoint","pixelDensityRatio","viewportSize","HTMLDrawer","lastDrawn","info","CanvasDrawer","rendered","useSketch","sketchScale","sketchTranslate","imageZoom","usedClip","box","clipRect","polygons","polygon","coord","clipPoint","placeholderRect","fillStyle","subPixelRoundingRule","determineSubPixelRoundingRule","shouldRoundPositionAndSize","isAnimating","translate","sourceWidth","sourceHeight","resizeSketchCanvas","compositeOperation","widthExt","heightExt","widthDiff","heightDiff","colorIndex","tileCenterX","tileCenterY","angleInDegrees","sketch","saveContext","DEFAULT_SUBPIXEL_ROUNDING_RULE","isSubPixelRoundingRuleUnknown","normalizeSubPixelRoundingRule","subPixelRoundingRules","ev","gl","numTextureUnits","unit","ext","webglContext","view","flipMultiplier","posMatrix","scaleMatrix","rotMatrix","viewMatrix","renderingBufferHasImageData","tiledImageIndex","canvasDrawer","tilesToDraw","firstTile","useContext2dPipeline","useTwoPassRendering","overallMatrix","imageRotation","imageRotationMatrix","imageCenter","t1","t2","localMatrix","maxTextures","texturePositionArray","textureDataArray","matrixArray","opacityArray","tileIndex","indexInDrawArray","numTilesToDraw","tileContext","textureInfo","matrix","flipped","texture","textureQuad","overlapFraction","xOffset","yOffset","h","numTextures","makeMatrixUniforms","makeConditionals","vertexShaderProgram","fragmentShaderProgram","program","outputQuads","indices","overlap","sourceWidthFraction","sourceHeightFraction","nativeWidth","nativeHeight","overlapWidth","overlapHeight","widthOverlapFraction","heightOverlapFraction","tileCanvas","clipPoints","vsSource","fsSource","loadShader","shader","vertexShader","fragmentShader","shaderProgram","contentSize","contentFactor","aspectFactor","output","homeZoom","margins","current","centerCurrent","centerTarget","oldZoomPixel","newZoomPixel","deltaZoomPixels","deltaZoomPoints","newBounds","cb","xConstrained","yConstrained","boundsRight","contentRight","horizontalThreshold","leftDx","rightDx","boundsBottom","contentBottom","verticalThreshold","topDy","bottomDy","constraintApplied","newViewportBounds","actualZoom","constrainedZoom","constraints","aspect","newZoom","currentCenter","currentZoom","oldBounds","oldZoom","rotatedNewBounds","referencePoint","changeInDegrees","normalizedFrom","normalizedTo","reverseDiff","newContainerSize","maintain","widthDeltaFactor","changed","degreesOrUseSpring","useSpring","rdelta","zoomSpringHandler","deltaPoints","deltaPixels","pixel","viewerX","viewerY","imageX","imageY","pixelWidth","pixelHeight","coordA","coordB","pointWidth","pointHeight","viewerCoordinates","viewportZoom","imageWidth","containerWidth","viewportToImageZoomRatio","ratio","applyConstraints","fitBounds","fitBoundsPlacement","flag","viewportChanged","xUpdated","yUpdated","scaleUpdated","degreesUpdated","updated","fullyLoadedFlag","worldWidth","clip","xMod","yMod","sameTarget","isXYObject","objectToSimpleXYObject","objs","anchor","anchorProperties","aspectRatio","displayedWidthRatio","displayedHeightRatio","marginLeft","marginTop","newClip","flip","wrap","debug","preload","drawArea","tiledImageBounds","tileArray","tileInfo","tileAjaxHeaders","lowestLevel","currentZeroRatio","highestLevel","levelsInterval","bestTiles","tileinfo","levelList","useLevel","currentRenderPixelRatio","targetRenderPixelRatio","targetZeroRatio","optimalRatio","levelOpacity","levelVisibility","makeTileInfoObject","updateTile","tileIsBlending","levelKey","blendTimeMillis","best","topLeftBound","bottomRightBound","cornerTiles","topLeftTile","bottomRightTile","numberOfTiles","viewportCenter","flippedX","boundsTL","boundsSize","positionC","positionT","sizeC","sizeT","tileCenter","tileSquaredDistance","loadingCoverage","imageRecord","leftX","rightX","topY","bottomY","urlOrGetter","tilesMatrix","errorMsg","tileRequest","ccc","cutoff","increment","eventFinished","getCompletionCallback","completionCallback","fallbackCompletion","previousBest","maxNTiles","coverage","cols","covers","TileRecord","ImageRecord","insertionIndex","worstTile","worstTileIndex","worstTileRecord","prevTile","worstTime","worstLevel","prevTime","prevLevel","prevTileRecord","tileRecord","oldIndex","removedItems","columns","tileMargin","oldHomeBounds","oldContentSize","oldContentFactor","clippedBounds"],"sourceRoot":""}