{"version":3,"file":"application.js","mappings":";wCAOA,IAAIA,EAAgB,EAAQ,KACxBC,EAAQ,EAAQ,KAEhBC,EAAqB,QACrBC,EAAiB,OAEjBC,EAAI,GAsHR,SAASC,EAAqBC,GAC5B,IAAIC,EAAkBC,MAAMC,QAAQH,GAQpC,OAAO,SAAwBI,GAC7B,IAAIC,EAAmBC,EAASR,EAAES,WAAYH,GAC9C,GAAIC,EACF,OAAOA,EAGT,GAAIJ,GAAmBG,EAAMI,SAAWR,EAAWQ,OACjD,MAAO,iBAAmBR,EAAWQ,OAAS,SAGhD,IAAK,IAAIC,EAAI,EAAGA,EAAIL,EAAMI,OAAQC,IAEhC,GADAJ,EAAmBC,EAjBjBL,EACKD,EAgBkCS,GAdpCT,EAcwCI,EAAMK,IAEjD,MAAO,CAACA,GAAGC,OAAOL,IAiJ1B,SAASC,EAASK,EAAWP,GAE3B,GAAa,MAATA,GAAkBO,EAAUC,eAAe,cAA/C,CAIA,IAAIC,EAASF,EAAUP,GAEvB,OAAIS,EACKX,MAAMC,QAAQU,GAAUA,EAAS,CAACA,QAD3C,GAKF,SAASC,EAAeC,EAASC,GAK/B,IAAIC,EAAMF,EAAQP,OAEdK,EAASE,EAAQE,EAAM,GACvBC,EAAOH,EAAQI,MAAM,EAAGF,EAAM,GAOlC,OALoB,IAAhBC,EAAKV,SACPU,EAAO,CAACtB,IAEVoB,EAAUrB,EAAMqB,EAAS,CAAEE,KAAMA,IAER,mBAAXL,EACVA,EAAOG,GACPI,EAAmBJ,EAazB,SAAwBH,GACtB,MAAO,aAIH,QAAQQ,KADMC,EAHaT,GAKtBS,EAEL,YAAYD,KAAKC,GACZ,MAAQA,EAEb,UAAUD,KAAKC,GACV,KAAOA,EAETA,GAbkC,KAG3C,IAAoBA,EAjBcC,CAAeV,IAGjD,SAASW,EAAOC,GACd,OAAIA,EAAKjB,OAAS,EACTiB,EAAK,GAEM,IAAhBA,EAAKjB,OACAiB,EAAKC,KAAK,QAEZD,EAAKN,MAAM,GAAI,GAAGO,KAAK,MAAQ,QAAUD,EAAKN,OAAO,GAoB9D,SAASC,EAAmBJ,EAASW,GAKnC,OAJmBC,EAAeZ,EAAQE,MAEb,oBAAsB,IADtCF,EAAQE,KAAKQ,KAAK,KAAO,IAAMC,EAM9C,SAASC,EAAeV,GACtB,MAAuC,iBAAzBA,EAAKA,EAAKV,OAAS,IAAoC,iBAAXU,EAAK,GA3VjEpB,EAAE+B,OAAS,SAASC,EAAed,GAEjC,OADAA,EAAUA,GAAW,GACd,SAASZ,GACd,IAAIW,EAAUT,EAASwB,EAAe1B,GAEtC,GAAKW,EAAL,CAIA,IAAIgB,EAAejB,EAAeC,EAASC,GAM3C,MAJIA,EAAQgB,UACVD,EAAef,EAAQgB,QAAU,KAAOD,GAGpC,IAAIE,MAAMF,MAUpBjC,EAAEoC,MAAQ,SAAeC,GACvB,IAoUqBC,EApUjBpC,GAoUiBoC,EApUUD,EAqUxBE,OAAOC,KAAKF,GAAO,IAAIG,KAAI,SAASC,GACzC,MAAO,CAAEA,IAAKA,EAAKpC,MAAOgC,EAAII,QArUhC,OAAO,SAAwBpC,GAC7B,IAMIoC,EANAnC,EAAmBC,EAASR,EAAE2C,YAAarC,GAE/C,GAAIC,EACF,OAAOA,EAMT,IAFA,IAAIqC,EAAgB,GAEXjC,EAAI,EAAGA,EAAIT,EAAWQ,OAAQC,IACrC+B,EAAMxC,EAAWS,GAAG+B,KAEpBnC,EAAmBC,EADPN,EAAWS,GAAGL,MACaA,EAAMoC,MAI3CE,EAAcC,KAAK,CAACH,GAAK9B,OAAOL,IAIpC,OAAIqC,EAAclC,OAAS,EAClBkC,EAAc,GAIhB,SAAS1B,GACd0B,EAAgBA,EAAcH,KAAI,SAASxB,GAKzC,MAAO,KAJGA,EAAQ,GAIE,KAHED,EAAeC,EAASC,GAC3C4B,MAAM,MACNlB,KAAK7B,MAIV,IAAIgD,EAAW7B,EAAQE,KAAKQ,KAAK,KAGjC,MACE,4BAHamB,IAAajD,EAAqB,GAAK,OAASiD,GAK7D,wBACAhD,EACA6C,EAAchB,KAAK7B,MAM3BC,EAAEgD,YAAc,SAAqBX,GACnC,IAAIY,EAAiBjD,EAAEoC,MAAMC,GAC7B,OAAO,SAA8B/B,GACnC,IAAI4C,EAAcD,EAAe3C,GACjC,GAAI4C,EACF,OAAOA,EAGT,IAAIC,EAAcZ,OAAOC,KAAKlC,GAAO8C,QAAO,SAASC,EAAMC,GAIzD,YAH+BC,IAA3BlB,EAAaiB,IACfD,EAAKR,KAAKS,GAELD,IACN,IAEH,OAA2B,IAAvBF,EAAYzC,OACP,WACL,MAAO,mCAAqCyC,EAAYvB,KAAK,YAFjE,IAQJ5B,EAAEwD,QAAU,SAAiB3C,GAC3B,OAAOZ,EAAqBY,IAG9Bb,EAAEyD,MAAQ,WACR,IAAIvD,EAAaE,MAAMC,QAAQqD,UAAU,IACrCA,UAAU,GACVtD,MAAMuD,UAAUtC,MAAMuC,KAAKF,WAC/B,OAAOzD,EAAqBC,IAgC9BF,EAAE6D,SAAW,SAAkBhD,GAC7B,SAASiD,EAAkBxD,GACzB,OAAa,MAATA,EACK,SAASY,GACd,OAAOI,EACLJ,EACAY,EAAeZ,EAAQE,MACnB,4BACA,iBAIHP,EAAUkD,MAAMC,KAAMN,WAI/B,OAFAI,EAAkBG,YAAa,EAExBH,GAGT9D,EAAEkE,UAAY,WACZ,IAAIhE,EAAaE,MAAMC,QAAQqD,UAAU,IACrCA,UAAU,GACVtD,MAAMuD,UAAUtC,MAAMuC,KAAKF,WAC/B,OAAO,SAA4BpD,GACjC,IAAI6D,EAAWjE,EACZuC,KAAI,SAAS5B,GACZ,OAAOL,EAASK,EAAWP,MAE5B8D,OAAOC,SAIV,GAAIF,EAASzD,SAAWR,EAAWQ,OAKnC,OACEyD,EAASG,OAAM,SAASrD,GACtB,OAA0B,IAAnBA,EAAQP,QAAsC,iBAAfO,EAAQ,MAGzCS,EACLyC,EAAS1B,KAAI,SAAS8B,GACpB,OAAOA,EAAE,OAQRJ,EAASf,QAAO,SAASoB,EAAKC,GACnC,OAAOA,EAAI/D,OAAS8D,EAAI9D,OAAS+D,EAAMD,OAU7CxE,EAAE0E,MAAQ,SAAeC,GACvB,OAAO,SAAwBrE,GAC7B,GAAIA,IAAUqE,EACZ,OAAOC,KAAKC,UAAUF,KAK5B3E,EAAE8E,MAAQ,WACR,IAAI5D,EAAUd,MAAMC,QAAQqD,UAAU,IAClCA,UAAU,GACVtD,MAAMuD,UAAUtC,MAAMuC,KAAKF,WAC3BxD,EAAagB,EAAQuB,KAAI,SAASnC,GACpC,OAAON,EAAE0E,MAAMpE,MAGjB,OAAON,EAAEkE,UAAUH,MAAMC,KAAM9D,IAGjCF,EAAE+E,MAAQ,SAAeJ,GACvB,IAAIK,EAAML,EAAY,GAClBH,EAAMG,EAAY,GACtB,OAAO,SAAwBrE,GAG7B,GAFuBE,EAASR,EAAEiF,OAAQ3E,IAElBA,EAAQ0E,GAAO1E,EAAQkE,EAC7C,MAAO,kBAAoBQ,EAAM,MAAQR,EAAM,iBAUrDxE,EAAEkF,IAAM,aAIRlF,EAAEmF,QAAU,SAAiB7E,GAC3B,GAAqB,kBAAVA,EACT,MAAO,WAIXN,EAAEiF,OAAS,SAAgB3E,GACzB,GAAqB,iBAAVA,EACT,MAAO,UAIXN,EAAES,WAAa,SAAoBH,GACjC,IAAKF,MAAMC,QAAQC,GACjB,MAAO,SAIXN,EAAE2C,YAAc,SAAqBrC,GACnC,IAAKV,EAAcU,GACjB,MAAO,UAIXN,EAAEoF,OAAS,SAAgB9E,GACzB,GAAqB,iBAAVA,EACT,MAAO,UAIXN,EAAEqF,KAAO,SAAc/E,GACrB,GAAqB,mBAAVA,EACT,MAAO,YAkFXN,EAAEQ,SAAWA,EACbR,EAAEgB,eAAiBA,EAEnBsE,EAAOC,QAAUvF,8BC1XjB,IAAIwF,EAAS,UAUb,SAASC,EAAmBvE,GAC1B8C,KAAK0B,OAASxE,EAAQwE,QAAU,yBAChC1B,KAAK2B,SAAW,YAChB3B,KAAK4B,aAAe1E,EAAQ2E,YAC5B7B,KAAK8B,QAAU,QACf9B,KAAK+B,UAAY/B,KAAKgC,oBACtBhC,KAAKiC,UAAYjC,KAAKkC,eAEtBlC,KAAK9C,QAAUA,EACf8C,KAAKmC,KAAOnC,KAAKmC,KAAKC,KAAKpC,MAI3BA,KAAKqC,UAAanF,EAAiB,UAAIA,EAAQmF,UAAUvD,MAAM,KAAO,KACtEkB,KAAKsC,MAASpF,EAAa,MAAIA,EAAQoF,MAAMxD,MAAM,KAAO,KAC1DkB,KAAKuC,KAAQrF,EAAY,KAAIA,EAAQqF,KAAO,KAC5CvC,KAAKwC,SAAYtF,EAAgB,SAAIA,EAAQsF,SAAS1D,MAAM,KAAO,KACnEkB,KAAKyC,MAASvF,EAAa,OAAKA,EAAQuF,MAAQ,KAChDzC,KAAK0C,OAASC,UAAUH,UAAY,KACpCxC,KAAK4C,mBAAqB5C,KAAK6C,oBAAoB3F,GACnD8C,KAAK8C,WAAa,IAAI1G,MACtB4D,KAAK+C,cAAgB7F,EAAQ6F,eAAiB,IAC9C/C,KAAKgD,aAAe9F,EAAQ8F,cAAgB,IAC5ChD,KAAKiD,MAASjD,KAAkB,cAAIkD,WAAWlD,KAAKmD,MAAMf,KAAKpC,MAAOA,KAAK+C,eAAiB,KAE5F/C,KAAKoD,cAAgB,GACrBpD,KAAKqD,cAAgB,EAGvB5B,EAAmB9B,UAAY,CAS7B2D,OAAQ,SAASC,EAAUC,GACzB,IAAIC,EAAczD,KAAK0D,iBAAiBH,EAAUC,GAC9CG,EAAU3D,KAAK4D,gBAAgB,gBAAiBJ,GAIpD,GAHAG,EAAQF,YAAcA,EACtBE,EAAQE,gBAAmBN,EAASO,WACpCH,EAAQI,SAAWR,EAASS,IACvBP,IAAgBzD,KAAKqD,eAAiBM,EAAQM,cAAgBjE,KAAKoD,iBAAkC,GAAhBK,IAI1FzD,KAAKqD,cAAgBI,EACrBzD,KAAKoD,cAAgBO,EAAQM,YACxBN,EAAQM,aACb,OAAOjE,KAAKnB,KAAK8E,IAUnBO,MAAO,SAASV,GACd,IAAIG,EAAU3D,KAAK4D,gBAAgB,eAAgBJ,GACnD,GAAKG,EAAQM,YACb,OAAOjE,KAAKnB,KAAK8E,IAWnBQ,SAAU,SAASC,EAAUZ,GAG3B,GAAKY,EAAS1F,MAGV0F,EAASC,UAAsE,IAA3D,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,IAAIC,QAAQF,EAASG,SAArE,CACA,IAAIZ,EAAU3D,KAAK4D,gBAAgB,mBAAoBJ,GAEvD,GADAG,EAAQa,WAAaJ,EAAS1F,IACzBiF,EAAQM,YACb,OAAOjE,KAAKnB,KAAK8E,KAanBxB,KAAM,SAAUwB,EAASc,GACvB,IAAKzE,KAAK4C,mBACR,OAAI6B,EAAiBA,SACrB,EAEF,IAAIvH,EAAU8C,KAAK0E,kBAAkBf,GACrC3D,KAAK2E,QAAQzH,EAAS,SAAS0H,GAC7B,OAAIA,EAAY5E,KAAK6E,YAAYD,EAAKH,GAClCA,EACKA,SADT,GAGArC,KAAKpC,QAOT0E,kBAAmB,SAASf,GAY1B,OAXKvH,MAAMC,QAAQsH,KAAUA,EAAU,CAACA,IAC1B,CAEZmB,OAAQ,OACRC,KAAM/E,KAAK0B,OACXtE,KAAM4C,KAAK2B,SAAY,iBAAmB3B,KAAK4B,aAC/CoD,QAAS,CACP,eAAgB,oBAElBC,KAAKrE,KAAKC,UAAU8C,KAaxBC,gBAAiB,SAAUsB,EAAO1B,GAEhC,IAAI2B,EAIFA,EAHG3B,EAAStG,QAAQiI,UAE2B,iBAA/B3B,EAAStG,QAAQiI,UACrB,CAAC3B,EAAStG,QAAQiI,UAAUC,UAAW5B,EAAStG,QAAQiI,UAAUE,UACtC,OAA/B7B,EAAStG,QAAQiI,UACd,CAAC,IAAI,KAEL3B,EAAStG,QAAQiI,UANjB,KASd,IAAIG,EAAQ9B,EAAa,KAAIA,EAAS+B,KAAKC,eAAYjG,EACnDoE,EAAU,CACZuB,MAAOA,EACPO,SAAU,IAAIC,KACdC,kBAAmB3F,KAAK+B,UACxB6D,QAAS5F,KAAKqC,UACdJ,UAAWjC,KAAKiC,UAChBO,SAAUxC,KAAKwC,SACfD,KAAMvC,KAAKuC,KACXD,MAAOtC,KAAKsC,MACZX,SAAU,gBACVkE,aAAcrC,EAAStG,QAAQ2I,aAC/BC,WAAYtC,EAAStG,QAAQ4I,WAC7BX,UAAWA,EACX1C,MAAOe,EAAStG,QAAQuF,MACxBsD,QAASvC,EAAStG,QAAQ6I,QAC1BC,UAAWxC,EAAStG,QAAQ8I,UAC5BC,QAASX,EACTY,eAAgBlG,KAAK0C,QAWvB,MAPc,kBAAVwC,EACFvB,EAAQM,YAAcT,EAAS2C,YACd,iBAATjB,GAA4B1B,EAAS4C,SAC7CzC,EAAQM,YAAcT,EAAS4C,SAAS9J,MAExCqH,EAAQM,YAAcT,EAAS2C,YAE1BxC,GAUTgB,QAAS,SAAU0B,EAAM5B,GACvB,IAAI6B,EAAQ,IAAIC,eAahB,IAAK,IAAIC,KAZTF,EAAMG,mBAAqB,WACzB,GAAuB,GAAnBzG,KAAK0G,WACP,OAAmB,KAAf1G,KAAK2G,OAEAlC,EAAS,MAETA,EAASzE,KAAK4G,aAK3BN,EAAMO,KAAKR,EAAKvB,OAAQuB,EAAKtB,KAAO,IAAMsB,EAAKjJ,MAAM,GAClCiJ,EAAKrB,QAAQ,CAC9B,IAAI8B,EAAcT,EAAKrB,QAAQwB,GAC/BF,EAAMS,iBAAiBP,EAAQM,GAEjCR,EAAMnE,KAAKkE,EAAKpB,OAQlBJ,YAAa,SAAUD,EAAKH,GAC1B,GAAIA,EAAU,OAAOA,EAASG,IAQhC5C,kBAAmB,WACjB,OAAOR,KAOTU,aAAc,WACZ,MAAO,sBAAwBlC,KAAK8B,QAAU,IAAMa,UAAUV,WAUhEyB,iBAAkB,SAASH,EAAUC,GACnC,GAAKA,EAASwD,WAAd,CACA,IAAIC,EAAUzD,EAASwD,WAAWE,KAC9BC,EAAa5D,EAASS,GAK1B,OAJgBiD,EAAQxI,KAAI,SAAU2I,GACpC,OAAOA,EAAQpD,MAEWM,QAAQ6C,KAStCtE,oBAAqB,SAAS3F,GAC5B,SAAmC,IAA/BA,EAAQ0F,oBACR1F,EAAQwE,QAA6B,2BAAnBxE,EAAQwE,QAE1BxE,EAAQmK,eAERnK,EAAQkD,SAQd+C,MAAO,WACDnD,KAAK8C,WAAWpG,OAAS,IAC3BsD,KAAKmC,KAAKnC,KAAK8C,YACf9C,KAAK8C,WAAa,IAAI1G,OAGpB4D,KAAKiD,OAAQqE,aAAatH,KAAKiD,OAC/BjD,KAAK+C,gBAAe/C,KAAKiD,MAAQC,WAAWlD,KAAKmD,MAAMf,KAAKpC,MAAOA,KAAK+C,iBAS9ElE,KAAM,SAAS0I,EAAKC,GAClBxH,KAAK8C,WAAWjE,KAAK0I,IACjBvH,KAAK8C,WAAWpG,QAAUsD,KAAKgD,cAAgBwE,IACjDxH,KAAKmD,SAQTsE,OAAQ,WACNzH,KAAKmD,UAMT7B,EAAOC,QAAUE,WChUjBH,EAAOC,QAAU,CACf,GAAM,CACJ,KAAQ,SACR,KAAQ,CAAC,EAAE,QAAS,WAAY,CAAC,SAAU,aAE7C,GAAM,CACJ,KAAQ,gBACR,KAAQ,CAAC,EAAE,WAAY,UAAW,EAAE,SAAU,aAEhD,GAAM,CACJ,KAAQ,SACR,KAAQ,CAAC,CAAC,SAAU,WAAY,CAAC,UAAW,WAE9C,GAAM,CACJ,KAAQ,SACR,KAAQ,CAAC,EAAE,UAAW,WAAY,EAAE,UAAW,sBCfnD,SAASmG,KAETA,EAAY/H,UAAY,CAEtBgI,UAAW,WACT,OAAOtH,QAAQuH,OAAOjF,UAAUkF,cAGlCC,mBAAoB,WAClB,MAAMC,EAAkB,CACtBC,oBAAoB,GAGtB,OAAO,IAAIC,SAAQ,SAASC,EAASC,GACnCP,OAAOjF,UAAUkF,YAAYC,mBAAmBI,EAASC,EAAQJ,QAKvEzG,EAAOC,QAAUmG,8BCjBjB,IAAIU,EAAY,EAAQ,KACpBC,EAAW,EAAQ,KACnBC,EAAS,EAAQ,KACjBC,EAAe,oBACfC,EAAa,EAAQ,KACrBC,EAAe,EAAQ,IACvBC,EAAc,EAAQ,IACtBjH,EAAqB,EAAQ,KAC7BkH,EAAe,EAAQ,KACvBC,EAAS,EAAQ,KACjBlB,EAAc,EAAQ,KACtBmB,EAAQ,EAAQ,KAwEpB,SAASC,EAAe5L,GACtB8C,KAAK+I,cAAgB,IAAIR,EACzBvI,KAAK9C,QAAUoL,EAAO,GAAItI,KAAK9C,QAASA,GACxC8C,KAAKmG,YAAc,GACnBnG,KAAKgJ,OAAQ,EACbhJ,KAAKiJ,aAAe,KACpBjJ,KAAK6H,YAAc,IAAIH,EAGzBoB,EAAenJ,UAAY,CACzBzC,QAAS,CACPoI,KAAM,GACN4D,OAAO,EACPC,gBAAgB,EAChBC,UAAW,EACXC,gBAAgB,EAChBC,iBAAiB,EACjB7G,MAAO,EACPf,OAAQ,yBACRkB,oBAAoB,EACpB2G,QAAQ,EACRC,SAAU,KACVC,WAAW,EACXC,mBAAmB,EACnBC,aAAa,EACbC,mBAAmB,EACnBC,gBAAiB,SACjBC,aAAc,SAASC,GACrB,OAAOA,EAAKjG,YAEdkG,OAAQ,SAASD,GACf,IAAIE,EAAYF,EAAKjG,WAAWhF,MAAM,KACtC,MAAO,yGAA2GmL,EAAU,GAAI,iEAAmEA,EAAUC,OAAO,EAAGD,EAAUvN,QAAQkB,KAAK,KAAO,iBAsBzPuM,MAAO,SAASC,GAEd,SAASC,EAAwB7G,EAAU4G,GACzC,IAAKE,SAASrF,KAAKsF,SAASH,GAC1B,MAAM,IAAIjM,MAAM,8DAElB,MAAMqM,EAAKhH,EAASiH,QACpBL,EAAUM,YAAYF,GAIxB,GAAIJ,EAAUO,kBAEZP,EAAUQ,WAAW5K,WAGlB,GAAIoK,aAAqBS,YAC5BR,EAAuBrK,KAAMoK,OAG1B,IAAwB,iBAAbA,EAYd,MAAM,IAAIjM,MAAM,+GAZoB,CACpC,MAAM2M,EAASR,SAASS,iBAAiBX,GACzC,GAAsB,IAAlBU,EAAOpO,OACT,MAAM,IAAIyB,MAAM,WAAYiM,EAAW,cAGzC,GAAIU,EAAOpO,OAAS,EAClB,MAAM,IAAIyB,MAAM,uDAGlBkM,EAAuBrK,KAAM8K,EAAO,OAMxCL,MAAO,SAAShM,GAgBd,GAfIA,GAAqB,iBAAPA,IAChBuB,KAAKuF,KAAO9G,GAGduB,KAAKgL,cAEAhL,KAAK9C,QAAQ+N,oBAChBjL,KAAKkL,gBAAkBxC,EACrBD,EAAa,CACX5G,YAAa7B,KAAK9C,QAAQ2E,YAC1BH,OAAQ1B,KAAK9C,QAAQwE,WAKvB1B,KAAK9C,QAAQ+N,oBAAsBjL,KAAK9C,QAAQmK,cAClD,MAAM,IAAIlJ,MAAM,4EAGlB6B,KAAKmL,aAAe,IAAI1J,EAAmBzB,KAAK9C,SAEhD8C,KAAKoL,UAAYpL,KAAKoL,UAAUhJ,KAAKpC,MACrCA,KAAKqL,WAAarL,KAAKqL,WAAWjJ,KAAKpC,MACvCA,KAAKsL,SAAWtL,KAAKsL,SAASlJ,KAAKpC,MACnCA,KAAKuL,QAAUvL,KAAKuL,QAAQnJ,KAAKpC,MACjCA,KAAKwL,YAAcxL,KAAKwL,YAAYpJ,KAAKpC,MACzCA,KAAKyL,YAAczL,KAAKyL,YAAYrJ,KAAKpC,MACzCA,KAAK0L,eAAiB1L,KAAK0L,eAAetJ,KAAKpC,MAC/CA,KAAK2L,MAAQ3L,KAAK2L,MAAMvJ,KAAKpC,MAC7BA,KAAK4L,iBAAmB5L,KAAK4L,iBAAiBxJ,KAAKpC,MACnDA,KAAK6L,UAAY7L,KAAK6L,UAAUzJ,KAAKpC,MACrCA,KAAK8L,YAAc9L,KAAK8L,YAAY1J,KAAKpC,MACzCA,KAAK+L,OAAS/L,KAAK+L,OAAO3J,KAAKpC,MAC/BA,KAAKgM,aAAehM,KAAKgM,aAAa5J,KAAKpC,MAC3CA,KAAKiM,eAAiBjM,KAAKiM,eAAe7J,KAAKpC,MAE/C,IAAIwK,EAAMxK,KAAKoK,UAAYE,SAAS4B,cAAc,OAClD1B,EAAG2B,UAAY,uCAEf,IAAIC,EAAapM,KAAKqM,WAAW,SAAU,qQAE3CrM,KAAKoG,SAAWkE,SAAS4B,cAAc,SACvClM,KAAKoG,SAASkG,KAAO,OACrBtM,KAAKoG,SAAS+F,UAAY,gCAE1BnM,KAAKuM,iBAEDvM,KAAK9C,QAAQuM,YACfzJ,KAAK6L,YACL7L,KAAKoK,UAAUoC,iBAAiB,aAAcxM,KAAK8L,aACnD9L,KAAKoK,UAAUoC,iBAAiB,aAAcxM,KAAK6L,WACnD7L,KAAKoG,SAASoG,iBAAiB,QAASxM,KAAK8L,eAG3C9L,KAAK9C,QAAQuM,WAAazJ,KAAK9C,QAAQyM,cACzC3J,KAAKoG,SAASoG,iBAAiB,OAAQxM,KAAKuL,SAG9CvL,KAAKoG,SAASoG,iBAAiB,UAAWnE,EAASrI,KAAKqL,WAAY,MACpErL,KAAKoG,SAASoG,iBAAiB,QAASxM,KAAKsL,UAC7CtL,KAAKoG,SAASoG,iBAAiB,SAAUxM,KAAKoL,WAC9CpL,KAAKoK,UAAUoC,iBAAiB,aAAcxM,KAAKwL,aACnDxL,KAAKoK,UAAUoC,iBAAiB,aAAcxM,KAAKyL,aACnDzL,KAAKoG,SAASoG,iBAAiB,QAAS,SAASC,GAC/CzM,KAAKmL,aAAahH,SAASsI,EAAGzM,OAC9BoC,KAAKpC,OAEP,IAAI0M,EAAUpC,SAAS4B,cAAc,OACrCQ,EAAQC,UAAUC,IAAI,qCAEtB5M,KAAK6M,SAAWvC,SAAS4B,cAAc,UACvClM,KAAK6M,SAASC,aAAa,aAAc,SACzC9M,KAAK6M,SAASL,iBAAiB,QAASxM,KAAK2L,OAC7C3L,KAAK6M,SAASV,UAAY,iCAE1B,IAAIY,EAAa/M,KAAKqM,WAAW,QAAS,0RAY1C,GAXArM,KAAK6M,SAASnC,YAAYqC,GAE1B/M,KAAKgN,WAAahN,KAAKqM,WAAW,UAAW,oQAE7CK,EAAQhC,YAAY1K,KAAK6M,UACzBH,EAAQhC,YAAY1K,KAAKgN,YAEzBxC,EAAGE,YAAY0B,GACf5B,EAAGE,YAAY1K,KAAKoG,UACpBoE,EAAGE,YAAYgC,GAEX1M,KAAK9C,QAAQ0M,mBAAqB5J,KAAK6H,YAAYF,YAAa,CAClE3H,KAAKiN,aAAe3C,SAAS4B,cAAc,UAC3ClM,KAAKiN,aAAaH,aAAa,aAAc,aAC7C9M,KAAKiN,aAAaT,iBAAiB,QAASxM,KAAKiM,gBACjDjM,KAAKiN,aAAad,UAAY,iCAE9B,IAAIe,EAAgBlN,KAAKqM,WAAW,YAAa,yLACjDrM,KAAKiN,aAAavC,YAAYwC,GAE9BR,EAAQhC,YAAY1K,KAAKiN,cACzBjN,KAAKmN,uBAGP,IAAIC,EAAYpN,KAAKgH,WAAa,IAAIoB,EAAUpI,KAAKoG,SAAU,GAAI,CACjEhG,QAAQ,EACRgJ,UAAWpJ,KAAK9C,QAAQkM,UACxB3G,MAAOzC,KAAK9C,QAAQuF,QAGtBzC,KAAKqN,kBAAkBrN,KAAK9C,QAAQ8M,QACpCoD,EAAUtD,aAAe9J,KAAK9C,QAAQ4M,aAGtC,IApQEwD,EAoQEC,EAAaH,EAAUzP,KAAK6P,KAC5BC,EAAazN,KAAK0N,cArQpBJ,EAAMhD,SAAS4B,cAAc,QAC7BC,UAAY,qCAChBmB,EAAIK,UAAY,wFAETL,GA8RL,OA5BAF,EAAUzP,KAAK6P,KAAO,WACpBD,EAAW3N,KAAKI,MAEhByN,EAAWjB,iBAAiB,YAAa,WACvCxM,KAAK4N,mBAAoB,GACzBxL,KAAKpC,OAEPyN,EAAWjB,iBAAiB,UAAW,WACrCxM,KAAK4N,mBAAoB,GACzBxL,KAAKpC,OAEPA,KAAK6N,QAAQnD,YAAY+C,IAG3BzN,KAAK8N,UAAY,KACjB9N,KAAK+N,cAAgB/N,KAAK+N,cAAc3L,KAAKpC,MACzCA,KAAKuF,OACHvF,KAAK9C,QAAQiM,iBACfnJ,KAAK4L,mBACL5L,KAAKuF,KAAKyI,GAAG,UAAWhO,KAAK4L,mBAE/B5L,KAAKiO,UAAYjO,KAAK9C,QAAQsM,UACzBxJ,KAAKiO,WAAajO,KAAK9C,QAAQqM,SAElC2E,QAAQC,MAAM,2FACdnO,KAAK9C,QAAQqM,QAAS,IAGnBiB,GAGTyB,eAAgB,WACdjM,KAAKoO,uBACLpO,KAAKqO,mBAELrO,KAAK6H,YAAYC,qBAAqBwG,KAAK,SAASC,GAClDvO,KAAKwO,mBAEL,MAAMC,EAAU,CACdC,SAAU,CACRpC,KAAM,QACNqC,YAAa,CAACJ,EAAoBK,OAAOxJ,UAAWmJ,EAAoBK,OAAOvJ,YAInFrF,KAAK+N,cAAcU,GACnBzO,KAAK6O,KAAKJ,GAEVzO,KAAKgH,WAAW2E,QAChB3L,KAAKgH,WAAWzD,UAAW,EAC3BvD,KAAKiJ,aAAerI,KAAKC,UAAU4N,GACnCzO,KAAK8O,mBACL9O,KAAKgJ,OAAQ,EAEb,MAAM+F,EAAS,CACbtM,MAAO,EACPD,SAAU,CAACxC,KAAK9C,QAAQsF,UACxBwM,MAAOP,EAAQC,SAASC,YACxBrM,MAAO,CAAC,YAGV,GAAItC,KAAK9C,QAAQ+N,kBAAmB,CAClC,MAAMgE,EAAOR,EAAQC,SAASC,YAAY,GAAK,IAAMF,EAAQC,SAASC,YAAY,GAClF3O,KAAKkP,eAAeD,GAEpBjP,KAAK+I,cAAcoG,KAAK,SAAU,CAAEpS,OAAQ0R,SAE5CzO,KAAKkL,gBAAgB7B,eAAe0F,GAAQ5M,OAAOmM,KAAK,SAAUc,GAChE,MAAMhI,EAAUgI,EAAKnK,KAAKoK,SAAS,GAEnC,GAAIjI,EAAS,CACX,MAAMkI,EAAezG,EAAM0G,kCAAkCnI,EAASpH,KAAK9C,QAAQ2M,iBACnF7J,KAAKkP,eAAeI,GAEpBlI,EAAQoI,iBAAmBf,EAAQC,SAASC,YAC5C3O,KAAK+I,cAAcoG,KAAK,SAAU,CAAEpS,OAAQqK,SAE5CpH,KAAK+I,cAAcoG,KAAK,SAAU,CAAEpS,OAAQ,CAAEyS,iBAAkBf,EAAQC,SAASC,gBAEnFvM,KAAKpC,QAEToC,KAAKpC,OAAOyP,MAAM,SAAStB,GACR,IAAfA,EAAMuB,KACR1P,KAAK2P,oCAEL3P,KAAK4P,uBAGP5P,KAAKwO,mBACLxO,KAAKmN,uBACLnN,KAAK6P,oBACLzN,KAAKpC,QAGTqM,WAAY,SAASyD,EAAM1S,GACzB,IAAI2S,EAAOzF,SAAS0F,gBAAgB,6BAA8B,OAOlE,OANAD,EAAKjD,aAAa,QAAS,6DAA+DgD,GAC1FC,EAAKjD,aAAa,UAAW,aAC7BiD,EAAKjD,aAAa,YAAY,YAC9BiD,EAAKjD,aAAa,QAAS,IAC3BiD,EAAKjD,aAAa,SAAU,IAC5BiD,EAAKpC,UAAYvQ,EACV2S,GAGTE,SAAU,WAWR,OAVAjQ,KAAKoK,UAAU8F,WAAWC,YAAYnQ,KAAKoK,WAEvCpK,KAAK9C,QAAQiM,gBAAkBnJ,KAAKuF,MACtCvF,KAAKuF,KAAK6K,IAAI,UAAWpQ,KAAK4L,kBAGhC5L,KAAKqQ,gBAELrQ,KAAKuF,KAAO,KAELvF,MAGTkP,eAAgB,SAAU5S,GACxB0D,KAAKoG,SAAS9J,MAAQA,EAEtB4G,WAAW,WACTlD,KAAKoG,SAASkK,QACdtQ,KAAKoG,SAASmK,WAAa,EAC3BvQ,KAAKoG,SAASoK,kBAAkB,EAAG,IACnCpO,KAAKpC,MAAO,IAGhBsL,SAAU,SAASmB,GACjB,IAAInQ,GAASmQ,EAAEgE,eAAiB7I,OAAO6I,eAAeC,QAAQ,QAC1DpU,EAAMI,QAAUsD,KAAK9C,QAAQkM,WAC/BpJ,KAAK2Q,SAASrU,IAIlB+O,WAAY,SAASoB,GACnB,IAAImE,EAAe,GACjBC,EAAe,EAEjB,GAAIpE,EAAElI,UAAYqM,GAAgB5Q,KAAK9C,QAAQwM,kBAE7C,OADA1J,KAAK+L,OAAOU,GACLzM,KAAKoG,SAAS0K,OAIvB,IAAIC,EAAStE,EAAEsE,QAAUtE,EAAEsE,OAAOC,WAC9BvE,EAAEsE,OAAOC,WAAWC,cACpBxE,EAAEsE,OAGN,IAFYA,IAASA,EAAOzU,MAO1B,OAJA0D,KAAKgJ,OAAQ,EAETyD,EAAElI,UAAYsM,GAAc7Q,KAAK2L,MAAMc,GAC3CzM,KAAKmN,uBACEnN,KAAKkR,mBAGdlR,KAAKoO,uBAGA3B,EAAEpI,UAAoF,IAAzE,CAACwM,EAAcD,EAAc,GAAI,GAAI,GAAI,GAAI,IAAItM,QAAQmI,EAAElI,UAGzEwM,EAAOzU,MAAMI,QAAUsD,KAAK9C,QAAQkM,WACtCpJ,KAAK2Q,SAASI,EAAOzU,QAIzBkP,YAAa,WACPxL,KAAKgH,WAAWzD,UAAUvD,KAAK8O,oBAGrCrD,YAAa,WACPzL,KAAKgH,WAAWzD,UAAUvD,KAAKkR,oBAGrCpC,iBAAkB,WAChB9O,KAAK6M,SAASsE,MAAMC,QAAU,SAGhCF,iBAAkB,WAChBlR,KAAK6M,SAASsE,MAAMC,QAAU,QAGhCjE,qBAAsB,WAChBnN,KAAKiN,cAAgBjN,KAAK6H,YAAYF,cACxC3H,KAAKiN,aAAakE,MAAMC,QAAU,UAItChD,qBAAsB,WAChBpO,KAAKiN,eACPjN,KAAKiN,aAAakE,MAAMC,QAAU,SAItC/C,iBAAkB,WAChBrO,KAAKgN,WAAWmE,MAAMC,QAAU,SAGlC5C,iBAAkB,WAChBxO,KAAKgN,WAAWmE,MAAMC,QAAU,QAGlCC,iBAAkB,WAChBrR,KAAK0N,YAAYyD,MAAMC,QAAU,SAGnCvB,iBAAkB,WAChB7P,KAAK0N,YAAYyD,MAAMC,QAAU,QAGnC7F,QAAS,SAASkB,GACZzM,KAAK9C,QAAQyM,aACf3J,KAAKgM,aAAaS,GAEhBzM,KAAK9C,QAAQuM,WACfzJ,KAAK6L,aAGTT,UAAW,WACT,IAAI7H,EAAWvD,KAAKgH,WAAWzD,SAC3BA,GAAa3C,KAAKC,UAAU0C,KAAcvD,KAAKiJ,eACjDjJ,KAAKkR,mBACDlR,KAAK9C,QAAQgM,OACflJ,KAAK6O,KAAKtL,GAERvD,KAAK9C,QAAQqM,QAAUvJ,KAAKiO,WAC9BjO,KAAK+N,cAAcxK,GAKrBvD,KAAKoG,SAASkK,QACdtQ,KAAKoG,SAASmK,WAAa,EAC3BvQ,KAAKoG,SAASoK,kBAAkB,EAAG,GACnCxQ,KAAKiJ,aAAerI,KAAKC,UAAU0C,GACnCvD,KAAK+I,cAAcoG,KAAK,SAAU,CAAEpS,OAAQwG,IAC5CvD,KAAKmL,aAAa7H,OAAOC,EAAUvD,QAIvC6O,KAAM,SAAStL,GACb,IAAI+N,EACJ,GAAI/N,EAASgO,YAAc/I,EAAWjF,EAASgO,WAAWC,YAOxDF,EAAahJ,EAAO,GAAItI,KAAK9C,QAAQgM,OACjClJ,KAAKuF,MACPvF,KAAKuF,KAAKkM,UAAUjJ,EAAWjF,EAASgO,WAAWC,YAAYjP,KAAM+O,QAElE,GAAI/N,EAAShB,KAAM,CACxB,IAAIA,EAAOgB,EAAShB,KACpB+O,EAAahJ,EAAO,GAAItI,KAAK9C,QAAQgM,OACjClJ,KAAKuF,MACPvF,KAAKuF,KAAKkM,UAAU,CAAC,CAAClP,EAAK,GAAIA,EAAK,IAAK,CAACA,EAAK,GAAIA,EAAK,KAAM+O,OAE3D,CACL,IAAII,EAAoB,CACtBpM,KAAMtF,KAAK9C,QAAQoI,MAErBgM,EAAahJ,EAAO,GAAIoJ,EAAmB1R,KAAK9C,QAAQgM,OAEpD3F,EAASoO,OACXL,EAAWK,OAASpO,EAASoO,OACpBpO,EAASmL,UAAYnL,EAASmL,SAASpC,MAAmC,UAA3B/I,EAASmL,SAASpC,MAAoB/I,EAASmL,SAASC,cAChH2C,EAAWK,OAASpO,EAASmL,SAASC,aAGpC3O,KAAKuF,MACPvF,KAAKuF,KAAK2D,MAAMoI,KAKtBM,aAAc,SAAS1U,EAAS2U,GAS9B,OAPI3U,EAAQ+N,kBAziBP,EA2iBM/N,EAAQmM,gBAAkBR,EAAMiJ,0BAA0BvU,KAAKsU,GA1iBnE,EAFA,GAojBTE,aAAc,SAASC,EAAaH,GAElC,MAcMI,EAAmB,SAEzB,IAAIC,EAAOlS,KACP+O,EAjBS,CACX,OACA,QACA,YACA,YACA,QACA,WACA,cACA,OACA,eACA,aACA,UACA,aAKgB3P,QAAO,SAAS2P,EAAQrQ,GAExC,QAA0Ba,IAAtB2S,EAAKhV,QAAQwB,IAA4C,OAAtBwT,EAAKhV,QAAQwB,GAClD,OAAOqQ,EAKT,CAAC,YAAa,QAAS,YAAYzK,QAAQ5F,IAAQ,EAC9CqQ,EAAOrQ,GAAOwT,EAAKhV,QAAQwB,GAAKI,MAAMmT,GACtClD,EAAOrQ,GAAOwT,EAAKhV,QAAQwB,GAEhC,MAAMyT,EACmC,iBAAhCD,EAAKhV,QAAQwB,GAAK0G,WACc,iBAAhC8M,EAAKhV,QAAQwB,GAAK2G,SAE3B,GAAY,cAAR3G,GAAuByT,EAAY,CACrC,MAAMC,EAAMF,EAAKhV,QAAQwB,GAAK0G,UACxBiN,EAAMH,EAAKhV,QAAQwB,GAAK2G,SAE9B0J,EAAOrQ,GAAO,CAAC0T,EAAKC,GAGtB,OAAOtD,IACN,IAEH,OAAQiD,GACR,KAhmBO,EAimBL,IAAIpD,EAASiD,EAAO/S,MAAMmT,GAAkBxT,KAAI,SAAS6T,GACvD,OAAOC,WAAWD,EAAG,OAElBJ,EAAKhV,QAAQoM,iBAChBsF,EAAO4D,WAKTzD,EAAOzM,OAASyM,EAAOzM,MAAM,GAC7ByM,EAASzG,EAAOyG,EAAQ,CAAEC,MAAOJ,EAAQnM,MAAO,IAGhD,CAAC,YAAa,eAAgB,aAAc,QAAQgQ,SAAQ,SAAS/T,GAC/DA,KAAOqQ,UACFA,EAAOrQ,MAGlB,MACF,KAtnBO,EAsnB4B,CAGjC,MAAMgU,EAAgBb,EAAOc,OACE,6DACJpV,KAAKmV,KAC9Bb,EAASA,EAAOe,QAAQ,KAAM,MAEhC7D,EAASzG,EAAOyG,EAAQ,CAAEC,MAAO6C,KAInC,OAAO9C,GAGT4B,SAAU,SAASkC,GACjB7S,KAAKmG,YAAc0M,EACnB7S,KAAKqO,mBACLrO,KAAK+I,cAAcoG,KAAK,UAAW,CAAEH,MAAO6D,IAE5C,MAAMb,EAAchS,KAAK4R,aAAa5R,KAAK9C,QAAS2V,GAC9C9D,EAAS/O,KAAK+R,aAAaC,EAAaa,GAE9C,IAAIlO,EACJ,OAAQqN,GACR,KA9oBK,EA+oBHrN,EAAUsD,QAAQC,UAClB,MACF,KAlpBO,EAmpBLvD,EAAU3E,KAAKkL,gBAAgB4H,eAAe/D,GAAQ5M,OACtD,MACF,KAnpBO,EAopBLwC,EAAU3E,KAAKkL,gBAAgB7B,eAAe0F,GAAQ5M,OAIxD,IAAI4Q,EAAmB/S,KAAK9C,QAAQmK,eAAgBrH,KAAK9C,QAAQmK,cAAcwL,IAAqB,GAChGG,EAAsB,GAEtBC,EAAgB,KA8FpB,OA7FAtO,EAAQ8K,MAAM,SAAStB,GACrB8E,EAAgB9E,GAChB/L,KAAKpC,OACJsO,KACC,SAAS4E,GACPlT,KAAKwO,mBAEL,IAAI2E,EAAM,GAyBV,OAvBKD,EAK6B,OAAvBA,EAASE,cAClBD,EAAMD,EAASjO,MACXN,QAAUuO,EAASvO,QACvBwO,EAAInO,QAAUkO,EAASlO,SAPvBmO,EAAM,CACJ7G,KAAM,oBACN+C,SAAU,IAQd8D,EAAIpE,OAASA,EAET/O,KAAKgJ,QACPhJ,KAAKmL,aAAajH,MAAMlE,MACxBA,KAAKgJ,OAAQ,GAIfmK,EAAI9D,SAAW8D,EAAI9D,SACf0D,EAAiBnW,OAAOuW,EAAI9D,UAC5B0D,EAEA/S,KAAK9C,QAAQmW,kBAEfL,EAAsBhT,KAAK9C,QAAQmW,iBAAiBR,EAAaM,EAAI9D,WAAapH,QAAQC,QAAQ,KAEvEoG,MAAK,SAASe,GAEvC,OADA8D,EAAI9D,SAAW8D,EAAI9D,SAAWA,EAASzS,OAAOuW,EAAI9D,UAAYA,EACvD8D,KACN,WAED,OAAOA,KAGJA,GAEP/Q,KAAKpC,OAAOsO,KACd,SAAS6E,GACP,GAAIF,EACF,MAAMA,EAIJjT,KAAK9C,QAAQkD,QAAU+S,EAAI9D,SAAS3S,SACtCyW,EAAI9D,SAAW8D,EAAI9D,SAASjP,OAAOJ,KAAK9C,QAAQkD,SAG9C+S,EAAI9D,SAAS3S,QACfsD,KAAK8O,mBACL9O,KAAKoO,uBACLpO,KAAKqR,mBACLrR,KAAK+I,cAAcoG,KAAK,UAAWgE,GACnCnT,KAAKgH,WAAWsM,OAAOH,EAAI9D,YAE3BrP,KAAKkR,mBACLlR,KAAK6P,mBACL7P,KAAKgH,WAAWzD,SAAW,KAC3BvD,KAAKuT,mBACLvT,KAAK+I,cAAcoG,KAAK,UAAWgE,KAGrC/Q,KAAKpC,OACPyP,MACA,SAAS7K,GACP5E,KAAKwO,mBACLxO,KAAK6P,mBAGAkD,EAAiBrW,QAAUsD,KAAK9C,QAAQmK,eAAmB2L,EAAoBtW,QAAUsD,KAAK9C,QAAQmW,kBACzGrT,KAAK8O,mBACL9O,KAAKoO,uBACLpO,KAAKgH,WAAWsM,OAAOP,KAEvB/S,KAAKkR,mBACLlR,KAAKgH,WAAWzD,SAAW,KAC3BvD,KAAKwT,gBAGPxT,KAAK+I,cAAcoG,KAAK,UAAW,CAAEE,SAAU0D,IAC/C/S,KAAK+I,cAAcoG,KAAK,QAAS,CAAEhB,MAAOvJ,KAC1CxC,KAAKpC,OAGJ2E,GASToH,OAAQ,SAAS0H,GACXA,GAAIA,EAAGC,iBACX1T,KAAKoG,SAAS9J,MAAQ,GACtB0D,KAAKgH,WAAWzD,SAAW,KAC3BvD,KAAKgH,WAAW2E,QAChB3L,KAAKoL,YACLpL,KAAKkR,mBACLlR,KAAKmN,uBACLnN,KAAKqQ,gBACLrQ,KAAKiJ,aAAe,KACpBjJ,KAAK+I,cAAcoG,KAAK,SACxBnP,KAAKgJ,OAAQ,GAQf2C,MAAO,SAAS8H,GACdzT,KAAK+L,OAAO0H,GACZzT,KAAKoG,SAASkK,SAUhBtE,aAAc,SAASyH,GAYjBA,EAAGE,eAXG3T,KAYJ+L,OAAO0H,IAIf/H,eAAgB,SAASwH,GACvB,IAAIjM,EAAUiM,EAASjO,KACvB,GAAKgC,EAAQoI,SAAS3S,OAAtB,CACA,IAAIK,EAASkK,EAAQoI,SAAS,GAC9BrP,KAAKgH,WAAWzD,SAAWxG,EAC3BiD,KAAKoG,SAAS9J,MAAQS,EAAO+G,WAC7B9D,KAAKoL,cAGPQ,iBAAkB,WAGhB,GAAK5L,KAAKuF,MAASvF,KAAK9C,QAAQiM,eAGhC,GAAInJ,KAAKuF,KAAKC,UAAY,EAAG,CAC3B,IAAImM,EAAS3R,KAAKuF,KAAKqO,YAAYC,OACnC7T,KAAK8T,aAAa,CAAE1O,UAAWuM,EAAOS,IAAK/M,SAAUsM,EAAOU,MAAO,QAEnErS,KAAK8T,aAAa,MAAM,IAI5BjI,UAAW,WAEJ7L,KAAKoG,SAAS9J,OAAS0D,KAAKoG,WAAakE,SAAS2G,eAAejR,KAAKoK,UAAUuC,UAAUC,IAAI,sCAGrGd,YAAa,WACX9L,KAAKoK,UAAUuC,UAAUlF,OAAO,sCAQlCuH,MAAO,SAAS6D,GAEd,OADA7S,KAAK2Q,SAASkC,GAAavE,KAAKtO,KAAK0L,gBAC9B1L,MAGTwT,aAAc,WAEZxT,KAAK+T,eADc,wFAIrBnE,qBAAsB,WAEpB5P,KAAK+T,eADc,+EAIrBR,iBAAkB,WAEhBvT,KAAK+T,eADc,iGAIrBpE,kCAAmC,WAEjC3P,KAAK+T,eADc,+EAIrBA,eAAgB,SAASC,GACvBhU,KAAKgH,WAAWsM,OAAO,IACvBtT,KAAKgH,WAAWzD,SAAW,KAC3BvD,KAAKgH,WAAW2E,QAChB3L,KAAKgH,WAAWiN,YAAYD,IAa9BE,oBAAqB,WACnB,GAAIlU,KAAK9C,QAAQiX,YAAa,OAAOnU,KAAK9C,QAAQiX,YAClD,GAAInU,KAAK9C,QAAQsF,SAAS,CACxB,IAAI4R,EAAgBpU,KAAK9C,QAAQsF,SAAS1D,MAAM,KAAK,GACjD0D,EAAWoG,EAAOpG,SAAS4R,GAC3BC,EAAiB1L,EAAawL,YAAY3R,GAC9C,GAAI6R,EAAiB,OAAOA,EAE9B,MAAO,UAQTC,SAAU,SAASzB,GAQjB,OANA7S,KAAKoG,SAAS9J,MAAQuW,EACtB7S,KAAKgH,WAAWzD,SAAW,KAC3BvD,KAAKgH,WAAW2E,QACZkH,EAAYnW,QAAUsD,KAAK9C,QAAQkM,WACrCpJ,KAAK2Q,SAASkC,GAET7S,MAST8T,aAAc,SAAS3O,EAAWoP,GAAwB,GAKxD,OAJAvU,KAAK9C,QAAQiI,UAAYA,EACrBoP,IACFvU,KAAK9C,QAAQiM,gBAAiB,GAEzBnJ,MAOTwU,aAAc,WACZ,OAAOxU,KAAK9C,QAAQiI,WAQtBkI,kBAAmB,SAASoH,GAI1B,OAHIA,GAAoB,mBAAR,IACdzU,KAAKgH,WAAWgD,OAASyK,GAEpBzU,MAQT0U,kBAAmB,WACjB,OAAO1U,KAAKgH,WAAWgD,QAUzBgB,YAAa,SAASxI,GACpB,IAAImS,EAAgBhS,UAAUH,UAAYG,UAAUiS,cAAgBjS,UAAUkS,gBAE9E,OADA7U,KAAK9C,QAAQsF,SAAWA,GAAYxC,KAAK9C,QAAQsF,UAAYmS,EACtD3U,MAOT8U,YAAa,WACX,OAAO9U,KAAK9C,QAAQsF,UAOtBgD,QAAS,WACP,OAAOxF,KAAK9C,QAAQoI,MAQtByP,QAAS,SAASzP,GAEhB,OADAtF,KAAK9C,QAAQoI,KAAOA,EACbtF,MAOTgV,SAAU,WACR,OAAOhV,KAAK9C,QAAQgM,OAOtB+L,SAAU,SAAS/L,GAEjB,OADAlJ,KAAK9C,QAAQgM,MAAQA,EACdlJ,MAOTkV,eAAgB,WACd,OAAOlV,KAAK9C,QAAQiX,aAQtB5H,eAAgB,SAAS4H,GAIvB,OAHAnU,KAAKmU,YAAc,GAA8BnU,KAAKkU,sBACtDlU,KAAKoG,SAAS+N,YAAcnU,KAAKmU,YACjCnU,KAAKoG,SAAS0G,aAAa,aAAc9M,KAAKmU,aACvCnU,MAOTmV,QAAS,WACP,OAAOnV,KAAK9C,QAAQqF,MAQtB6S,QAAS,SAAS7S,GAEhB,OADAvC,KAAK9C,QAAQqF,KAAOA,EACbvC,MAOTqV,aAAc,WACZ,OAAOrV,KAAK9C,QAAQmF,WAQtBiT,aAAc,SAASjT,GAErB,OADArC,KAAK9C,QAAQmF,UAAYA,EAClBrC,MAOTuV,SAAU,WACR,OAAOvV,KAAK9C,QAAQoF,OAQtBkT,SAAU,SAASlT,GAEjB,OADAtC,KAAK9C,QAAQoF,MAAQA,EACdtC,MAOTyV,aAAc,WACZ,OAAOzV,KAAK9C,QAAQkM,WAQtBsM,aAAc,SAAStM,GAGrB,OAFApJ,KAAK9C,QAAQkM,UAAYA,EACrBpJ,KAAKgH,aAAahH,KAAKgH,WAAW9J,QAAQkM,UAAYA,GACnDpJ,MAOT2V,SAAU,WACR,OAAO3V,KAAK9C,QAAQuF,OAQtBmT,SAAU,SAASnT,GAGjB,OAFAzC,KAAK9C,QAAQuF,MAAQA,EACjBzC,KAAKgH,aAAYhH,KAAKgH,WAAW9J,QAAQuF,MAAQA,GAC9CzC,MAOT6V,UAAW,WACT,OAAO7V,KAAK9C,QAAQkD,QAQtB0V,UAAW,SAAS1V,GAElB,OADAJ,KAAK9C,QAAQkD,OAASA,EACfJ,MAQT+V,UAAW,SAASrU,GAQlB,OAPA1B,KAAK9C,QAAQwE,OAASA,EACtB1B,KAAKkL,gBAAkBxC,EACrBD,EAAa,CACX5G,YAAa7B,KAAK9C,QAAQ2E,YAC1BH,OAAQ1B,KAAK9C,QAAQwE,UAGlB1B,MAOTgW,UAAW,WACT,OAAOhW,KAAK9C,QAAQwE,QAQtBuU,eAAgB,SAASpU,GAQvB,OAPA7B,KAAK9C,QAAQ2E,YAAcA,EAC3B7B,KAAKkL,gBAAkBxC,EACrBD,EAAa,CACX5G,YAAa7B,KAAK9C,QAAQ2E,YAC1BH,OAAQ1B,KAAK9C,QAAQwE,UAGlB1B,MAQTkW,gBAAiB,SAAS5Z,GAExB,OADA0D,KAAK9C,QAAQ2I,aAAevJ,EACrB0D,MAOTmW,gBAAiB,WACf,OAAOnW,KAAK9C,QAAQ2I,cAQtBuQ,cAAe,SAAS9Z,GAEtB,OADA0D,KAAK9C,QAAQ4I,WAAaxJ,EACnB0D,MAOTqW,cAAe,WACb,OAAOrW,KAAK9C,QAAQ4I,YAQtBwQ,WAAY,SAASha,GAEnB,OADA0D,KAAK9C,QAAQ6I,QAAUzJ,EAChB0D,MAOTuW,WAAY,WACV,OAAOvW,KAAK9C,QAAQ6I,SAQtByQ,aAAc,SAAS9G,GAErB,OADA1P,KAAK9C,QAAQ8I,UAAY0J,EAClB1P,MAOTyW,aAAc,WACZ,OAAOzW,KAAK9C,QAAQ8I,WAStB+H,cAAe,SAASxK,GAEtB,GAAKvD,KAAKuF,KAAV,CAGAvF,KAAKqQ,gBACL,IAGIqG,EAAgBpO,EAAO,GAHA,CACzBqO,MAAO,WAE4C3W,KAAK9C,QAAQqM,QAWlE,OAVAvJ,KAAK8N,UAAY,IAAI9N,KAAKiO,UAAU2I,OAAOF,GACvCnT,EAASoO,OACX3R,KAAK8N,UACF+I,UAAUtT,EAASoO,QACnBxH,MAAMnK,KAAKuF,MACLhC,EAASmL,UAAYnL,EAASmL,SAASpC,MAAmC,UAA3B/I,EAASmL,SAASpC,MAAoB/I,EAASmL,SAASC,aAChH3O,KAAK8N,UACF+I,UAAUtT,EAASmL,SAASC,aAC5BxE,MAAMnK,KAAKuF,MAETvF,OAOTqQ,cAAe,WACTrQ,KAAK8N,YACP9N,KAAK8N,UAAUrG,SACfzH,KAAK8N,UAAY,OAgBrBE,GAAI,SAAS1B,EAAMmI,GAEjB,OADAzU,KAAK+I,cAAciF,GAAG1B,EAAMmI,GACrBzU,MASToQ,IAAK,SAAS9D,EAAMmI,GAGlB,OAFAzU,KAAK+I,cAAc+N,eAAexK,EAAMmI,GACxCzU,KAAKmL,aAAa1D,SACXzH,OAIXsB,EAAOC,QAAUuH,wBCtyCjBxH,EAAOC,QAAU,CAAC4S,YA7BA,CAEhB,GAAM,QACN,GAAM,UACN,GAAM,SACN,GAAM,SACN,GAAM,WACN,GAAM,QACN,GAAM,OACN,GAAM,MACN,GAAM,SACN,GAAM,WACN,GAAM,WACN,GAAM,KACN,GAAM,cACN,GAAM,UACN,GAAM,QACN,GAAM,OACN,GAAM,eACN,GAAM,QACN,GAAM,MACN,GAAM,QACN,GAAM,KACN,GAAO,SACP,GAAM,UACN,GAAM,QACN,GAAM,mBCQR,SAAS4C,EAAe3P,GACtB,MAAM4P,EAAc5P,EAAQ6P,SAAW,GACjCC,EAAS9P,EAAQ6H,MAAQ,GACzBhF,EAAY7C,EAAQtD,YAAc,GAGlCqT,EAAW,CACfF,QAHchN,EAAUnL,MAAM,KAAK,GAInCkY,YAAaA,EACbE,OAAQA,EACRjN,UAAWA,GAQb,OALA7C,EAAQgQ,QAAQ3E,SAAQ,SAAU2E,GAChC,MAAMC,EAAQD,EAAQpT,GAAGlF,MAAM,KAAK,GACpCqY,EAASE,GAASD,EAAQnI,QAGrBkI,EAKT7V,EAAOC,QAAU,CACfgO,kCA3DF,SAA2CnI,EAASkQ,GAClD,MAAMH,EAAWJ,EAAe3P,GAE1ByC,EAAmB,CAAC,UAAW,SAAU,QAAS,WAGxD,GAAwB,mBAAbyN,EACT,OAAOA,EAASH,GAGlB,MAAMI,EAAgB1N,EAAgBvF,QAAQgT,GAQ9C,QANuB,IAAnBC,EACgB1N,EAEAA,EAAgBxM,MAAMka,IAGnBnY,QAAO,SAASoY,EAAK1H,GAC1C,OAAKqH,EAASrH,IAIF,KAAR0H,IACFA,GAAY,MAGPA,EAAML,EAASrH,IAPb0H,IAQR,KAgCHT,eAAgBA,EAChBjF,0BALgC,gGC5DlC,IAAI2F,EAAS,EAAQ,KAErBnW,EAAOC,QAAUkW,8BCFjB,IAAIC,EAAU,EAAQ,KAClBC,EAAa,EAAQ,KAEzB,SAASC,EAAc1a,GACrBya,EAAW/X,KAAKI,KAAM9C,GAExB0a,EAAcjY,UAAYpB,OAAOsZ,OAAOF,EAAWhY,WACnDiY,EAAcjY,UAAUmY,YAAcF,EAEtCA,EAAcjY,UAAUoY,YAAcL,EAAQM,YAC9CJ,EAAcjY,UAAUsY,aAAeP,EAAQQ,aAc/C5W,EAAOC,QAJP,SAA6BrE,GAC3B,OAAO,IAAI0a,EAAc1a,gCCrB3B,IAAIib,EAAe,EAAQ,KACvBC,EAAY,EAAQ,KACpBC,EAAY,EAAQ,KACpBC,EAAe,EAAQ,KAGvBC,EAAmB,GAiBvB,SAASC,EAA8BtT,GACrC,IAAIuT,EAAQvT,EAAMuT,MACdC,EAAcxT,EAAMyT,OAExB,MAAO,CACLF,MAAOA,EACPC,YAAaA,EACbE,QAJa,IAAMF,EAAeD,GAQtC,SAASI,EAAelU,EAASmU,GAC/B,OAAO,IAAI7Q,SAAQ,SAASC,EAASC,GACnC2Q,EAAIC,WAAa,SAAS7T,GACxBP,EAAQqU,QAAQ7J,KACdkJ,EAAUY,wBACVT,EAA8BtT,KAIlC,IAAIgU,EAAOvU,EAAQuU,KACfA,IACFJ,EAAIK,OAAOJ,WAAa,SAAS7T,GAC/BP,EAAQqU,QAAQ7J,KACdkJ,EAAUe,sBACVZ,EAA8BtT,MAKpC4T,EAAIO,QAAU,SAASlL,GACrBhG,EAAOgG,IAGT2K,EAAIQ,QAAU,WACZ,IAAIC,EAAY,IAAInB,EAAU,CAC5BzT,QAASA,EACT2H,KAAM+L,EAAUmB,wBAElBrR,EAAOoR,IAGTT,EAAIW,OAAS,WAEX,UADOlB,EAAiB5T,EAAQX,IAC5B8U,EAAInS,OAAS,KAAOmS,EAAInS,QAAU,IAAtC,CACE,IAAI4S,EAAY,IAAInB,EAAU,CAC5BzT,QAASA,EACTM,KAAM6T,EAAI5F,SACVE,WAAY0F,EAAInS,SAElBwB,EAAOoR,QAGTrR,EAAQ4Q,IAGV,IAAI7T,EAAON,EAAQM,KAGC,iBAATA,EACT6T,EAAI3W,KAAK8C,GACAA,EACT6T,EAAI3W,KAAKvB,KAAKC,UAAUoE,IACfiU,EACTJ,EAAI3W,KAAK+W,GAETJ,EAAI3W,OAGNoW,EAAiB5T,EAAQX,IAAM8U,KAC9BxK,MAAK,SAASwK,GACf,OA/EJ,SAAwBnU,EAASmU,GAC/B,OAAO,IAAIX,EAAaxT,EAAS,CAC/BM,KAAM6T,EAAI5F,SACVlO,QAASsT,EAAaQ,EAAIY,yBAC1BtG,WAAY0F,EAAInS,SA2ETgT,CAAehV,EAASmU,MAMnC,SAASc,EAAiBjV,EAAS9C,GACjC,IAAIgY,EAAMlV,EAAQkV,IAAIhY,GAClBiX,EAAM,IAAIlR,OAAOrB,eAKrB,OAJAuS,EAAIjS,KAAKlC,EAAQG,OAAQ+U,GACzBtb,OAAOC,KAAKmG,EAAQK,SAASyN,SAAQ,SAAS/T,GAC5Coa,EAAI/R,iBAAiBrI,EAAKiG,EAAQK,QAAQtG,OAErCoa,EAUTxX,EAAOC,QAAU,CACf2W,aA9GF,SAAsBvT,GACpB,IAAImU,EAAMP,EAAiB5T,EAAQX,IAC9B8U,IACLA,EAAIgB,eACGvB,EAAiB5T,EAAQX,MA2GhC6U,eAAgBA,EAChBb,YAVF,SAAqBrT,GACnB,OAAOsD,QAAQC,UAAUoG,MAAK,WAC5B,IAAIwK,EAAMc,EAAiBjV,EAASA,EAAQ8S,OAAO5V,aACnD,OAAOgX,EAAelU,EAASmU,OAQjCc,iBAAkBA,+BCzHpB,IAAIG,EAAa,EAAQ,KACrBC,EAAc,EAAQ,KACtB3B,EAAY,EAAQ,KAkBxB,SAASV,EAAWza,GAClB,IAAKA,IAAYA,EAAQ2E,YACvB,MAAM,IAAI1D,MAAM,kDAGlB4b,EAAW7c,EAAQ2E,aAEnB7B,KAAK6B,YAAc3E,EAAQ2E,YAC3B7B,KAAK0B,OAASxE,EAAQwE,QAAU2W,EAAU4B,WAG5CtC,EAAWhY,UAAUua,cAAgB,SAAuBC,GAC1D,OAAO,IAAIH,EAAYha,KAAMma,IAG/B7Y,EAAOC,QAAUoW,8BCnCjB,IAAIU,EAAY,EAAQ,KA6DxB/W,EAAOC,QAhCP,SAAmBrE,GACjB,IAEI+H,EAFAmV,EAAYld,EAAQoP,MAAQ+L,EAAUgC,WAG1C,GAAInd,EAAQ+H,KACV,IACEA,EAAOrE,KAAK0Z,MAAMpd,EAAQ+H,MAC1B,MAAOwH,GACPxH,EAAO/H,EAAQ+H,UAGjBA,EAAO,KAGT,IAAIhI,EAAUC,EAAQD,SAAW,KAC5BA,IACiB,iBAATgI,EACThI,EAAUgI,EACDA,GAAgC,iBAAjBA,EAAKhI,QAC7BA,EAAUgI,EAAKhI,QACNmd,IAAc/B,EAAUmB,wBACjCvc,EAAU,oBAId+C,KAAK/C,QAAUA,EACf+C,KAAKsM,KAAO8N,EACZpa,KAAKoT,WAAalW,EAAQkW,YAAc,KACxCpT,KAAK2E,QAAUzH,EAAQyH,QACvB3E,KAAKiF,KAAOA,+BC1Dd,IAAI8U,EAAa,EAAQ,KACrBle,EAAQ,EAAQ,KAChB0M,EAAe,EAAQ,KACvBgS,EAAW,EAAQ,KACnBlC,EAAY,EAAQ,KAEpBmC,EAAY,EA+DhB,SAASR,EAAYvC,EAAQva,GAC3B,IAAKua,EACH,MAAM,IAAItZ,MAAM,iCAElB,IAAKjB,IAAYA,EAAQE,OAASF,EAAQ4H,OACxC,MAAM,IAAI3G,MACR,0EAIJ,IAAIsc,EAAiB,GACjBvd,EAAQ+H,OACVwV,EAAe,gBAAkB,oBAGnC,IAAIC,EAAsB7e,EAAM4e,EAAgBvd,EAAQ8H,SAIpDA,EAAUzG,OAAOC,KAAKkc,GAAqBtb,QAAO,SAASC,EAAMyQ,GAEnE,OADAzQ,EAAKyQ,EAAK6K,eAAiBD,EAAoB5K,GACxCzQ,IACN,IAEHW,KAAKgE,GAAKwW,IACVxa,KAAK4a,SAAW1d,EAEhB8C,KAAKgZ,QAAU,IAAIzQ,EACnBvI,KAAKyX,OAASA,EACdzX,KAAKkT,SAAW,KAChBlT,KAAKmO,MAAQ,KACbnO,KAAK6a,MAAO,EACZ7a,KAAK8a,SAAU,EACf9a,KAAK5C,KAAOF,EAAQE,KACpB4C,KAAK8E,OAAS5H,EAAQ4H,OACtB9E,KAAK0B,OAASxE,EAAQwE,QAAU+V,EAAO/V,OACvC1B,KAAKgP,MAAQ9R,EAAQ8R,OAAS,GAC9BhP,KAAK+a,OAAS7d,EAAQ6d,QAAU,GAChC/a,KAAKiF,KAAO/H,EAAQ+H,MAAQ,KAC5BjF,KAAKkZ,KAAOhc,EAAQgc,MAAQ,KAC5BlZ,KAAKgb,SAAW9d,EAAQ8d,UAAY,OACpChb,KAAKib,WAAa/d,EAAQ+d,YAAc,KACxCjb,KAAKgF,QAAUA,EAUjBgV,EAAYra,UAAUka,IAAM,SAAahY,GACvC,IAAIgY,EAAMU,EAASW,cAAclb,KAAK5C,KAAM4C,KAAK0B,QACjDmY,EAAMU,EAASY,kBAAkBtB,EAAK7Z,KAAKgP,OAC3C,IAAIoM,EAAcpb,KAAK+a,OACnBM,EACa,MAAfxZ,EAAsB7B,KAAKyX,OAAO5V,YAAcA,EAClD,GAAIwZ,EAAmB,CACrBxB,EAAMU,EAASe,iBAAiBzB,EAAK,eAAgBwB,GACrD,IAAIE,EAAqBxB,EAAWsB,GAAmBG,KACvDJ,EAAcvf,EAAM,CAAE4f,QAASF,GAAsBH,GAGvD,OADAvB,EAAMU,EAASmB,uBAAuB7B,EAAKuB,IAe7CpB,EAAYra,UAAUwC,KAAO,WAC3B,IAAI+P,EAAOlS,KAEX,GAAIkS,EAAK2I,KACP,MAAM,IAAI1c,MACR,mHAKJ,OAFA+T,EAAK2I,MAAO,EAEL3I,EAAKuF,OAAOM,YAAY7F,GAAM5D,MACnC,SAAS4E,GAGP,OAFAhB,EAAKgB,SAAWA,EAChBhB,EAAK8G,QAAQ7J,KAAKkJ,EAAUsD,eAAgBzI,GACrCA,KAET,SAAS/E,GAGP,MAFA+D,EAAK/D,MAAQA,EACb+D,EAAK8G,QAAQ7J,KAAKkJ,EAAUuD,YAAazN,GACnCA,MAkBZ6L,EAAYra,UAAUma,MAAQ,WACxB9Z,KAAK6b,mBACP7b,KAAK6b,iBAAiB/B,eACf9Z,KAAK6b,kBAGV7b,KAAKkT,UAAYlT,KAAKmO,OAASnO,KAAK8a,UAExC9a,KAAK8a,SAAU,EACf9a,KAAKyX,OAAOQ,aAAajY,QAqB3Bga,EAAYra,UAAUmc,SAAW,SAAkBrX,GACjD,IAAIyN,EAAOlS,KAEX,SAAS+b,EAAe7I,GAStBzO,EAAS,KAAMyO,GARf,kBACShB,EAAK2J,iBACZ,IAAIG,EAAkB9I,EAAS+I,WAC3BD,IACF9J,EAAK2J,iBAAmBG,EACxBE,EAAQF,OAMd,SAASnX,EAAYsJ,GACnB1J,EAAS0J,EAAO,MAAM,eAGxB,SAAS+N,EAAQvX,GACfA,EAAQxC,OAAOmM,KAAKyN,EAAgBlX,GAEtCqX,EAAQlc,OAWVga,EAAYra,UAAUwc,MAAQ,WAC5B,OAAOnc,KAAKoc,WAMdpC,EAAYra,UAAUyc,QAAU,SAAiBlf,GAC/C,IAAImf,EAAkBxgB,EAAMmE,KAAK4a,SAAU1d,GAC3C,OAAO,IAAI8c,EAAYha,KAAKyX,OAAQ4E,IAGtC/a,EAAOC,QAAUyY,8BCnQjB,IAAIsC,EAAkB,EAAQ,KAsB9B,SAASnE,EAAaxT,EAAS4X,GAC7Bvc,KAAK2E,QAAUA,EACf3E,KAAKgF,QAAUuX,EAAavX,QAC5BhF,KAAKwc,QAAUD,EAAatX,KAC5BjF,KAAKoT,WAAamJ,EAAanJ,WAC/B,IACEpT,KAAKiF,KAAOrE,KAAK0Z,MAAMiC,EAAatX,MAAQ,MAC5C,MAAOwX,GACPzc,KAAKiF,KAAOsX,EAAatX,KAE3BjF,KAAK0c,MAAQJ,EAAgBtc,KAAKgF,QAAQ2X,MAQ5CxE,EAAaxY,UAAUid,YAAc,WACnC,QAAS5c,KAAK0c,MAAMG,MAStB1E,EAAaxY,UAAUsc,SAAW,WAChC,OAAKjc,KAAK4c,cACH5c,KAAK2E,QAAQyX,QAAQ,CAC1Bhf,KAAM4C,KAAK0c,MAAMG,KAAKhD,MAFQ,MAMlCvY,EAAOC,QAAU4W,wBCzDjB7W,EAAOC,QAAU,CACf0Y,WAAY,yBACZhB,wBAAyB,mBACzBG,sBAAuB,iBACvBwC,YAAa,QACbD,eAAgB,WAChBtB,WAAY,YACZb,sBAAuB,6CCiCzBlY,EAAOC,QAjBP,SAAsBub,GACpB,IAAI9X,EAAU,GACd,OAAK8X,GAILA,EACGnK,OACA7T,MAAM,YACN2T,SAAQ,SAASsK,GAChB,IAAIC,EAjCV,SAA2BF,GACzB,IAAIG,EAAWH,EAAIxY,QAAQ,KAM3B,MAAO,CACLwL,KANSgN,EACRI,UAAU,EAAGD,GACbtK,OACAgI,cAIDre,MAHUwgB,EAAII,UAAUD,EAAW,GAAGtK,QA2BvBwK,CAAkBJ,GAC/B/X,EAAQgY,EAAOlN,MAAQkN,EAAO1gB,SAG3B0I,GAXEA,yBC8CX1D,EAAOC,QApBP,SAAyB6b,GACvB,OAAKA,EAEEA,EAAWte,MAAM,SAASM,QAAO,SAASrC,EAAQ4f,GACvD,IAAIK,EA3CR,SAAmBL,GACjB,IAAIU,EAAQV,EAAKW,MAAM,kBACvB,IAAKD,EAAO,OAAO,KAEnB,IAAIE,EAAUF,EAAM,GAChBG,EAAaH,EAAM,GAAGve,MAAM,KAC5B2e,EAAM,KACNC,EAAmBF,EAAWpe,QAAO,SAASrC,EAAQ4gB,GACxD,IAAIX,EAlBR,SAAoBW,GAClB,IAAIN,EAAQM,EAAML,MAAM,6BACxB,OAAKD,EAEE,CACL3e,IAAK2e,EAAM,GACX/gB,MAAO+gB,EAAM,IAJI,KAgBJO,CAAWD,GACxB,OAAKX,EACc,QAAfA,EAAOte,KACJ+e,IACHA,EAAMT,EAAO1gB,OAERS,IAETA,EAAOigB,EAAOte,KAAOse,EAAO1gB,MACrBS,GARaA,IASnB,IACH,OAAK0gB,EAEE,CACL5D,IAAK0D,EACLE,IAAKA,EACL1C,OAAQ2C,GALO,KAwBFG,CAAUlB,GACvB,OAAKK,GAEUA,EAAOS,IAAI3e,MAAM,OACvB2T,SAAQ,SAASgL,GACnB1gB,EAAO0gB,KACV1gB,EAAO0gB,GAAO,CACZ5D,IAAKmD,EAAOnD,IACZkB,OAAQiC,EAAOjC,YAIdhe,GAXaA,IAYnB,IAhBqB,0BC/C1B,SAAS+gB,EAAYxhB,GACnB,OAAIF,MAAMC,QAAQC,GACGA,EALHmC,IAAIsf,oBAAoBngB,KAAK,KAOxCmgB,mBAAmBC,OAAO1hB,IAanC,SAASgf,EAAiBzB,EAAKnb,EAAKpC,GAClC,IAAc,IAAVA,GAA6B,OAAVA,EACrB,OAAOud,EAET,IAAIoE,EAAc,KAAK1gB,KAAKsc,GAAO,IAAM,IACrC7K,EAAQ+O,mBAAmBrf,GAI/B,YAHca,IAAVjD,GAAiC,KAAVA,IAA0B,IAAVA,IACzC0S,GAAS,IAAM8O,EAAYxhB,IAEtB,GAAKud,EAAMoE,EAAcjP,EAgFlC1N,EAAOC,QAAU,CACf4Z,kBAtEF,SAA2BtB,EAAKqE,GAC9B,IAAKA,EACH,OAAOrE,EAGT,IAAI9c,EAAS8c,EAeb,OAdAtb,OAAOC,KAAK0f,GAAazL,SAAQ,SAAS/T,GACxC,IAAIpC,EAAQ4hB,EAAYxf,QACVa,IAAVjD,IAGAF,MAAMC,QAAQC,KAChBA,EAAQA,EACL8D,QAAO,SAASpE,GACf,OAAOA,WAER4B,KAAK,MAEVb,EAASue,EAAiBve,EAAQ2B,EAAKpC,OAElCS,GAmDPue,iBAAkBA,EAClBJ,cAzCF,SAAuBrB,EAAKnY,GAC1B,IAAKA,EACH,OAAOmY,EAGT,GAAwB,SAApBA,EAAIxc,MAAM,EAAG,GACf,OAAOwc,EAGT,IAAIsE,EAAuB,MAAXtE,EAAI,GAAa,GAAK,IACtC,MAAO,GAAKnY,EAAOkR,QAAQ,MAAO,IAAMuL,EAAYtE,GAgCpD6B,uBAlBF,SAAgC0C,EAAOrD,GACrC,OAAKA,EAGEqD,EAAMxL,QAAQ,sBAAsB,SAASyL,EAAGC,GACrD,IAAIhiB,EAAQye,EAAOuD,GACnB,QAAc/e,IAAVjD,EACF,MAAM,IAAI6B,MAAM,+BAAiCmgB,GAGnD,MAAO,IADYR,EAAYxhB,MAPxB8hB,+BCpGX,IAAIviB,EAAQ,EAAQ,KAChBG,EAAI,EAAQ,KACZuiB,EAAO,EAAQ,KACfC,EAAoB,EAAQ,KAC5BC,EAAuB,EAAQ,KAQ/BC,EAAY,GAEZC,EAAe,CACjB,UACA,SACA,WACA,WACA,QACA,WACA,eACA,UACA,MACA,gBAmEFD,EAAU5L,eAAiB,SAAS/D,GAClC/S,EAAE4iB,YAAY,CACZ5P,MAAOhT,EAAE6D,SAAS7D,EAAEoF,QACpByd,KAAM7iB,EAAE8E,MAAM,gBAAiB,2BAC/BuB,UAAWrG,EAAEwD,QAAQxD,EAAEoF,QACvB+D,UAAWnJ,EAAE8E,MAAM9E,EAAE2S,YAAa,MAClCrM,MAAOtG,EAAEwD,QAAQxD,EAAE8E,MAAM6d,IACzB9Y,aAAc7J,EAAEmF,QAChBoB,KAAMvG,EAAEwD,QAAQxD,EAAEiF,QAClBwB,MAAOzG,EAAEiF,OACTuB,SAAUxG,EAAEwD,QAAQxD,EAAEoF,QACtB2E,QAAS/J,EAAEmF,QACX2E,WAAY9J,EAAEmF,QACd6E,UAAWhK,EAAEoF,QAZfpF,CAaG+S,GAEHA,EAAO8P,KAAO9P,EAAO8P,MAAQ,gBAE7B,IAAI7P,EAAQwP,EACV3iB,EACE,CAAE+J,QAASmJ,EAAO1M,WAClBkc,EAAKxP,EAAQ,CACX,YACA,QACA,eACA,OACA,QACA,WACA,UACA,aACA,gBAKN,OAAO/O,KAAKyX,OAAOyC,cAAc,CAC/BpV,OAAQ,MACR1H,KAAM,kCACN2d,OAAQwD,EAAKxP,EAAQ,CAAC,OAAQ,UAC9BC,MAAOA,KAmCX0P,EAAUrV,eAAiB,SAAS0F,GAClC/S,EAAE4iB,YAAY,CACZ5P,MAAOhT,EAAE6D,SAAS7D,EAAE2S,aACpBkQ,KAAM7iB,EAAE8E,MAAM,gBAAiB,2BAC/BuB,UAAWrG,EAAEwD,QAAQxD,EAAEoF,QACvBkB,MAAOtG,EAAEwD,QAAQxD,EAAE8E,MAAM6d,IACzBpc,KAAMvG,EAAEwD,QAAQxD,EAAEiF,QAClBwB,MAAOzG,EAAEiF,OACTuB,SAAUxG,EAAEwD,QAAQxD,EAAEoF,QACtB0d,YAAa9iB,EAAE8E,MAAM,WAAY,SACjCiF,QAAS/J,EAAEmF,QACX6E,UAAWhK,EAAEoF,QAVfpF,CAWG+S,GAEHA,EAAO8P,KAAO9P,EAAO8P,MAAQ,gBAE7B,IAAI7P,EAAQwP,EACV3iB,EACE,CAAE+J,QAASmJ,EAAO1M,WAClBkc,EAAKxP,EAAQ,CACX,UACA,QACA,OACA,QACA,WACA,cACA,UACA,gBAKN,OAAO/O,KAAKyX,OAAOyC,cAAc,CAC/BpV,OAAQ,MACR1H,KAAM,kCACN2d,OAAQwD,EAAKxP,EAAQ,CAAC,OAAQ,UAC9BC,MAAOA,KAIX1N,EAAOC,QAAUkd,EAAqBC,+BC7MtC,IAAI/G,EAAa,EAAQ,KAErBoH,EAAe,EAAQ,KAgB3Bzd,EAAOC,QAdP,SAA8Byd,GAC5B,OAAO,SAASC,GACd,IAAIxH,EAEFA,EADEE,EAAWhY,UAAUuf,cAAcD,GAC5BA,EAEAF,EAAaE,GAExB,IAAIE,EAAU5gB,OAAOsZ,OAAOmH,GAE5B,OADAG,EAAQ1H,OAASA,EACV0H,0BCPX7d,EAAOC,QAPP,SAAmBjD,EAAK8gB,GACtB,OAAO7gB,OAAOC,KAAKF,GAAKc,QAAO,SAASrC,EAAQ2B,GAE9C,OADA3B,EAAO2B,GAAO0gB,EAAG1gB,EAAKJ,EAAII,IACnB3B,IACN,2BCuBLuE,EAAOC,QAnBP,SAAc8d,EAAQ7gB,GACpB,IAAI4B,EAAS,SAAS1B,EAAK4gB,GACzB,OAA8B,IAAvB9gB,EAAK8F,QAAQ5F,SAAuBa,IAAR+f,GAOrC,MAJoB,mBAAT9gB,IACT4B,EAAS5B,GAGJD,OAAOC,KAAK6gB,GAChBjf,QAAO,SAAS1B,GACf,OAAO0B,EAAO1B,EAAK2gB,EAAO3gB,OAE3BU,QAAO,SAASrC,EAAQ2B,GAEvB,OADA3B,EAAO2B,GAAO2gB,EAAO3gB,GACd3B,IACN,iCCxBP,IAAIwiB,EAAY,EAAQ,KAcxBje,EAAOC,QANP,SAA0BjD,GACxB,OAAOihB,EAAUjhB,GAAK,SAAS+f,EAAG/hB,GAChC,MAAwB,kBAAVA,EAAsBsE,KAAKC,UAAUvE,GAASA,kCCVhE,IAAIT,EAAQ,EAAQ,KAChBG,EAAI,EAAQ,KAwChBsF,EAAOC,QAAU1F,EAAMG,EAAG,CACxBkd,KAvCF,SAAc5c,GAGZ,GAAsB,oBAAXsL,OAAwB,CACjC,GAAItL,aAAiB,EAAAkjB,EAAOC,MAAQnjB,aAAiB,EAAAkjB,EAAOE,YAC1D,OAEF,MAAO,sBAET,GAAqB,iBAAVpjB,QAAqCiD,IAAfjD,EAAMqjB,KAGvC,MAAO,+BA4BPC,KArBF,SAActjB,GACZ,IAAI0X,EAAM,OACV,GAAqB,kBAAV1X,EACT,OAAO0X,EAET,IACE,IAAI4L,EAAO,IAAIla,KAAKpJ,GACpB,GAAIsjB,EAAKC,SAAWC,MAAMF,EAAKC,WAC7B,OAAO7L,EAET,MAAOvH,GACP,OAAOuH,IAWTrF,YAPF,SAAqBrS,GACnB,OAAON,EAAEyD,MAAMzD,EAAEiF,OAAQjF,EAAEiF,OAApBjF,CAA4BM,IAOnCsiB,YA3BF,SAAqBvgB,EAAcH,GACjC,OAAOlC,EAAE+B,OAAO/B,EAAEgD,YAAYX,GAAeH,kCCnB/C,IAAI6hB,EAAS,EAAQ,KAEjBC,EAAa,GAwCjB,SAASC,EAAI3hB,EAAKI,GAChB,OAAOH,OAAOoB,UAAU7C,eAAe8C,KAAKtB,EAAKI,GAGnD4C,EAAOC,QA1CP,SAAoB2e,GAClB,GAAIF,EAAWE,GACb,OAAOF,EAAWE,GAGpB,IAAI7C,EAAQ6C,EAAMphB,MAAM,KACpBqhB,EAAQ9C,EAAM,GACd+C,EAAa/C,EAAM,GACvB,IAAK+C,EACH,MAAM,IAAIjiB,MAAM,iBAGlB,IAAIkiB,EAkBN,SAAqBD,GACnB,IACE,OAAOxf,KAAK0Z,MAAMyF,EAAOO,OAAOF,IAChC,MAAO3D,GACP,MAAM,IAAIte,MAAM,kBAtBEoiB,CAAYH,GAE5BrjB,EAAS,CACXojB,MAAOA,EACP3E,KAAM6E,EAAcG,GAWtB,OATIP,EAAII,EAAe,OAAMtjB,EAAO0jB,cAAgBJ,EAAcK,GAC9DT,EAAII,EAAe,SAAQtjB,EAAO4jB,QAA8B,IAApBN,EAAcO,KAC1DX,EAAII,EAAe,SAAQtjB,EAAO0I,QAA8B,IAApB4a,EAAcQ,KAC1DZ,EAAII,EAAe,YAAWtjB,EAAO+jB,OAAST,EAAcS,QAC5Db,EAAII,EAAe,YAAWtjB,EAAO0a,OAAS4I,EAAc5I,QAC5DwI,EAAII,EAAe,QAAOtjB,EAAOgkB,UAAYV,EAAcW,IAC3Df,EAAII,EAAe,QAAOtjB,EAAOkkB,aAAeZ,EAAca,IAElElB,EAAWE,GAASnjB,EACbA,mRCjCT,SACEokB,OAAQjP,KAAKhE,QACbkT,UAAWlP,KAAKkP,WCYlB,GACEC,OAAOlhB,GACDH,KAAKshB,UACPnhB,EAAStB,KAAK6G,KAAK6b,OACnBC,EAASL,OAAOE,IAAI,mBAAoBlhB,MCbxCohB,EAAM,KAAM,IAAI7b,MAAOma,UAEvB4B,EAAeC,IAASH,IAAQG,GAAQ,IAE9C,MAAMC,EACJ7J,YAAY8J,GACV5hB,KAAK6hB,oBAAsB7hB,KAAK6hB,oBAAoBzf,KAAKpC,MACzDA,KAAK4hB,WAAaA,EAClB5hB,KAAK8hB,kBAAoB,EAG3B5d,QACOlE,KAAK+hB,cACR/hB,KAAKgiB,UAAYT,WACVvhB,KAAKiiB,UACZjiB,KAAKkiB,eACL1V,iBAAiB,mBAAoBxM,KAAK6hB,qBAC1CV,EAAOE,IAAI,gDAAgDrhB,KAAK8X,YAAYqK,qBAIhFC,OACMpiB,KAAK+hB,cACP/hB,KAAKiiB,UAAYV,IACjBvhB,KAAKqiB,cACLC,oBAAoB,mBAAoBtiB,KAAK6hB,qBAC7CV,EAAOE,IAAI,8BAIfU,YACE,OAAO/hB,KAAKgiB,YAAchiB,KAAKiiB,UAGjCM,aACEviB,KAAKwiB,SAAWjB,IAGlBkB,gBACEziB,KAAK8hB,kBAAoB,EACzB9hB,KAAKuiB,oBACEviB,KAAK0iB,eACZvB,EAAOE,IAAI,sCAGbsB,mBACE3iB,KAAK0iB,eAAiBnB,IACtBJ,EAAOE,IAAI,yCAKba,eACEliB,KAAKqiB,cACLriB,KAAK4iB,OAGPP,cACE/a,aAAatH,KAAK6iB,aAGpBD,OACE5iB,KAAK6iB,YAAc3f,YAAW,KAC5BlD,KAAK8iB,mBACL9iB,KAAK4iB,SAEL5iB,KAAK+iB,mBAGTA,kBACE,MAAM,eAAEZ,EAAc,wBAAEa,GAA4BhjB,KAAK8X,YAIzD,OAAwB,IAAjBqK,EAHSc,KAAKC,IAAI,EAAIF,EAAyBC,KAAKjiB,IAAIhB,KAAK8hB,kBAAmB,MAG7C,GAFG,IAA3B9hB,KAAK8hB,kBAA0B,EAAMkB,GAC5BC,KAAKE,UAIlCL,mBACM9iB,KAAKojB,sBACPjC,EAAOE,IAAI,oEAAoErhB,KAAK8hB,mCAAmCL,EAAazhB,KAAKqjB,qCAAqCrjB,KAAK8X,YAAYqK,oBAC/LniB,KAAK8hB,oBACD9hB,KAAKsjB,uBACPnC,EAAOE,IAAI,+EAA+EI,EAAazhB,KAAK0iB,sBAE5GvB,EAAOE,IAAI,+BACXrhB,KAAK4hB,WAAW2B,WAKlBF,kBACF,OAAOrjB,KAAKwiB,SAAWxiB,KAAKwiB,SAAWxiB,KAAKgiB,UAG9CoB,oBACE,OAAO3B,EAAazhB,KAAKqjB,aAAerjB,KAAK8X,YAAYqK,eAG3DmB,uBACE,OAAOtjB,KAAK0iB,gBAAmBjB,EAAazhB,KAAK0iB,gBAAkB1iB,KAAK8X,YAAYqK,eAGtFN,sBACmC,YAA7BvX,SAASkZ,iBACXtgB,YAAW,MACLlD,KAAKojB,qBAAwBpjB,KAAK4hB,WAAW6B,WAC/CtC,EAAOE,IAAI,uFAAuF/W,SAASkZ,mBAC3GxjB,KAAK4hB,WAAW2B,YAGlB,MAMR5B,EAAkBQ,eAAiB,EACnCR,EAAkBqB,wBAA0B,IAE5C,UC5HA,GACE,cAAiB,CACf,QAAW,UACX,WAAc,aACd,KAAQ,OACR,aAAgB,uBAChB,UAAa,uBAEf,mBAAsB,CACpB,aAAgB,eAChB,gBAAmB,kBACnB,eAAkB,kBAEpB,mBAAsB,SACtB,UAAa,CACX,sBACA,6BCTE,cAACU,EAAa,UAAEC,GAAa,EAC7BC,EAAqBD,EAAUtmB,MAAM,EAAGsmB,EAAUjnB,OAAS,GAE3D4H,EAAU,GAAGA,QAEnB,MAAMuf,EACJ/L,YAAYgM,GACV9jB,KAAK6G,KAAO7G,KAAK6G,KAAKzE,KAAKpC,MAC3BA,KAAK8jB,SAAWA,EAChB9jB,KAAK+jB,cAAgB/jB,KAAK8jB,SAASC,cACnC/jB,KAAKgkB,QAAU,IAAI,EAAkBhkB,MACrCA,KAAKikB,cAAe,EAGtB9hB,KAAK+E,GACH,QAAIlH,KAAKyjB,WACPzjB,KAAKkkB,UAAU/hB,KAAKvB,KAAKC,UAAUqG,KAC5B,GAMXL,OACE,OAAI7G,KAAKmkB,YACPhD,EAAOE,IAAI,uDAAuDrhB,KAAKokB,eAChE,IAEPjD,EAAOE,IAAI,uCAAuCrhB,KAAKokB,6BAA6BT,KAChF3jB,KAAKkkB,WAAalkB,KAAKqkB,yBAC3BrkB,KAAKkkB,UAAY,IAAI1C,EAASJ,UAAUphB,KAAK8jB,SAASjK,IAAK8J,GAC3D3jB,KAAKskB,uBACLtkB,KAAKgkB,QAAQ9f,SACN,GAIXqgB,OAAM,eAACC,GAAkB,CAACA,gBAAgB,IAGxC,GAFKA,GAAkBxkB,KAAKgkB,QAAQ5B,OAEhCpiB,KAAKyjB,SACP,OAAOzjB,KAAKkkB,UAAUK,QAI1BhB,SAEE,GADApC,EAAOE,IAAI,yCAAyCrhB,KAAKokB,eACrDpkB,KAAKmkB,WAWP,OAAOnkB,KAAK6G,OAVZ,IACE,OAAO7G,KAAKukB,QACZ,MAAOpW,GACPgT,EAAOE,IAAI,6BAA8BlT,GAE3C,QACEgT,EAAOE,IAAI,0BAA0BrhB,KAAK8X,YAAY2M,iBACtDvhB,WAAWlD,KAAK6G,KAAM7G,KAAK8X,YAAY2M,cAO7CC,cACE,GAAI1kB,KAAKkkB,UACP,OAAOlkB,KAAKkkB,UAAUS,SAI1BlB,SACE,OAAOzjB,KAAK4kB,QAAQ,QAGtBT,WACE,OAAOnkB,KAAK4kB,QAAQ,OAAQ,cAK9BC,sBACE,OAAOvgB,EAAQ1E,KAAKgkB,EAAoB5jB,KAAK0kB,gBAAkB,EAGjEE,WAAWE,GACT,OAAOxgB,EAAQ1E,KAAKklB,EAAQ9kB,KAAKokB,aAAe,EAGlDA,WACE,GAAIpkB,KAAKkkB,UACP,IAAK,IAAIa,KAASvD,EAASJ,UACzB,GAAII,EAASJ,UAAU2D,KAAW/kB,KAAKkkB,UAAUxd,WAC/C,OAAOqe,EAAMpK,cAInB,OAAO,KAGT2J,uBACE,IAAK,IAAIU,KAAahlB,KAAKilB,OAAQ,CACjC,MAAMC,EAAUllB,KAAKilB,OAAOD,GAAW5iB,KAAKpC,MAC5CA,KAAKkkB,UAAU,KAAKc,KAAeE,GAIvCb,yBACE,IAAK,IAAIW,KAAahlB,KAAKilB,OACzBjlB,KAAKkkB,UAAU,KAAKc,KAAe,cAMzCnB,EAAWY,YAAc,IAEzBZ,EAAWlkB,UAAUslB,OAAS,CAC5BhoB,QAAQiI,GACN,IAAKlF,KAAK6kB,sBAAyB,OACnC,MAAM,WAACM,EAAU,QAAEloB,EAAO,OAAEmoB,EAAM,UAAEC,EAAS,KAAE/Y,GAAQ1L,KAAK0Z,MAAMpV,EAAMgC,MACxE,OAAQoF,GACN,KAAKoX,EAAc4B,QAEjB,OADAtlB,KAAKgkB,QAAQvB,gBACNziB,KAAK+jB,cAAcwB,SAC5B,KAAK7B,EAAc8B,WAEjB,OADArE,EAAOE,IAAI,0BAA0B+D,KAC9BplB,KAAKukB,MAAM,CAACC,eAAgBa,IACrC,KAAK3B,EAAc+B,KACjB,OAAOzlB,KAAKgkB,QAAQzB,aACtB,KAAKmB,EAAcgC,aAEjB,OADA1lB,KAAK+jB,cAAc4B,oBAAoBR,GAChCnlB,KAAK+jB,cAAc6B,OAAOT,EAAY,aAC/C,KAAKzB,EAAcmC,UACjB,OAAO7lB,KAAK+jB,cAAc5b,OAAOgd,GACnC,QACE,OAAOnlB,KAAK+jB,cAAc6B,OAAOT,EAAY,WAAYloB,KAI/D4J,OAGE,GAFAsa,EAAOE,IAAI,kCAAkCrhB,KAAK0kB,8BAClD1kB,KAAKikB,cAAe,GACfjkB,KAAK6kB,sBAER,OADA1D,EAAOE,IAAI,gEACJrhB,KAAKukB,MAAM,CAACC,gBAAgB,KAIvCD,MAAMrf,GAEJ,GADAic,EAAOE,IAAI,4BACPrhB,KAAKikB,aAGT,OAFAjkB,KAAKikB,cAAe,EACpBjkB,KAAKgkB,QAAQrB,mBACN3iB,KAAK+jB,cAAc+B,UAAU,eAAgB,CAACC,qBAAsB/lB,KAAKgkB,QAAQjC,eAG1F5T,QACEgT,EAAOE,IAAI,6BAIf,UClGe,MAAM2E,EACnBlO,YAAYgM,EAAU/I,EAAS,GAAIkL,GACjCjmB,KAAK8jB,SAAWA,EAChB9jB,KAAKmlB,WAAavkB,KAAKC,UAAUka,GAbtB,SAASmL,EAAQ3U,GAC9B,GAAkB,MAAdA,EACF,IAAK,IAAI7S,KAAO6S,EAAY,CAC1B,MAAMjV,EAAQiV,EAAW7S,GACzBwnB,EAAOxnB,GAAOpC,GAUhBgM,CAAOtI,KAAMimB,GAIfE,QAAQC,EAAQlf,EAAO,IAErB,OADAA,EAAKkf,OAASA,EACPpmB,KAAKmC,KAAK+E,GAGnB/E,KAAK+E,GACH,OAAOlH,KAAK8jB,SAAS3hB,KAAK,CAACkkB,QAAS,UAAWlB,WAAYnlB,KAAKmlB,WAAYje,KAAMtG,KAAKC,UAAUqG,KAGnGof,cACE,OAAOtmB,KAAK8jB,SAASC,cAActc,OAAOzH,OCrC9C,QA5CA,MACE8X,YAAYiM,GACV/jB,KAAK+jB,cAAgBA,EACrB/jB,KAAKumB,qBAAuB,GAG9BC,UAAUC,IAC+C,GAApDzmB,KAAKumB,qBAAqBjiB,QAAQmiB,IACnCtF,EAAOE,IAAI,sCAAsCoF,EAAatB,cAC9DnlB,KAAKumB,qBAAqB1nB,KAAK4nB,IAG/BtF,EAAOE,IAAI,8CAA8CoF,EAAatB,cAExEnlB,KAAK0mB,oBAGPC,OAAOF,GACLtF,EAAOE,IAAI,oCAAoCoF,EAAatB,cAC5DnlB,KAAKumB,qBAAwBvmB,KAAKumB,qBAAqBnmB,QAAQwmB,GAAMA,IAAMH,IAG7EC,oBACE1mB,KAAK6mB,mBACL7mB,KAAK8mB,mBAGPD,mBACEvf,aAAatH,KAAK+mB,cAGpBD,mBACE9mB,KAAK+mB,aAAe7jB,YAAW,KACzBlD,KAAK+jB,eAA0D,mBAAlC/jB,KAAK+jB,cAAuB,WAC3D/jB,KAAKumB,qBAAqB9nB,KAAKgoB,IAC7BtF,EAAOE,IAAI,uCAAuCoF,EAAatB,cAC/DnlB,KAAK+jB,cAAciD,UAAUP,QAIjC,OC/BS,MAAMQ,EACnBnP,YAAYgM,GACV9jB,KAAK8jB,SAAWA,EAChB9jB,KAAKknB,UAAY,IAAI,EAAsBlnB,MAC3CA,KAAK+jB,cAAgB,GAGvBlM,OAAOsP,EAAalB,GAClB,MACMlL,EAA4B,iBADlBoM,IACuC,CAACC,QADxCD,GAEVV,EAAe,IAAIT,EAAahmB,KAAK8jB,SAAU/I,EAAQkL,GAC7D,OAAOjmB,KAAK4M,IAAI6Z,GAKlB7Z,IAAI6Z,GAKF,OAJAzmB,KAAK+jB,cAAcllB,KAAK4nB,GACxBzmB,KAAK8jB,SAASuD,yBACdrnB,KAAK4lB,OAAOa,EAAc,eAC1BzmB,KAAKgnB,UAAUP,GACRA,EAGThf,OAAOgf,GAKL,OAJAzmB,KAAK2mB,OAAOF,GACPzmB,KAAKsnB,QAAQb,EAAatB,YAAYzoB,QACzCsD,KAAKunB,YAAYd,EAAc,eAE1BA,EAGTte,OAAOgd,GACL,OAAOnlB,KAAKsnB,QAAQnC,GAAY1mB,KAAKgoB,IACnCzmB,KAAK2mB,OAAOF,GACZzmB,KAAK4lB,OAAOa,EAAc,YACnBA,KAIXE,OAAOF,GAGL,OAFAzmB,KAAKknB,UAAUP,OAAOF,GACtBzmB,KAAK+jB,cAAiB/jB,KAAK+jB,cAAc3jB,QAAQwmB,GAAMA,IAAMH,IACtDA,EAGTa,QAAQnC,GACN,OAAOnlB,KAAK+jB,cAAc3jB,QAAQwmB,GAAMA,EAAEzB,aAAeA,IAG3DI,SACE,OAAOvlB,KAAK+jB,cAActlB,KAAKgoB,GAC7BzmB,KAAKgnB,UAAUP,KAGnBX,UAAU0B,KAAiBC,GACzB,OAAOznB,KAAK+jB,cAActlB,KAAKgoB,GAC7BzmB,KAAK4lB,OAAOa,EAAce,KAAiBC,KAG/C7B,OAAOa,EAAce,KAAiBC,GACpC,IAAI1D,EAOJ,OALEA,EAD0B,iBAAjB0C,EACOzmB,KAAKsnB,QAAQb,GAEb,CAACA,GAGZ1C,EAActlB,KAAKgoB,GACe,mBAA/BA,EAAae,GAA+Bf,EAAae,MAAiBC,QAAQloB,IAG9FynB,UAAUP,GACJzmB,KAAKunB,YAAYd,EAAc,cACjCzmB,KAAKknB,UAAUV,UAAUC,GAI7Bd,oBAAoBR,GAClBhE,EAAOE,IAAI,0BAA0B8D,KACrCnlB,KAAKsnB,QAAQnC,GAAY1mB,KAAKgoB,GAC5BzmB,KAAKknB,UAAUP,OAAOF,KAG1Bc,YAAYd,EAAcJ,GACxB,MAAM,WAAClB,GAAcsB,EACrB,OAAOzmB,KAAK8jB,SAAS3hB,KAAK,CAACkkB,UAASlB,gBCvEzB,MAAMuC,EACnB5P,YAAY+B,GACV7Z,KAAK2nB,KAAO9N,EACZ7Z,KAAK+jB,cAAgB,IAAIkD,EAAcjnB,MACvCA,KAAK4hB,WAAa,IAAI,EAAW5hB,MAG/B6Z,UACF,OAAO+N,EAAmB5nB,KAAK2nB,MAGjCxlB,KAAK+E,GACH,OAAOlH,KAAK4hB,WAAWzf,KAAK+E,GAG9B2gB,UACE,OAAO7nB,KAAK4hB,WAAW/a,OAGzB2e,aACE,OAAOxlB,KAAK4hB,WAAW2C,MAAM,CAACC,gBAAgB,IAGhD6C,yBACE,IAAKrnB,KAAK4hB,WAAWuC,WACnB,OAAOnkB,KAAK4hB,WAAW/a,QAKtB,SAAS+gB,EAAmB/N,GAKjC,GAJmB,mBAARA,IACTA,EAAMA,KAGJA,IAAQ,UAAUtc,KAAKsc,GAAM,CAC/B,MAAM6G,EAAIpW,SAAS4B,cAAc,KAKjC,OAJAwU,EAAEoH,KAAOjO,EAET6G,EAAEoH,KAAOpH,EAAEoH,KACXpH,EAAEiE,SAAWjE,EAAEiE,SAAS/R,QAAQ,OAAQ,MACjC8N,EAAEoH,KAET,OAAOjO,ECjDJ,SAASkO,EAAelO,EAAMmO,EAAU,QAAU,sBACvD,OAAO,IAAIN,EAAS7N,GAGf,SAASmO,EAAUlY,GACxB,MAAMjC,EAAUvD,SAAS2d,KAAKC,cAAc,2BAA2BpY,OACvE,GAAIjC,EACF,OAAOA,EAAQsa,aAAa,iCC9BhC,iBACE,SAASC,GAGV,IAQIC,GAL0C/mB,GAC7CA,EAAOC,QAI0B,iBAAV,EAAAie,GAAsB,EAAAA,GAC1C6I,EAAWC,SAAWD,GAAcA,EAAWzgB,OAMnD,IAAI2gB,EAAwB,SAAStrB,GACpC+C,KAAK/C,QAAUA,IAEhBsrB,EAAsB5oB,UAAY,IAAIxB,OACN2R,KAAO,wBAEvC,IAAI3B,EAAQ,SAASlR,GAGpB,MAAM,IAAIsrB,EAAsBtrB,IAG7BurB,EAAQ,mEAERC,EAAyB,eAuGzB1I,EAAS,CACZ,OA5DY,SAAS2I,GACrBA,EAAQ1K,OAAO0K,GACX,aAAanrB,KAAKmrB,IAGrBva,EACC,6EAeF,IAXA,IAGIuS,EACAiI,EACArW,EAEAsW,EAPAC,EAAUH,EAAMhsB,OAAS,EACzBosB,EAAS,GACTC,GAAY,EAOZrsB,EAASgsB,EAAMhsB,OAASmsB,IAEnBE,EAAWrsB,GAEnBgkB,EAAIgI,EAAMM,WAAWD,IAAa,GAClCJ,EAAID,EAAMM,aAAaD,IAAa,EACpCzW,EAAIoW,EAAMM,aAAaD,GAIvBD,GACCN,EAAMS,QAJPL,EAASlI,EAAIiI,EAAIrW,IAIO,GAAK,IAC5BkW,EAAMS,OAAOL,GAAU,GAAK,IAC5BJ,EAAMS,OAAOL,GAAU,EAAI,IAC3BJ,EAAMS,OAAgB,GAATL,GAuBf,OAnBe,GAAXC,GACHnI,EAAIgI,EAAMM,WAAWD,IAAa,EAClCJ,EAAID,EAAMM,aAAaD,GAEvBD,GACCN,EAAMS,QAFPL,EAASlI,EAAIiI,IAEW,IACvBH,EAAMS,OAAQL,GAAU,EAAK,IAC7BJ,EAAMS,OAAQL,GAAU,EAAK,IAC7B,KAEoB,GAAXC,IACVD,EAASF,EAAMM,WAAWD,GAC1BD,GACCN,EAAMS,OAAOL,GAAU,GACvBJ,EAAMS,OAAQL,GAAU,EAAK,IAC7B,MAIKE,GAKP,OAnGY,SAASJ,GAGrB,IAAIhsB,GAFJgsB,EAAQ1K,OAAO0K,GACb9V,QAAQ6V,EAAwB,KACf/rB,OACfA,EAAS,GAAK,IAEjBA,GADAgsB,EAAQA,EAAM9V,QAAQ,OAAQ,KACflW,SAGfA,EAAS,GAAK,GAEd,iBAAiBa,KAAKmrB,KAEtBva,EACC,yEAQF,IALA,IACI+a,EACAN,EAFAO,EAAa,EAGbL,EAAS,GACTC,GAAY,IACPA,EAAWrsB,GACnBksB,EAASJ,EAAMlkB,QAAQokB,EAAMO,OAAOF,IACpCG,EAAaC,EAAa,EAAiB,GAAbD,EAAkBN,EAASA,EAErDO,IAAe,IAElBL,GAAU9K,OAAOoL,aAChB,IAAOF,KAAgB,EAAIC,EAAa,KAI3C,OAAOL,GAmEP,QAAW,cAYV,KAFD,aACC,OAAO/I,GACP,8BAtJF,yBCCD,IAAIE,EAAM1hB,OAAOoB,UAAU7C,eACvBusB,EAAS,IASb,SAASC,KA4BT,SAASC,EAAG9U,EAAI2C,EAASoS,GACvBxpB,KAAKyU,GAAKA,EACVzU,KAAKoX,QAAUA,EACfpX,KAAKwpB,KAAOA,IAAQ,EActB,SAASC,EAAYzQ,EAAS9T,EAAOuP,EAAI2C,EAASoS,GAChD,GAAkB,mBAAP/U,EACT,MAAM,IAAIiV,UAAU,mCAGtB,IAAIC,EAAW,IAAIJ,EAAG9U,EAAI2C,GAAW4B,EAASwQ,GAC1CjiB,EAAM8hB,EAASA,EAASnkB,EAAQA,EAMpC,OAJK8T,EAAQ4Q,QAAQriB,GACXyR,EAAQ4Q,QAAQriB,GAAKkN,GAC1BuE,EAAQ4Q,QAAQriB,GAAO,CAACyR,EAAQ4Q,QAAQriB,GAAMoiB,GADhB3Q,EAAQ4Q,QAAQriB,GAAK1I,KAAK8qB,IADlC3Q,EAAQ4Q,QAAQriB,GAAOoiB,EAAU3Q,EAAQ6Q,gBAI7D7Q,EAUT,SAAS8Q,EAAW9Q,EAASzR,GACI,KAAzByR,EAAQ6Q,aAAoB7Q,EAAQ4Q,QAAU,IAAIN,SAC5CtQ,EAAQ4Q,QAAQriB,GAU9B,SAASgB,IACPvI,KAAK4pB,QAAU,IAAIN,EACnBtpB,KAAK6pB,aAAe,EAxElBtrB,OAAOsZ,SACTyR,EAAO3pB,UAAYpB,OAAOsZ,OAAO,OAM5B,IAAIyR,GAASS,YAAWV,GAAS,IA2ExC9gB,EAAa5I,UAAUqqB,WAAa,WAClC,IACI/E,EACAnV,EAFAma,EAAQ,GAIZ,GAA0B,IAAtBjqB,KAAK6pB,aAAoB,OAAOI,EAEpC,IAAKna,KAASmV,EAASjlB,KAAK4pB,QACtB3J,EAAIrgB,KAAKqlB,EAAQnV,IAAOma,EAAMprB,KAAKwqB,EAASvZ,EAAKzS,MAAM,GAAKyS,GAGlE,OAAIvR,OAAO2rB,sBACFD,EAAMrtB,OAAO2B,OAAO2rB,sBAAsBjF,IAG5CgF,GAUT1hB,EAAa5I,UAAUwqB,UAAY,SAAmBjlB,GACpD,IAAIqC,EAAM8hB,EAASA,EAASnkB,EAAQA,EAChCklB,EAAWpqB,KAAK4pB,QAAQriB,GAE5B,IAAK6iB,EAAU,MAAO,GACtB,GAAIA,EAAS3V,GAAI,MAAO,CAAC2V,EAAS3V,IAElC,IAAK,IAAI9X,EAAI,EAAG0tB,EAAID,EAAS1tB,OAAQ4tB,EAAK,IAAIluB,MAAMiuB,GAAI1tB,EAAI0tB,EAAG1tB,IAC7D2tB,EAAG3tB,GAAKytB,EAASztB,GAAG8X,GAGtB,OAAO6V,GAUT/hB,EAAa5I,UAAU4qB,cAAgB,SAAuBrlB,GAC5D,IAAIqC,EAAM8hB,EAASA,EAASnkB,EAAQA,EAChCilB,EAAYnqB,KAAK4pB,QAAQriB,GAE7B,OAAK4iB,EACDA,EAAU1V,GAAW,EAClB0V,EAAUztB,OAFM,GAYzB6L,EAAa5I,UAAUwP,KAAO,SAAcjK,EAAOslB,EAAIC,EAAIC,EAAIC,EAAIC,GACjE,IAAIrjB,EAAM8hB,EAASA,EAASnkB,EAAQA,EAEpC,IAAKlF,KAAK4pB,QAAQriB,GAAM,OAAO,EAE/B,IAEIkgB,EACA9qB,EAHAwtB,EAAYnqB,KAAK4pB,QAAQriB,GACzBpK,EAAMuC,UAAUhD,OAIpB,GAAIytB,EAAU1V,GAAI,CAGhB,OAFI0V,EAAUX,MAAMxpB,KAAK8W,eAAe5R,EAAOilB,EAAU1V,QAAIlV,GAAW,GAEhEpC,GACN,KAAK,EAAG,OAAOgtB,EAAU1V,GAAG7U,KAAKuqB,EAAU/S,UAAU,EACrD,KAAK,EAAG,OAAO+S,EAAU1V,GAAG7U,KAAKuqB,EAAU/S,QAASoT,IAAK,EACzD,KAAK,EAAG,OAAOL,EAAU1V,GAAG7U,KAAKuqB,EAAU/S,QAASoT,EAAIC,IAAK,EAC7D,KAAK,EAAG,OAAON,EAAU1V,GAAG7U,KAAKuqB,EAAU/S,QAASoT,EAAIC,EAAIC,IAAK,EACjE,KAAK,EAAG,OAAOP,EAAU1V,GAAG7U,KAAKuqB,EAAU/S,QAASoT,EAAIC,EAAIC,EAAIC,IAAK,EACrE,KAAK,EAAG,OAAOR,EAAU1V,GAAG7U,KAAKuqB,EAAU/S,QAASoT,EAAIC,EAAIC,EAAIC,EAAIC,IAAK,EAG3E,IAAKjuB,EAAI,EAAG8qB,EAAO,IAAIrrB,MAAMe,EAAK,GAAIR,EAAIQ,EAAKR,IAC7C8qB,EAAK9qB,EAAI,GAAK+C,UAAU/C,GAG1BwtB,EAAU1V,GAAG1U,MAAMoqB,EAAU/S,QAASqQ,OACjC,CACL,IACIoD,EADAnuB,EAASytB,EAAUztB,OAGvB,IAAKC,EAAI,EAAGA,EAAID,EAAQC,IAGtB,OAFIwtB,EAAUxtB,GAAG6sB,MAAMxpB,KAAK8W,eAAe5R,EAAOilB,EAAUxtB,GAAG8X,QAAIlV,GAAW,GAEtEpC,GACN,KAAK,EAAGgtB,EAAUxtB,GAAG8X,GAAG7U,KAAKuqB,EAAUxtB,GAAGya,SAAU,MACpD,KAAK,EAAG+S,EAAUxtB,GAAG8X,GAAG7U,KAAKuqB,EAAUxtB,GAAGya,QAASoT,GAAK,MACxD,KAAK,EAAGL,EAAUxtB,GAAG8X,GAAG7U,KAAKuqB,EAAUxtB,GAAGya,QAASoT,EAAIC,GAAK,MAC5D,KAAK,EAAGN,EAAUxtB,GAAG8X,GAAG7U,KAAKuqB,EAAUxtB,GAAGya,QAASoT,EAAIC,EAAIC,GAAK,MAChE,QACE,IAAKjD,EAAM,IAAKoD,EAAI,EAAGpD,EAAO,IAAIrrB,MAAMe,EAAK,GAAI0tB,EAAI1tB,EAAK0tB,IACxDpD,EAAKoD,EAAI,GAAKnrB,UAAUmrB,GAG1BV,EAAUxtB,GAAG8X,GAAG1U,MAAMoqB,EAAUxtB,GAAGya,QAASqQ,IAKpD,OAAO,GAYTlf,EAAa5I,UAAUqO,GAAK,SAAY9I,EAAOuP,EAAI2C,GACjD,OAAOqS,EAAYzpB,KAAMkF,EAAOuP,EAAI2C,GAAS,IAY/C7O,EAAa5I,UAAU6pB,KAAO,SAActkB,EAAOuP,EAAI2C,GACrD,OAAOqS,EAAYzpB,KAAMkF,EAAOuP,EAAI2C,GAAS,IAa/C7O,EAAa5I,UAAUmX,eAAiB,SAAwB5R,EAAOuP,EAAI2C,EAASoS,GAClF,IAAIjiB,EAAM8hB,EAASA,EAASnkB,EAAQA,EAEpC,IAAKlF,KAAK4pB,QAAQriB,GAAM,OAAOvH,KAC/B,IAAKyU,EAEH,OADAqV,EAAW9pB,KAAMuH,GACVvH,KAGT,IAAImqB,EAAYnqB,KAAK4pB,QAAQriB,GAE7B,GAAI4iB,EAAU1V,GAEV0V,EAAU1V,KAAOA,GACf+U,IAAQW,EAAUX,MAClBpS,GAAW+S,EAAU/S,UAAYA,GAEnC0S,EAAW9pB,KAAMuH,OAEd,CACL,IAAK,IAAI5K,EAAI,EAAGsoB,EAAS,GAAIvoB,EAASytB,EAAUztB,OAAQC,EAAID,EAAQC,KAEhEwtB,EAAUxtB,GAAG8X,KAAOA,GACnB+U,IAASW,EAAUxtB,GAAG6sB,MACtBpS,GAAW+S,EAAUxtB,GAAGya,UAAYA,IAErC6N,EAAOpmB,KAAKsrB,EAAUxtB,IAOtBsoB,EAAOvoB,OAAQsD,KAAK4pB,QAAQriB,GAAyB,IAAlB0d,EAAOvoB,OAAeuoB,EAAO,GAAKA,EACpE6E,EAAW9pB,KAAMuH,GAGxB,OAAOvH,MAUTuI,EAAa5I,UAAUmrB,mBAAqB,SAA4B5lB,GACtE,IAAIqC,EAUJ,OARIrC,GACFqC,EAAM8hB,EAASA,EAASnkB,EAAQA,EAC5BlF,KAAK4pB,QAAQriB,IAAMuiB,EAAW9pB,KAAMuH,KAExCvH,KAAK4pB,QAAU,IAAIN,EACnBtpB,KAAK6pB,aAAe,GAGf7pB,MAMTuI,EAAa5I,UAAUyQ,IAAM7H,EAAa5I,UAAUmX,eACpDvO,EAAa5I,UAAU8pB,YAAclhB,EAAa5I,UAAUqO,GAK5DzF,EAAawiB,SAAW1B,EAKxB9gB,EAAaA,aAAeA,EAM1BjH,EAAOC,QAAUgH,wBCvTnB,IAOIyiB,EAPAC,EAAuB,iBAAZC,QAAuBA,QAAU,KAC5CC,EAAeF,GAAwB,mBAAZA,EAAElrB,MAC7BkrB,EAAElrB,MACF,SAAsBgR,EAAQqa,EAAU3D,GACxC,OAAO4D,SAAS1rB,UAAUI,MAAMH,KAAKmR,EAAQqa,EAAU3D,IAKzDuD,EADEC,GAA0B,mBAAdA,EAAEK,QACCL,EAAEK,QACV/sB,OAAO2rB,sBACC,SAAwBnZ,GACvC,OAAOxS,OAAOgtB,oBAAoBxa,GAC/BnU,OAAO2B,OAAO2rB,sBAAsBnZ,KAGxB,SAAwBA,GACvC,OAAOxS,OAAOgtB,oBAAoBxa,IAQtC,IAAIya,EAAcC,OAAO3L,OAAS,SAAqBxjB,GACrD,OAAOA,GAAUA,GAGnB,SAASiM,IACPA,EAAamjB,KAAK9rB,KAAKI,MAEzBsB,EAAOC,QAAUgH,EACjBjH,EAAOC,QAAQioB,KAwYf,SAAcxQ,EAASlJ,GACrB,OAAO,IAAI7H,SAAQ,SAAUC,EAASC,GACpC,SAASwjB,EAAc/mB,GACrBoU,EAAQlC,eAAehH,EAAM8b,GAC7BzjB,EAAOvD,GAGT,SAASgnB,IAC+B,mBAA3B5S,EAAQlC,gBACjBkC,EAAQlC,eAAe,QAAS6U,GAElCzjB,EAAQ,GAAG7K,MAAMuC,KAAKF,YAGxBmsB,EAA+B7S,EAASlJ,EAAM8b,EAAU,CAAEpC,MAAM,IACnD,UAAT1Z,GAMR,SAAuCkJ,EAASkM,EAAS4G,GAC7B,mBAAf9S,EAAQhL,IACjB6d,EAA+B7S,EAAS,QAASkM,EAPO,CAAEsE,MAAM,IAA9DuC,CAA8B/S,EAAS2S,OArZ7CpjB,EAAaA,aAAeA,EAE5BA,EAAa5I,UAAUiqB,aAAUrqB,EACjCgJ,EAAa5I,UAAUkqB,aAAe,EACtCthB,EAAa5I,UAAUqsB,mBAAgBzsB,EAIvC,IAAI0sB,EAAsB,GAE1B,SAASC,EAAcvC,GACrB,GAAwB,mBAAbA,EACT,MAAM,IAAID,UAAU,0EAA4EC,GAsCpG,SAASwC,EAAiBC,GACxB,YAA2B7sB,IAAvB6sB,EAAKJ,cACAzjB,EAAa0jB,oBACfG,EAAKJ,cAmDd,SAASK,EAAatb,EAAQzE,EAAMqd,EAAU2C,GAC5C,IAAI/rB,EACA0kB,EACAsH,EA1HsBC,EAgJ1B,GApBAN,EAAcvC,QAGCpqB,KADf0lB,EAASlU,EAAO6Y,UAEd3E,EAASlU,EAAO6Y,QAAUrrB,OAAOsZ,OAAO,MACxC9G,EAAO8Y,aAAe,SAIKtqB,IAAvB0lB,EAAOwH,cACT1b,EAAO5B,KAAK,cAAe7C,EACfqd,EAASA,SAAWA,EAASA,SAAWA,GAIpD1E,EAASlU,EAAO6Y,SAElB2C,EAAWtH,EAAO3Y,SAGH/M,IAAbgtB,EAEFA,EAAWtH,EAAO3Y,GAAQqd,IACxB5Y,EAAO8Y,kBAeT,GAbwB,mBAAb0C,EAETA,EAAWtH,EAAO3Y,GAChBggB,EAAU,CAAC3C,EAAU4C,GAAY,CAACA,EAAU5C,GAErC2C,EACTC,EAASG,QAAQ/C,GAEjB4C,EAAS1tB,KAAK8qB,IAIhBppB,EAAI4rB,EAAiBpb,IACb,GAAKwb,EAAS7vB,OAAS6D,IAAMgsB,EAASI,OAAQ,CACpDJ,EAASI,QAAS,EAGlB,IAAIC,EAAI,IAAIzuB,MAAM,+CACEouB,EAAS7vB,OAAS,IAAMshB,OAAO1R,GADjC,qEAIlBsgB,EAAE9c,KAAO,8BACT8c,EAAE5T,QAAUjI,EACZ6b,EAAEtgB,KAAOA,EACTsgB,EAAEC,MAAQN,EAAS7vB,OA7KG8vB,EA8KHI,EA7KnB1e,SAAWA,QAAQ4e,MAAM5e,QAAQ4e,KAAKN,GAiL1C,OAAOzb,EAcT,SAASgc,IACP,IAAK/sB,KAAKgtB,MAGR,OAFAhtB,KAAK+Q,OAAO+F,eAAe9W,KAAKsM,KAAMtM,KAAKitB,QAC3CjtB,KAAKgtB,OAAQ,EACY,IAArBttB,UAAUhD,OACLsD,KAAK2pB,SAAS/pB,KAAKI,KAAK+Q,QAC1B/Q,KAAK2pB,SAAS5pB,MAAMC,KAAK+Q,OAAQrR,WAI5C,SAASwtB,EAAUnc,EAAQzE,EAAMqd,GAC/B,IAAI5E,EAAQ,CAAEiI,OAAO,EAAOC,YAAQ1tB,EAAWwR,OAAQA,EAAQzE,KAAMA,EAAMqd,SAAUA,GACjFwD,EAAUJ,EAAY3qB,KAAK2iB,GAG/B,OAFAoI,EAAQxD,SAAWA,EACnB5E,EAAMkI,OAASE,EACRA,EA0HT,SAASC,EAAWrc,EAAQzE,EAAM+gB,GAChC,IAAIpI,EAASlU,EAAO6Y,QAEpB,QAAerqB,IAAX0lB,EACF,MAAO,GAET,IAAIqI,EAAarI,EAAO3Y,GACxB,YAAmB/M,IAAf+tB,EACK,GAEiB,mBAAfA,EACFD,EAAS,CAACC,EAAW3D,UAAY2D,GAAc,CAACA,GAElDD,EAsDT,SAAyB5sB,GAEvB,IADA,IAAI8sB,EAAM,IAAInxB,MAAMqE,EAAI/D,QACfC,EAAI,EAAGA,EAAI4wB,EAAI7wB,SAAUC,EAChC4wB,EAAI5wB,GAAK8D,EAAI9D,GAAGgtB,UAAYlpB,EAAI9D,GAElC,OAAO4wB,EA1DLC,CAAgBF,GAAcG,EAAWH,EAAYA,EAAW5wB,QAoBpE,SAAS6tB,EAAcje,GACrB,IAAI2Y,EAASjlB,KAAK4pB,QAElB,QAAerqB,IAAX0lB,EAAsB,CACxB,IAAIqI,EAAarI,EAAO3Y,GAExB,GAA0B,mBAAfghB,EACT,OAAO,EACF,QAAmB/tB,IAAf+tB,EACT,OAAOA,EAAW5wB,OAItB,OAAO,EAOT,SAAS+wB,EAAWhtB,EAAKitB,GAEvB,IADA,IAAIC,EAAO,IAAIvxB,MAAMsxB,GACZ/wB,EAAI,EAAGA,EAAI+wB,IAAK/wB,EACvBgxB,EAAKhxB,GAAK8D,EAAI9D,GAChB,OAAOgxB,EA4CT,SAAS9B,EAA+B7S,EAASlJ,EAAM6Z,EAAUmC,GAC/D,GAA0B,mBAAf9S,EAAQhL,GACb8d,EAAMtC,KACRxQ,EAAQwQ,KAAK1Z,EAAM6Z,GAEnB3Q,EAAQhL,GAAG8B,EAAM6Z,OAEd,IAAwC,mBAA7B3Q,EAAQxM,iBAYxB,MAAM,IAAIkd,UAAU,6EAA+E1Q,GATnGA,EAAQxM,iBAAiBsD,GAAM,SAAS8d,EAAaC,GAG/C/B,EAAMtC,MACRxQ,EAAQsJ,oBAAoBxS,EAAM8d,GAEpCjE,EAASkE,OAhaftvB,OAAOuvB,eAAevlB,EAAc,sBAAuB,CACzDwlB,YAAY,EACZC,IAAK,WACH,OAAO/B,GAETgC,IAAK,SAASJ,GACZ,GAAmB,iBAARA,GAAoBA,EAAM,GAAKrC,EAAYqC,GACpD,MAAM,IAAIK,WAAW,kGAAoGL,EAAM,KAEjI5B,EAAsB4B,KAI1BtlB,EAAamjB,KAAO,gBAEGnsB,IAAjBS,KAAK4pB,SACL5pB,KAAK4pB,UAAYrrB,OAAO4vB,eAAenuB,MAAM4pB,UAC/C5pB,KAAK4pB,QAAUrrB,OAAOsZ,OAAO,MAC7B7X,KAAK6pB,aAAe,GAGtB7pB,KAAKgsB,cAAgBhsB,KAAKgsB,oBAAiBzsB,GAK7CgJ,EAAa5I,UAAUyuB,gBAAkB,SAAyBV,GAChE,GAAiB,iBAANA,GAAkBA,EAAI,GAAKlC,EAAYkC,GAChD,MAAM,IAAIQ,WAAW,gFAAkFR,EAAI,KAG7G,OADA1tB,KAAKgsB,cAAgB0B,EACd1tB,MASTuI,EAAa5I,UAAU0uB,gBAAkB,WACvC,OAAOlC,EAAiBnsB,OAG1BuI,EAAa5I,UAAUwP,KAAO,SAAc7C,GAE1C,IADA,IAAImb,EAAO,GACF9qB,EAAI,EAAGA,EAAI+C,UAAUhD,OAAQC,IAAK8qB,EAAK5oB,KAAKa,UAAU/C,IAC/D,IAAI2xB,EAAoB,UAAThiB,EAEX2Y,EAASjlB,KAAK4pB,QAClB,QAAerqB,IAAX0lB,EACFqJ,EAAWA,QAA4B/uB,IAAjB0lB,EAAO9W,WAC1B,IAAKmgB,EACR,OAAO,EAGT,GAAIA,EAAS,CACX,IAAIC,EAGJ,GAFI9G,EAAK/qB,OAAS,IAChB6xB,EAAK9G,EAAK,IACR8G,aAAcpwB,MAGhB,MAAMowB,EAGR,IAAI3pB,EAAM,IAAIzG,MAAM,oBAAsBowB,EAAK,KAAOA,EAAGtxB,QAAU,IAAM,KAEzE,MADA2H,EAAIwS,QAAUmX,EACR3pB,EAGR,IAAIsgB,EAAUD,EAAO3Y,GAErB,QAAgB/M,IAAZ2lB,EACF,OAAO,EAET,GAAuB,mBAAZA,EACTiG,EAAajG,EAASllB,KAAMynB,OAE5B,KAAItqB,EAAM+nB,EAAQxoB,OACdytB,EAAYsD,EAAWvI,EAAS/nB,GACpC,IAASR,EAAI,EAAGA,EAAIQ,IAAOR,EACzBwuB,EAAahB,EAAUxtB,GAAIqD,KAAMynB,GAGrC,OAAO,GAiETlf,EAAa5I,UAAU8pB,YAAc,SAAqBnd,EAAMqd,GAC9D,OAAO0C,EAAarsB,KAAMsM,EAAMqd,GAAU,IAG5CphB,EAAa5I,UAAUqO,GAAKzF,EAAa5I,UAAU8pB,YAEnDlhB,EAAa5I,UAAU6uB,gBACnB,SAAyBliB,EAAMqd,GAC7B,OAAO0C,EAAarsB,KAAMsM,EAAMqd,GAAU,IAqBhDphB,EAAa5I,UAAU6pB,KAAO,SAAcld,EAAMqd,GAGhD,OAFAuC,EAAcvC,GACd3pB,KAAKgO,GAAG1B,EAAM4gB,EAAUltB,KAAMsM,EAAMqd,IAC7B3pB,MAGTuI,EAAa5I,UAAU8uB,oBACnB,SAA6BniB,EAAMqd,GAGjC,OAFAuC,EAAcvC,GACd3pB,KAAKwuB,gBAAgBliB,EAAM4gB,EAAUltB,KAAMsM,EAAMqd,IAC1C3pB,MAIbuI,EAAa5I,UAAUmX,eACnB,SAAwBxK,EAAMqd,GAC5B,IAAIhsB,EAAMsnB,EAAQ8D,EAAUpsB,EAAG+xB,EAK/B,GAHAxC,EAAcvC,QAGCpqB,KADf0lB,EAASjlB,KAAK4pB,SAEZ,OAAO5pB,KAGT,QAAaT,KADb5B,EAAOsnB,EAAO3Y,IAEZ,OAAOtM,KAET,GAAIrC,IAASgsB,GAAYhsB,EAAKgsB,WAAaA,EACb,KAAtB3pB,KAAK6pB,aACT7pB,KAAK4pB,QAAUrrB,OAAOsZ,OAAO,cAEtBoN,EAAO3Y,GACV2Y,EAAOnO,gBACT9W,KAAKmP,KAAK,iBAAkB7C,EAAM3O,EAAKgsB,UAAYA,SAElD,GAAoB,mBAAThsB,EAAqB,CAGrC,IAFAorB,GAAY,EAEPpsB,EAAIgB,EAAKjB,OAAS,EAAGC,GAAK,EAAGA,IAChC,GAAIgB,EAAKhB,KAAOgtB,GAAYhsB,EAAKhB,GAAGgtB,WAAaA,EAAU,CACzD+E,EAAmB/wB,EAAKhB,GAAGgtB,SAC3BZ,EAAWpsB,EACX,MAIJ,GAAIosB,EAAW,EACb,OAAO/oB,KAEQ,IAAb+oB,EACFprB,EAAKgxB,QAiIf,SAAmBhxB,EAAMixB,GACvB,KAAOA,EAAQ,EAAIjxB,EAAKjB,OAAQkyB,IAC9BjxB,EAAKixB,GAASjxB,EAAKixB,EAAQ,GAC7BjxB,EAAKkxB,MAlIGC,CAAUnxB,EAAMorB,GAGE,IAAhBprB,EAAKjB,SACPuoB,EAAO3Y,GAAQ3O,EAAK,SAEQ4B,IAA1B0lB,EAAOnO,gBACT9W,KAAKmP,KAAK,iBAAkB7C,EAAMoiB,GAAoB/E,GAG1D,OAAO3pB,MAGbuI,EAAa5I,UAAUyQ,IAAM7H,EAAa5I,UAAUmX,eAEpDvO,EAAa5I,UAAUmrB,mBACnB,SAA4Bxe,GAC1B,IAAI6d,EAAWlF,EAAQtoB,EAGvB,QAAe4C,KADf0lB,EAASjlB,KAAK4pB,SAEZ,OAAO5pB,KAGT,QAA8BT,IAA1B0lB,EAAOnO,eAUT,OATyB,IAArBpX,UAAUhD,QACZsD,KAAK4pB,QAAUrrB,OAAOsZ,OAAO,MAC7B7X,KAAK6pB,aAAe,QACMtqB,IAAjB0lB,EAAO3Y,KACY,KAAtBtM,KAAK6pB,aACT7pB,KAAK4pB,QAAUrrB,OAAOsZ,OAAO,aAEtBoN,EAAO3Y,IAEXtM,KAIT,GAAyB,IAArBN,UAAUhD,OAAc,CAC1B,IACIgC,EADAF,EAAOD,OAAOC,KAAKymB,GAEvB,IAAKtoB,EAAI,EAAGA,EAAI6B,EAAK9B,SAAUC,EAEjB,oBADZ+B,EAAMF,EAAK7B,KAEXqD,KAAK8qB,mBAAmBpsB,GAK1B,OAHAsB,KAAK8qB,mBAAmB,kBACxB9qB,KAAK4pB,QAAUrrB,OAAOsZ,OAAO,MAC7B7X,KAAK6pB,aAAe,EACb7pB,KAKT,GAAyB,mBAFzBmqB,EAAYlF,EAAO3Y,IAGjBtM,KAAK8W,eAAexK,EAAM6d,QACrB,QAAkB5qB,IAAd4qB,EAET,IAAKxtB,EAAIwtB,EAAUztB,OAAS,EAAGC,GAAK,EAAGA,IACrCqD,KAAK8W,eAAexK,EAAM6d,EAAUxtB,IAIxC,OAAOqD,MAoBbuI,EAAa5I,UAAUwqB,UAAY,SAAmB7d,GACpD,OAAO8gB,EAAWptB,KAAMsM,GAAM,IAGhC/D,EAAa5I,UAAUovB,aAAe,SAAsBziB,GAC1D,OAAO8gB,EAAWptB,KAAMsM,GAAM,IAGhC/D,EAAagiB,cAAgB,SAASvR,EAAS1M,GAC7C,MAAqC,mBAA1B0M,EAAQuR,cACVvR,EAAQuR,cAAcje,GAEtBie,EAAc3qB,KAAKoZ,EAAS1M,IAIvC/D,EAAa5I,UAAU4qB,cAAgBA,EAiBvChiB,EAAa5I,UAAUqqB,WAAa,WAClC,OAAOhqB,KAAK6pB,aAAe,EAAImB,EAAehrB,KAAK4pB,SAAW,aCha/D,IAIGoF,IAAQ,GAIV1tB,EAAOC,QAAUytB,EAOnBA,EAAMC,aAAe,SAASC,EAASC,GACrC,OAAOA,EAAM/uB,QAAO,SAASgvB,GAC3B,OAAOJ,EAAMzxB,KAAK2xB,EAASE,OAK/BJ,EAAMzxB,KAAO,SAAS2xB,EAASE,GAC7B,OAAqC,OAA9BJ,EAAM1R,MAAM4R,EAASE,IAK9BJ,EAAM1R,MAAQ,SAAS4R,EAASE,EAAK/oB,GACnCA,EAAOA,GAAQ,GACf,IAYIgpB,EAZAC,EAAa,EACbvyB,EAAS,GACTI,EAAMiyB,EAAI1yB,OACV6yB,EAAa,EACbC,EAAY,EAEZC,EAAMppB,EAAKopB,KAAO,GAElBC,EAAOrpB,EAAKqpB,MAAQ,GAGpBC,EAAiBtpB,EAAKupB,eAAiBR,GAAOA,EAAIzU,cAGtDuU,EAAU7oB,EAAKupB,eAAiBV,GAAWA,EAAQvU,cAInD,IAAI,IAAIkV,EAAM,EAAGA,EAAM1yB,EAAK0yB,IAC1BR,EAAKD,EAAIS,GACNF,EAAcE,KAASX,EAAQI,IAChCD,EAAKI,EAAMJ,EAAKK,EAChBJ,GAAc,EAGdE,GAAa,EAAIA,GAEjBA,EAAY,EAEdD,GAAcC,EACdzyB,EAAOA,EAAOL,QAAU2yB,EAI1B,OAAGC,IAAeJ,EAAQxyB,QAExB6yB,EAAcI,IAAkBT,EAAWY,IAAWP,EAC/C,CAACQ,SAAUhzB,EAAOa,KAAK,IAAKoyB,MAAOT,IAGrC,MA2BTP,EAAM5uB,OAAS,SAAS8uB,EAASzuB,EAAK4F,GACpC,OAAI5F,GAAsB,IAAfA,EAAI/D,OAGQ,iBAAZwyB,EACFzuB,GAET4F,EAAOA,GAAQ,GACR5F,EACJrB,QAAO,SAAS6wB,EAAMpiB,EAASgiB,EAAKpvB,GACnC,IAAI2uB,EAAMvhB,EACPxH,EAAK6pB,UACNd,EAAM/oB,EAAK6pB,QAAQriB,IAErB,IAAIkiB,EAAWf,EAAM1R,MAAM4R,EAASE,EAAK/oB,GASzC,OARe,MAAZ0pB,IACDE,EAAKA,EAAKvzB,QAAU,CAChB0E,OAAQ2uB,EAASA,SACjBC,MAAOD,EAASC,MAChBpB,MAAOiB,EACPM,SAAUtiB,IAGToiB,IACN,IAKFG,MAAK,SAAS1P,EAAEiI,GAEf,OADcA,EAAEqH,MAAQtP,EAAEsP,OAEnBtP,EAAEkO,MAAQjG,EAAEiG,UA9Bd,0BC1GX,IAAIyB,EAAW9xB,OAAOoB,UAAU0wB,SAEhC/uB,EAAOC,QAAU,SAAU+uB,GAC1B,IAAI3wB,EACJ,MAA4B,oBAArB0wB,EAASzwB,KAAK0wB,KAAiF,QAApD3wB,EAAYpB,OAAO4vB,eAAemC,KAA0B3wB,IAAcpB,OAAO4vB,eAAe,qBCKnJ,IASIoC,EAAS,aAGTC,EAAa,qBAGbC,EAAa,aAGbC,EAAY,cAGZC,EAAeC,SAGfvI,EAA8B,iBAAV,EAAA7I,GAAsB,EAAAA,GAAU,EAAAA,EAAOjhB,SAAWA,QAAU,EAAAihB,EAGhFqR,EAA0B,iBAAR3e,MAAoBA,MAAQA,KAAK3T,SAAWA,QAAU2T,KAGxEkW,EAAOC,GAAcwI,GAAYxF,SAAS,cAATA,GAUjCyF,EAPcvyB,OAAOoB,UAOQ0wB,SAG7BU,EAAY9N,KAAKziB,IACjBwwB,EAAY/N,KAAKjiB,IAkBjBugB,EAAM,WACR,OAAO6G,EAAK1iB,KAAK6b,OA4MnB,SAAS0P,EAAS30B,GAChB,IAAIgQ,SAAchQ,EAClB,QAASA,IAAkB,UAARgQ,GAA4B,YAARA,GA4EzC,SAAS4kB,EAAS50B,GAChB,GAAoB,iBAATA,EACT,OAAOA,EAET,GAhCF,SAAkBA,GAChB,MAAuB,iBAATA,GAtBhB,SAAsBA,GACpB,QAASA,GAAyB,iBAATA,EAsBtB60B,CAAa70B,IAzTF,mBAyTYw0B,EAAelxB,KAAKtD,GA8B1C80B,CAAS90B,GACX,OA3VM,IA6VR,GAAI20B,EAAS30B,GAAQ,CACnB,IAAI+0B,EAAgC,mBAAjB/0B,EAAMg1B,QAAwBh1B,EAAMg1B,UAAYh1B,EACnEA,EAAQ20B,EAASI,GAAUA,EAAQ,GAAMA,EAE3C,GAAoB,iBAAT/0B,EACT,OAAiB,IAAVA,EAAcA,GAASA,EAEhCA,EAAQA,EAAMsW,QAAQ2d,EAAQ,IAC9B,IAAIgB,EAAWd,EAAWlzB,KAAKjB,GAC/B,OAAQi1B,GAAYb,EAAUnzB,KAAKjB,GAC/Bq0B,EAAar0B,EAAMe,MAAM,GAAIk0B,EAAW,EAAI,GAC3Cf,EAAWjzB,KAAKjB,GAxWb,KAwW6BA,EAGvCgF,EAAOC,QAtPP,SAAkBF,EAAMmwB,EAAMt0B,GAC5B,IAAIu0B,EACAC,EACAC,EACA50B,EACA60B,EACAC,EACAC,EAAiB,EACjBC,GAAU,EACVC,GAAS,EACTC,GAAW,EAEf,GAAmB,mBAAR5wB,EACT,MAAM,IAAIqoB,UArIQ,uBA+IpB,SAASwI,EAAWxQ,GAClB,IAAI+F,EAAOgK,EACPU,EAAUT,EAKd,OAHAD,EAAWC,OAAWnyB,EACtBuyB,EAAiBpQ,EACjB3kB,EAASsE,EAAKtB,MAAMoyB,EAAS1K,GAI/B,SAAS2K,EAAY1Q,GAMnB,OAJAoQ,EAAiBpQ,EAEjBkQ,EAAU1uB,WAAWmvB,EAAcb,GAE5BO,EAAUG,EAAWxQ,GAAQ3kB,EAWtC,SAASu1B,EAAa5Q,GACpB,IAAI6Q,EAAoB7Q,EAAOmQ,EAM/B,YAAyBtyB,IAAjBsyB,GAA+BU,GAAqBf,GACzDe,EAAoB,GAAOP,GANJtQ,EAAOoQ,GAM8BH,EAGjE,SAASU,IACP,IAAI3Q,EAAOH,IACX,GAAI+Q,EAAa5Q,GACf,OAAO8Q,EAAa9Q,GAGtBkQ,EAAU1uB,WAAWmvB,EAzBvB,SAAuB3Q,GACrB,IAEI3kB,EAASy0B,GAFW9P,EAAOmQ,GAI/B,OAAOG,EAAShB,EAAUj0B,EAAQ40B,GAHRjQ,EAAOoQ,IAGkC/0B,EAoBhC01B,CAAc/Q,IAGnD,SAAS8Q,EAAa9Q,GAKpB,OAJAkQ,OAAUryB,EAIN0yB,GAAYR,EACPS,EAAWxQ,IAEpB+P,EAAWC,OAAWnyB,EACfxC,GAeT,SAAS21B,IACP,IAAIhR,EAAOH,IACPoR,EAAaL,EAAa5Q,GAM9B,GAJA+P,EAAW/xB,UACXgyB,EAAW1xB,KACX6xB,EAAenQ,EAEXiR,EAAY,CACd,QAAgBpzB,IAAZqyB,EACF,OAAOQ,EAAYP,GAErB,GAAIG,EAGF,OADAJ,EAAU1uB,WAAWmvB,EAAcb,GAC5BU,EAAWL,GAMtB,YAHgBtyB,IAAZqyB,IACFA,EAAU1uB,WAAWmvB,EAAcb,IAE9Bz0B,EAIT,OAxGAy0B,EAAON,EAASM,IAAS,EACrBP,EAAS/zB,KACX60B,IAAY70B,EAAQ60B,QAEpBJ,GADAK,EAAS,YAAa90B,GACH6zB,EAAUG,EAASh0B,EAAQy0B,UAAY,EAAGH,GAAQG,EACrEM,EAAW,aAAc/0B,IAAYA,EAAQ+0B,SAAWA,GAiG1DS,EAAUE,OAnCV,gBACkBrzB,IAAZqyB,GACFtqB,aAAasqB,GAEfE,EAAiB,EACjBL,EAAWI,EAAeH,EAAWE,OAAUryB,GA+BjDmzB,EAAUvvB,MA5BV,WACE,YAAmB5D,IAAZqyB,EAAwB70B,EAASy1B,EAAajR,MA4BhDmR,oBCzPR,IAAqBG,IAGJ,WAEhB,IACI3D,EAAU,kIAEd,SAAS5R,EAAMwV,GACb,OAAOA,EAAIxV,MAAM4R,IAAY,GAO/B,SAAS6D,EAAID,GAEX,MAAO,CACLtwB,UAFFswB,EAAMxV,EAAMwV,IAEI,IAdN,GAeRE,QAASF,EAAI,IAfL,GAgBRG,OAAQH,EAAI,IAhBJ,GAiBRI,OAAQJ,EAAI,IAjBJ,IAqBZ,SAASK,EAAOpiB,EAAQrS,EAAKpC,GAC3BiC,OAAOuvB,eAAe/c,EAAQrS,EAAK,CACjCpC,MAAOA,EACPyxB,YAAY,IAIhB,SAASqF,EAAKrK,EAAUmG,EAAS5iB,GAC/B,SAASxH,EAAOguB,GACd,OAAOxV,EAAMwV,GAAK/J,IA9BV,GAgCVoK,EAAOruB,EAAQ,UAAWoqB,GAC1BiE,EAAOJ,EAAKzmB,EAAMxH,GAUpB,OAPAsuB,EAAK,EAAG,kBAAmB,YAC3BA,EAAK,EAAG,gBAAiB,WACzBA,EAAK,EAAG,gBAAiB,UACzBA,EAAK,EAAG,2BAA4B,UAEpCD,EAAOJ,EAAK,SAlCZ,SAAeD,GACb,OAAOxV,EAAMwV,GAAK1yB,QAAO,SAASpE,EAAGW,GAAK,OAAOX,GAAKW,QAmCjDo2B,GA/C6BzxB,EAAOC,QAASD,EAAOC,QAAUsxB,IAErE7yB,KADc,OAAI6yB,gCCuDpB,IAAIQ,EAAc,EAAQ,KAC1B/xB,EAAOC,QAAU8xB,EAEK,oBAAXzrB,SACTA,OAAOyrB,YAAcA,yBC3DvB,IAAIC,EAAO,SAASC,GAgBlB,OAfAvzB,KAAKuzB,UAAYA,EACjBvzB,KAAKwzB,MAAQ,GACbxzB,KAAKyzB,OAAS,EACdzzB,KAAK0zB,QAAUppB,SAAS4B,cAAc,OACtClM,KAAK0zB,QAAQvnB,UAAY,sBACzBnM,KAAK6N,QAAUvD,SAAS4B,cAAc,MACtClM,KAAK6N,QAAQ1B,UAAY,cACzBnM,KAAK0zB,QAAQhpB,YAAY1K,KAAK6N,SAK9B7N,KAAK4N,mBAAoB,EAEzB2lB,EAAU/oB,GAAG0F,WAAWyjB,aAAa3zB,KAAK0zB,QAASH,EAAU/oB,GAAGopB,aACzD5zB,MAGTszB,EAAK3zB,UAAUk0B,KAAO,WACpB7zB,KAAK6N,QAAQsD,MAAMC,QAAU,SAG/BkiB,EAAK3zB,UAAUm0B,KAAO,WACpB9zB,KAAK6N,QAAQsD,MAAMC,QAAU,QAG/BkiB,EAAK3zB,UAAUiN,IAAM,SAAS7C,GAC5B/J,KAAKwzB,MAAM30B,KAAKkL,IAGlBupB,EAAK3zB,UAAUgM,MAAQ,WACrB3L,KAAKwzB,MAAQ,GACbxzB,KAAKyzB,OAAS,GAGhBH,EAAK3zB,UAAUo0B,QAAU,WACvB,OAAQ/zB,KAAKwzB,MAAM92B,QAGrB42B,EAAK3zB,UAAUq0B,UAAY,WACzB,MAAsC,UAA/Bh0B,KAAK6N,QAAQsD,MAAMC,SAG5BkiB,EAAK3zB,UAAU6N,KAAO,WAGpB,GAFAxN,KAAK6N,QAAQF,UAAY,GAEC,IAAtB3N,KAAKwzB,MAAM92B,OAAf,CAKA,IAAK,IAAIC,EAAI,EAAGA,EAAIqD,KAAKwzB,MAAM92B,OAAQC,IACrCqD,KAAKi0B,SAASj0B,KAAKwzB,MAAM72B,GAAIqD,KAAKyzB,SAAW92B,GAG/CqD,KAAK6zB,YARH7zB,KAAK8zB,QAWTR,EAAK3zB,UAAUs0B,SAAW,SAASlqB,EAAM0pB,GACvC,IAAIS,EAAK5pB,SAAS4B,cAAc,MAC9BwU,EAAIpW,SAAS4B,cAAc,KAEzBunB,IAAQS,EAAG/nB,WAAa,WAE5BuU,EAAE/S,UAAY5D,EAAK3I,OAEnB8yB,EAAGxpB,YAAYgW,GACf1gB,KAAK6N,QAAQnD,YAAYwpB,GAEzBA,EAAG1nB,iBAAiB,YAAa,WAC/BxM,KAAK4N,mBAAoB,GACzBxL,KAAKpC,OAEPk0B,EAAG1nB,iBAAiB,UAAW,WAC7BxM,KAAKm0B,cAAcv0B,KAAKI,KAAM+J,IAC9B3H,KAAKpC,QAGTszB,EAAK3zB,UAAUw0B,cAAgB,SAASpqB,GACtC/J,KAAK4N,mBAAoB,EACzB5N,KAAKuzB,UAAUj3B,MAAMyN,EAAKomB,UAC1BnwB,KAAK2L,QACL3L,KAAKwN,QAGP8lB,EAAK3zB,UAAUy0B,KAAO,SAASxF,GAC7B5uB,KAAKyzB,OAAS7E,EACd5uB,KAAKwN,QAGP8lB,EAAK3zB,UAAU00B,SAAW,WACxBr0B,KAAKo0B,KAAqB,IAAhBp0B,KAAKyzB,OAAezzB,KAAKwzB,MAAM92B,OAAS,EAAIsD,KAAKyzB,OAAS,IAGtEH,EAAK3zB,UAAUkd,KAAO,WACpB7c,KAAKo0B,KAAKp0B,KAAKyzB,SAAWzzB,KAAKwzB,MAAM92B,OAAS,EAAI,EAAIsD,KAAKyzB,OAAS,IAGtEH,EAAK3zB,UAAU20B,UAAY,SAAStgB,GAClC,IAAIkgB,EAAK5pB,SAAS4B,cAAc,MAEhCgoB,EAAGvmB,UAAYqG,EAEfhU,KAAK6N,QAAQnD,YAAYwpB,GACzBl0B,KAAK6zB,QAGPvyB,EAAOC,QAAU+xB,8BC5GjB,IAAIhrB,EAAS,EAAQ,KACjB0mB,EAAQ,EAAQ,KAChBsE,EAAO,EAAQ,KAEfD,EAAc,SAAS7oB,EAAItD,EAAMhK,GA4CnC,OA3CAA,EAAUA,GAAW,GAErB8C,KAAK9C,QAAUoL,EAAO,CACpBc,UAAW,EACX3G,MAAO,EACPrC,QAAQ,EACRm0B,YAAY,GACXr3B,GAEH8C,KAAKwK,GAAKA,EACVxK,KAAKkH,KAAOA,GAAQ,GACpBlH,KAAKrC,KAAO,IAAI21B,EAAKtzB,MAErBA,KAAKgP,MAAQ,GACbhP,KAAKuD,SAAW,KAEhBvD,KAAKrC,KAAK6P,OAEVxN,KAAKwK,GAAGgC,iBAAiB,QAAS,SAASC,GACzCzM,KAAKw0B,YAAY/nB,EAAElI,UACnBnC,KAAKpC,OAAO,GAEdA,KAAKwK,GAAGgC,iBAAiB,UAAW,SAASC,GAC3CzM,KAAKy0B,cAAchoB,IACnBrK,KAAKpC,OAEPA,KAAKwK,GAAGgC,iBAAiB,QAAS,WAChCxM,KAAK00B,eACLtyB,KAAKpC,OAEPA,KAAKwK,GAAGgC,iBAAiB,OAAQ,WAC/BxM,KAAK20B,cACLvyB,KAAKpC,OAEPA,KAAKwK,GAAGgC,iBAAiB,QAAS,SAASC,GACzCzM,KAAK40B,YAAYnoB,IACjBrK,KAAKpC,OAGPA,KAAKgK,OAAUhK,KAAK9C,QAAc,OAAI8C,KAAK9C,QAAQ8M,OAAO5H,KAAKpC,MAAQA,KAAKgK,OAAO5H,KAAKpC,MAExFA,KAAK8J,aAAgB9J,KAAK9C,QAAoB,aAAI8C,KAAK9C,QAAQ4M,aAAa1H,KAAKpC,MAAQA,KAAK8J,aAAa1H,KAAKpC,MAEzGA,MAGTqzB,EAAY1zB,UAAU60B,YAAc,SAASjwB,GAO3B,KAAZA,GACY,KAAZA,GACY,KAAZA,GACY,KAAZA,GACY,IAAZA,GAEJvE,KAAK60B,kBAAkB70B,KAAKwK,GAAGlO,QAGjC+2B,EAAY1zB,UAAU80B,cAAgB,SAAShoB,GAC7C,OAAQA,EAAElI,SACR,KAAK,GACL,KAAK,EACEvE,KAAKrC,KAAKo2B,YACT/zB,KAAKrC,KAAKq2B,aACZvnB,EAAEiH,iBAEJ1T,KAAK1D,MAAM0D,KAAKrC,KAAK61B,MAAMxzB,KAAKrC,KAAK81B,QAAQtD,UAC7CnwB,KAAKrC,KAAKm2B,QAEd,MACA,KAAK,GACE9zB,KAAKrC,KAAKo2B,WAAW/zB,KAAKrC,KAAKm2B,OACtC,MACA,KAAK,GACH9zB,KAAKrC,KAAK02B,WACZ,MACA,KAAK,GACHr0B,KAAKrC,KAAKkf,SAKhBwW,EAAY1zB,UAAUg1B,WAAa,YAC5B30B,KAAKrC,KAAKiQ,mBAAqB5N,KAAK9C,QAAQq3B,YAC/Cv0B,KAAKrC,KAAKm2B,QAIdT,EAAY1zB,UAAUi1B,YAAc,SAASnoB,GAC3C,GAAIA,EAAEgE,cACJzQ,KAAK60B,kBAAkBpoB,EAAEgE,cAAcC,QAAQ,aAC1C,CACL,IAAIwB,EAAOlS,KACXkD,YAAW,WACTgP,EAAK2iB,kBAAkBpoB,EAAEsE,OAAOzU,SAC/B,OAIP+2B,EAAY1zB,UAAUk1B,kBAAoB,SAAS7lB,GACjDhP,KAAKgP,MAAQhP,KAAK80B,UAAU9lB,GAE5BhP,KAAKrC,KAAKgO,QAEN3L,KAAKgP,MAAMtS,OAASsD,KAAK9C,QAAQkM,UACnCpJ,KAAKrC,KAAK6P,OAIZxN,KAAK+0B,cAAc,SAAS7tB,GAC1B,IAAK,IAAIvK,EAAI,EAAGA,EAAIuK,EAAKxK,SACvBsD,KAAKrC,KAAKiP,IAAI1F,EAAKvK,IACfA,IAAOqD,KAAK9C,QAAQuF,MAAQ,GAFD9F,KAIjCqD,KAAKrC,KAAK6P,QACVpL,KAAKpC,QAGTqzB,EAAY1zB,UAAU+0B,YAAc,WAC7B10B,KAAKrC,KAAKo2B,WAAW/zB,KAAKrC,KAAKk2B,OACpC7zB,KAAKrC,KAAKiQ,mBAAoB,GAQhCylB,EAAY1zB,UAAU2T,OAAS,SAAS0hB,GACtCh1B,KAAKkH,KAAO8tB,EACZh1B,KAAKw0B,eAMPnB,EAAY1zB,UAAUgM,MAAQ,WAC5B3L,KAAKkH,KAAO,GACZlH,KAAKrC,KAAKgO,SASZ0nB,EAAY1zB,UAAUm1B,UAAY,SAASx4B,GAEzC,OADQA,EAAMqe,eAWhB0Y,EAAY1zB,UAAU2d,MAAQ,SAAS2X,EAAWjmB,GAChD,OAAOimB,EAAU3wB,QAAQ0K,IAAU,GAGrCqkB,EAAY1zB,UAAUrD,MAAQ,SAASA,GAIrC,GAHA0D,KAAKuD,SAAWjH,EAChB0D,KAAKwK,GAAGlO,MAAQ0D,KAAK8J,aAAaxN,GAE9BgO,SAAS4qB,YAAa,CACxB,IAAIzoB,EAAInC,SAAS4qB,YAAY,cAC7BzoB,EAAE0oB,UAAU,UAAU,GAAM,GAC5Bn1B,KAAKwK,GAAG4qB,cAAc3oB,QAEtBzM,KAAKwK,GAAG6qB,UAAU,aAItBhC,EAAY1zB,UAAUo1B,cAAgB,SAAStwB,GAC7C,IAAIvH,EAAU,CACZuyB,IAAK,WACLC,KAAM,YACNQ,QAAS,SAASoF,GAAK,OAAOt1B,KAAK8J,aAAawrB,IAAMlzB,KAAKpC,OAqB7DyE,EAlBGzE,KAAK9C,QAAQkD,OACJ4uB,EAAM5uB,OAAOJ,KAAKgP,MAAOhP,KAAKkH,KAAMhK,GAE5BuB,IAAI,SAASsL,GAC7B,MAAO,CACLomB,SAAUpmB,EAAKomB,SACf/uB,OAAQpB,KAAKgK,OAAOD,EAAKomB,SAAUpmB,EAAK3I,UAE1CgB,KAAKpC,OAEGA,KAAKkH,KAAKzI,IAAI,SAAS62B,GAE/B,MAAO,CACLnF,SAAUmF,EACVl0B,OAHmBpB,KAAKgK,OAAOsrB,KAKjClzB,KAAKpC,SAWXqzB,EAAY1zB,UAAUmK,aAAe,SAASC,GAC5C,OAAOA,GASTspB,EAAY1zB,UAAUqK,OAAS,SAASD,EAAMwrB,GAC5C,GAAIA,EAEF,OAAOA,EAKT,IAHA,IAAIC,EAAczrB,EAAa,SAAI/J,KAAK8J,aAAaC,EAAKomB,UAAYnwB,KAAK8J,aAAaC,GACpF0rB,EAAcz1B,KAAK80B,UAAUU,GAC7BE,EAAeD,EAAYE,YAAY31B,KAAKgP,OACzC0mB,GAAgB,GAAG,CACxB,IAAIE,EAAkBF,EAAe11B,KAAKgP,MAAMtS,OAChD84B,EAAaA,EAAWn4B,MAAM,EAAGq4B,GAAgB,WAAaF,EAAWn4B,MAAMq4B,EAAcE,GAAmB,YAAcJ,EAAWn4B,MAAMu4B,GAC/IF,EAAeD,EAAYp4B,MAAM,EAAGq4B,GAAcC,YAAY31B,KAAKgP,OAErE,OAAOwmB,GAOTnC,EAAY1zB,UAAUsU,YAAc,SAASD,GAC3ChU,KAAKrC,KAAK22B,UAAUtgB,IAGtB1S,EAAOC,QAAU8xB,WC/PjB/xB,EAAOC,QAIP,WAGI,IAFA,IAAIwP,EAAS,GAEJpU,EAAI,EAAGA,EAAI+C,UAAUhD,OAAQC,IAAK,CACvC,IAAI0iB,EAAS3f,UAAU/C,GAEvB,IAAK,IAAI+B,KAAO2gB,EACRviB,EAAe8C,KAAKyf,EAAQ3gB,KAC5BqS,EAAOrS,GAAO2gB,EAAO3gB,IAKjC,OAAOqS,GAfX,IAAIjU,EAAiByB,OAAOoB,UAAU7C,6DCDtC,IAkBI0E,EAAS,CAACq0B,EAAO,KACnBC,OAAOC,gBAAgB,IAAIC,WAAWH,IAAOz2B,QAAO,CAAC4E,EAAIiyB,IAGrDjyB,IAFFiyB,GAAQ,IACG,GACHA,EAAK5F,SAAS,IACX4F,EAAO,IACTA,EAAO,IAAI5F,SAAS,IAAI6F,cACtBD,EAAO,GACV,IAEA,MAGP,MC/BDE,EAA2B,GAG/B,SAASC,EAAoBC,GAE5B,IAAIC,EAAeH,EAAyBE,GAC5C,QAAqB92B,IAAjB+2B,EACH,OAAOA,EAAa/0B,QAGrB,IAAID,EAAS60B,EAAyBE,GAAY,CACjDryB,GAAIqyB,EACJ1d,QAAQ,EACRpX,QAAS,IAUV,OANAg1B,EAAoBF,GAAUz2B,KAAK0B,EAAOC,QAASD,EAAQA,EAAOC,QAAS60B,GAG3E90B,EAAOqX,QAAS,EAGTrX,EAAOC,QCvBf60B,EAAoB1I,EAAKpsB,IACxB,IAAIk1B,EAASl1B,GAAUA,EAAOm1B,WAC7B,IAAOn1B,EAAiB,QACxB,IAAM,EAEP,OADA80B,EAAoBd,EAAEkB,EAAQ,CAAE9V,EAAG8V,IAC5BA,GCLRJ,EAAoBd,EAAI,CAAC/zB,EAASm1B,KACjC,IAAI,IAAIh4B,KAAOg4B,EACXN,EAAoBO,EAAED,EAAYh4B,KAAS03B,EAAoBO,EAAEp1B,EAAS7C,IAC5EH,OAAOuvB,eAAevsB,EAAS7C,EAAK,CAAEqvB,YAAY,EAAMC,IAAK0I,EAAWh4B,MCJ3E03B,EAAoB5W,EAAI,WACvB,GAA0B,iBAAfoX,WAAyB,OAAOA,WAC3C,IACC,OAAO52B,MAAQ,IAAIqrB,SAAS,cAAb,GACd,MAAO5e,GACR,GAAsB,iBAAX7E,OAAqB,OAAOA,QALjB,GCAxBwuB,EAAoBO,EAAI,CAACr4B,EAAKu4B,IAAUt4B,OAAOoB,UAAU7C,eAAe8C,KAAKtB,EAAKu4B,GCClFT,EAAoBU,EAAKv1B,IACH,oBAAXw1B,QAA0BA,OAAOC,aAC1Cz4B,OAAOuvB,eAAevsB,EAASw1B,OAAOC,YAAa,CAAE16B,MAAO,WAE7DiC,OAAOuvB,eAAevsB,EAAS,aAAc,CAAEjF,OAAO,KCLvD85B,EAAoBa,IAAO31B,IAC1BA,EAAO41B,MAAQ,GACV51B,EAAO61B,WAAU71B,EAAO61B,SAAW,IACjC71B,uBCCR,WACI,QAAuB/B,IAAnBqI,OAAOsjB,cAAmD3rB,IAA1BqI,OAAOwvB,gBACvCxvB,OAAOwvB,eAAeC,0BACtB,OAEJ,MAAMC,EAAqBzsB,YAM3BjD,OAAOiD,YAJY,WACX,OAAOqgB,QAAQqM,UAAUD,EAAoB,GAAIt3B,KAAK8X,cAK9DjN,YAAYlL,UAAY23B,EAAmB33B,UAC3CkL,YAAYlL,UAAUmY,YAAcjN,YACpCtM,OAAOi5B,eAAe3sB,YAAaysB,GAfvC,GA0CA,SAAU33B,GAuBR,SAAS83B,EAAMC,EAAkBz6B,EAAS6S,GACxC,MAAM,IAAI4nB,EAAiB,2DAA6Dz6B,EAAU,IAAK6S,GAvBnE,mBAA3BnQ,EAAUg4B,gBAErBh4B,EAAUg4B,cAAgB,SAASC,GAC7BA,GAaN,SAA2BA,EAAWC,GACpCD,aAAqB/sB,aAAe4sB,EAAM/N,UAAW,4CACnC,UAAlBkO,EAAUtrB,MAAoBmrB,EAAM/N,UAAW,gDAC/CkO,EAAUC,MAAQA,GAAQJ,EAAMK,aAAc,0DAA2D,iBAfvGC,CAAkBH,EAAW53B,MAC7B43B,EAAUI,WAEVJ,EAAYttB,SAAS4B,cAAc,UACzBI,KAAO,SACjBsrB,EAAUK,QAAS,EACnBj4B,KAAK0K,YAAYktB,GACjBA,EAAUI,QACVh4B,KAAKmQ,YAAYynB,MAbvB,CA0BGM,gBAAgBv4B,WAEnB,MAAMw4B,EAAmB,IAAIC,QAM7B,SAASC,EAAcnzB,GACnB,MAAM0yB,EANV,SAAsC7mB,GAClC,MAAMlD,EAAUkD,aAAkBunB,QAAUvnB,EAASA,aAAkBwnB,KAAOxnB,EAAOynB,cAAgB,KAC/FvD,EAAYpnB,EAAUA,EAAQ4qB,QAAQ,iBAAmB,KAC/D,MAAiF,WAAzExD,aAA6C,EAASA,EAAU3oB,MAAoB2oB,EAAY,KAGtFyD,CAA6BxzB,EAAM6L,QACjD6mB,GAAaA,EAAUC,MACvBM,EAAiBlK,IAAI2J,EAAUC,KAAMD,GA0B7C,IAAIe,EAiRAC,EAgLAC,EASAC,EA+xBAC,EAOAC,GAvwCJ,WACI,GAAI,cAAeC,MAAMt5B,UACrB,OACJ,IAAIA,EACJ,GAAI,gBAAiBiI,QAAU,iBAAiBrK,KAAKoF,UAAUu2B,QAC3Dv5B,EAAYiI,OAAOuxB,YAAYx5B,cAE9B,IAAI,gBAAiBiI,OACtB,OAGAjI,EAAYiI,OAAOqxB,MAAMt5B,UAE7B6M,iBAAiB,QAAS6rB,GAAe,GACzC95B,OAAOuvB,eAAenuB,EAAW,YAAa,CAC1CquB,MACI,GAAiB,UAAbhuB,KAAKsM,MAAoBtM,KAAK+Q,kBAAkBmnB,gBAChD,OAAOC,EAAiBnK,IAAIhuB,KAAK+Q,WAjBjD,GAwBA,SAAW4nB,GACPA,EAAyB,MAAI,QAC7BA,EAAwB,KAAI,OAFhC,CAGGA,IAAsBA,EAAoB,KAC7C,MAAMS,UAAqBvuB,YACvBiN,cACIuhB,QACAr5B,KAAK2Y,OAAS1Q,QAAQC,UACtBlI,KAAKs5B,SAAW,IAAIF,EAAaG,oBAAoBv5B,MAE9Cw5B,gCACP,MAAO,CAAC,WAAY,UAAW,OAEnCC,oBACIz5B,KAAKs5B,SAASzR,UAElB6R,uBACI15B,KAAKs5B,SAAS9T,aAElBD,SACI,MAAM,IAAEoU,GAAQ35B,KAChBA,KAAK25B,IAAM,KACX35B,KAAK25B,IAAMA,EAEfC,yBAAyB9pB,GACT,WAARA,EACA9P,KAAKs5B,SAASO,sBAED,OAAR/pB,EACL9P,KAAKs5B,SAASQ,mBAGd95B,KAAKs5B,SAASS,kBAGlBJ,UACA,OAAO35B,KAAKmoB,aAAa,OAEzBwR,QAAIr9B,GACAA,EACA0D,KAAK8M,aAAa,MAAOxQ,GAGzB0D,KAAKg6B,gBAAgB,OAGzBC,cACA,MA6CK,UA7C8Bj6B,KAAKmoB,aAAa,YAAc,IA4CzDxN,cACUge,EAAkBuB,KACtBvB,EAAkBwB,MA5ClCF,YAAQ39B,GACJA,EACA0D,KAAK8M,aAAa,UAAWxQ,GAG7B0D,KAAKg6B,gBAAgB,WAGzBI,eACA,OAAOp6B,KAAKq6B,aAAa,YAEzBD,aAAS99B,GACLA,EACA0D,KAAK8M,aAAa,WAAY,IAG9B9M,KAAKg6B,gBAAgB,YAGzBM,iBACA,OAAOt6B,KAAKq6B,aAAa,cAEzBC,eAAWh+B,GACPA,EACA0D,KAAK8M,aAAa,aAAc,IAGhC9M,KAAKg6B,gBAAgB,cAGzBO,eACA,OAAQv6B,KAAKs5B,SAASkB,UAEtBrW,eACA,OAAOnkB,KAAKy6B,gBAAkBnwB,WAAatK,KAAK06B,UAEhDA,gBACA,IAAIC,EAAIC,EACR,OAAoG,QAA5FA,EAAmC,QAA7BD,EAAK36B,KAAKy6B,qBAAkC,IAAPE,OAAgB,EAASA,EAAGE,uBAAoC,IAAPD,OAAgB,EAASA,EAAGP,aAAa,uBAU7J,SAASS,EAAUC,GACf,OAAO,IAAIC,IAAID,EAAU1K,WAAY/lB,SAAS2wB,SAElD,SAASC,EAAUrhB,GACf,IAAIshB,EACJ,OAAIthB,EAAIuhB,KACGvhB,EAAIuhB,KAAK/9B,MAAM,IAEjB89B,EAActhB,EAAIiO,KAAKxK,MAAM,WAC3B6d,EAAY,QADlB,EAIT,SAASE,EAAUxD,EAAMD,GAErB,OAAOkD,GADSlD,aAA6C,EAASA,EAAUzP,aAAa,gBAAkB0P,EAAK1P,aAAa,WAAa0P,EAAKzR,QAavJ,SAASkV,EAAoBC,EAAUC,GACnC,OALJ,SAAsBC,EAAS5hB,GAC3B,MAAMwP,EAwBV,SAAmBxP,GACf,OAEsBvd,EAFEud,EAAInY,OAASmY,EAAI6hB,UAG5BC,SAAS,KAAOr/B,EAAQA,EAAQ,IADjD,IAA0BA,EA3BPs/B,CAAU/hB,GACzB,OAAO4hB,EAAQ3T,OAASgT,EAAUzR,GAAQvB,MAAQ2T,EAAQ3T,KAAK+T,WAAWxS,GAGnEyS,CAAaP,EAAUC,OAXZ3hB,EAWoC0hB,GAiB1D,SAA8B1hB,GAC1B,OAJJ,SAA2BA,GACvB,OAAOA,EAAI6hB,SAAS58B,MAAM,KAAKzB,MAAM,GAG9B0+B,CAAkBliB,GAAKxc,OAAO,GAAG,GA5BhC2+B,CAAqBniB,GAAKyD,MAAM,aAAe,IAAI,IAAM,IAGtCA,MAAM,+BAJrC,IAAsBzD,EAatB,SAASoiB,EAAcpiB,GACnB,MAAMqiB,EAAShB,EAAUrhB,GACzB,OAAiB,MAAVqiB,EACDriB,EAAIiO,KAAKzqB,MAAM,IAAK6+B,EAAOx/B,OAAS,IACpCmd,EAAIiO,KAEd,SAASqU,EAAWtiB,GAChB,OAAOoiB,EAAcpiB,GAkBzB,MAAMuiB,EACFtkB,YAAY5E,GACRlT,KAAKkT,SAAWA,EAEhBmpB,gBACA,OAAOr8B,KAAKkT,SAASopB,GAErBC,aACA,OAAQv8B,KAAKq8B,UAEbG,kBACA,OAAOx8B,KAAKoT,YAAc,KAAOpT,KAAKoT,YAAc,IAEpDqpB,kBACA,OAAOz8B,KAAKoT,YAAc,KAAOpT,KAAKoT,YAAc,IAEpDspB,iBACA,OAAO18B,KAAKkT,SAASwpB,WAErBnB,eACA,OAAOT,EAAU96B,KAAKkT,SAAS2G,KAE/B8iB,aACA,OAAO38B,KAAK48B,aAAe58B,KAAK48B,YAAYtf,MAAM,0DAElDlK,iBACA,OAAOpT,KAAKkT,SAASvM,OAErBi2B,kBACA,OAAO58B,KAAKwG,OAAO,gBAEnBq2B,mBACA,OAAO78B,KAAKkT,SAASiJ,QAAQlN,OAE7B6tB,mBACA,OAAI98B,KAAK28B,OACE38B,KAAKkT,SAASiJ,QAAQlN,OAGtBhH,QAAQC,aAAQ3I,GAG/BiH,OAAOsJ,GACH,OAAO9P,KAAKkT,SAASlO,QAAQgpB,IAAIle,IAIzC,SAASitB,EAAS/X,GAAW,OAAEjU,EAAM,WAAEisB,EAAU,OAAEC,GAAW,IAC1D,MAAM/3B,EAAQ,IAAIg4B,YAAYlY,EAAW,CAAEgY,aAAYG,SAAS,EAAMF,WAOtE,OANIlsB,GAAUA,EAAOqsB,YACjBrsB,EAAOqkB,cAAclwB,GAGrBoF,SAASuwB,gBAAgBzF,cAAclwB,GAEpCA,EAEX,SAASm4B,IACL,OAAO,IAAIp1B,SAAQC,GAAWo1B,uBAAsB,IAAMp1B,QAQ9D,SAASq1B,EAAkBC,EAAO,IAC9B,OAAO,IAAIC,WAAYC,gBAAgBF,EAAM,aAEjD,SAASG,EAASC,KAAYC,GAC1B,MAAMC,EAKV,SAAqBF,EAASC,GAC1B,OAAOD,EAAQx+B,QAAO,CAACrC,EAAQqE,EAAQzE,IAE5BI,EAASqE,GADW7B,MAAbs+B,EAAOlhC,GAAkB,GAAKkhC,EAAOlhC,KAEpD,IATWohC,CAAYH,EAASC,GAAQjrB,QAAQ,MAAO,IAAI9T,MAAM,MAC9Dwe,EAAQwgB,EAAM,GAAGxgB,MAAM,QACvB0gB,EAAS1gB,EAAQA,EAAM,GAAG5gB,OAAS,EACzC,OAAOohC,EAAMr/B,KAAIw/B,GAAQA,EAAK5gC,MAAM2gC,KAASpgC,KAAK,MAQtD,SAASsgC,IACL,OAAO9hC,MAAM2D,MAAM,KAAM,CAAErD,OAAQ,KAAM+B,KAAI,CAAC4f,EAAG1hB,IACpC,GAALA,GAAe,IAALA,GAAgB,IAALA,GAAgB,IAALA,EACzB,IAEG,IAALA,EACE,IAEG,IAALA,GACGsmB,KAAKkb,MAAsB,EAAhBlb,KAAKE,UAAgB,GAAGkN,SAAS,IAG7CpN,KAAKkb,MAAsB,GAAhBlb,KAAKE,UAAekN,SAAS,MAEpDzyB,KAAK,IAEZ,SAASuqB,EAAaiW,KAAkBC,GACpC,IAAK,MAAM/hC,KAAS+hC,EAAS5/B,KAAIoP,GAAWA,aAAyC,EAASA,EAAQsa,aAAaiW,KAC/G,GAAoB,iBAAT9hC,EACP,OAAOA,EAEf,OAAO,KAEX,SAASgiC,KAAcD,GACnB,IAAK,MAAMxwB,KAAWwwB,EACO,eAArBxwB,EAAQ0wB,WACR1wB,EAAQf,aAAa,OAAQ,IAEjCe,EAAQf,aAAa,YAAa,QAG1C,SAAS0xB,KAAkBH,GACvB,IAAK,MAAMxwB,KAAWwwB,EACO,eAArBxwB,EAAQ0wB,WACR1wB,EAAQmsB,gBAAgB,QAE5BnsB,EAAQmsB,gBAAgB,cAKhC,SAAWpB,GACPA,EAAYA,EAAiB,IAAI,GAAK,MACtCA,EAAYA,EAAkB,KAAI,GAAK,OACvCA,EAAYA,EAAiB,IAAI,GAAK,MACtCA,EAAYA,EAAmB,MAAI,GAAK,QACxCA,EAAYA,EAAoB,OAAI,GAAK,SAL7C,CAMGA,IAAgBA,EAAc,KAUjC,MAAM6F,EACF3mB,YAAYwhB,EAAUx0B,EAAQy2B,EAAUt2B,EAAO,IAAIy5B,gBAAiB3tB,EAAS,MACzE/Q,KAAK2+B,gBAAkB,IAAIC,gBAC3B5+B,KAAK6+B,sBAAyBviC,MAC9B0D,KAAKs5B,SAAWA,EAChBt5B,KAAK8E,OAASA,EACd9E,KAAKgF,QAAUhF,KAAKya,eACpBza,KAAKiF,KAAOA,EACZjF,KAAK6Z,IAAM0hB,EACXv7B,KAAK+Q,OAASA,EAEdwqB,eACA,OAAOv7B,KAAK6Z,IAEZkB,aACA,OAAO/a,KAAK6Z,IAAIilB,aAEhBC,cACA,OAAO/+B,KAAKiF,KAAO7I,MAAM4iC,KAAKh/B,KAAKiF,KAAK85B,WAAa,GAEzDnM,SACI5yB,KAAK2+B,gBAAgB7kB,QAEzBmlB,gBACI,IAAItE,EAAIC,EACR,MAAM,aAAEsE,GAAiBl/B,KACgC,QAAxD46B,GAAMD,EAAK36B,KAAKs5B,UAAU6F,gCAA6C,IAAPvE,GAAyBA,EAAGh7B,KAAK+6B,EAAI36B,KAAKgF,QAAShF,YAC9GA,KAAKo/B,4BAA4BF,GACvC,IACIl/B,KAAKs5B,SAAS+F,eAAer/B,MAC7B,MAAMkT,QAAiBosB,MAAMt/B,KAAK6Z,IAAIiO,KAAMoX,GAC5C,aAAal/B,KAAKu/B,QAAQrsB,GAE9B,MAAO/E,GACH,GAAmB,eAAfA,EAAM2B,KAEN,MADA9P,KAAKs5B,SAASkG,eAAex/B,KAAMmO,GAC7BA,EAGd,QACInO,KAAKs5B,SAASmG,gBAAgBz/B,OAGtCi/B,cAAc/rB,GACV,MAAMwsB,EAAgB,IAAItD,EAAclpB,GAWxC,OAVc6pB,EAAS,8BAA+B,CAAEC,YAAY,EAAMC,OAAQ,CAAEyC,iBAAiB3uB,OAAQ/Q,KAAK+Q,SACxG4uB,iBACN3/B,KAAKs5B,SAASsG,iCAAiC5/B,KAAM0/B,GAEhDA,EAAcrD,UACnBr8B,KAAKs5B,SAASuG,6BAA6B7/B,KAAM0/B,GAGjD1/B,KAAKs5B,SAASwG,0BAA0B9/B,KAAM0/B,GAE3CA,EAEPR,mBACA,IAAIvE,EACJ,MAAO,CACH71B,OAAQ8zB,EAAY54B,KAAK8E,QAAQoxB,cACjC6J,YAAa,cACb/6B,QAAShF,KAAKgF,QACdg7B,SAAU,SACV/6B,KAAMjF,KAAKigC,aAAe,KAAOjgC,KAAKiF,KACtCi7B,OAAQlgC,KAAKmgC,YACbC,SAA4C,QAAjCzF,EAAK36B,KAAKs5B,SAAS8G,gBAA6B,IAAPzF,OAAgB,EAASA,EAAG7S,MAGpFrN,qBACA,MAAO,CACH,OAAU,oCAGdwlB,mBACA,OAAOjgC,KAAK8E,QAAU8zB,EAAY5K,IAElCmS,kBACA,OAAOngC,KAAK2+B,gBAAgBuB,OAEhCjB,kCAAkCC,GAC9B,MAAMmB,EAAsB,IAAIp4B,SAAQC,GAAWlI,KAAK6+B,sBAAwB32B,IAClE60B,EAAS,6BAA8B,CACjDC,YAAY,EACZC,OAAQ,CACJiC,eACArlB,IAAK7Z,KAAK6Z,IACVymB,OAAQtgC,KAAK6+B,uBAEjB9tB,OAAQ/Q,KAAK+Q,SAEP4uB,wBACAU,GAIlB,MAAME,EACFzoB,YAAYwhB,EAAUzrB,GAClB7N,KAAKwgC,SAAU,EACfxgC,KAAKygC,UAAY1B,IACb,MAAM2B,EAAY3B,EAAQ1hC,OAAO,GAAG,IAChCqjC,aAA6C,EAASA,EAAUC,iBAChE3gC,KAAKs5B,SAASsH,0BAA0B5gC,KAAK6N,UAGrD7N,KAAKs5B,SAAWA,EAChBt5B,KAAK6N,QAAUA,EACf7N,KAAK6gC,qBAAuB,IAAIC,qBAAqB9gC,KAAKygC,WAE9Dv8B,QACSlE,KAAKwgC,UACNxgC,KAAKwgC,SAAU,EACfxgC,KAAK6gC,qBAAqBE,QAAQ/gC,KAAK6N,UAG/CuU,OACQpiB,KAAKwgC,UACLxgC,KAAKwgC,SAAU,EACfxgC,KAAK6gC,qBAAqBG,UAAUhhC,KAAK6N,WAKrD,MAAMozB,EACFnpB,YAAY0lB,GACRx9B,KAAKkhC,gBAAkB52B,SAAS4B,cAAc,YAC9ClM,KAAKkhC,gBAAgBvzB,UAAY6vB,EAErC2D,YAAYlkC,GACR,MAAsB,iBAAXA,EACA,IAAI+C,KAAK/C,GAGTA,EAGXmkC,eACA,MAAMA,EAAW92B,SAAS+2B,yBAC1B,IAAK,MAAMxzB,KAAW7N,KAAKshC,gBACvBF,EAAS12B,YAAYJ,SAASi3B,WAAW1zB,GAAS,IAEtD,OAAOuzB,EAEPE,sBACA,OAAOthC,KAAKwhC,iBAAiBpiC,QAAO,CAACqiC,EAAgBC,IACd,gBAA/BA,EAAMC,QAAQhnB,cACP,IAAI8mB,EAAgBC,GAGpBD,GAEZ,IAEHD,uBACA,OAAOplC,MAAM4iC,KAAKh/B,KAAKkhC,gBAAgBU,QAAQzK,WAGvD8J,EAAcrE,YAAc,6BAG5B,SAAW/D,GACPA,EAAoBA,EAAiC,YAAI,GAAK,cAC9DA,EAAoBA,EAAgC,WAAI,GAAK,aAC7DA,EAAoBA,EAA6B,QAAI,GAAK,UAC1DA,EAAoBA,EAA+B,UAAI,GAAK,YAC5DA,EAAoBA,EAA8B,SAAI,GAAK,WAC3DA,EAAoBA,EAA6B,QAAI,GAAK,UAN9D,CAOGA,IAAwBA,EAAsB,KAEjD,SAAWC,GACPA,EAAwB,WAAI,oCAC5BA,EAAuB,UAAI,sBAC3BA,EAAmB,MAAI,aAH3B,CAIGA,IAAgBA,EAAc,KAQjC,MAAM+I,EACF/pB,YAAYwhB,EAAUwI,EAAalK,EAAWmK,GAAe,GACzD/hC,KAAK+kB,MAAQ8T,EAAoBmJ,YACjChiC,KAAKs5B,SAAWA,EAChBt5B,KAAK8hC,YAAcA,EACnB9hC,KAAK43B,UAAYA,EACjB53B,KAAKiiC,SAwHb,SAAuBH,EAAalK,GAChC,MAAMqK,EAAW,IAAIC,SAASJ,GACxBhyB,EAAO8nB,aAA6C,EAASA,EAAUzP,aAAa,QACpF7rB,EAAQs7B,aAA6C,EAASA,EAAUzP,aAAa,SAI3F,OAHIrY,GAAiB,MAATxT,GAAiB2lC,EAASjU,IAAIle,IAASxT,GAC/C2lC,EAASE,OAAOryB,EAAMxT,GAEnB2lC,EA/HaG,CAAcN,EAAalK,GAC3C53B,KAAKu7B,SAAWT,EAAU96B,KAAKomB,QAC3BpmB,KAAK8E,QAAU8zB,EAAY5K,KAgJvC,SAA8BnU,EAAKklB,GAC/B,MAAMD,EAAe,IAAIJ,gBACzB,IAAK,MAAO5uB,EAAMxT,KAAUyiC,EACpBziC,aAAiB+lC,MAErBvD,EAAaqD,OAAOryB,EAAMxT,GAE9Bud,EAAIhI,OAASitB,EAAazO,WAtJlBiS,CAAqBtiC,KAAKu7B,SAAU,IAAIv7B,KAAKiF,KAAK85B,YAEtD/+B,KAAKuiC,aAAe,IAAI9D,EAAaz+B,KAAMA,KAAK8E,OAAQ9E,KAAKu7B,SAAUv7B,KAAKiF,KAAMjF,KAAK8hC,aACvF9hC,KAAK+hC,aAAeA,EAExBZ,qBAAqBlkC,EAAS4Q,GAC1B,OAAO20B,QAAQvlC,GAEf6H,aACA,IAAI61B,EAEJ,OAlNR,SAA+B71B,GAC3B,OAAQA,EAAO6V,eACX,IAAK,MAAO,OAAOie,EAAY5K,IAC/B,IAAK,OAAQ,OAAO4K,EAAYlJ,KAChC,IAAK,MAAO,OAAOkJ,EAAY6J,IAC/B,IAAK,QAAS,OAAO7J,EAAY8J,MACjC,IAAK,SAAU,OAAO9J,EAAY+J,QA4M3BC,GADmC,QAAzBjI,EAAK36B,KAAK43B,iBAA8B,IAAP+C,OAAgB,EAASA,EAAGxS,aAAa,gBAAkBnoB,KAAK8hC,YAAY3Z,aAAa,WAAa,IACpHxN,gBAAkBie,EAAY5K,IAElE5H,aACA,IAAIuU,EACJ,MAAMkI,EAAuD,iBAA5B7iC,KAAK8hC,YAAY1b,OAAsBpmB,KAAK8hC,YAAY1b,OAAS,KAClG,OAAkC,QAAzBuU,EAAK36B,KAAK43B,iBAA8B,IAAP+C,OAAgB,EAASA,EAAGxS,aAAa,gBAAkBnoB,KAAK8hC,YAAY3Z,aAAa,WAAa0a,GAAqB,GAErK59B,WACA,OAAIjF,KAAK8iC,SAAWhK,EAAYiK,YAAc/iC,KAAK8E,QAAU8zB,EAAY5K,IAC9D,IAAI0Q,gBAAgB1+B,KAAKgjC,gBAGzBhjC,KAAKiiC,SAGhBa,cACA,IAAInI,EACJ,OA5CR,SAA+B3f,GAC3B,OAAQA,EAASL,eACb,KAAKme,EAAYmK,UAAW,OAAOnK,EAAYmK,UAC/C,KAAKnK,EAAYoK,MAAO,OAAOpK,EAAYoK,MAC3C,QAAS,OAAOpK,EAAYiK,YAwCrBI,EAAiD,QAAzBxI,EAAK36B,KAAK43B,iBAA8B,IAAP+C,OAAgB,EAASA,EAAGxS,aAAa,iBAAmBnoB,KAAK8hC,YAAYgB,SAE7I7C,mBACA,OAAOjgC,KAAKuiC,aAAatC,aAEzB+C,qBACA,MAAO,IAAIhjC,KAAKiiC,UAAU7iC,QAAO,CAAC2/B,GAAUjvB,EAAMxT,KACvCyiC,EAAQniC,OAAuB,iBAATN,EAAoB,CAAC,CAACwT,EAAMxT,IAAU,KACpE,IAEH8mC,0BACA,OAAOpjC,KAAK8hC,YAAY3Z,aAAa,sBAErCkb,wBACA,OAAoC,OAA7BrjC,KAAKojC,oBAEhBnE,cACI,MAAM,YAAE+C,EAAW,WAAEsB,GAAezK,EACpC,IAAI74B,KAAKqjC,mBACUxB,EAAe0B,cAAcvjC,KAAKojC,oBAAqBpjC,KAAK8hC,aAK/E,OAAI9hC,KAAK+kB,OAASid,GACdhiC,KAAK+kB,MAAQue,EACNtjC,KAAKuiC,aAAapc,gBAF7B,EAKJ/D,OACI,MAAM,SAAEohB,EAAQ,QAAEC,GAAY5K,EAC9B,GAAI74B,KAAK+kB,OAASye,GAAYxjC,KAAK+kB,OAAS0e,EAGxC,OAFAzjC,KAAK+kB,MAAQye,EACbxjC,KAAKuiC,aAAa3P,UACX,EAGfuM,yBAAyBn6B,EAASL,GAC9B,IAAKA,EAAQs7B,aAAc,CACvB,MAAM/f,EA2DlB,SAAwBwjB,GACpB,GAAkB,MAAdA,EAAoB,CACpB,MACMC,GADUr5B,SAASq5B,OAASr5B,SAASq5B,OAAO7kC,MAAM,MAAQ,IACzC8kC,MAAMD,GAAWA,EAAO9H,WAAW6H,KAC1D,GAAIC,EAAQ,CACR,MAAMrnC,EAAQqnC,EAAO7kC,MAAM,KAAKzB,MAAM,GAAGO,KAAK,KAC9C,OAAOtB,EAAQunC,mBAAmBvnC,QAASiD,IAjE7BukC,CAAeC,EAAe,gBAAkBA,EAAe,cACzE7jB,IACAlb,EAAQ,gBAAkBkb,GAE9Blb,EAAgB,OAAI,CAACi8B,EAAcrE,YAAa53B,EAAgB,QAAGpH,KAAK,OAGhFyhC,eAAe16B,GACX,IAAIg2B,EACJ36B,KAAK+kB,MAAQ8T,EAAoBmL,QACP,QAAzBrJ,EAAK36B,KAAK43B,iBAA8B,IAAP+C,GAAyBA,EAAG7tB,aAAa,WAAY,IACvFiwB,EAAS,qBAAsB,CAAEhsB,OAAQ/Q,KAAK8hC,YAAa7E,OAAQ,CAAEgH,eAAgBjkC,QACrFA,KAAKs5B,SAAS4K,sBAAsBlkC,MAExC4/B,iCAAiCj7B,EAASuO,GACtClT,KAAKjD,OAAS,CAAEonC,QAASjxB,EAASmpB,UAAWqD,cAAexsB,GAEhE2sB,6BAA6Bl7B,EAASuO,GAClC,GAAIA,EAASspB,aAAetpB,EAASupB,YACjCz8B,KAAKs5B,SAAS8K,iCAAiCpkC,KAAMkT,QAEpD,GAAIlT,KAAKqkC,oBAAoB1/B,IAoD1C,SAA0CuO,GACtC,OAA8B,KAAvBA,EAASE,aAAsBF,EAASwpB,WArDG4H,CAAiCpxB,GAAW,CACtF,MAAM/E,EAAQ,IAAIhQ,MAAM,oDACxB6B,KAAKs5B,SAASiL,sBAAsBvkC,KAAMmO,QAG1CnO,KAAK+kB,MAAQ8T,EAAoB2L,UACjCxkC,KAAKjD,OAAS,CAAEonC,SAAS,EAAMzE,cAAexsB,GAC9ClT,KAAKs5B,SAASmL,oCAAoCzkC,KAAMkT,GAGhE4sB,0BAA0Bn7B,EAASuO,GAC/BlT,KAAKjD,OAAS,CAAEonC,SAAS,EAAOzE,cAAexsB,GAC/ClT,KAAKs5B,SAAS8K,iCAAiCpkC,KAAMkT,GAEzDssB,eAAe76B,EAASwJ,GACpBnO,KAAKjD,OAAS,CAAEonC,SAAS,EAAOh2B,SAChCnO,KAAKs5B,SAASiL,sBAAsBvkC,KAAMmO,GAE9CsxB,gBAAgB96B,GACZ,IAAIg2B,EACJ36B,KAAK+kB,MAAQ8T,EAAoB4K,QACP,QAAzB9I,EAAK36B,KAAK43B,iBAA8B,IAAP+C,GAAyBA,EAAGX,gBAAgB,YAC9E+C,EAAS,mBAAoB,CAAEhsB,OAAQ/Q,KAAK8hC,YAAa7E,OAAQ1+B,OAAOmmC,OAAO,CAAET,eAAgBjkC,MAAQA,KAAKjD,UAC9GiD,KAAKs5B,SAASqL,uBAAuB3kC,MAEzCqkC,oBAAoB1/B,GAChB,OAAQA,EAAQs7B,cAAgBjgC,KAAK+hC,cAsB7C,SAASgC,EAAej0B,GACpB,MAAMjC,EAAUvD,SAAS4d,cAAc,cAAcpY,OACrD,OAAOjC,GAAWA,EAAQ+zB,QAgB9B,MAAMgD,EACF9sB,YAAYjK,GACR7N,KAAK6N,QAAUA,EAEfspB,eACA,MAAO,IAAIn3B,KAAK6N,QAAQspB,UAE5B0N,UAAU3I,GACN,OAA2C,MAApCl8B,KAAK8kC,oBAAoB5I,GAEpC4I,oBAAoB5I,GAChB,OAAOA,EAASl8B,KAAK6N,QAAQqa,cAAc,QAAQgU,gBAAqBA,OAAc,KAEtFkB,kBACA,OAAOp9B,KAAK6N,QAAQuvB,YAEpB2H,gCACA,OAAO/kC,KAAK6N,QAAQqa,cAAc,eAElC8c,wBACA,MAAO,IAAIhlC,KAAK6N,QAAQ9C,iBAAiB,+BAE7Ck6B,wBAAwBjhC,GACpB,OAAOhE,KAAK6N,QAAQqa,cAAc,IAAIlkB,2BAE1CkhC,kCAAkCC,GAC9B,MAAMC,EAAsB,GAC5B,IAAK,MAAMC,KAA2BrlC,KAAKglC,kBAAmB,CAC1D,MAAM,GAAEhhC,GAAOqhC,EACTC,EAAsBH,EAASF,wBAAwBjhC,GACzDshC,IACAF,EAAoBphC,GAAM,CAACqhC,EAAyBC,IAG5D,OAAOF,GAIf,MAAMG,EACFztB,YAAYwhB,EAAUzrB,GAClB7N,KAAKwlC,cAAkBtgC,IACnB,MAAM2yB,EAAO3yB,EAAM6L,OACnB,IAAK7L,EAAMy6B,kBAAoB9H,aAAgBK,iBAAmBL,EAAKY,QAAQ,sBAAwBz4B,KAAK6N,QAAS,CACjH,MAAM+pB,EAAY1yB,EAAM0yB,gBAAar4B,EAEvB,YADEq4B,aAA6C,EAASA,EAAUzP,aAAa,gBAAkB0P,EAAK/yB,SAC1F9E,KAAKs5B,SAASmM,8BAA8B5N,EAAMD,KACxE1yB,EAAMwO,iBACNxO,EAAMwgC,2BACN1lC,KAAKs5B,SAASqM,0BAA0B9N,EAAMD,MAI1D53B,KAAKs5B,SAAWA,EAChBt5B,KAAK6N,QAAUA,EAEnB3J,QACIlE,KAAK6N,QAAQrB,iBAAiB,SAAUxM,KAAKwlC,eAEjDpjB,OACIpiB,KAAK6N,QAAQyU,oBAAoB,SAAUtiB,KAAKwlC,gBAIxD,MAAMI,EACF9tB,YAAYwhB,EAAUzrB,GAClB7N,KAAK6lC,qBAAwBvpC,MAC7B0D,KAAK8lC,2BAA8BxpC,MACnC0D,KAAKs5B,SAAWA,EAChBt5B,KAAK6N,QAAUA,EAEnBk4B,eAAe7J,GACX,MAAMruB,EAAU7N,KAAKmlC,SAASL,oBAAoB5I,GAC9CruB,GACA7N,KAAKgmC,gBAAgBn4B,GACrB7N,KAAKimC,aAAap4B,IAGlB7N,KAAKkmC,iBAAiB,CAAE5V,EAAG,EAAG6V,EAAG,IAGzCC,2BAA2B7K,GACvBv7B,KAAK+lC,eAAe7K,EAAUK,IAElCyK,gBAAgBn4B,GACZA,EAAQw4B,iBAEZJ,aAAap4B,GACLA,aAAmBhD,cACfgD,EAAQwsB,aAAa,YACrBxsB,EAAQyC,SAGRzC,EAAQf,aAAa,WAAY,MACjCe,EAAQyC,QACRzC,EAAQmsB,gBAAgB,cAIpCkM,kBAAiB,EAAE5V,EAAC,EAAE6V,IAClBnmC,KAAKsmC,WAAWC,SAASjW,EAAG6V,GAEhCK,cACIxmC,KAAKkmC,iBAAiB,CAAE5V,EAAG,EAAG6V,EAAG,IAEjCG,iBACA,OAAO1+B,OAEXq3B,aAAawH,GACT,MAAM,UAAE/L,EAAS,aAAEgM,EAAcC,YAAaxB,GAAasB,EAC3D,GAAIC,EACA,IACI1mC,KAAK4mC,cAAgB,IAAI3+B,SAAQC,GAAWlI,KAAK6lC,qBAAuB39B,IACxElI,KAAKymC,SAAWA,EAChBzmC,KAAK6mC,wBAAwBJ,GAC7B,MAAMK,EAAqB,IAAI7+B,SAAQC,GAAWlI,KAAK8lC,2BAA6B59B,IAC5DlI,KAAKs5B,SAASyN,sBAAsB5B,EAAUnlC,KAAK8lC,mCAEjEgB,QACJ9mC,KAAKgnC,eAAeP,GAC1BzmC,KAAKs5B,SAAS2N,qBAAqB9B,EAAUzK,GAC7C16B,KAAKknC,wBAAwBT,GAEjC,eACWzmC,KAAKymC,SACZzmC,KAAK6lC,0BAAqBtmC,UACnBS,KAAK4mC,mBAIhB5mC,KAAKmnC,aAGbA,aACInnC,KAAKs5B,SAAS8N,kBAElBP,wBAAwBJ,GACpBzmC,KAAKqnC,cAAcZ,EAAS/L,WAC5B+L,EAASa,kBAEbD,cAAc3M,GACNA,EACA16B,KAAK6N,QAAQf,aAAa,qBAAsB,IAGhD9M,KAAK6N,QAAQmsB,gBAAgB,sBAGrCiF,qBAAqBwH,SACXA,EAASz8B,SAEnBk9B,wBAAwBT,GACpBA,EAASc,mBAIjB,MAAMC,UAAkB5B,EACpBuB,aACInnC,KAAK6N,QAAQF,UAAY,GAEzBw3B,eACA,OAAO,IAAIP,EAAS5kC,KAAK6N,UAIjC,MAAM45B,EACF3vB,YAAYwhB,EAAUzrB,GAClB7N,KAAK0nC,aAAgBxiC,IACblF,KAAK2nC,sBAAsBziC,EAAM6L,QACjC/Q,KAAK4nC,WAAa1iC,SAGXlF,KAAK4nC,YAGpB5nC,KAAK6nC,YAAgB3iC,IACblF,KAAK4nC,YAAc5nC,KAAK2nC,sBAAsBziC,EAAM6L,SAAW7L,EAAM6L,kBAAkBunB,SACnFt4B,KAAKs5B,SAASwO,yBAAyB5iC,EAAM6L,OAAQ7L,EAAM+3B,OAAOpjB,OAClE7Z,KAAK4nC,WAAWl0B,iBAChBxO,EAAMwO,iBACN1T,KAAKs5B,SAASyO,qBAAqB7iC,EAAM6L,OAAQ7L,EAAM+3B,OAAOpjB,aAG/D7Z,KAAK4nC,YAEhB5nC,KAAKgoC,UAAY,YACNhoC,KAAK4nC,YAEhB5nC,KAAKs5B,SAAWA,EAChBt5B,KAAK6N,QAAUA,EAEnB3J,QACIlE,KAAK6N,QAAQrB,iBAAiB,QAASxM,KAAK0nC,cAC5Cp9B,SAASkC,iBAAiB,cAAexM,KAAK6nC,aAC9Cv9B,SAASkC,iBAAiB,qBAAsBxM,KAAKgoC,WAEzD5lB,OACIpiB,KAAK6N,QAAQyU,oBAAoB,QAAStiB,KAAK0nC,cAC/Cp9B,SAASgY,oBAAoB,cAAetiB,KAAK6nC,aACjDv9B,SAASgY,oBAAoB,qBAAsBtiB,KAAKgoC,WAE5DL,sBAAsB52B,GAClB,MAAMlD,EAAUkD,aAAkBunB,QAC5BvnB,EACAA,aAAkBwnB,KACdxnB,EAAOynB,cACP,KACV,OAAO3qB,GAAWA,EAAQ4qB,QAAQ,sBAAwBz4B,KAAK6N,SAqDvE,MAAMo6B,EACFnwB,YAAYowB,EAAiBvB,EAAajM,EAAWyN,GAAa,GAC9DnoC,KAAKkoC,gBAAkBA,EACvBloC,KAAK2mC,YAAcA,EACnB3mC,KAAK06B,UAAYA,EACjB16B,KAAKmoC,WAAaA,EAClBnoC,KAAKooC,QAAU,IAAIngC,SAAQ,CAACC,EAASC,IAAWnI,KAAKqoC,mBAAqB,CAAEngC,UAASC,YAErFu+B,mBACA,OAAO,EAEXY,mBAGAC,kBACQvnC,KAAKqoC,qBACLroC,KAAKqoC,mBAAmBngC,iBACjBlI,KAAKqoC,oBAGpBC,oBAAoBz6B,GAChB,GAA+C,SAA3CA,EAAQsa,aAAa,mBACrB,OAAOta,EAEN,CACD,MAAM06B,EAAuBj+B,SAAS4B,cAAc,UAOpD,OANIlM,KAAKwoC,WACLD,EAAqBE,MAAQzoC,KAAKwoC,UAEtCD,EAAqBG,YAAc76B,EAAQ66B,YAC3CH,EAAqBtJ,OAAQ,EA+BzC,SAA+B0J,EAAoBC,GAC/C,IAAK,MAAM,KAAE94B,EAAI,MAAExT,IAAW,IAAIssC,EAAcC,YAC5CF,EAAmB77B,aAAagD,EAAMxT,GAhClCwsC,CAAsBP,EAAsB16B,GACrC06B,GAGfQ,4BAA4BtkC,IApFhC,MACIqT,YAAYstB,GACRplC,KAAKolC,oBAAsBA,EAE/BjE,mCAAmCiE,EAAqB3gC,GACpD,MAAMukC,EAAQ,IAAIhpC,KAAKolC,GACvB4D,EAAMC,QACNxkC,IACAukC,EAAME,QAEVD,QACI,IAAK,MAAMjlC,KAAMhE,KAAKolC,oBAAqB,CACvC,MAAO,CAAEE,GAAuBtlC,KAAKolC,oBAAoBphC,GACzDhE,KAAKmpC,0CAA0C7D,IAGvD4D,QACI,IAAK,MAAMllC,KAAMhE,KAAKolC,oBAAqB,CACvC,MAAOC,GAA2BrlC,KAAKolC,oBAAoBphC,GAC3DhE,KAAKopC,wCAAwC/D,GAC7CrlC,KAAKqpC,uCAAuChE,IAGpD8D,0CAA0CG,GACtC,MAAMn1B,EAkBd,SAA8Cm1B,GAC1C,MAAMz7B,EAAUvD,SAAS4B,cAAc,QAGvC,OAFA2B,EAAQf,aAAa,OAAQ,+BAC7Be,EAAQf,aAAa,UAAWw8B,EAAiBtlC,IAC1C6J,EAtBiB07B,CAAqCD,GACzDA,EAAiBE,YAAYr1B,GAEjCi1B,wCAAwCE,GACpC,MAAMntB,EAAQmtB,EAAiBG,WAAU,GACzCH,EAAiBE,YAAYrtB,GAEjCktB,uCAAuCC,GACnC,MAAMn1B,EAAcnU,KAAK0pC,mBAAmBJ,EAAiBtlC,IAC7DmQ,SAA0DA,EAAYq1B,YAAYF,GAEtFI,mBAAmB1lC,GACf,OAAOhE,KAAK2pC,aAAa/F,MAAK/1B,GAAWA,EAAQ+zB,SAAW59B,IAE5D2lC,mBACA,MAAO,IAAIr/B,SAASS,iBAAiB,uDA8C/Bg+B,4BAA4B/oC,KAAKolC,oBAAqB3gC,GAEhEmlC,iCACI,MAAM/7B,EAAU7N,KAAK6pC,kBAAkB9E,2BA2B/C,SAA4Bl3B,GACxB,OAAOA,GAAmC,mBAAjBA,EAAQyC,OA3BzBw5B,CAAmBj8B,IACnBA,EAAQyC,QAGZu5B,wBACA,OAAO7pC,KAAK2mC,YAAYvJ,YAAcp9B,KAAK2mC,YAAc3mC,KAAKkoC,gBAE9D6B,qBACA,OAAO/pC,KAAKkoC,gBAAgBr6B,QAE5Bm8B,iBACA,OAAOhqC,KAAK2mC,YAAY94B,QAExBu3B,0BACA,OAAOplC,KAAKkoC,gBAAgBhD,kCAAkCllC,KAAK2mC,aAEnE6B,eACA,IAAI7N,EACJ,OAAwE,QAAhEA,EAAKrwB,SAAS2d,KAAKC,cAAc,iCAA8C,IAAPyS,OAAgB,EAASA,EAAGxS,aAAa,YAYjI,MAAM8hB,UAAsBhC,EACpBvB,mBACA,OAAO,EAEXzH,qBACU5B,IACNr9B,KAAK+oC,6BAA4B,KAC7B/oC,KAAKkqC,sBAETlqC,KAAKmqC,4BACC9M,IACNr9B,KAAK4pC,uCACCvM,IACNr9B,KAAKoqC,yBAETF,mBACI,IAAIvP,EACJ,MAAM0P,EAAmB//B,SAASggC,cAClCD,EAAiBE,mBAAmBvqC,KAAK+pC,gBACzCM,EAAiBG,iBACjB,MAAMC,EAAezqC,KAAKgqC,WACpBU,EAAoD,QAArC/P,EAAK8P,EAAahQ,qBAAkC,IAAPE,OAAgB,EAASA,EAAG2P,cAC1FI,IACAA,EAAYH,mBAAmBE,GAC/BzqC,KAAK+pC,eAAer/B,YAAYggC,EAAYC,oBAGpDR,sBACI,GAAInqC,KAAK+pC,eAAezP,YAAct6B,KAAKgqC,WAAW1P,WAAY,CAC9D,MAAMzsB,EAAU7N,KAAK+pC,eAAea,kBAC9BC,GAA6F,MAmB9F,QADkBvuC,EAlBiB0D,KAAK+pC,eAAe5hB,aAAa,2BAmBlD,SAAT7rB,GAA6B,UAATA,GAA8B,WAATA,EACpDA,EApBgG,OACnG,GAAIuR,EAEA,OADAA,EAAQw4B,eAAe,CAAEwE,WAClB,EAevB,IAAmCvuC,EAZ3B,OAAO,EAEX8tC,yBACI,IAAK,MAAMU,KAAsB9qC,KAAK+qC,kBAAmB,CACrD,MAAMC,EAAyBhrC,KAAKsoC,oBAAoBwC,GACxDA,EAAmBtB,YAAYwB,IAGnCD,wBACA,OAAO/qC,KAAK+pC,eAAeh/B,iBAAiB,WAYpD,MAAMkgC,EACFnzB,cACI9X,KAAKkrC,QAAS,EACdlrC,KAAK1D,MAAQ,EACb0D,KAAKmrC,SAAU,EACfnrC,KAAKorC,QAAU,KACXprC,KAAKqrC,SAASrrC,KAAK1D,MAAQ2mB,KAAKE,SAAW,MAE/CnjB,KAAKsrC,kBAAoBtrC,KAAKurC,0BAC9BvrC,KAAKwrC,gBAAkBxrC,KAAKyrC,wBAC5BzrC,KAAK0rC,2BACL1rC,KAAKqrC,SAAS,GAEPM,wBACP,OAAOhO,CAAS;;;;;;;;;;kBAUNsN,EAAYW;oBACVX,EAAYW,kBAAoB,OAAOX,EAAYW,kBAAoB;;;MAKvF/X,OACS7zB,KAAKmrC,UACNnrC,KAAKmrC,SAAU,EACfnrC,KAAK6rC,yBACL7rC,KAAK8rC,kBAGbhY,OACQ9zB,KAAKmrC,UAAYnrC,KAAKkrC,SACtBlrC,KAAKkrC,QAAS,EACdlrC,KAAK+rC,qBAAoB,KACrB/rC,KAAKgsC,2BACLhsC,KAAKisC,gBACLjsC,KAAKmrC,SAAU,EACfnrC,KAAKkrC,QAAS,MAI1BG,SAAS/uC,GACL0D,KAAK1D,MAAQA,EACb0D,KAAKksC,UAETR,2BACIphC,SAAS2d,KAAK0L,aAAa3zB,KAAKsrC,kBAAmBhhC,SAAS2d,KAAKkkB,YAErEN,yBACI7rC,KAAKwrC,gBAAgBr6B,MAAMi7B,MAAQ,IACnCpsC,KAAKwrC,gBAAgBr6B,MAAMk7B,QAAU,IACrC/hC,SAASuwB,gBAAgBlH,aAAa3zB,KAAKwrC,gBAAiBlhC,SAASrF,MACrEjF,KAAKksC,UAETH,oBAAoBtnC,GAChBzE,KAAKwrC,gBAAgBr6B,MAAMk7B,QAAU,IACrCnpC,WAAWuB,EAA0C,IAAhCwmC,EAAYW,mBAErCI,2BACQhsC,KAAKwrC,gBAAgBt7B,YACrB5F,SAASuwB,gBAAgB1qB,YAAYnQ,KAAKwrC,iBAGlDM,iBACS9rC,KAAKssC,kBACNtsC,KAAKssC,gBAAkB1kC,OAAO2kC,YAAYvsC,KAAKorC,QAASH,EAAYW,oBAG5EK,gBACIrkC,OAAO4kC,cAAcxsC,KAAKssC,wBACnBtsC,KAAKssC,gBAEhBJ,UACI5O,uBAAsB,KAClBt9B,KAAKwrC,gBAAgBr6B,MAAMi7B,MAAW,GAAmB,GAAbpsC,KAAK1D,MAAd,OAG3CivC,0BACI,MAAM19B,EAAUvD,SAAS4B,cAAc,SAGvC,OAFA2B,EAAQvB,KAAO,WACfuB,EAAQ66B,YAAcuC,EAAYU,WAC3B99B,EAEX49B,wBACI,MAAM59B,EAAUvD,SAAS4B,cAAc,OAEvC,OADA2B,EAAQ1B,UAAY,qBACb0B,GAGfo9B,EAAYW,kBAAoB,IAEhC,MAAMa,UAAqB7H,EACvB9sB,cACIuhB,SAAS35B,WACTM,KAAK0sC,mBAAqB1sC,KAAKm3B,SAC1B/2B,QAAQyN,IA0ErB,SAA2BA,GAEvB,MAAkB,YADFA,EAAQ8zB,QAAQhnB,cA3EFgyB,CAAkB9+B,KACvCpP,KAAKoP,GAqFlB,SAA6BA,GAIzB,OAHIA,EAAQwsB,aAAa,UACrBxsB,EAAQf,aAAa,QAAS,IAE3Be,EAzFmB++B,CAAoB/+B,KACrCzO,QAAO,CAACrC,EAAQ8Q,KACjB,MAAM,UAAEg/B,GAAch/B,EAChBi/B,EAAUD,KAAa9vC,EACvBA,EAAO8vC,GACP,CACEvgC,KAAMygC,EAAYl/B,GAClBm/B,QAASC,EAAiBp/B,GAC1BwwB,SAAU,IAElB,OAAO9/B,OAAOmmC,OAAOnmC,OAAOmmC,OAAO,GAAI3nC,GAAS,CAAE,CAAC8vC,GAAYtuC,OAAOmmC,OAAOnmC,OAAOmmC,OAAO,GAAIoI,GAAU,CAAEzO,SAAU,IAAIyO,EAAQzO,SAAUxwB,SAC5I,IAEHq/B,8BACA,OAAO3uC,OAAOC,KAAKwB,KAAK0sC,oBACnBtsC,QAAOysC,GAAa7sC,KAAK0sC,mBAAmBG,GAAWG,UACvDpvC,KAAK,IAEduvC,+BAA+BhI,GAC3B,OAAOnlC,KAAKotC,qCAAqC,SAAUjI,GAE/DkI,mCAAmClI,GAC/B,OAAOnlC,KAAKotC,qCAAqC,aAAcjI,GAEnEiI,qCAAqCE,EAAanI,GAC9C,OAAO5mC,OAAOC,KAAKwB,KAAK0sC,oBACnBtsC,QAAOysC,KAAeA,KAAa1H,EAASuH,sBAC5CjuC,KAAIouC,GAAa7sC,KAAK0sC,mBAAmBG,KACzCzsC,QAAO,EAAGkM,UAAWA,GAAQghC,IAC7B7uC,KAAI,EAAG4/B,UAAWxwB,MAAeA,IAEtC0/B,0BACA,OAAOhvC,OAAOC,KAAKwB,KAAK0sC,oBAAoBttC,QAAO,CAACrC,EAAQ8vC,KACxD,MAAM,KAAEvgC,EAAI,QAAE0gC,EAAO,SAAE3O,GAAar+B,KAAK0sC,mBAAmBG,GAC5D,OAAY,MAARvgC,GAAiB0gC,EAGZ3O,EAAS3hC,OAAS,EAChB,IAAIK,KAAWshC,EAAShhC,MAAM,IAG9BN,EANA,IAAIA,KAAWshC,KAQ3B,IAEPmP,aAAa19B,GACT,MAAMjC,EAAU7N,KAAKytC,sBAAsB39B,GAC3C,OAAOjC,EACDA,EAAQsa,aAAa,WACrB,KAEVslB,sBAAsB39B,GAClB,OAAOvR,OAAOC,KAAKwB,KAAK0sC,oBAAoBttC,QAAO,CAACrC,EAAQ8vC,KACxD,MAAQxO,UAAWxwB,IAAa7N,KAAK0sC,mBAAmBG,GACxD,OA2BZ,SAAsCh/B,EAASiC,GAE3C,MAAkB,QADFjC,EAAQ8zB,QAAQhnB,eACJ9M,EAAQsa,aAAa,SAAWrY,EA7B7C49B,CAA6B7/B,EAASiC,GAAQjC,EAAU9Q,SAChEwC,IAGX,SAASwtC,EAAYl/B,GACjB,OAUJ,SAAyBA,GAErB,MAAkB,UADFA,EAAQ8zB,QAAQhnB,cAX5BgzB,CAAgB9/B,GACT,SAiBf,SAA6BA,GACzB,MAAM8zB,EAAU9zB,EAAQ8zB,QAAQhnB,cAChC,MAAkB,SAAXgnB,GAAkC,QAAXA,GAAoD,cAA/B9zB,EAAQsa,aAAa,OAjB/DylB,CAAoB//B,GAClB,kBADN,EAIT,SAASo/B,EAAiBp/B,GACtB,MAAmD,UAA5CA,EAAQsa,aAAa,oBAyBhC,MAAM0lB,UAAqBjJ,EACvB9sB,YAAYjK,EAASigC,GACjBzU,MAAMxrB,GACN7N,KAAK8tC,aAAeA,EAExB3M,sBAAsB3D,EAAO,IACzB,OAAOx9B,KAAK+tC,aAAaxQ,EAAkBC,IAE/C2D,mBAAmBtzB,GACf,OAAO7N,KAAK+tC,aAAalgC,EAAQ4sB,eAErC0G,qBAAoB,KAAElZ,EAAI,KAAEhjB,IACxB,OAAO,IAAIjF,KAAKiF,EAAM,IAAIwnC,EAAaxkB,IAE3C9L,QACI,OAAO,IAAI0xB,EAAa7tC,KAAK6N,QAAQ47B,WAAU,GAAOzpC,KAAK8tC,cAE3DE,kBACA,OAAOhuC,KAAK8tC,aAAajgC,QAEzB2tB,mBACA,IAAIb,EAEJ,OAAOG,EADyC,QAAlCH,EAAK36B,KAAKiuC,WAAW,eAA4B,IAAPtT,EAAgBA,EAAK,KAG7EuT,wBACA,OAAOluC,KAAKiuC,WAAW,iBAEvBE,oBACA,MAAiC,cAA1BnuC,KAAKkuC,kBAEZE,kBACA,MAAiC,YAA1BpuC,KAAKkuC,kBAEZG,kBACA,MAA2C,UAApCruC,KAAKiuC,WAAW,iBAE3BA,WAAWn+B,GACP,OAAO9P,KAAK8tC,aAAaN,aAAa,SAAS19B,OAKvD,SAAWipB,GACPA,EAAyB,WAAI,aAC7BA,EAA2B,aAAI,eAC/BA,EAAyB,WAAI,aAC7BA,EAAuB,SAAI,WAJ/B,CAKGA,IAAiBA,EAAe,KAEnC,SAAWC,GACPA,EAAwB,YAAI,cAC5BA,EAAoB,QAAI,UACxBA,EAAqB,SAAI,WACzBA,EAAmB,OAAI,SACvBA,EAAsB,UAAI,YAL9B,CAMGA,IAAeA,EAAa,KAC/B,MAAMsV,EAAiB,CACnBloB,OAAQ,UACRmoB,gBAAgB,EAChBC,oBAAqB,OACrBrG,YAAY,GAEhB,IAAIsG,EA4vBAC,GA3vBJ,SAAWD,GACPA,EAAiBA,EAAiC,eAAI,GAAK,iBAC3DA,EAAiBA,EAAiC,gBAAK,GAAK,iBAC5DA,EAAiBA,EAAsC,qBAAK,GAAK,sBAHrE,CAIGA,IAAqBA,EAAmB,KAC3C,MAAME,EACF72B,YAAYwhB,EAAUiC,EAAUqT,EAAuB1xC,EAAU,IAC7D8C,KAAKmlB,WAAa+Y,IAClBl+B,KAAK6uC,cAAgB,GACrB7uC,KAAK8uC,kBAAmB,EACxB9uC,KAAKuuC,gBAAiB,EACtBvuC,KAAK+uC,UAAW,EAChB/uC,KAAKgvC,gBAAiB,EACtBhvC,KAAK+kB,MAAQiU,EAAWgJ,YACxBhiC,KAAKs5B,SAAWA,EAChBt5B,KAAKu7B,SAAWA,EAChBv7B,KAAK4uC,sBAAwBA,GAAyB1Q,IACtD,MAAM,OAAE9X,EAAM,eAAEmoB,EAAc,SAAEnO,EAAQ,aAAE6O,EAAY,SAAE/7B,EAAQ,oBAAEs7B,EAAmB,WAAErG,GAAe5pC,OAAOmmC,OAAOnmC,OAAOmmC,OAAO,GAAI4J,GAAiBpxC,GACvJ8C,KAAKomB,OAASA,EACdpmB,KAAKuuC,eAAiBA,EACtBvuC,KAAKogC,SAAWA,EAChBpgC,KAAKivC,aAAeA,EACpBjvC,KAAKkT,SAAWA,EAChBlT,KAAKkvC,WAAalvC,KAAKs5B,SAAS6V,6BAA6BnvC,KAAKu7B,SAAUv7B,KAAKomB,QACjFpmB,KAAKwuC,oBAAsBA,EAC3BxuC,KAAKmoC,WAAaA,EAClBnoC,KAAK+uC,UAAY5G,EAEjBiH,cACA,OAAOpvC,KAAKs5B,SAAS8V,QAErBC,WACA,OAAOrvC,KAAKs5B,SAAS+V,KAErBC,cACA,OAAOtvC,KAAKs5B,SAASgW,QAErBC,sBACA,OAAOvvC,KAAKsvC,QAAQE,gCAAgCxvC,KAAK4uC,uBAEzDa,aACA,OAAOzvC,KAAKkvC,WAEhBhrC,QACQlE,KAAK+kB,OAASiU,EAAWgJ,cACzBhiC,KAAK0vC,mBAAmB3W,EAAa4W,YACrC3vC,KAAK+kB,MAAQiU,EAAWwH,QACxBxgC,KAAKovC,QAAQQ,aAAa5vC,MAC1BA,KAAKs5B,SAASsW,aAAa5vC,OAGnC4yB,SACQ5yB,KAAK+kB,OAASiU,EAAWwH,UACrBxgC,KAAK2E,SACL3E,KAAK2E,QAAQiuB,SAEjB5yB,KAAK6vC,eACL7vC,KAAK+kB,MAAQiU,EAAW8W,UAGhCvV,WACQv6B,KAAK+kB,OAASiU,EAAWwH,UACzBxgC,KAAK0vC,mBAAmB3W,EAAagX,UACrC/vC,KAAK+kB,MAAQiU,EAAWgX,UACxBhwC,KAAKovC,QAAQa,eAAejwC,MAC5BA,KAAKs5B,SAAS2W,eAAejwC,MAC7BA,KAAKkwC,kBAGbC,OACQnwC,KAAK+kB,OAASiU,EAAWwH,UACzBxgC,KAAK+kB,MAAQiU,EAAWuD,OACxBv8B,KAAKovC,QAAQgB,YAAYpwC,OAGjCqwC,gBACI,IAAI1V,EACJ,IAAK36B,KAAKuuC,eAAgB,CACtB,MAAM+B,EAAmBtwC,KAAKu7B,SAASzT,QAAmC,QAAxB6S,EAAK36B,KAAKogC,gBAA6B,IAAPzF,OAAgB,EAASA,EAAG7S,MAAQ,UAAY9nB,KAAKomB,OACjIthB,EAAS9E,KAAKuwC,0BAA0BD,GAC9CtwC,KAAKsvC,QAAQh8B,OAAOxO,EAAQ9E,KAAKu7B,SAAUv7B,KAAK4uC,uBAChD5uC,KAAKuuC,gBAAiB,GAG9BiC,eACQxwC,KAAKywC,uBACLzwC,KAAK0wC,kBAEA1wC,KAAK2wC,uBAAyB3wC,KAAK2E,UACxC3E,KAAK2E,QAAU,IAAI85B,EAAaz+B,KAAM44B,EAAY5K,IAAKhuB,KAAKu7B,UAC5Dv7B,KAAK2E,QAAQwhB,WAGrBuqB,kBACQ1wC,KAAKkT,WACLlT,KAAK4wC,eACL5wC,KAAK6wC,iBACL7wC,KAAK8wC,iBAGbF,eACI5wC,KAAK0vC,mBAAmB3W,EAAagY,cACrC/wC,KAAKovC,QAAQ4B,oBAAoBhxC,MAErC6wC,eAAe39B,EAAWlT,KAAKkT,UAE3B,GADAlT,KAAKkT,SAAWA,EACZA,EAAU,CACV,MAAM,WAAEE,GAAeF,EACnB+9B,EAAa79B,GACbpT,KAAKovC,QAAQ8B,sBAAsBlxC,MAGnCA,KAAKovC,QAAQ+B,iCAAiCnxC,KAAMoT,IAIhE09B,gBACI9wC,KAAK0vC,mBAAmB3W,EAAaqY,YACrCpxC,KAAKovC,QAAQiC,qBAAqBrxC,MAEtCsxC,eACI,GAAItxC,KAAKkT,SAAU,CACf,MAAM,WAAEE,EAAU,aAAE0pB,GAAiB98B,KAAKkT,SAC1ClT,KAAKgK,QAAOi1B,UACRj/B,KAAKuxC,gBACDvxC,KAAKqvC,KAAKzI,qBACJ5mC,KAAKqvC,KAAKzI,cAChBqK,EAAa79B,IAA+B,MAAhB0pB,SACtB98B,KAAKqvC,KAAKmC,WAAW3D,EAAa4D,eAAe3U,IAAe,EAAO98B,KAAKmoC,YAClFnoC,KAAKovC,QAAQsC,cAAc1xC,MAC3BA,KAAKu6B,mBAGCv6B,KAAKqvC,KAAKp7B,YAAY45B,EAAa4D,eAAe3U,IACxD98B,KAAKovC,QAAQsC,cAAc1xC,MAC3BA,KAAKmwC,YAKrBwB,oBACI,MAAMxM,EAAWnlC,KAAKqvC,KAAKuC,6BAA6B5xC,KAAKu7B,WAAav7B,KAAK6xC,uBAC/E,GAAI1M,KAAcjK,EAAUl7B,KAAKu7B,WAAa4J,EAASN,UAAU3J,EAAUl7B,KAAKu7B,cACzD,WAAfv7B,KAAKomB,QAAuB+e,EAASgJ,eACrC,OAAOhJ,EAInB0M,uBACI,GAAI7xC,KAAKivC,aACL,OAAOpB,EAAa4D,eAAezxC,KAAKivC,cAGhD6C,oBACI,OAAmC,MAA5B9xC,KAAK2xC,oBAEhBI,qBACI,MAAM5M,EAAWnlC,KAAK2xC,oBACtB,GAAIxM,EAAU,CACV,MAAMzK,EAAY16B,KAAK2wC,qBACvB3wC,KAAKgK,QAAOi1B,UACRj/B,KAAKuxC,gBACDvxC,KAAKkvC,WACLlvC,KAAKovC,QAAQsC,cAAc1xC,OAGvBA,KAAKqvC,KAAKzI,qBACJ5mC,KAAKqvC,KAAKzI,oBACd5mC,KAAKqvC,KAAKmC,WAAWrM,EAAUzK,EAAW16B,KAAKmoC,YACrDnoC,KAAKovC,QAAQsC,cAAc1xC,MACtB06B,GACD16B,KAAKu6B,gBAMzB2V,iBACI,IAAIvV,EACA36B,KAAKgyC,uBAAyBhyC,KAAK8uC,mBAA8C,QAAxBnU,EAAK36B,KAAKkT,gBAA6B,IAAPynB,OAAgB,EAASA,EAAG+B,cACrH18B,KAAKovC,QAAQ6C,wBAAwBjyC,KAAKgyC,qBAAsB,CAC5D5rB,OAAQ,UACRlT,SAAUlT,KAAKkT,WAEnBlT,KAAK8uC,kBAAmB,GAGhCoD,qBACQlyC,KAAKkvC,YACLlvC,KAAKgK,QAAOi1B,UACRj/B,KAAKuxC,gBACLvxC,KAAKovC,QAAQsC,cAAc1xC,SAIvCq/B,iBACIr/B,KAAK4wC,eAEThR,iCAAiCj7B,EAASuO,IAE1C+rB,mCAAmCt6B,EAASuO,GACxC,MAAM4pB,QAAqB5pB,EAAS4pB,cAC9B,WAAEJ,EAAU,WAAEtpB,GAAeF,EACf3T,MAAhBu9B,EACA98B,KAAK6wC,eAAe,CAAEz9B,WAAYq7B,EAAiB0D,oBAAqBzV,gBAGxE18B,KAAKgyC,qBAAuB9+B,EAASwpB,WAAaxpB,EAASqoB,cAAWh8B,EACtES,KAAK6wC,eAAe,CAAEz9B,WAAYA,EAAY0pB,eAAcJ,gBAGpEuC,gCAAgCt6B,EAASuO,GACrC,MAAM4pB,QAAqB5pB,EAAS4pB,cAC9B,WAAEJ,EAAU,WAAEtpB,GAAeF,EACf3T,MAAhBu9B,EACA98B,KAAK6wC,eAAe,CAAEz9B,WAAYq7B,EAAiB0D,oBAAqBzV,eAGxE18B,KAAK6wC,eAAe,CAAEz9B,WAAYA,EAAY0pB,eAAcJ,eAGpE8C,eAAe76B,EAASwJ,GACpBnO,KAAK6wC,eAAe,CAAEz9B,WAAYq7B,EAAiB2D,eAAgB1V,YAAY,IAEnF+C,kBACIz/B,KAAK8wC,gBAETuB,gBACSryC,KAAK+uC,WACa,WAAf/uC,KAAKomB,OACLpmB,KAAKsyC,4BAA8BtyC,KAAK+lC,kBAAoB/lC,KAAKqvC,KAAK7I,cAGtExmC,KAAK+lC,kBAAoB/lC,KAAKqvC,KAAK7I,cAEnCxmC,KAAKkvC,YACLlvC,KAAKs5B,SAASiZ,gCAAgCvyC,KAAKqvC,KAAKmD,qBAAsBxyC,KAAKu7B,UAEvFv7B,KAAK+uC,UAAW,GAGxBuD,2BACI,MAAM,eAAEG,GAAmBzyC,KAAKuvC,gBAChC,GAAIkD,EAEA,OADAzyC,KAAKqvC,KAAKnJ,iBAAiBuM,IACpB,EAGf1M,iBACI,MAAM7J,EAAShB,EAAUl7B,KAAKu7B,UAC9B,GAAc,MAAVW,EAEA,OADAl8B,KAAKqvC,KAAKtJ,eAAe7J,IAClB,EAGfwT,mBAAmBgD,GACf1yC,KAAK6uC,cAAc6D,IAAU,IAAIhtC,MAAOma,UAE5C8yB,mBACI,OAAOp0C,OAAOmmC,OAAO,GAAI1kC,KAAK6uC,eAElC0B,0BAA0BnqB,GACtB,OAAQA,GACJ,IAAK,UAAW,OAAOkpB,QAAQsD,aAC/B,IAAK,UACL,IAAK,UAAW,OAAOtD,QAAQuD,WAGvCpC,uBACI,MAA+B,iBAAjBzwC,KAAKkT,SAEvBy9B,qBACI,OAAI3wC,KAAKkvC,aAGe,WAAflvC,KAAKomB,QACFpmB,KAAK8xC,oBAGN9xC,KAAKmoC,YAGpBoJ,gBACSvxC,KAAKgvC,iBACNhvC,KAAKqvC,KAAKkC,gBAAgBjjC,MAAK62B,GAAYA,GAAYnlC,KAAKwuC,oBAAoBrJ,KAChFnlC,KAAKgvC,gBAAiB,GAG9B/P,aAAax6B,GACTzE,KAAK6vC,qBACC,IAAI5nC,SAAQC,IACdlI,KAAK8yC,MAAQxV,uBAAsB,IAAMp1B,eAEvCzD,WACCzE,KAAK8yC,MACZ9yC,KAAKqyC,gBAETxC,eACQ7vC,KAAK8yC,QACLC,qBAAqB/yC,KAAK8yC,cACnB9yC,KAAK8yC,QAIxB,SAAS7B,EAAa79B,GAClB,OAAOA,GAAc,KAAOA,EAAa,IAG7C,MAAM4/B,EACFl7B,YAAYm7B,GACRjzC,KAAKkzC,YAAc,IAAIjI,EACvBjrC,KAAKmzC,gBAAkB,KACnBnzC,KAAKkzC,YAAYrf,QAErB7zB,KAAKizC,QAAUA,EAEnBhB,wBAAwB1W,EAAUr+B,GAC9B8C,KAAK2C,UAAUywC,WAAW7X,EAAU2C,IAAQhhC,GAEhD0yC,aAAayD,GACTA,EAAMtB,qBACNsB,EAAM7C,eACN6C,EAAMhD,gBACNgD,EAAMnB,qBAEVlB,oBAAoBqC,GAChBrzC,KAAKkzC,YAAY7H,SAAS,GACtBgI,EAAMvB,qBAAuC,WAAhBuB,EAAMjtB,OACnCpmB,KAAKszC,iCAGLtzC,KAAKmzC,kBAGbjC,sBAAsBmC,GAClBA,EAAM/B,eAEVH,iCAAiCkC,EAAOjgC,GACpC,OAAQA,GACJ,KAAKq7B,EAAiB2D,eACtB,KAAK3D,EAAiB8E,eACtB,KAAK9E,EAAiB0D,oBAClB,OAAOnyC,KAAKulB,SAChB,QACI,OAAO8tB,EAAM/B,gBAGzBD,qBAAqBgC,GACjBrzC,KAAKkzC,YAAY7H,SAAS,GAC1BrrC,KAAKwzC,uBAETvD,eAAeoD,IAEfI,kBACIzzC,KAAKulB,SAET6qB,YAAYiD,IAEZ3B,cAAc2B,IAEdnP,sBAAsBD,GAClBjkC,KAAKkzC,YAAY7H,SAAS,GAC1BrrC,KAAK0zC,gCAET/O,uBAAuBV,GACnBjkC,KAAKkzC,YAAY7H,SAAS,GAC1BrrC,KAAK2zC,sBAETL,iCACItzC,KAAK4zC,wBAA0BhsC,OAAO1E,WAAWlD,KAAKmzC,gBAAiBnzC,KAAKizC,QAAQY,kBAExFL,uBACIxzC,KAAKkzC,YAAYpf,OACmB,MAAhC9zB,KAAK4zC,0BACLhsC,OAAON,aAAatH,KAAK4zC,gCAClB5zC,KAAK4zC,yBAGpBF,gCACuC,MAA/B1zC,KAAK8zC,yBACL9zC,KAAK8zC,uBAAyBlsC,OAAO1E,WAAWlD,KAAKmzC,gBAAiBnzC,KAAKizC,QAAQY,mBAG3FF,sBACI3zC,KAAKkzC,YAAYpf,OACkB,MAA/B9zB,KAAK8zC,yBACLlsC,OAAON,aAAatH,KAAK8zC,+BAClB9zC,KAAK8zC,wBAGpBvuB,SACI3d,OAAO2zB,SAAShW,SAEhB5iB,gBACA,OAAO3C,KAAKizC,QAAQtwC,WAI5B,MAAMoxC,EACFj8B,cACI9X,KAAKwgC,SAAU,EAEnBt8B,QACSlE,KAAKwgC,UACNxgC,KAAKwgC,SAAU,EACfh0B,iBAAiB,qBAAsBxM,KAAKg0C,qBAAqB,IAGzE5xB,OACQpiB,KAAKwgC,UACLxgC,KAAKwgC,SAAU,EACfle,oBAAoB,qBAAsBtiB,KAAKg0C,qBAAqB,IAG5EA,sBACI,MAAMC,EAAgB,IAAI3pC,SAASS,iBAAiB,+BACpD,IAAK,MAAM8C,KAAWomC,EAClBpmC,EAAQpG,UAKpB,MAAMysC,EACFp8B,YAAYwhB,GACRt5B,KAAKwgC,SAAU,EACfxgC,KAAKm0C,eAAiB,KAClB7xB,oBAAoB,SAAUtiB,KAAKwlC,eAAe,GAClDh5B,iBAAiB,SAAUxM,KAAKwlC,eAAe,IAEnDxlC,KAAKwlC,cAAkBtgC,IACnB,IAAKA,EAAMy6B,iBAAkB,CACzB,MAAM9H,EAAO3yB,EAAM6L,kBAAkBmnB,gBAAkBhzB,EAAM6L,YAASxR,EAChEq4B,EAAY1yB,EAAM0yB,gBAAar4B,EACjCs4B,GAEc,YADED,aAA6C,EAASA,EAAUzP,aAAa,gBAAkB0P,EAAK1P,aAAa,YACvGnoB,KAAKs5B,SAAS8a,eAAevc,EAAMD,KACzD1yB,EAAMwO,iBACN1T,KAAKs5B,SAAS+a,cAAcxc,EAAMD,MAKlD53B,KAAKs5B,SAAWA,EAEpBp1B,QACSlE,KAAKwgC,UACNh0B,iBAAiB,SAAUxM,KAAKm0C,gBAAgB,GAChDn0C,KAAKwgC,SAAU,GAGvBpe,OACQpiB,KAAKwgC,UACLle,oBAAoB,SAAUtiB,KAAKm0C,gBAAgB,GACnDn0C,KAAKwgC,SAAU,IAK3B,MAAM8T,EACFx8B,YAAYjK,GACR7N,KAAK6N,QAAUA,EACf7N,KAAKu0C,gBAAkB,IAAI9M,EAAgBznC,KAAM6N,GACjD7N,KAAKw0C,gBAAkB,IAAIjP,EAAgBvlC,KAAM6N,GAErD3J,QACIlE,KAAKu0C,gBAAgBrwC,QACrBlE,KAAKw0C,gBAAgBtwC,QAEzBke,OACIpiB,KAAKu0C,gBAAgBnyB,OACrBpiB,KAAKw0C,gBAAgBpyB,OAEzB0lB,yBAAyBj6B,EAASgM,GAC9B,OAAO7Z,KAAKy0C,eAAe5mC,GAE/Bk6B,qBAAqBl6B,EAASgM,GAC1B,MAAMi5B,EAAQ9yC,KAAK00C,iBAAiB7mC,GAChCilC,GACAA,EAAMxZ,SAASyO,qBAAqBl6B,EAASgM,GAGrD4rB,8BAA8B53B,EAAS+pB,GACnC,OAAO53B,KAAK20C,aAAa9mC,EAAS+pB,GAEtC+N,0BAA0B93B,EAAS+pB,GAC/B,MAAMkb,EAAQ9yC,KAAK00C,iBAAiB7mC,EAAS+pB,GACzCkb,IACAA,EAAM9Y,gBAAgB,cACtB8Y,EAAMxZ,SAASqM,0BAA0B93B,EAAS+pB,IAG1D+c,aAAa9c,EAAMD,GACf,IAAI+C,EACJ,MAAMvU,EAASiV,EAAUxD,EAAMD,GACzBgd,EAAO50C,KAAK6N,QAAQ4sB,cAAcvS,cAAc,2BAChDsT,EAAeV,EAA8E,QAAnEH,EAAKia,aAAmC,EAASA,EAAKhT,eAA4B,IAAPjH,EAAgBA,EAAK,KAChI,OAAO36B,KAAKy0C,eAAe5c,EAAMD,IAAc0D,EAAoBlV,EAAQoV,GAE/EiZ,eAAe5mC,EAAS+pB,GACpB,MAAMkb,EAAQ9yC,KAAK00C,iBAAiB7mC,EAAS+pB,GAC7C,QAAOkb,GAAQA,GAASjlC,EAAQ4qB,QAAQ,eAE5Cic,iBAAiB7mC,EAAS+pB,GACtB,MAAM5zB,GAAM4zB,aAA6C,EAASA,EAAUzP,aAAa,sBAAwBta,EAAQsa,aAAa,oBACtI,GAAInkB,GAAY,QAANA,EAAc,CACpB,MAAM8uC,EAAQ9yC,KAAK6N,QAAQqa,cAAc,IAAIlkB,qBAC7C,GAAI8uC,aAAiB1Z,EACjB,OAAO0Z,IAMvB,MAAM+B,EACF/8B,YAAYwhB,GACRt5B,KAAK4uC,sBAAwB1Q,IAC7Bl+B,KAAKuvC,gBAAkB,GACvBvvC,KAAKwgC,SAAU,EACfxgC,KAAK80C,YAAa,EAClB90C,KAAK+0C,WAAc7vC,IACf,GAAIlF,KAAKg1C,uBAAwB,CAC7B,MAAM,MAAEC,GAAU/vC,EAAM6f,OAAS,GACjC,GAAIkwB,EAAO,CACPj1C,KAAKu7B,SAAW,IAAIP,IAAIpzB,OAAO2zB,SAASzT,MACxC,MAAM,sBAAE8mB,GAA0BqG,EAClCj1C,KAAK4uC,sBAAwBA,EAC7B5uC,KAAKs5B,SAAS4b,iDAAiDl1C,KAAKu7B,SAAUqT,MAI1F5uC,KAAKm1C,WAAalW,MAAO/5B,UAzjDtB+C,QAAQC,UA2jDPlI,KAAK80C,YAAa,GAEtB90C,KAAKs5B,SAAWA,EAEpBp1B,QACSlE,KAAKwgC,UACNh0B,iBAAiB,WAAYxM,KAAK+0C,YAAY,GAC9CvoC,iBAAiB,OAAQxM,KAAKm1C,YAAY,GAC1Cn1C,KAAKwgC,SAAU,EACfxgC,KAAK4S,QAAQ,IAAIooB,IAAIpzB,OAAO2zB,SAASzT,QAG7C1F,OACQpiB,KAAKwgC,UACLle,oBAAoB,WAAYtiB,KAAK+0C,YAAY,GACjDzyB,oBAAoB,OAAQtiB,KAAKm1C,YAAY,GAC7Cn1C,KAAKwgC,SAAU,GAGvB3hC,KAAK08B,EAAUqT,GACX5uC,KAAKsT,OAAOg8B,QAAQuD,UAAWtX,EAAUqT,GAE7Ch8B,QAAQ2oB,EAAUqT,GACd5uC,KAAKsT,OAAOg8B,QAAQsD,aAAcrX,EAAUqT,GAEhDt7B,OAAOxO,EAAQy2B,EAAUqT,EAAwB1Q,KAC7C,MAAMnZ,EAAQ,CAAEkwB,MAAO,CAAErG,0BACzB9pC,EAAOlF,KAAK0vC,QAASvqB,EAAO,GAAIwW,EAASzT,MACzC9nB,KAAKu7B,SAAWA,EAChBv7B,KAAK4uC,sBAAwBA,EAEjCY,gCAAgCZ,GAC5B,OAAO5uC,KAAKuvC,gBAAgBX,IAA0B,GAE1DwG,sBAAsBC,GAClB,MAAM,sBAAEzG,GAA0B5uC,KAC5BuvC,EAAkBvvC,KAAKuvC,gBAAgBX,GAC7C5uC,KAAKuvC,gBAAgBX,GAAyBrwC,OAAOmmC,OAAOnmC,OAAOmmC,OAAO,GAAI6K,GAAkB8F,GAEpGC,mCACI,IAAI3a,EACC36B,KAAKu1C,4BACNv1C,KAAKu1C,0BAAiE,QAApC5a,EAAK2U,QAAQkG,yBAAsC,IAAP7a,EAAgBA,EAAK,OACnG2U,QAAQkG,kBAAoB,UAGpCC,uCACQz1C,KAAKu1C,4BACLjG,QAAQkG,kBAAoBx1C,KAAKu1C,iCAC1Bv1C,KAAKu1C,2BAGpBP,uBACI,OAAOh1C,KAAK01C,eAEhBA,eACI,OAAO11C,KAAK80C,YAAqC,YAAvBxqC,SAAS5D,YAI3C,MAAMivC,EACF79B,YAAYwhB,GACRt5B,KAAKwgC,SAAU,EACfxgC,KAAKq4B,cAAgB,KACjB/V,oBAAoB,QAAStiB,KAAK0nC,cAAc,GAChDl7B,iBAAiB,QAASxM,KAAK0nC,cAAc,IAEjD1nC,KAAK0nC,aAAgBxiC,IACjB,GAAIlF,KAAK41C,wBAAwB1wC,GAAQ,CACrC,MAAM6L,EAAU7L,EAAM2wC,cAAgB3wC,EAAM2wC,eAAe,IAAO3wC,EAAM6L,OAClE4L,EAAO3c,KAAK81C,wBAAwB/kC,GAC1C,GAAI4L,EAAM,CACN,MAAM4e,EAAWv7B,KAAK+1C,mBAAmBp5B,GACrC3c,KAAKs5B,SAAS0c,yBAAyBr5B,EAAM4e,KAC7Cr2B,EAAMwO,iBACN1T,KAAKs5B,SAAS2c,uBAAuBt5B,EAAM4e,OAK3Dv7B,KAAKs5B,SAAWA,EAEpBp1B,QACSlE,KAAKwgC,UACNh0B,iBAAiB,QAASxM,KAAKq4B,eAAe,GAC9Cr4B,KAAKwgC,SAAU,GAGvBpe,OACQpiB,KAAKwgC,UACLle,oBAAoB,QAAStiB,KAAKq4B,eAAe,GACjDr4B,KAAKwgC,SAAU,GAGvBoV,wBAAwB1wC,GACpB,QAAUA,EAAM6L,QAAU7L,EAAM6L,OAAOmlC,mBAChChxC,EAAMy6B,kBACNz6B,EAAMixC,MAAQ,GACdjxC,EAAMkxC,QACNlxC,EAAMmxC,SACNnxC,EAAMb,SACNa,EAAMoxC,UAEjBR,wBAAwB/kC,GACpB,GAAIA,aAAkBunB,QAClB,OAAOvnB,EAAO0nB,QAAQ,4CAG9Bsd,mBAAmBp5B,GACf,OAAOme,EAAUne,EAAKwL,aAAa,SAAW,KAItD,SAASouB,EAASnwB,GACd,MAAiB,WAAVA,GAAiC,WAAVA,GAAiC,WAAVA,EAGzD,MAAMowB,GACF1+B,YAAYwhB,GACRt5B,KAAKs5B,SAAWA,EAEpBmd,aAAalb,EAAUr+B,EAAU,IACzB8C,KAAKs5B,SAASod,iCAAiCnb,EAAUr+B,EAAQkpB,UAC7DkV,EAAoBC,EAAUv7B,KAAKqvC,KAAKlK,SAAS3J,cACjDx7B,KAAKs5B,SAAS2Y,wBAAwB1W,EAAUr+B,GAGhD0K,OAAO2zB,SAASzT,KAAOyT,EAASlL,YAI5C+iB,WAAWrY,EAAW6T,EAAuB1xC,EAAU,IACnD8C,KAAKoiB,OACLpiB,KAAK22C,aAAe,IAAIhI,EAAM3uC,KAAM86B,EAAUC,GAAY6T,EAAuBrwC,OAAOmmC,OAAO,CAAEtE,SAAUpgC,KAAKu7B,UAAYr+B,IAC5H8C,KAAK22C,aAAazyC,QAEtB0yC,WAAW/e,EAAMD,GACb53B,KAAKoiB,OACLpiB,KAAKikC,eAAiB,IAAIpC,EAAe7hC,KAAM63B,EAAMD,GAAW,GAChE53B,KAAKikC,eAAe//B,QAExBke,OACQpiB,KAAKikC,iBACLjkC,KAAKikC,eAAe7hB,cACbpiB,KAAKikC,gBAEZjkC,KAAK22C,eACL32C,KAAK22C,aAAa/jB,gBACX5yB,KAAK22C,cAGhBvH,cACA,OAAOpvC,KAAKs5B,SAAS8V,QAErBC,WACA,OAAOrvC,KAAKs5B,SAAS+V,KAErBC,cACA,OAAOtvC,KAAKs5B,SAASgW,QAEzBpL,sBAAsBD,GACgC,mBAAvCjkC,KAAKovC,QAAQlL,uBACpBlkC,KAAKovC,QAAQlL,sBAAsBD,GAG3ChF,0CAA0CgF,EAAgBvE,GACtD,GAAIuE,GAAkBjkC,KAAKikC,eAAgB,CACvC,MAAMnH,QAAqB4C,EAAc5C,aACzC,GAAIA,EAAc,CACVmH,EAAen/B,QAAU8zB,EAAY5K,KACrChuB,KAAKqvC,KAAKwH,qBAEd,MAAM,WAAEzjC,EAAU,WAAEspB,GAAegD,EAE7BoX,EAAe,CAAE1wB,OADRpmB,KAAK+2C,2BAA2B9S,GAChB/wB,SAAU,CAAEE,aAAY0pB,eAAcJ,eACrE18B,KAAKy2C,aAAa/W,EAAcnE,SAAUub,KAItD7X,uCAAuCgF,EAAgBvE,GACnD,MAAM5C,QAAqB4C,EAAc5C,aACzC,GAAIA,EAAc,CACd,MAAMqI,EAAW0I,EAAa4D,eAAe3U,GACzC4C,EAAcjD,kBACRz8B,KAAKqvC,KAAKp7B,YAAYkxB,SAGtBnlC,KAAKqvC,KAAKmC,WAAWrM,GAE/BnlC,KAAKqvC,KAAK7I,cACVxmC,KAAKqvC,KAAKwH,sBAGlBtS,sBAAsBN,EAAgB91B,GAClCD,QAAQC,MAAMA,GAElBw2B,uBAAuBV,GACgC,mBAAxCjkC,KAAKovC,QAAQzK,wBACpB3kC,KAAKovC,QAAQzK,uBAAuBV,GAG5C2L,aAAayD,GACTrzC,KAAKs5B,SAASsW,aAAayD,GAE/BpD,eAAeoD,GACXrzC,KAAKs5B,SAAS2W,eAAeoD,GAEjClE,6BAA6B5T,EAAUnV,GACnC,MAAM8V,EAAShB,EAAUK,GACnByb,EAAgB9b,EAAUl7B,KAAKqvC,KAAKmD,sBACpCyE,EAAgC,YAAX7wB,QAA0C,IAAX8V,EAC1D,MAAkB,YAAX9V,GACH6V,EAAcV,KAAcU,EAAcj8B,KAAKqvC,KAAKmD,wBACnDyE,GAAiC,MAAV/a,GAAkBA,IAAW8a,GAE7DzE,gCAAgC2E,EAAQC,GACpCn3C,KAAKs5B,SAASiZ,gCAAgC2E,EAAQC,GAEtD5b,eACA,OAAOv7B,KAAKsvC,QAAQ/T,SAEpBqT,4BACA,OAAO5uC,KAAKsvC,QAAQV,sBAExBmI,2BAA2B9S,GACvB,MAAM,YAAEnC,EAAW,UAAElK,GAAcqM,EAC7B7d,EAAS+B,EAAa,oBAAqByP,EAAWkK,GAC5D,OAAOyU,EAASnwB,GAAUA,EAAS,YAK3C,SAAWsoB,GACPA,EAAUA,EAAmB,QAAI,GAAK,UACtCA,EAAUA,EAAmB,QAAI,GAAK,UACtCA,EAAUA,EAAuB,YAAI,GAAK,cAC1CA,EAAUA,EAAoB,SAAI,GAAK,WAJ3C,CAKGA,IAAcA,EAAY,KAC7B,MAAM0I,GACFt/B,YAAYwhB,GACRt5B,KAAKq3C,MAAQ3I,EAAU4I,QACvBt3C,KAAKwgC,SAAU,EACfxgC,KAAKu3C,oBAAsB,KACvB,MAAM,WAAE7wC,GAAe1G,KACL,eAAd0G,EACA1G,KAAKw3C,oBAEc,YAAd9wC,GACL1G,KAAKy3C,kBAGbz3C,KAAK03C,eAAiB,KAClB13C,KAAKs5B,SAASoe,kBAElB13C,KAAKs5B,SAAWA,EAEpBp1B,QACSlE,KAAKwgC,UACFxgC,KAAKq3C,OAAS3I,EAAU4I,UACxBt3C,KAAKq3C,MAAQ3I,EAAUzU,SAE3B3vB,SAASkC,iBAAiB,mBAAoBxM,KAAKu3C,qBAAqB,GACxE/qC,iBAAiB,WAAYxM,KAAK03C,gBAAgB,GAClD13C,KAAKwgC,SAAU,GAGvBpe,OACQpiB,KAAKwgC,UACLl2B,SAASgY,oBAAoB,mBAAoBtiB,KAAKu3C,qBAAqB,GAC3Ej1B,oBAAoB,WAAYtiB,KAAK03C,gBAAgB,GACrD13C,KAAKwgC,SAAU,GAGvBgX,oBACQx3C,KAAKq3C,OAAS3I,EAAUzU,UACxBj6B,KAAKq3C,MAAQ3I,EAAUiJ,YACvB33C,KAAKs5B,SAASse,yBAGtBH,iBACIz3C,KAAKw3C,oBACDx3C,KAAKq3C,OAAS3I,EAAUiJ,cACxB33C,KAAKq3C,MAAQ3I,EAAUnU,SACvBv6B,KAAKs5B,SAASwb,cAGlBpuC,iBACA,OAAO4D,SAAS5D,YAIxB,MAAMmxC,GACF//B,YAAYwhB,GACRt5B,KAAKwgC,SAAU,EACfxgC,KAAK83C,SAAW,KACZ93C,KAAK+3C,eAAe,CAAEznB,EAAG1oB,OAAOowC,YAAa7R,EAAGv+B,OAAOqwC,eAE3Dj4C,KAAKs5B,SAAWA,EAEpBp1B,QACSlE,KAAKwgC,UACNh0B,iBAAiB,SAAUxM,KAAK83C,UAAU,GAC1C93C,KAAK83C,WACL93C,KAAKwgC,SAAU,GAGvBpe,OACQpiB,KAAKwgC,UACLle,oBAAoB,SAAUtiB,KAAK83C,UAAU,GAC7C93C,KAAKwgC,SAAU,GAGvBuX,eAAehvB,GACX/oB,KAAKs5B,SAAS4e,sBAAsBnvB,IAI5C,MAAMovB,GACFrgC,YAAYwhB,GACRt5B,KAAKo4C,QAAU,IAAIC,IACnBr4C,KAAKwgC,SAAU,EACfxgC,KAAKs4C,qBAAyBpzC,IAC1B,MAAMgO,EAkDlB,SAAgChO,GAC5B,IAAIy1B,EACJ,MAAM+E,EAAwC,QAAvB/E,EAAKz1B,EAAM+3B,cAA2B,IAAPtC,OAAgB,EAASA,EAAG+E,cAClF,GAAIA,aAAyBtD,EACzB,OAAOsD,EAtDc6Y,CAAuBrzC,GACpCgO,GAwDhB,SAA+BA,GAC3B,IAAIynB,EAEJ,OADoD,QAA/BA,EAAKznB,EAAS0pB,mBAAgC,IAAPjC,EAAgBA,EAAK,IAC9DkB,WAAWoF,EAAcrE,aA3DpB4b,CAAsBtlC,KAClChO,EAAMwO,iBACN1T,KAAKy4C,uBAAuBvlC,KAGpClT,KAAK04C,oBAAuBxzC,IACpBlF,KAAKwgC,SAAgC,iBAAdt7B,EAAMgC,MAC7BlH,KAAK24C,mBAAmBzzC,EAAMgC,OAGtClH,KAAKs5B,SAAWA,EAEpBp1B,QACSlE,KAAKwgC,UACNxgC,KAAKwgC,SAAU,EACfh0B,iBAAiB,8BAA+BxM,KAAKs4C,sBAAsB,IAGnFl2B,OACQpiB,KAAKwgC,UACLxgC,KAAKwgC,SAAU,EACfle,oBAAoB,8BAA+BtiB,KAAKs4C,sBAAsB,IAGtFM,oBAAoBv5B,GACXrf,KAAK64C,wBAAwBx5B,KAC9Brf,KAAKo4C,QAAQxrC,IAAIyS,GACjBA,EAAO7S,iBAAiB,UAAWxM,KAAK04C,qBAAqB,IAGrEI,uBAAuBz5B,GACfrf,KAAK64C,wBAAwBx5B,KAC7Brf,KAAKo4C,QAAQzV,OAAOtjB,GACpBA,EAAOiD,oBAAoB,UAAWtiB,KAAK04C,qBAAqB,IAGxEG,wBAAwBx5B,GACpB,OAAOrf,KAAKo4C,QAAQn4B,IAAIZ,GAE5B4f,6BAA6B/rB,GACzB,MAAMsqB,QAAatqB,EAAS4pB,aACxBU,GACAx9B,KAAK24C,mBAAmBnb,GAGhCmb,mBAAmBnb,GACfx9B,KAAKs5B,SAASyf,0BAA0B,IAAI9X,EAAczD,KAgBlE,MAAMwb,WAAsB/Q,EACxBhJ,eACIj/B,KAAKi5C,qBACLj5C,KAAKoqC,yBAET6O,qBACI,MAAM,gBAAEpe,EAAe,KAAE5S,EAAI,KAAEhjB,GAASqF,SACxCuwB,EAAgBqe,aAAal5C,KAAKm5C,QAASlxB,GAC3C4S,EAAgBqe,aAAal5C,KAAKgqC,WAAY/kC,GAElDmlC,yBACI,IAAK,MAAMgP,KAAsBp5C,KAAKq5C,eAAgB,CAClD,MAAMnpC,EAAakpC,EAAmBlpC,WACtC,GAAIA,EAAY,CACZ,MAAMrC,EAAU7N,KAAKsoC,oBAAoB8Q,GACzClpC,EAAWgpC,aAAarrC,EAASurC,KAIzCD,cACA,OAAOn5C,KAAK2mC,YAAYmH,aAAajgC,QAErCwrC,qBACA,MAAO,IAAI/uC,SAASuwB,gBAAgB9vB,iBAAiB,YAI7D,MAAMuuC,WAAqBrR,EACnBvB,mBACA,OAAO1mC,KAAK2mC,YAAY0H,aAAeruC,KAAKu5C,4BAEhDjS,kBACItnC,KAAKw5C,YAETva,eACQj/B,KAAKmoC,YACLnoC,KAAKy5C,cAGblS,kBACIlO,MAAMkO,kBACDvnC,KAAK06B,WACN16B,KAAK4pC,iCAGT8P,0BACA,OAAO15C,KAAKkoC,gBAAgB4F,aAE5B6L,sBACA,OAAO35C,KAAK2mC,YAAYmH,aAExB9D,iBACA,OAAOhqC,KAAK2mC,YAAY94B,QAE5B2rC,YACIx5C,KAAK45C,gCACL55C,KAAK65C,4BACL75C,KAAK85C,uCACL95C,KAAK+5C,iCAETN,cACIz5C,KAAK+oC,6BAA4B,KAC7B/oC,KAAKg6C,kBACLh6C,KAAKi6C,mBAGTV,kCACA,OAAOv5C,KAAK05C,oBAAoBxM,yBAA2BltC,KAAK25C,gBAAgBzM,wBAEpF0M,gCACI,IAAK,MAAM/rC,KAAW7N,KAAKk6C,0BACvB5vC,SAAS2d,KAAKvd,YAAYmD,GAGlCgsC,4BACI,IAAK,MAAMhsC,KAAW7N,KAAKm6C,sBACvB7vC,SAAS2d,KAAKvd,YAAY1K,KAAKsoC,oBAAoBz6B,IAG3DisC,uCACI,IAAK,MAAMjsC,KAAW7N,KAAKo6C,+BACvB9vC,SAAS2d,KAAK9X,YAAYtC,GAGlCksC,iCACI,IAAK,MAAMlsC,KAAW7N,KAAKq6C,2BACvB/vC,SAAS2d,KAAKvd,YAAYmD,GAGlCmsC,kBACI1vC,SAASgwC,UAAUt6C,KAAKgqC,YACxBhqC,KAAKu6C,gCAETA,gCACI,IAAK,MAAMzP,KAAsB9qC,KAAKw6C,sBAAuB,CACzD,MAAMxP,EAAyBhrC,KAAKsoC,oBAAoBwC,GACxDA,EAAmBtB,YAAYwB,IAGvCiP,gBACQ3vC,SAASrF,MAAQjF,KAAKgqC,sBAAsByQ,gBAC5CnwC,SAASrF,KAAKukC,YAAYxpC,KAAKgqC,YAG/B1/B,SAASuwB,gBAAgBnwB,YAAY1K,KAAKgqC,YAG9CkQ,gCACA,OAAOl6C,KAAK25C,gBAAgBtM,mCAAmCrtC,KAAK05C,qBAEpES,4BACA,OAAOn6C,KAAK25C,gBAAgBxM,+BAA+BntC,KAAK05C,qBAEhEU,qCACA,OAAOp6C,KAAK05C,oBAAoBnM,oBAEhC8M,iCACA,OAAOr6C,KAAK25C,gBAAgBpM,oBAE5BiN,4BACA,OAAOx6C,KAAKgqC,WAAWj/B,iBAAiB,WAIhD,MAAM2vC,GACF5iC,YAAY+d,GACR71B,KAAKxB,KAAO,GACZwB,KAAK26C,UAAY,GACjB36C,KAAK61B,KAAOA,EAEhB5V,IAAIsb,GACA,OAAOY,EAAWZ,KAAav7B,KAAK26C,UAExC3sB,IAAIuN,GACA,GAAIv7B,KAAKigB,IAAIsb,GAAW,CACpB,MAAM4J,EAAWnlC,KAAK46C,KAAKrf,GAE3B,OADAv7B,KAAK66C,MAAMtf,GACJ4J,GAGf1C,IAAIlH,EAAU4J,GAGV,OAFAnlC,KAAK86C,MAAMvf,EAAU4J,GACrBnlC,KAAK66C,MAAMtf,GACJ4J,EAEXx5B,QACI3L,KAAK26C,UAAY,GAErBC,KAAKrf,GACD,OAAOv7B,KAAK26C,UAAUxe,EAAWZ,IAErCuf,MAAMvf,EAAU4J,GACZnlC,KAAK26C,UAAUxe,EAAWZ,IAAa4J,EAE3C0V,MAAMtf,GACF,MAAM78B,EAAMy9B,EAAWZ,GACjB3M,EAAQ5uB,KAAKxB,KAAK8F,QAAQ5F,GAC5BkwB,GAAS,GACT5uB,KAAKxB,KAAK0L,OAAO0kB,EAAO,GAC5B5uB,KAAKxB,KAAKkuB,QAAQhuB,GAClBsB,KAAK2S,OAETA,OACI,IAAK,MAAMjU,KAAOsB,KAAKxB,KAAK0L,OAAOlK,KAAK61B,aAC7B71B,KAAK26C,UAAUj8C,IAKlC,MAAMq8C,WAAiBnV,EACnB9tB,cACIuhB,SAAS35B,WACTM,KAAKg7C,cAAgB,IAAIN,GAAc,IACvC16C,KAAKwyC,qBAAuB,IAAIxX,IAAIO,SAASzT,MAEjD0pB,WAAWrM,EAAUzK,GAAY,EAAOyN,GAAa,GACjD,MAAM1B,EAAW,IAAI6S,GAAat5C,KAAKmlC,SAAUA,EAAUzK,EAAWyN,GACtE,OAAOnoC,KAAKgK,OAAOy8B,GAEvBxyB,YAAYkxB,GACR,MAAMsB,EAAW,IAAIuS,GAAch5C,KAAKmlC,SAAUA,GAAU,GAC5D,OAAOnlC,KAAKgK,OAAOy8B,GAEvBoQ,qBACI72C,KAAKg7C,cAAcrvC,QAEvBszB,sBACI,GAAIj/B,KAAKi7C,oBAAqB,CAC1Bj7C,KAAKs5B,SAAS4hB,wBACd,MAAM,SAAE/V,EAAUqN,qBAAsBjX,GAAav7B,WA5nEtD,IAAIiI,SAAQC,GAAWhF,YAAW,IAAMgF,KAAW,KA8nElD,MAAMizC,EAAiBhW,EAAShpB,QAEhC,OADAnc,KAAKg7C,cAAcvY,IAAIlH,EAAU4f,GAC1BA,GAGfvJ,6BAA6BrW,GACzB,OAAOv7B,KAAKg7C,cAAchtB,IAAIuN,GAE9B4J,eACA,OAAO0I,EAAauN,YAAYp7C,KAAK6N,SAErCotC,0BACA,OAAOj7C,KAAKmlC,SAASiJ,aA8Q7B,SAASiN,GAAkCxhC,GACvCtb,OAAO+8C,iBAAiBzhC,EAAK0hC,IAEjC,MAAMA,GAAwC,CAC1CC,YAAa,CACTxtB,MACI,OAAOhuB,KAAKqwB,cAKlB4iB,GAAU,IArRhB,MACIn7B,cACI9X,KAAK2C,UAAY,IAAI6zC,GAAUx2C,MAC/BA,KAAKsvC,QAAU,IAAIuF,EAAQ70C,MAC3BA,KAAKqvC,KAAO,IAAI0L,GAAS/6C,KAAMsK,SAASuwB,iBACxC76B,KAAKovC,QAAU,IAAI4D,EAAehzC,MAClCA,KAAKy7C,aAAe,IAAIrE,GAAap3C,MACrCA,KAAK07C,cAAgB,IAAI3H,EACzB/zC,KAAK27C,kBAAoB,IAAIhG,EAAkB31C,MAC/CA,KAAK47C,mBAAqB,IAAI1H,EAAmBl0C,MACjDA,KAAK67C,eAAiB,IAAIhE,GAAe73C,MACzCA,KAAK87C,eAAiB,IAAI3D,GAAen4C,MACzCA,KAAK+7C,gBAAkB,IAAIzH,EAAgBhqC,SAASuwB,iBACpD76B,KAAKg8C,OAAQ,EACbh8C,KAAKshB,SAAU,EACfthB,KAAK6zC,iBAAmB,IACxB7zC,KAAKwgC,SAAU,EAEnBt8B,QACSlE,KAAKwgC,UACNxgC,KAAKy7C,aAAav3C,QAClBlE,KAAK07C,cAAcx3C,QACnBlE,KAAK27C,kBAAkBz3C,QACvBlE,KAAK47C,mBAAmB13C,QACxBlE,KAAK67C,eAAe33C,QACpBlE,KAAK87C,eAAe53C,QACpBlE,KAAK+7C,gBAAgB73C,QACrBlE,KAAKsvC,QAAQprC,QACblE,KAAKwgC,SAAU,EACfxgC,KAAKshB,SAAU,GAGvB26B,UACIj8C,KAAKshB,SAAU,EAEnBc,OACQpiB,KAAKwgC,UACLxgC,KAAKy7C,aAAar5B,OAClBpiB,KAAK07C,cAAct5B,OACnBpiB,KAAK27C,kBAAkBv5B,OACvBpiB,KAAK47C,mBAAmBx5B,OACxBpiB,KAAK67C,eAAez5B,OACpBpiB,KAAK87C,eAAe15B,OACpBpiB,KAAK+7C,gBAAgB35B,OACrBpiB,KAAKsvC,QAAQltB,OACbpiB,KAAKwgC,SAAU,GAGvB0b,gBAAgB9M,GACZpvC,KAAKovC,QAAUA,EAEnBiE,MAAM9X,EAAUr+B,EAAU,IACtB8C,KAAK2C,UAAU8zC,aAAa3b,EAAUS,GAAWr+B,GAErD07C,oBAAoBv5B,GAChBrf,KAAK87C,eAAelD,oBAAoBv5B,GAE5Cy5B,uBAAuBz5B,GACnBrf,KAAK87C,eAAehD,uBAAuBz5B,GAE/C88B,oBAAoBl/C,GAChBqN,SAASuwB,gBAAgBnwB,YAAYu2B,EAAcptB,KAAK5W,GAASmkC,UAErEgb,aACIp8C,KAAKqvC,KAAKwH,qBAEdwF,oBAAoBC,GAChBt8C,KAAK6zC,iBAAmByI,EAExB/gB,eACA,OAAOv7B,KAAKsvC,QAAQ/T,SAEpBqT,4BACA,OAAO5uC,KAAKsvC,QAAQV,sBAExBsG,iDAAiD3Z,EAAUqT,GACnD5uC,KAAKshB,QACLthB,KAAK2C,UAAUywC,WAAW7X,EAAUqT,EAAuB,CAAExoB,OAAQ,UAAWmoB,gBAAgB,IAGhGvuC,KAAKovC,QAAQqE,kBAGrByE,sBAAsBnvB,GAClB/oB,KAAKsvC,QAAQ8F,sBAAsB,CAAE3C,eAAgB1pB,IAEzDitB,yBAAyBr5B,EAAM4e,GAC3B,OAAOv7B,KAAKu8C,oBAAoB5/B,IACzB2e,EAAoBC,EAAUv7B,KAAKmlC,SAAS3J,eAC5Cx7B,KAAKw8C,yCAAyC7/B,EAAM4e,GAE/D0a,uBAAuBt5B,EAAM4e,GACzB,MAAMnV,EAASpmB,KAAKy8C,iBAAiB9/B,GACrC3c,KAAK08C,2CAA2C//B,IAAS3c,KAAKqzC,MAAM9X,EAASzT,KAAM,CAAE1B,WAEzFs2B,2CAA2C//B,GACvC,MAAMggC,EAAahgC,EAAKwL,aAAa,qBACrC,GAAIw0B,EAAY,CACZ,MAAM9kB,EAAOvtB,SAAS4B,cAAc,QACpC2rB,EAAK/yB,OAAS63C,EACd9kB,EAAKzR,OAASzJ,EAAKwL,aAAa,SAAW,YAC3C0P,EAAKI,QAAS,EACVtb,EAAK0d,aAAa,uBAClBxC,EAAK/qB,aAAa,qBAAsB6P,EAAKwL,aAAa,uBAE9D,MAAM2qB,EAAQ9yC,KAAK48C,sBAAsBjgC,GASzC,OARIm2B,GACAjb,EAAK/qB,aAAa,mBAAoBgmC,GACtCjb,EAAKrrB,iBAAiB,sBAAsB,IAAMqrB,EAAKpwB,YAGvDowB,EAAKrrB,iBAAiB,UAAU,IAAMqrB,EAAKpwB,WAE/C6C,SAASrF,KAAKyF,YAAYmtB,GACnBkF,EAAS,SAAU,CAAEC,YAAY,EAAMjsB,OAAQ8mB,IAGtD,OAAO,EAGf6e,iCAAiCnb,EAAUnV,GACvC,OAAOpmB,KAAKmvC,6BAA6B5T,EAAUnV,IAAWpmB,KAAK68C,kCAAkCthB,GAEzG0W,wBAAwB1W,EAAUr+B,GAC9Bm+C,GAAkC9f,GAClCv7B,KAAKovC,QAAQ6C,wBAAwB1W,EAAUr+B,GAEnD0yC,aAAayD,GACTgI,GAAkChI,EAAM9X,UACnC8X,EAAM5D,QACPzvC,KAAK88C,uCAAuCzJ,EAAM9X,SAAU8X,EAAMjtB,QAG1E6pB,eAAeoD,GACXrzC,KAAK+8C,+BAA+B1J,EAAMV,oBAE9CxD,6BAA6B5T,EAAUnV,GACnC,OAAOpmB,KAAK2C,UAAUwsC,6BAA6B5T,EAAUnV,GAEjEmsB,gCAAgC2E,EAAQC,GACpCn3C,KAAKg9C,+CAA+C9F,EAAQC,GAEhE/C,eAAevc,EAAMD,GACjB,MAAMxR,EAASiV,EAAUxD,EAAMD,GAC/B,OAAO53B,KAAKu8C,oBAAoB1kB,MACvBD,GAAa53B,KAAKu8C,oBAAoB3kB,KACxC0D,EAAoBR,EAAU1U,GAASpmB,KAAKmlC,SAAS3J,cAEhE6Y,cAAcxc,EAAMD,GAChB53B,KAAK2C,UAAUi0C,WAAW/e,EAAMD,GAEpCggB,wBACI53C,KAAKqvC,KAAKmD,qBAAuBxyC,KAAKu7B,SACtCv7B,KAAK+8C,iCAETjI,aACI90C,KAAKsvC,QAAQgG,mCAEjBoC,iBACI13C,KAAKsvC,QAAQmG,uCAEjBsD,0BAA0B97C,GACtB+C,KAAKm8C,oBAAoBl/C,GAE7Bi+C,wBACI,IAAIvgB,GACyC,QAAtCA,EAAK36B,KAAK2C,UAAUg0C,oBAAiC,IAAPhc,OAAgB,EAASA,EAAG8U,SAC7EzvC,KAAKi9C,yCAGblW,uBAAsB,QAAEl5B,GAAWyyB,GAE/B,OADctgC,KAAKk9C,8BAA8BrvC,EAASyyB,GAC5CX,iBAElBsH,qBAAqB9B,EAAUzK,GAC3B16B,KAAKqvC,KAAKmD,qBAAuBxyC,KAAKsvC,QAAQ/T,SAC9Cv7B,KAAKm9C,+BAET/V,kBACIpnC,KAAKovC,QAAQqE,kBAEjB2J,YAAYtK,GACR9yC,KAAKq9C,gCAAgCvK,GAEzCwK,cAAc5d,EAAeoT,GACzB9yC,KAAKu9C,kCAAkC7d,EAAeoT,GAE1D0J,yCAAyC7/B,EAAM4e,GAE3C,OADcv7B,KAAKw9C,6CAA6C7gC,EAAM4e,GACxDoE,iBAElBkd,kCAAkCthB,GAE9B,OADcv7B,KAAKy9C,wCAAwCliB,GAC7CoE,iBAElB6d,6CAA6C7gC,EAAM4e,GAC/C,OAAOwB,EAAS,cAAe,CAAEhsB,OAAQ4L,EAAMsgB,OAAQ,CAAEpjB,IAAK0hB,EAASzT,MAAQkV,YAAY,IAE/FygB,wCAAwCliB,GACpC,OAAOwB,EAAS,qBAAsB,CAAEE,OAAQ,CAAEpjB,IAAK0hB,EAASzT,MAAQkV,YAAY,IAExF8f,uCAAuCvhB,EAAUnV,GAE7C,OADAkY,EAAWh0B,SAASuwB,iBACbkC,EAAS,cAAe,CAAEE,OAAQ,CAAEpjB,IAAK0hB,EAASzT,KAAM1B,YAEnE62B,yCACI,OAAOlgB,EAAS,sBAEpBmgB,8BAA8BQ,EAASpd,GACnC,OAAOvD,EAAS,sBAAuB,CAAEE,OAAQ,CAAEygB,UAASpd,UAAUtD,YAAY,IAEtFmgB,+BACI,OAAOpgB,EAAS,gBAEpBggB,+BAA+BY,EAAS,IAEpC,OADAnf,EAAel0B,SAASuwB,iBACjBkC,EAAS,aAAc,CAAEE,OAAQ,CAAEpjB,IAAK7Z,KAAKu7B,SAASzT,KAAM61B,YAEvEX,+CAA+C9F,EAAQC,GACnD/hB,cAAc,IAAIwoB,gBAAgB,aAAc,CAAE1G,OAAQA,EAAO7mB,WAAY8mB,OAAQA,EAAO9mB,cAEhGgtB,gCAAgCvK,GAC5B,OAAO/V,EAAS,mBAAoB,CAAEhsB,OAAQ+hC,IAElDyK,kCAAkC7d,EAAeoT,GAC7C,OAAO/V,EAAS,qBAAsB,CAAEE,OAAQ,CAAEyC,iBAAiB3uB,OAAQ+hC,EAAO9V,YAAY,IAElGuf,oBAAoB1uC,GAChB,MAAMzD,EAAYyD,aAAyC,EAASA,EAAQ4qB,QAAQ,gBACpF,OAAIz4B,KAAKg8C,OACD5xC,GAC+C,SAAxCA,EAAU+d,aAAa,gBAO9B/d,GAC+C,QAAxCA,EAAU+d,aAAa,cAO1Cs0B,iBAAiB9/B,GACb,MAAMyJ,EAASzJ,EAAKwL,aAAa,qBACjC,OAAOouB,EAASnwB,GAAUA,EAAS,UAEvCw2B,sBAAsBjgC,GAClB,MAAMm2B,EAAQn2B,EAAKwL,aAAa,oBAChC,GAAI2qB,EACA,OAAOA,EAEN,CACD,MAAM1oC,EAAYuS,EAAK8b,QAAQ,eAC/B,GAAIruB,EACA,OAAOA,EAAUpG,IAIzBmhC,eACA,OAAOnlC,KAAKqvC,KAAKlK,YAejBxiC,UAAWk7C,IAAgB5K,GACnC,SAAS/uC,KACL+uC,GAAQ/uC,QAQZ,SAAS00C,GAAoBv5B,GACzB4zB,GAAQ2F,oBAAoBv5B,GAEhC,SAASy5B,GAAuBz5B,GAC5B4zB,GAAQ6F,uBAAuBz5B,GAenC,IAAIy+B,GAAqBv/C,OAAOw/C,OAAO,CACnCh0B,UAAW,KACXpnB,UAAWk7C,GACX5K,QAASA,GACTqG,aAAcA,GACdzL,aAAcA,EACd3pC,MAAOA,GACPg4C,gBAhCJ,SAAyB9M,GACrB6D,GAAQiJ,gBAAgB9M,IAgCxBiE,MA9BJ,SAAe9X,EAAUr+B,GACrB+1C,GAAQI,MAAM9X,EAAUr+B,IA8BxB07C,oBAAqBA,GACrBE,uBAAwBA,GACxBqD,oBAxBJ,SAA6Bl/C,GACzBg2C,GAAQkJ,oBAAoBl/C,IAwB5Bm/C,WAtBJ,WACInJ,GAAQmJ,cAsBRC,oBApBJ,SAA6BC,GACzBrJ,GAAQoJ,oBAAoBC,IAoB5B0B,iBAlBJ,SAA0Bza,GACtB1B,EAAe0B,cAAgBA,KAkUnC,MAAM0a,GACFnmC,YAAYjK,GACR7N,KAAKwuC,oBAAsB,EAAG3gC,cAC1B,IAAI8sB,EACJ,MAAM,GAAE32B,EAAE,MAAEmY,GAAUnc,KACqB,QAA1C26B,EAAK9sB,EAAQqa,cAAc,IAAMlkB,UAAwB,IAAP22B,GAAyBA,EAAG6O,YAAYrtB,IAE/Fnc,KAAKmc,MAAQtO,EAAQ47B,WAAU,GAC/BzpC,KAAKgE,GAAK6J,EAAQ7J,IAG1B,SAASk6C,GAAoBl6C,GACzB,GAAU,MAANA,EAAY,CACZ,MAAM6J,EAAUvD,SAAS6zC,eAAen6C,GACxC,GAAI6J,aAAmBurB,EACnB,OAAOvrB,GAInB,SAASuwC,GAAgBvwC,EAASwwC,GAC9B,GAAIxwC,EAAS,CACT,MAAM8rB,EAAM9rB,EAAQsa,aAAa,OACjC,GAAW,MAAPwR,GAA6B,MAAd0kB,IAn2FCC,EAm2FuCD,EAl2FxDvjB,EAk2FmDnB,GAl2FnC7R,MAAQgT,EAAUwjB,GAAOx2B,MAm2FxC,MAAM,IAAI3pB,MAAM,6BAA6B0P,EAAQ7J,yDAKzD,GAHI6J,EAAQ4sB,gBAAkBnwB,WAC1BuD,EAAUvD,SAASi3B,WAAW1zB,GAAS,IAEvCA,aAAmBurB,EAGnB,OAFAvrB,EAAQ4rB,oBACR5rB,EAAQ6rB,uBACD7rB,EA52FnB,IAA4BywC,EAi3F5B,MAAMC,GAAgB,CAClBC,QACIx+C,KAAKy+C,eAAehsC,SAAQhG,IAAO,IAAIkuB,EAAI,OAAkC,QAA1BA,EAAKluB,EAAE+rB,qBAAkC,IAAPmC,OAAgB,EAASA,EAAGhH,aAAa3zB,KAAK0+C,gBAAiBjyC,EAAEmnB,iBAE1JuO,SACIniC,KAAK2+C,gCACL3+C,KAAKy+C,eAAehsC,SAAQhG,GAAKA,EAAE01B,OAAOniC,KAAK0+C,oBAEnDE,SACI5+C,KAAKy+C,eAAehsC,SAAQhG,IAAO,IAAIkuB,EAAI,OAAkC,QAA1BA,EAAKluB,EAAE+rB,qBAAkC,IAAPmC,OAAgB,EAASA,EAAGhH,aAAa3zB,KAAK0+C,gBAAiBjyC,OAExJ6f,UACItsB,KAAK2+C,gCACL3+C,KAAKy+C,eAAehsC,SAAQhG,GAAKA,EAAE6f,QAAQtsB,KAAK0+C,oBAEpDj3C,SACIzH,KAAKy+C,eAAehsC,SAAQhG,GAAKA,EAAEhF,YAEvCmL,UACI5S,KAAKy+C,eAAehsC,SAAQhG,GAAKA,EAAE+8B,YAAYxpC,KAAK0+C,oBAExDprC,SACItT,KAAKy+C,eAAehsC,SAAQhG,IACxBA,EAAEkB,UAAY,GACdlB,EAAE01B,OAAOniC,KAAK0+C,sBAK1B,MAAMG,WAAsBh0C,YACxBo0B,0BACI,UACUj/B,KAAKgK,SAEf,MAAOmE,GACHD,QAAQC,MAAMA,GAElB,QACInO,KAAKwlB,cAGbyZ,eACI,IAAItE,EACJ,OAAqC,QAA7BA,EAAK36B,KAAK4mC,qBAAkC,IAAPjM,EAAgBA,EAAM36B,KAAK4mC,cAAgB,WAChF5mC,KAAKo1B,cAAcp1B,KAAK8+C,2BAClBzhB,IACNr9B,KAAK++C,kBAH2E,GAO5Fv5B,aACI,IACIxlB,KAAKyH,SAET,MAAOkzB,KAEXgkB,gCACI3+C,KAAKg/C,kBAAkBvsC,SAAQH,GAAKA,EAAE7K,WAEtCu3C,wBACA,IAAIrkB,EACJ,MAAMskB,EAAmBj/C,KAAKy+C,eAAeS,SAAQzyC,GAAK,IAAIA,EAAE0qB,YAAW/2B,QAAOkS,KAAOA,EAAEtO,KACrFm7C,EAAiB,IAAoC,QAA/BxkB,EAAK36B,KAAK0+C,uBAAoC,IAAP/jB,OAAgB,EAASA,EAAGxD,UAAU/2B,QAAOkS,KAAOA,EAAEtO,KAAIvF,KAAI6T,GAAKA,EAAEtO,KACxI,OAAOi7C,EAAiB7+C,QAAOkS,GAAK6sC,EAAeC,SAAS9sC,EAAEtO,MAE9D+6C,oBACA,GAAI/+C,KAAKomB,OAAQ,CACb,MAAMi5B,EAAiBd,GAAcv+C,KAAKomB,QAC1C,GAAIi5B,EACA,OAAOA,EAEXr/C,KAAKy3B,MAAM,kBAEfz3B,KAAKy3B,MAAM,+BAEXgnB,qBACA,OAAIz+C,KAAK+Q,OACE/Q,KAAKs/C,mBAEPt/C,KAAKu/C,QACHv/C,KAAKw/C,2BAGZx/C,KAAKy3B,MAAM,0CAGfinB,sBACA,OAAO1+C,KAAKkhC,gBAAgBU,QAAQ6H,WAAU,GAE9CvI,sBACA,GAAIlhC,KAAK4qC,6BAA6B6U,oBAClC,OAAOz/C,KAAK4qC,kBAEhB5qC,KAAKy3B,MAAM,oDAEXrR,aACA,OAAOpmB,KAAKmoB,aAAa,UAEzBpX,aACA,OAAO/Q,KAAKmoB,aAAa,UAEzBo3B,cACA,OAAOv/C,KAAKmoB,aAAa,WAE7BsP,MAAMx6B,GACF,MAAM,IAAIkB,MAAM,GAAG6B,KAAK0/C,gBAAgBziD,KAExCyiD,kBACA,IAAI/kB,EAAIC,EACR,OAAkG,QAA1FA,GAAiD,QAA1CD,EAAK36B,KAAK6sC,UAAUvvB,MAAM,kBAA+B,IAAPqd,EAAgBA,EAAK,IAAI,UAAuB,IAAPC,EAAgBA,EAAK,iBAE/HkkB,wBACA,OAAO,IAAI5hB,YAAY,6BAA8B,CAAEC,SAAS,EAAMH,YAAY,IAElFsiB,yBACA,IAAI3kB,EACJ,MAAM9sB,EAAwC,QAA7B8sB,EAAK36B,KAAKy6B,qBAAkC,IAAPE,OAAgB,EAASA,EAAGwjB,eAAen+C,KAAK+Q,QACtG,OAAgB,OAAZlD,EACO,CAACA,GAGD,GAGX2xC,4BACA,IAAI7kB,EACJ,MAAM0D,EAAyC,QAA7B1D,EAAK36B,KAAKy6B,qBAAkC,IAAPE,OAAgB,EAASA,EAAG5vB,iBAAiB/K,KAAKu/C,SACzG,OAAwB,IAApBlhB,EAAS3hC,OACFN,MAAMuD,UAAUtC,MAAMuC,KAAKy+B,GAG3B,ICzuGnB,IAAIva,GAMG,SAAS67B,GAAYC,GAC1B,OAAO97B,GAAW87B,ECYL,SAASC,GAAMvhD,GAC1B,OAAKA,GAAsB,iBAARA,EACfA,aAAeoH,MAAQpH,aAAewhD,OAAexhD,EACrDlC,MAAMC,QAAQiC,GAAaA,EAAIG,IAAIohD,IAChCthD,OAAOC,KAAKF,GAAKc,QAAO,SAAUoY,EAAK9Y,GAK1C,OADA8Y,EAHY9Y,EAAI,GAAGic,cAAgBjc,EAAIrB,MAAM,GAAGuV,QAAQ,aAAa,SAAUrS,EAAG+vB,GAC9E,MAAO,IAAMA,EAAE3V,kBAENklC,GAAKvhD,EAAII,IACf8Y,IACR,IATyClZ,EF0tGhD86B,EAAaG,oBA1db,MACIzhB,YAAYjK,GACR7N,KAAK+/C,oBAAuBrgB,MAC5B1/B,KAAKggD,oBAAsB,KAC3BhgD,KAAKigD,oBAAsB,OAC3BjgD,KAAKkgD,WAAY,EACjBlgD,KAAKmgD,eAAgB,EACrBngD,KAAKogD,kBAAmB,EACxBpgD,KAAK6N,QAAUA,EACf7N,KAAKqvC,KAAO,IAAI7H,EAAUxnC,KAAMA,KAAK6N,SACrC7N,KAAKqgD,mBAAqB,IAAI9f,EAAmBvgC,KAAMA,KAAK6N,SAC5D7N,KAAKu0C,gBAAkB,IAAI9M,EAAgBznC,KAAMA,KAAK6N,SACtD7N,KAAKw0C,gBAAkB,IAAIjP,EAAgBvlC,KAAMA,KAAK6N,SAE1Dga,UACS7nB,KAAKkgD,YACNlgD,KAAKkgD,WAAY,EACjBlgD,KAAKsgD,YAAa,EACdtgD,KAAKugD,cAAgB5nB,EAAkBuB,MACvCl6B,KAAKqgD,mBAAmBn8C,QAE5BlE,KAAKu0C,gBAAgBrwC,QACrBlE,KAAKw0C,gBAAgBtwC,QACrBlE,KAAK85B,oBAGbtU,aACQxlB,KAAKkgD,YACLlgD,KAAKkgD,WAAY,EACjBlgD,KAAKqgD,mBAAmBj+B,OACxBpiB,KAAKu0C,gBAAgBnyB,OACrBpiB,KAAKw0C,gBAAgBpyB,QAG7B2X,kBACQ/5B,KAAKugD,cAAgB5nB,EAAkBwB,OACvCn6B,KAAKwgD,gBAGb1mB,oBACQ95B,KAAKugD,cAAgB5nB,EAAkBwB,OAASn6B,KAAKmgD,gBACrDngD,KAAKwgD,gBAGb3mB,sBACQ75B,KAAKugD,cAAgB5nB,EAAkBuB,KACvCl6B,KAAKqgD,mBAAmBn8C,SAGxBlE,KAAKqgD,mBAAmBj+B,OACxBpiB,KAAKwgD,iBAGbvhB,sBACI,IAAKj/B,KAAKogD,kBAAoBpgD,KAAKshB,SAAWthB,KAAKmkB,WAAankB,KAAKsgD,YAActgD,KAAKygD,WAAazgD,KAAKq+C,YAAa,CACnH,MAAMqC,EAAc1gD,KAAKq+C,WAEzB,GADAr+C,KAAKq+C,WAAar+C,KAAKygD,UACnBzgD,KAAKygD,UACL,IACIzgD,KAAK6N,QAAQ8K,OAAS3Y,KAAKqzC,MAAMvY,EAAU96B,KAAKygD,YAChDzgD,KAAKqgD,mBAAmBj+B,aAClBpiB,KAAK6N,QAAQ8K,OACnB3Y,KAAKmgD,eAAgB,EAEzB,MAAOhyC,GAEH,MADAnO,KAAKq+C,WAAaqC,EACZvyC,IAKtB8wB,mBAAmBS,IACXA,EAAchD,YAAegD,EAAcrD,WAAaqD,EAAc/C,UACtE38B,KAAKygD,UAAY/gB,EAAcxsB,SAAS2G,KAE5C,IACI,MAAM2jB,QAAakC,EAAc5C,aACjC,GAAIU,EAAM,CACN,MAAM,KAAEv4B,GAASs4B,EAAkBC,GAC7B2H,EAAW,IAAIP,QAAe5kC,KAAK2gD,2BAA2B17C,IAC9DwhC,EAAW,IAAIwD,EAAcjqC,KAAKqvC,KAAKlK,SAAUA,GAAU,GAAO,GACpEnlC,KAAKqvC,KAAKzI,qBACJ5mC,KAAKqvC,KAAKzI,oBACd5mC,KAAKqvC,KAAKrlC,OAAOy8B,GACvBwM,GAAQqK,cAAc5d,EAAe1/B,KAAK6N,SAC1ColC,GAAQmK,YAAYp9C,KAAK6N,SACzB7N,KAAK+/C,oBAAoBrgB,IAGjC,MAAOvxB,GACHD,QAAQC,MAAMA,GACdnO,KAAKqvC,KAAKlI,aAEd,QACInnC,KAAK+/C,oBAAsB,QAGnCnf,0BAA0B/yB,GACtB7N,KAAKwgD,gBAET1Y,yBAAyBj6B,EAASgM,GAC9B,OAAIhM,EAAQwsB,aAAa,sBAIdr6B,KAAK4gD,0BAA0B/yC,GAG9Ck6B,qBAAqBl6B,EAASgM,GAC1B7Z,KAAKsgD,YAAa,EAClBtgD,KAAK6gD,cAAchzC,EAASgM,GAEhC4rB,8BAA8B53B,EAAS+pB,GACnC,OAAO53B,KAAK4gD,0BAA0B/yC,EAAS+pB,GAEnD+N,0BAA0B93B,EAAS+pB,GAC3B53B,KAAKikC,gBACLjkC,KAAKikC,eAAe7hB,OAExBpiB,KAAKsgD,YAAa,EAClBtgD,KAAKikC,eAAiB,IAAIpC,EAAe7hC,KAAM6N,EAAS+pB,GACxD,MAAM,aAAE2K,GAAiBviC,KAAKikC,eAC9BjkC,KAAKm/B,yBAAyBoD,EAAav9B,QAASu9B,GACpDviC,KAAKikC,eAAe//B,QAExBi7B,yBAAyBn6B,EAASL,GAC9BK,EAAQ,eAAiBhF,KAAKgE,GAElCq7B,eAAe16B,GACX25B,EAAWt+B,KAAK6N,SAEpB+xB,iCAAiCj7B,EAASuO,GACtClT,KAAKigD,sBAEThhB,mCAAmCt6B,EAASuO,SAClClT,KAAKsxC,aAAap+B,GACxBlT,KAAKigD,sBAETngB,0BAA0Bn7B,EAASuO,GAC/BhF,QAAQC,MAAM+E,GACdlT,KAAKigD,sBAETzgB,eAAe76B,EAASwJ,GACpBD,QAAQC,MAAMA,GACdnO,KAAKigD,sBAETxgB,gBAAgB96B,GACZ65B,EAAex+B,KAAK6N,SAExBq2B,uBAAsB,YAAEpC,IACpBxD,EAAWwD,EAAa9hC,KAAK00C,iBAAiB5S,IAElD2C,oCAAoCR,EAAgB/wB,GAChD,MAAM4/B,EAAQ9yC,KAAK00C,iBAAiBzQ,EAAenC,YAAamC,EAAerM,WAC/E53B,KAAK8gD,kCAAkChO,EAAO7O,EAAenC,YAAamC,EAAerM,WACzFkb,EAAMxZ,SAASgY,aAAap+B,GAEhCkxB,iCAAiCH,EAAgBvE,GAC7C1/B,KAAK6N,QAAQyrB,SAASgY,aAAa5R,GAEvC6E,sBAAsBN,EAAgB91B,GAClCD,QAAQC,MAAMA,GAElBw2B,wBAAuB,YAAE7C,IACrBtD,EAAesD,EAAa9hC,KAAK00C,iBAAiB5S,IAEtDiF,sBAAsB5B,EAAU7E,GAC5B,OAAO,EAEX2G,qBAAqB9B,EAAUzK,IAE/B0M,mBAEAnI,YAAYplB,GACR,IAAI8gB,EACJ,MAAMh2B,EAAU,IAAI85B,EAAaz+B,KAAM44B,EAAY5K,IAAKnU,EAAK,IAAI6kB,gBAAiB1+B,KAAK6N,SAGvF,OAFoC,QAAnC8sB,EAAK36B,KAAKggD,2BAAwC,IAAPrlB,GAAyBA,EAAG/H,SACxE5yB,KAAKggD,oBAAsBr7C,EACpB,IAAIsD,SAAQC,IACflI,KAAKigD,oBAAsB,KACvBjgD,KAAKigD,oBAAsB,OAC3BjgD,KAAKggD,oBAAsB,KAC3B93C,KAEJvD,EAAQwhB,aAGhB06B,cAAchzC,EAASgM,EAAK+d,GACxB,MAAMkb,EAAQ9yC,KAAK00C,iBAAiB7mC,EAAS+pB,GAC7C53B,KAAK8gD,kCAAkChO,EAAOjlC,EAAS+pB,GACvDkb,EAAMhmC,aAAa,aAAc,IACjCgmC,EAAMnZ,IAAM9f,EAEhBinC,kCAAkChO,EAAOjlC,EAAS+pB,GAC9C,MAAMxR,EAAS+B,EAAa,oBAAqByP,EAAW/pB,EAASilC,GACrE,GAAIyD,EAASnwB,GAAS,CAClB,MAAM,oBAAEooB,GAAwB,IAAIyP,GAAqBnL,GACzDA,EAAMxZ,SAASymB,oBAAuBrgB,IAClC,GAAIoT,EAAMnZ,IAAK,CACX,MAAM,WAAEvmB,EAAU,WAAEspB,GAAegD,EAE7BxsB,EAAW,CAAEE,aAAYspB,aAAYI,aADtBgW,EAAMrY,cAAcI,gBAAgBgS,WAEzDoG,GAAQI,MAAMP,EAAMnZ,IAAK,CAAEvT,SAAQlT,WAAUs7B,sBAAqBrG,YAAY,OAK9FuM,iBAAiB7mC,EAAS+pB,GACtB,IAAI+C,EAEJ,OAA0C,QAAlCA,EAAKujB,GADF/1B,EAAa,mBAAoByP,EAAW/pB,IAAY7N,KAAK6N,QAAQsa,aAAa,kBACpC,IAAPwS,EAAgBA,EAAK36B,KAAK6N,QAEhFoxB,iCAAiC70B,GAC7B,IAAIyD,EACJ,MAAM7J,EAAK+8C,IAAIC,OAAOhhD,KAAKgE,IAC3B,IACI,GAAI6J,EAAUuwC,GAAgBh0C,EAAU8d,cAAc,eAAelkB,KAAOhE,KAAKq+C,YAC7E,OAAOxwC,EAEX,GAAIA,EAAUuwC,GAAgBh0C,EAAU8d,cAAc,6BAA6BlkB,MAAQhE,KAAKq+C,YAE5F,aADMxwC,EAAQ8K,aACD3Y,KAAK2gD,2BAA2B9yC,GAEjDK,QAAQC,MAAM,6CAA6CnK,eAE/D,MAAOmK,GACHD,QAAQC,MAAMA,GAElB,OAAO,IAAIirB,EAEf6nB,sBAAsBppB,EAAMD,GAExB,OAAO0D,EAAoBR,EADZO,EAAUxD,EAAMD,IACe53B,KAAKw7B,cAEvDolB,0BAA0B/yC,EAAS+pB,GAC/B,MAAM5zB,EAAKmkB,EAAa,mBAAoByP,EAAW/pB,IAAY7N,KAAK6N,QAAQsa,aAAa,UAC7F,GAAIta,aAAmBqqB,kBAAoBl4B,KAAKihD,sBAAsBpzC,EAAS+pB,GAC3E,OAAO,EAEX,IAAK53B,KAAKshB,SAAiB,QAANtd,EACjB,OAAO,EAEX,GAAIA,EAAI,CACJ,MAAMymC,EAAeyT,GAAoBl6C,GACzC,GAAIymC,EACA,OAAQA,EAAarQ,SAG7B,SAAK6Y,GAAQsJ,oBAAoB1uC,IAG7B+pB,IAAcqb,GAAQsJ,oBAAoB3kB,IAK9C5zB,SACA,OAAOhE,KAAK6N,QAAQ7J,GAEpBsd,cACA,OAAQthB,KAAK6N,QAAQusB,SAErBqmB,gBACA,GAAIzgD,KAAK6N,QAAQ8rB,IACb,OAAO35B,KAAK6N,QAAQ8rB,IAGxB2mB,iBAEA,OADctgD,KAAK00C,iBAAiB10C,KAAK6N,SAC5BwsB,aAAa,cAE1BimB,eAAWhkD,GACX,MAAMw2C,EAAQ9yC,KAAK00C,iBAAiB10C,KAAK6N,SACrCvR,EACAw2C,EAAMhmC,aAAa,aAAc,IAGjCgmC,EAAM9Y,gBAAgB,cAG1BymB,cAAUA,GACVzgD,KAAKogD,kBAAmB,EACxBpgD,KAAK6N,QAAQ8rB,IAAM8mB,QAA6CA,EAAY,KAC5EzgD,KAAKq+C,WAAar+C,KAAK6N,QAAQ8rB,IAC/B35B,KAAKogD,kBAAmB,EAExBG,mBACA,OAAOvgD,KAAK6N,QAAQosB,QAEpBO,gBACA,YAA+Bj7B,IAAxBS,KAAKikC,qBAA+D1kC,IAA/BS,KAAKigD,sBAEjD97B,eACA,OAAOnkB,KAAK6N,QAAQsW,UAAYnkB,KAAKkgD,UAErC1kB,mBACA,IAAIb,EACJ,MAAMia,EAAO50C,KAAK6N,QAAQ4sB,cAAcvS,cAAc,2BAEtD,OAAO4S,EAD0E,QAAnEH,EAAKia,aAAmC,EAASA,EAAKhT,eAA4B,IAAPjH,EAAgBA,EAAK,OAiLtHvD,eAAe8pB,OAAO,cAAe9nB,GACrChC,eAAe8pB,OAAO,eAAgBrC,IAEtC,MACI,IAAIhxC,EAAUvD,SAAS62C,cACvB,GAAKtzC,IAEDA,EAAQwsB,aAAa,+BAEzB,KAAOxsB,EAAUA,EAAQ2qB,eACrB,GAAI3qB,GAAWvD,SAASrF,KACpB,OAAOiJ,QAAQ4e,KAAK6Q,CAAS;;;;;;;;;QAShC9vB,EAAQg/B,YAjBjB,GAsBAjlC,OAAOk2C,MAAQA,GACf55C,KGrwGA,MAAMk9C,WAAsCv2C,YAC1Co0B,0BACE2Z,GAAoB54C,MACpBA,KAAKymB,mBFQFwY,eAA2B7X,EAASnB,GACzC,MAAM,cAAElC,SAdHkb,iBACL,OAAOnb,IAAY67B,GAOd1gB,iBACL,MAAM,eAAElX,SAAyB,sCACjC,OAAOA,IATwBA,GAAiBzZ,KAAKqxC,KAarB0B,GAChC,OAAOt9B,EAAclM,OAAOuP,EAASnB,GEVTq7B,CAAYthD,KAAKonB,QAAS,CAAEm6B,SAAUvhD,KAAKwhD,qBAAqBp/C,KAAKpC,QAGjG05B,uBACEof,GAAuB94C,MACnBA,KAAKymB,cAAczmB,KAAKymB,aAAaH,cAG3Ck7B,qBAAqBt6C,GACnB,MAAMhC,EAAQ,IAAIu8C,aAAa,UAAW,CAAEv6C,SAC5C,OAAOlH,KAAKo1B,cAAclwB,GAGxBkiB,cAGF,MAAO,CAAEA,QAFOpnB,KAAKmoB,aAAa,WAEhBu5B,mBADS1hD,KAAKmoB,aAAa,yBACJ,GAAS,IAAKnoB,KAAK2hD,YAIhEvqB,eAAe8pB,OAAO,4BAA6BE,IClBnD50C,iBAAiB,sBCTV,UAAwCywB,QAAUgH,gBAAgB,aAAE1B,EAAY,UAAE3K,MACnFA,GAAaA,EAAUgqB,YAAcrf,EAAat9B,KAAKgb,IAAI,YAC7DsiB,EAAat9B,KAAKgpB,IAAI,UAAW2J,EAAUgqB,eCE/C,MAAMC,GACF/pC,YAAYgqC,EAAa98B,EAAW+8B,GAChC/hD,KAAK8hD,YAAcA,EACnB9hD,KAAKglB,UAAYA,EACjBhlB,KAAK+hD,aAAeA,EACpB/hD,KAAKgiD,kBAAoB,IAAI3J,IAEjCxwB,UACI7nB,KAAK8hD,YAAYt1C,iBAAiBxM,KAAKglB,UAAWhlB,KAAMA,KAAK+hD,cAEjEv8B,aACIxlB,KAAK8hD,YAAYx/B,oBAAoBtiB,KAAKglB,UAAWhlB,KAAMA,KAAK+hD,cAEpEE,iBAAiBC,GACbliD,KAAKgiD,kBAAkBp1C,IAAIs1C,GAE/BC,oBAAoBD,GAChBliD,KAAKgiD,kBAAkBrf,OAAOuf,GAElCE,YAAYl9C,GACR,MAAMm9C,EAiBd,SAAqBn9C,GACjB,GAAI,gCAAiCA,EACjC,OAAOA,EAEN,CACD,MAAM,yBAAEwgC,GAA6BxgC,EACrC,OAAO3G,OAAOmmC,OAAOx/B,EAAO,CACxBo9C,6BAA6B,EAC7B5c,2BACI1lC,KAAKsiD,6BAA8B,EACnC5c,EAAyB9lC,KAAKI,UA3BhBuiD,CAAYr9C,GAClC,IAAK,MAAMg9C,KAAWliD,KAAKwiD,SAAU,CACjC,GAAIH,EAAcC,4BACd,MAGAJ,EAAQE,YAAYC,IAI5BG,eACA,OAAOpmD,MAAM4iC,KAAKh/B,KAAKgiD,mBAAmB5xB,MAAK,CAACqyB,EAAMnE,KAClD,MAAMoE,EAAYD,EAAK7zB,MAAO+zB,EAAarE,EAAM1vB,MACjD,OAAO8zB,EAAYC,GAAc,EAAID,EAAYC,EAAa,EAAI,MAoB9E,MAAMC,GACF9qC,YAAY+qC,GACR7iD,KAAK6iD,YAAcA,EACnB7iD,KAAK8iD,kBAAoB,IAAIC,IAC7B/iD,KAAKwgC,SAAU,EAEnBt8B,QACSlE,KAAKwgC,UACNxgC,KAAKwgC,SAAU,EACfxgC,KAAKgjD,eAAevwC,SAAQwwC,GAAiBA,EAAcp7B,aAGnEzF,OACQpiB,KAAKwgC,UACLxgC,KAAKwgC,SAAU,EACfxgC,KAAKgjD,eAAevwC,SAAQwwC,GAAiBA,EAAcz9B,gBAG/Dw9B,qBACA,OAAO5mD,MAAM4iC,KAAKh/B,KAAK8iD,kBAAkBjlB,UACpCz+B,QAAO,CAAC+qB,EAAW1rB,IAAQ0rB,EAAUvtB,OAAOR,MAAM4iC,KAAKvgC,EAAIo/B,YAAY,IAEhFokB,iBAAiBC,GACbliD,KAAKkjD,6BAA6BhB,GAASD,iBAAiBC,GAEhEC,oBAAoBD,GAChBliD,KAAKkjD,6BAA6BhB,GAASC,oBAAoBD,GAEnEr9C,YAAYsJ,EAAOlR,EAASggC,EAAS,IACjCj9B,KAAK6iD,YAAYh+C,YAAYsJ,EAAO,SAASlR,IAAWggC,GAE5DimB,6BAA6BhB,GACzB,MAAM,YAAEJ,EAAW,UAAE98B,EAAS,aAAE+8B,GAAiBG,EACjD,OAAOliD,KAAKmjD,mBAAmBrB,EAAa98B,EAAW+8B,GAE3DoB,mBAAmBrB,EAAa98B,EAAW+8B,GACvC,MAAMqB,EAAmBpjD,KAAKqjD,oCAAoCvB,GAC5DwB,EAAWtjD,KAAKsjD,SAASt+B,EAAW+8B,GAC1C,IAAIkB,EAAgBG,EAAiBp1B,IAAIs1B,GAKzC,OAJKL,IACDA,EAAgBjjD,KAAKujD,oBAAoBzB,EAAa98B,EAAW+8B,GACjEqB,EAAiBn1B,IAAIq1B,EAAUL,IAE5BA,EAEXM,oBAAoBzB,EAAa98B,EAAW+8B,GACxC,MAAMkB,EAAgB,IAAIpB,GAAcC,EAAa98B,EAAW+8B,GAIhE,OAHI/hD,KAAKwgC,SACLyiB,EAAcp7B,UAEXo7B,EAEXI,oCAAoCvB,GAChC,IAAIsB,EAAmBpjD,KAAK8iD,kBAAkB90B,IAAI8zB,GAKlD,OAJKsB,IACDA,EAAmB,IAAIL,IACvB/iD,KAAK8iD,kBAAkB70B,IAAI6zB,EAAasB,IAErCA,EAEXE,SAASt+B,EAAW+8B,GAChB,MAAM1kC,EAAQ,CAAC2H,GAIf,OAHAzmB,OAAOC,KAAKujD,GAAc3xB,OAAO3d,SAAQ/T,IACrC2e,EAAMxe,KAAK,GAAGkjD,EAAarjD,GAAO,GAAK,MAAMA,QAE1C2e,EAAMzf,KAAK,MAI1B,MAAM4lD,GAAoB,4DAgC1B,SAASC,GAASnnD,GACd,OAAOA,EAAMsW,QAAQ,uBAAuB,CAACyL,EAAGqlC,IAASA,EAAKxtB,gBAElE,SAASytB,GAAWrnD,GAChB,OAAOA,EAAM2sB,OAAO,GAAGiN,cAAgB55B,EAAMe,MAAM,GAEvD,SAASumD,GAAUtnD,GACf,OAAOA,EAAMsW,QAAQ,YAAY,CAACyL,EAAGqlC,IAAS,IAAIA,EAAK/oC,kBAgD3D,MAAMkpC,GAAoB,CACtB,EAAKp3C,GAAK,QACV,OAAUA,GAAK,QACf,KAAQA,GAAK,SACb,QAAWA,GAAK,SAChB,MAASA,GAA+B,UAA1BA,EAAE0b,aAAa,QAAsB,QAAU,QAC7D,OAAU1b,GAAK,SACf,SAAYA,GAAK,SAQrB,SAAS0B,GAAMlR,GACX,MAAM,IAAIkB,MAAMlB,GAEpB,SAAS6mD,GAASxnD,GACd,IACI,OAAOsE,KAAK0Z,MAAMhe,GAEtB,MAAOynD,GACH,OAAOznD,GAIf,MAAM0nD,GACFlsC,YAAYV,EAASgP,GACjBpmB,KAAKoX,QAAUA,EACfpX,KAAKomB,OAASA,EAEdwI,YACA,OAAO5uB,KAAKomB,OAAOwI,MAEnBkzB,kBACA,OAAO9hD,KAAKomB,OAAO07B,YAEnBC,mBACA,OAAO/hD,KAAKomB,OAAO27B,aAEnB58B,iBACA,OAAOnlB,KAAKoX,QAAQ+N,WAExBi9B,YAAYl9C,GACJlF,KAAKikD,qBAAqB/+C,IAC1BlF,KAAKkkD,gBAAgBh/C,GAGzB8f,gBACA,OAAOhlB,KAAKomB,OAAOpB,UAEnBlgB,aACA,MAAMA,EAAS9E,KAAKmkD,WAAWnkD,KAAKokD,YACpC,GAAqB,mBAAVt/C,EACP,OAAOA,EAEX,MAAM,IAAI3G,MAAM,WAAW6B,KAAKomB,wCAAwCpmB,KAAKokD,eAEjFF,gBAAgBh/C,GACZ,MAAM,OAAE6L,EAAM,cAAEszC,GAAkBn/C,EAClC,IACI,MAAM,OAAE6V,GAAW/a,KAAKomB,OAClBk+B,EAAc/lD,OAAOmmC,OAAOx/B,EAAO,CAAE6V,WAC3C/a,KAAK8E,OAAOlF,KAAKI,KAAKmkD,WAAYG,GAClCtkD,KAAKoX,QAAQmtC,iBAAiBvkD,KAAKokD,WAAY,CAAEl/C,QAAO6L,SAAQszC,gBAAej+B,OAAQpmB,KAAKokD,aAEhG,MAAOj2C,GACH,MAAM,WAAEgX,EAAU,WAAEg/B,EAAU,QAAEt2C,EAAO,MAAE+gB,GAAU5uB,KAC7Ci9B,EAAS,CAAE9X,aAAYg/B,aAAYt2C,UAAS+gB,QAAO1pB,SACzDlF,KAAKoX,QAAQvS,YAAYsJ,EAAO,oBAAoBnO,KAAKomB,UAAW6W,IAG5EgnB,qBAAqB/+C,GACjB,MAAM48C,EAAc58C,EAAM6L,OAC1B,OAAI/Q,KAAK6N,UAAYi0C,IAGZA,aAAuBxpB,SAAWt4B,KAAK6N,QAAQtD,SAASu3C,GACtD9hD,KAAKwkD,MAAMC,gBAAgB3C,GAG3B9hD,KAAKwkD,MAAMC,gBAAgBzkD,KAAKomB,OAAOvY,UAGlDs2C,iBACA,OAAOnkD,KAAKoX,QAAQ+sC,WAEpBC,iBACA,OAAOpkD,KAAKomB,OAAOg+B,WAEnBv2C,cACA,OAAO7N,KAAKwkD,MAAM32C,QAElB22C,YACA,OAAOxkD,KAAKoX,QAAQotC,OAI5B,MAAME,GACF5sC,YAAYjK,EAASyrB,GACjBt5B,KAAK2kD,qBAAuB,CAAE9b,YAAY,EAAM+b,WAAW,EAAMC,SAAS,GAC1E7kD,KAAK6N,QAAUA,EACf7N,KAAKwgC,SAAU,EACfxgC,KAAKs5B,SAAWA,EAChBt5B,KAAKq+B,SAAW,IAAIga,IACpBr4C,KAAK8kD,iBAAmB,IAAIC,kBAAkBC,GAAchlD,KAAKilD,iBAAiBD,KAEtF9gD,QACSlE,KAAKwgC,UACNxgC,KAAKwgC,SAAU,EACfxgC,KAAK8kD,iBAAiB/jB,QAAQ/gC,KAAK6N,QAAS7N,KAAK2kD,sBACjD3kD,KAAKksC,WAGbgZ,MAAMzgD,GACEzE,KAAKwgC,UACLxgC,KAAK8kD,iBAAiBt/B,aACtBxlB,KAAKwgC,SAAU,GAEnB/7B,IACKzE,KAAKwgC,UACNxgC,KAAK8kD,iBAAiB/jB,QAAQ/gC,KAAK6N,QAAS7N,KAAK2kD,sBACjD3kD,KAAKwgC,SAAU,GAGvBpe,OACQpiB,KAAKwgC,UACLxgC,KAAK8kD,iBAAiBK,cACtBnlD,KAAK8kD,iBAAiBt/B,aACtBxlB,KAAKwgC,SAAU,GAGvB0L,UACI,GAAIlsC,KAAKwgC,QAAS,CACd,MAAM4kB,EAAU,IAAI/M,IAAIr4C,KAAKqlD,uBAC7B,IAAK,MAAMx3C,KAAWzR,MAAM4iC,KAAKh/B,KAAKq+B,UAC7B+mB,EAAQnlC,IAAIpS,IACb7N,KAAKslD,cAAcz3C,GAG3B,IAAK,MAAMA,KAAWzR,MAAM4iC,KAAKomB,GAC7BplD,KAAKulD,WAAW13C,IAI5Bo3C,iBAAiBD,GACb,GAAIhlD,KAAKwgC,QACL,IAAK,MAAMglB,KAAYR,EACnBhlD,KAAKylD,gBAAgBD,GAIjCC,gBAAgBD,GACS,cAAjBA,EAASl5C,KACTtM,KAAK0lD,uBAAuBF,EAASz0C,OAAQy0C,EAASpnB,eAEhC,aAAjBonB,EAASl5C,OACdtM,KAAK2lD,oBAAoBH,EAASI,cAClC5lD,KAAK6lD,kBAAkBL,EAASM,aAGxCJ,uBAAuBK,EAAM3nB,GACzB,MAAMvwB,EAAUk4C,EACZ/lD,KAAKq+B,SAASpe,IAAIpS,GACd7N,KAAKs5B,SAAS0sB,yBAA2BhmD,KAAKimD,aAAap4C,GAC3D7N,KAAKs5B,SAAS0sB,wBAAwBn4C,EAASuwB,GAG/Cp+B,KAAKslD,cAAcz3C,GAGlB7N,KAAKimD,aAAap4C,IACvB7N,KAAKulD,WAAW13C,GAGxB83C,oBAAoBO,GAChB,IAAK,MAAMH,KAAQ3pD,MAAM4iC,KAAKknB,GAAQ,CAClC,MAAMr4C,EAAU7N,KAAKmmD,gBAAgBJ,GACjCl4C,GACA7N,KAAKomD,YAAYv4C,EAAS7N,KAAKslD,gBAI3CO,kBAAkBK,GACd,IAAK,MAAMH,KAAQ3pD,MAAM4iC,KAAKknB,GAAQ,CAClC,MAAMr4C,EAAU7N,KAAKmmD,gBAAgBJ,GACjCl4C,GAAW7N,KAAKqmD,gBAAgBx4C,IAChC7N,KAAKomD,YAAYv4C,EAAS7N,KAAKulD,aAI3CU,aAAap4C,GACT,OAAO7N,KAAKs5B,SAAS2sB,aAAap4C,GAEtCw3C,oBAAoBiB,EAAOtmD,KAAK6N,SAC5B,OAAO7N,KAAKs5B,SAAS+rB,oBAAoBiB,GAE7CF,YAAYE,EAAMC,GACd,IAAK,MAAM14C,KAAW7N,KAAKqlD,oBAAoBiB,GAC3CC,EAAU3mD,KAAKI,KAAM6N,GAG7Bs4C,gBAAgBJ,GACZ,GAAIA,EAAKS,UAAYjuB,KAAKkuB,aACtB,OAAOV,EAGfM,gBAAgBx4C,GACZ,OAAIA,EAAQuvB,aAAep9B,KAAK6N,QAAQuvB,aAI7Bp9B,KAAK6N,QAAQtD,SAASsD,GAGrC03C,WAAW13C,GACF7N,KAAKq+B,SAASpe,IAAIpS,IACf7N,KAAKqmD,gBAAgBx4C,KACrB7N,KAAKq+B,SAASzxB,IAAIiB,GACd7N,KAAKs5B,SAASotB,gBACd1mD,KAAKs5B,SAASotB,eAAe74C,IAK7Cy3C,cAAcz3C,GACN7N,KAAKq+B,SAASpe,IAAIpS,KAClB7N,KAAKq+B,SAASsE,OAAO90B,GACjB7N,KAAKs5B,SAASqtB,kBACd3mD,KAAKs5B,SAASqtB,iBAAiB94C,KAM/C,MAAM+4C,GACF9uC,YAAYjK,EAASuwB,EAAe9E,GAChCt5B,KAAKo+B,cAAgBA,EACrBp+B,KAAKs5B,SAAWA,EAChBt5B,KAAK6mD,gBAAkB,IAAInC,GAAgB72C,EAAS7N,MAEpD6N,cACA,OAAO7N,KAAK6mD,gBAAgBh5C,QAE5Bi5C,eACA,MAAO,IAAI9mD,KAAKo+B,iBAEpBl6B,QACIlE,KAAK6mD,gBAAgB3iD,QAEzBghD,MAAMzgD,GACFzE,KAAK6mD,gBAAgB3B,MAAMzgD,GAE/B2d,OACIpiB,KAAK6mD,gBAAgBzkC,OAEzB8pB,UACIlsC,KAAK6mD,gBAAgB3a,UAErB1L,cACA,OAAOxgC,KAAK6mD,gBAAgBrmB,QAEhCylB,aAAap4C,GACT,OAAOA,EAAQwsB,aAAar6B,KAAKo+B,eAErCinB,oBAAoBiB,GAChB,MAAMhpC,EAAQtd,KAAKimD,aAAaK,GAAQ,CAACA,GAAQ,GAC3ClB,EAAUhpD,MAAM4iC,KAAKsnB,EAAKv7C,iBAAiB/K,KAAK8mD,WACtD,OAAOxpC,EAAM1gB,OAAOwoD,GAExBsB,eAAe74C,GACP7N,KAAKs5B,SAASytB,yBACd/mD,KAAKs5B,SAASytB,wBAAwBl5C,EAAS7N,KAAKo+B,eAG5DuoB,iBAAiB94C,GACT7N,KAAKs5B,SAAS0tB,2BACdhnD,KAAKs5B,SAAS0tB,0BAA0Bn5C,EAAS7N,KAAKo+B,eAG9D4nB,wBAAwBn4C,EAASuwB,GACzBp+B,KAAKs5B,SAAS2tB,8BAAgCjnD,KAAKo+B,eAAiBA,GACpEp+B,KAAKs5B,SAAS2tB,6BAA6Bp5C,EAASuwB,IAKhE,MAAM8oB,GACFpvC,YAAYjK,EAASyrB,GACjBt5B,KAAK6N,QAAUA,EACf7N,KAAKs5B,SAAWA,EAChBt5B,KAAKwgC,SAAU,EACfxgC,KAAKmnD,UAAY,IAAIpE,IACrB/iD,KAAK8kD,iBAAmB,IAAIC,kBAAiBC,GAAahlD,KAAKilD,iBAAiBD,KAEpF9gD,QACSlE,KAAKwgC,UACNxgC,KAAKwgC,SAAU,EACfxgC,KAAK8kD,iBAAiB/jB,QAAQ/gC,KAAK6N,QAAS,CAAEg7B,YAAY,EAAMue,mBAAmB,IACnFpnD,KAAKksC,WAGb9pB,OACQpiB,KAAKwgC,UACLxgC,KAAK8kD,iBAAiBK,cACtBnlD,KAAK8kD,iBAAiBt/B,aACtBxlB,KAAKwgC,SAAU,GAGvB0L,UACI,GAAIlsC,KAAKwgC,QACL,IAAK,MAAMpC,KAAiBp+B,KAAKqnD,oBAC7BrnD,KAAKsnD,iBAAiBlpB,EAAe,MAIjD6mB,iBAAiBD,GACb,GAAIhlD,KAAKwgC,QACL,IAAK,MAAMglB,KAAYR,EACnBhlD,KAAKylD,gBAAgBD,GAIjCC,gBAAgBD,GACZ,MAAMpnB,EAAgBonB,EAASpnB,cAC3BA,GACAp+B,KAAKsnD,iBAAiBlpB,EAAeonB,EAAS+B,UAGtDD,iBAAiBlpB,EAAempB,GAC5B,MAAM7oD,EAAMsB,KAAKs5B,SAASkuB,4BAA4BppB,GACtD,GAAW,MAAP1/B,EAAa,CACRsB,KAAKmnD,UAAUlnC,IAAIme,IACpBp+B,KAAKynD,kBAAkB/oD,EAAK0/B,GAEhC,MAAM9hC,EAAQ0D,KAAK6N,QAAQsa,aAAaiW,GAIxC,GAHIp+B,KAAKmnD,UAAUn5B,IAAIoQ,IAAkB9hC,GACrC0D,KAAK0nD,sBAAsBprD,EAAOoC,EAAK6oD,GAE9B,MAATjrD,EAAe,CACf,MAAMirD,EAAWvnD,KAAKmnD,UAAUn5B,IAAIoQ,GACpCp+B,KAAKmnD,UAAUxkB,OAAOvE,GAClBmpB,GACAvnD,KAAK2nD,oBAAoBjpD,EAAK0/B,EAAempB,QAGjDvnD,KAAKmnD,UAAUl5B,IAAImQ,EAAe9hC,IAI9CmrD,kBAAkB/oD,EAAK0/B,GACfp+B,KAAKs5B,SAASmuB,mBACdznD,KAAKs5B,SAASmuB,kBAAkB/oD,EAAK0/B,GAG7CspB,sBAAsBprD,EAAOoC,EAAK6oD,GAC1BvnD,KAAKs5B,SAASouB,uBACd1nD,KAAKs5B,SAASouB,sBAAsBprD,EAAOoC,EAAK6oD,GAGxDI,oBAAoBjpD,EAAK0/B,EAAempB,GAChCvnD,KAAKs5B,SAASquB,qBACd3nD,KAAKs5B,SAASquB,oBAAoBjpD,EAAK0/B,EAAempB,GAG1DF,0BACA,OAAOjrD,MAAM4iC,KAAK,IAAIqZ,IAAIr4C,KAAK4nD,sBAAsBhrD,OAAOoD,KAAK6nD,0BAEjED,4BACA,OAAOxrD,MAAM4iC,KAAKh/B,KAAK6N,QAAQg7B,YAAYpqC,KAAIqpD,GAAaA,EAAUh4C,OAEtE+3C,6BACA,OAAOzrD,MAAM4iC,KAAKh/B,KAAKmnD,UAAU3oD,SAWzC,SAAS,GAAMC,EAAKC,GAChB,IAAIm/B,EAASp/B,EAAIuvB,IAAItvB,GAKrB,OAJKm/B,IACDA,EAAS,IAAIwa,IACb55C,EAAIwvB,IAAIvvB,EAAKm/B,IAEVA,EASX,MAAMkqB,GACFjwC,cACI9X,KAAKgoD,YAAc,IAAIjF,IAEvBvkD,WACA,OAAOpC,MAAM4iC,KAAKh/B,KAAKgoD,YAAYxpD,QAEnCq/B,aAEA,OADazhC,MAAM4iC,KAAKh/B,KAAKgoD,YAAYnqB,UAC7Bz+B,QAAO,CAACy+B,EAAQ5P,IAAQ4P,EAAOjhC,OAAOR,MAAM4iC,KAAK/Q,KAAO,IAEpE4H,WAEA,OADaz5B,MAAM4iC,KAAKh/B,KAAKgoD,YAAYnqB,UAC7Bz+B,QAAO,CAACy2B,EAAM5H,IAAQ4H,EAAO5H,EAAI4H,MAAM,GAEvDjpB,IAAIlO,EAAKpC,IArCb,SAAamC,EAAKC,EAAKpC,GACnB,GAAMmC,EAAKC,GAAKkO,IAAItQ,GAqChBsQ,CAAI5M,KAAKgoD,YAAatpD,EAAKpC,GAE/BqmC,OAAOjkC,EAAKpC,IArChB,SAAamC,EAAKC,EAAKpC,GACnB,GAAMmC,EAAKC,GAAKikC,OAAOrmC,GAW3B,SAAemC,EAAKC,GAChB,MAAMm/B,EAASp/B,EAAIuvB,IAAItvB,GACT,MAAVm/B,GAAiC,GAAfA,EAAOhI,MACzBp3B,EAAIkkC,OAAOjkC,GAbfupD,CAAMxpD,EAAKC,GAoCPwpD,CAAIloD,KAAKgoD,YAAatpD,EAAKpC,GAE/B2jB,IAAIvhB,EAAKpC,GACL,MAAMuhC,EAAS79B,KAAKgoD,YAAYh6B,IAAItvB,GACpC,OAAiB,MAAVm/B,GAAkBA,EAAO5d,IAAI3jB,GAExC6rD,OAAOzpD,GACH,OAAOsB,KAAKgoD,YAAY/nC,IAAIvhB,GAEhC0pD,SAAS9rD,GAEL,OADaF,MAAM4iC,KAAKh/B,KAAKgoD,YAAYnqB,UAC7BwqB,MAAKp6B,GAAOA,EAAIhO,IAAI3jB,KAEpCgsD,gBAAgB5pD,GACZ,MAAMm/B,EAAS79B,KAAKgoD,YAAYh6B,IAAItvB,GACpC,OAAOm/B,EAASzhC,MAAM4iC,KAAKnB,GAAU,GAEzC0qB,gBAAgBjsD,GACZ,OAAOF,MAAM4iC,KAAKh/B,KAAKgoD,aAClB5nD,QAAO,EAAE1B,EAAKm/B,KAAYA,EAAO5d,IAAI3jB,KACrCmC,KAAI,EAAEC,EAAKm/B,KAAYn/B,KA6BpC,MAAM8pD,GACF1wC,YAAYjK,EAASuwB,EAAe9E,GAChCt5B,KAAKyoD,kBAAoB,IAAI7B,GAAkB/4C,EAASuwB,EAAep+B,MACvEA,KAAKs5B,SAAWA,EAChBt5B,KAAK0oD,gBAAkB,IAAIX,GAE3BvnB,cACA,OAAOxgC,KAAKyoD,kBAAkBjoB,QAElCt8B,QACIlE,KAAKyoD,kBAAkBvkD,QAE3BghD,MAAMzgD,GACFzE,KAAKyoD,kBAAkBvD,MAAMzgD,GAEjC2d,OACIpiB,KAAKyoD,kBAAkBrmC,OAE3B8pB,UACIlsC,KAAKyoD,kBAAkBvc,UAEvBr+B,cACA,OAAO7N,KAAKyoD,kBAAkB56C,QAE9BuwB,oBACA,OAAOp+B,KAAKyoD,kBAAkBrqB,cAElC2oB,wBAAwBl5C,GACpB7N,KAAK2oD,cAAc3oD,KAAK4oD,qBAAqB/6C,IAEjDo5C,6BAA6Bp5C,GACzB,MAAOg7C,EAAiBC,GAAiB9oD,KAAK+oD,wBAAwBl7C,GACtE7N,KAAKgpD,gBAAgBH,GACrB7oD,KAAK2oD,cAAcG,GAEvB9B,0BAA0Bn5C,GACtB7N,KAAKgpD,gBAAgBhpD,KAAK0oD,gBAAgBJ,gBAAgBz6C,IAE9D86C,cAAcM,GACVA,EAAOx2C,SAAQyN,GAASlgB,KAAKkpD,aAAahpC,KAE9C8oC,gBAAgBC,GACZA,EAAOx2C,SAAQyN,GAASlgB,KAAKmpD,eAAejpC,KAEhDgpC,aAAahpC,GACTlgB,KAAKs5B,SAAS4vB,aAAahpC,GAC3BlgB,KAAK0oD,gBAAgB97C,IAAIsT,EAAMrS,QAASqS,GAE5CipC,eAAejpC,GACXlgB,KAAKs5B,SAAS6vB,eAAejpC,GAC7BlgB,KAAK0oD,gBAAgB/lB,OAAOziB,EAAMrS,QAASqS,GAE/C6oC,wBAAwBl7C,GACpB,MAAMu7C,EAAiBppD,KAAK0oD,gBAAgBJ,gBAAgBz6C,GACtDw7C,EAAgBrpD,KAAK4oD,qBAAqB/6C,GAC1Cy7C,EAmBd,SAAa7G,EAAMnE,GACf,MAAM5hD,EAASumB,KAAKziB,IAAIiiD,EAAK/lD,OAAQ4hD,EAAM5hD,QAC3C,OAAON,MAAM4iC,KAAK,CAAEtiC,WAAU,CAAC2hB,EAAGuQ,IAAU,CAAC6zB,EAAK7zB,GAAQ0vB,EAAM1vB,MArBhC26B,CAAIH,EAAgBC,GAC3CG,WAAU,EAAEC,EAAeC,MAAkB,OAsB5BpL,EAtB2DoL,KAsBjEjH,EAtBkDgH,IAuBvDnL,GAASmE,EAAK7zB,OAAS0vB,EAAM1vB,OAAS6zB,EAAK7gB,SAAW0c,EAAM1c,SAD/E,IAAwB6gB,EAAMnE,KArBtB,OAA4B,GAAxBgL,EACO,CAAC,GAAI,IAGL,CAACF,EAAe/rD,MAAMisD,GAAsBD,EAAchsD,MAAMisD,IAG/EV,qBAAqB/6C,GACjB,MAAMuwB,EAAgBp+B,KAAKo+B,cAE3B,OAGR,SAA0BurB,EAAa97C,EAASuwB,GAC5C,OAAOurB,EAAYh3C,OAAO7T,MAAM,OAAOsB,QAAOwhC,GAAWA,EAAQllC,SAC5D+B,KAAI,CAACmjC,EAAShT,KAAU,CAAG/gB,UAASuwB,gBAAewD,UAAShT,YALtDg7B,CADa/7C,EAAQsa,aAAaiW,IAAkB,GACtBvwB,EAASuwB,IAetD,MAAMyrB,GACF/xC,YAAYjK,EAASuwB,EAAe9E,GAChCt5B,KAAK8pD,kBAAoB,IAAItB,GAAkB36C,EAASuwB,EAAep+B,MACvEA,KAAKs5B,SAAWA,EAChBt5B,KAAK+pD,oBAAsB,IAAI3xB,QAC/Bp4B,KAAKgqD,uBAAyB,IAAI5xB,QAElCoI,cACA,OAAOxgC,KAAK8pD,kBAAkBtpB,QAElCt8B,QACIlE,KAAK8pD,kBAAkB5lD,QAE3Bke,OACIpiB,KAAK8pD,kBAAkB1nC,OAE3B8pB,UACIlsC,KAAK8pD,kBAAkB5d,UAEvBr+B,cACA,OAAO7N,KAAK8pD,kBAAkBj8C,QAE9BuwB,oBACA,OAAOp+B,KAAK8pD,kBAAkB1rB,cAElC8qB,aAAahpC,GACT,MAAM,QAAErS,GAAYqS,GACd,MAAE5jB,GAAU0D,KAAKiqD,yBAAyB/pC,GAC5C5jB,IACA0D,KAAKkqD,6BAA6Br8C,GAASogB,IAAI/N,EAAO5jB,GACtD0D,KAAKs5B,SAAS6wB,oBAAoBt8C,EAASvR,IAGnD6sD,eAAejpC,GACX,MAAM,QAAErS,GAAYqS,GACd,MAAE5jB,GAAU0D,KAAKiqD,yBAAyB/pC,GAC5C5jB,IACA0D,KAAKkqD,6BAA6Br8C,GAAS80B,OAAOziB,GAClDlgB,KAAKs5B,SAAS8wB,sBAAsBv8C,EAASvR,IAGrD2tD,yBAAyB/pC,GACrB,IAAImqC,EAAcrqD,KAAK+pD,oBAAoB/7B,IAAI9N,GAK/C,OAJKmqC,IACDA,EAAcrqD,KAAK+Z,WAAWmG,GAC9BlgB,KAAK+pD,oBAAoB97B,IAAI/N,EAAOmqC,IAEjCA,EAEXH,6BAA6Br8C,GACzB,IAAIy8C,EAAgBtqD,KAAKgqD,uBAAuBh8B,IAAIngB,GAKpD,OAJKy8C,IACDA,EAAgB,IAAIvH,IACpB/iD,KAAKgqD,uBAAuB/7B,IAAIpgB,EAASy8C,IAEtCA,EAEXvwC,WAAWmG,GACP,IAEI,MAAO,CAAE5jB,MADK0D,KAAKs5B,SAASixB,mBAAmBrqC,IAGnD,MAAO/R,GACH,MAAO,CAAEA,WAKrB,MAAMq8C,GACF1yC,YAAYV,EAASkiB,GACjBt5B,KAAKoX,QAAUA,EACfpX,KAAKs5B,SAAWA,EAChBt5B,KAAKyqD,iBAAmB,IAAI1H,IAEhC7+C,QACSlE,KAAK0qD,oBACN1qD,KAAK0qD,kBAAoB,IAAIb,GAAkB7pD,KAAK6N,QAAS7N,KAAK2qD,gBAAiB3qD,MACnFA,KAAK0qD,kBAAkBxmD,SAG/Bke,OACQpiB,KAAK0qD,oBACL1qD,KAAK0qD,kBAAkBtoC,cAChBpiB,KAAK0qD,kBACZ1qD,KAAK4qD,wBAGT/8C,cACA,OAAO7N,KAAKoX,QAAQvJ,QAEpBsX,iBACA,OAAOnlB,KAAKoX,QAAQ+N,WAEpBwlC,sBACA,OAAO3qD,KAAK6qD,OAAOF,gBAEnBE,aACA,OAAO7qD,KAAKoX,QAAQyzC,OAEpBrI,eACA,OAAOpmD,MAAM4iC,KAAKh/B,KAAKyqD,iBAAiB5sB,UAE5CitB,cAAc1kC,GACV,MAAM87B,EAAU,IAAI8B,GAAQhkD,KAAKoX,QAASgP,GAC1CpmB,KAAKyqD,iBAAiBx8B,IAAI7H,EAAQ87B,GAClCliD,KAAKs5B,SAAS2oB,iBAAiBC,GAEnC6I,iBAAiB3kC,GACb,MAAM87B,EAAUliD,KAAKyqD,iBAAiBz8B,IAAI5H,GACtC87B,IACAliD,KAAKyqD,iBAAiB9nB,OAAOvc,GAC7BpmB,KAAKs5B,SAAS6oB,oBAAoBD,IAG1C0I,uBACI5qD,KAAKwiD,SAAS/vC,SAAQyvC,GAAWliD,KAAKs5B,SAAS6oB,oBAAoBD,KACnEliD,KAAKyqD,iBAAiB9+C,QAE1B4+C,mBAAmBrqC,GACf,MAAMkG,EAtsBd,MACItO,YAAYjK,EAAS+gB,EAAOo8B,GACxBhrD,KAAK6N,QAAUA,EACf7N,KAAK4uB,MAAQA,EACb5uB,KAAK8hD,YAAckJ,EAAWlJ,aAAej0C,EAC7C7N,KAAKglB,UAAYgmC,EAAWhmC,WA8CpC,SAAuCnX,GACnC,MAAM8zB,EAAU9zB,EAAQ8zB,QAAQhnB,cAChC,GAAIgnB,KAAWkiB,GACX,OAAOA,GAAkBliB,GAAS9zB,GAjDOo9C,CAA8Bp9C,IAAYM,GAAM,sBACzFnO,KAAK+hD,aAAeiJ,EAAWjJ,cAAgB,GAC/C/hD,KAAKmlB,WAAa6lC,EAAW7lC,YAAchX,GAAM,sBACjDnO,KAAKokD,WAAa4G,EAAW5G,YAAcj2C,GAAM,uBAErDgzB,gBAAgBjhB,GACZ,OAAO,IAAIlgB,KAAKkgB,EAAMrS,QAASqS,EAAM0O,MAvD7C,SAAqCs8B,GACjC,MACM9F,EADS8F,EAAiBv4C,OACT2K,MAAMkmC,KAAsB,GACnD,MAAO,CACH1B,aAOkBqJ,EAPY/F,EAAQ,GAQnB,UAAnB+F,EACOvjD,OAEiB,YAAnBujD,EACE7gD,cADN,GAVD0a,UAAWogC,EAAQ,GACnBrD,aAAcqD,EAAQ,IAaHrD,EAb0BqD,EAAQ,GAclDrD,EAAajjD,MAAM,KAAKM,QAAO,CAAClC,EAASgjB,IAAU3hB,OAAOmmC,OAAOxnC,EAAS,CAAE,CAACgjB,EAAMtN,QAAQ,KAAM,MAAO,KAAKrV,KAAK2iB,MAAW,KAdrE,GAC3DiF,WAAYigC,EAAQ,GACpBhB,WAAYgB,EAAQ,IAG5B,IAA0B+F,EAQCpJ,EAoCyBqJ,CAA4BlrC,EAAM0hB,UAElFvR,WACI,MAAMg7B,EAAkBrrD,KAAKmrD,gBAAkB,IAAInrD,KAAKmrD,kBAAoB,GAC5E,MAAO,GAAGnrD,KAAKglB,YAAYqmC,MAAoBrrD,KAAKmlB,cAAcnlB,KAAKokD,aAEvErpC,aACA,OAAI/a,KAAK8hD,uBAAuBxpB,QACrBt4B,KAAKsrD,mCAAmCtrD,KAAK8hD,aAG7C,GAGfwJ,mCAAmCxJ,GAC/B,MAAM/mC,EAAS,GACTmU,EAAU,IAAI4wB,OAAO,SAAS9/C,KAAKmlB,0BASzC,OARmB/oB,MAAM4iC,KAAK8iB,EAAYjZ,YAC/Bp2B,SAAQ,EAAG3C,OAAMxT,YACxB,MAAMghB,EAAQxN,EAAKwN,MAAM4R,GACnBxwB,EAAM4e,GAASA,EAAM,GACvB5e,GACAH,OAAOmmC,OAAO3pB,EAAQ,CAAE,CAAC0oC,GAAS/kD,IAAOolD,GAASxnD,QAGnDye,EAEPowC,sBACA,OA7DsBrJ,EA6DM9hD,KAAK8hD,cA5DlBl6C,OACR,SAEFk6C,GAAex3C,SACb,gBADN,EAJT,IAA8Bw3C,IA4tBAyJ,SAASrrC,GAC/B,GAAIkG,EAAOjB,YAAcnlB,KAAKmlB,WAC1B,OAAOiB,EAGf+jC,oBAAoBt8C,EAASuY,GACzBpmB,KAAK8qD,cAAc1kC,GAEvBgkC,sBAAsBv8C,EAASuY,GAC3BpmB,KAAK+qD,iBAAiB3kC,IAI9B,MAAMolC,GACF1zC,YAAYV,EAASgU,GACjBprB,KAAKoX,QAAUA,EACfpX,KAAKorB,SAAWA,EAChBprB,KAAKyrD,kBAAoB,IAAIvE,GAAkBlnD,KAAK6N,QAAS7N,MAC7DA,KAAK0rD,mBAAqB1rD,KAAKmkD,WAAWuH,mBAC1C1rD,KAAK2rD,yCAETznD,QACIlE,KAAKyrD,kBAAkBvnD,QAE3Bke,OACIpiB,KAAKyrD,kBAAkBrpC,OAEvBvU,cACA,OAAO7N,KAAKoX,QAAQvJ,QAEpBs2C,iBACA,OAAOnkD,KAAKoX,QAAQ+sC,WAExBqD,4BAA4BppB,GACxB,GAAIA,KAAiBp+B,KAAK0rD,mBACtB,OAAO1rD,KAAK0rD,mBAAmBttB,GAAetuB,KAGtD23C,kBAAkB/oD,EAAK0/B,GACnB,MAAM4sB,EAAahrD,KAAK0rD,mBAAmBttB,GACtCp+B,KAAKooD,SAAS1pD,IACfsB,KAAK4rD,sBAAsBltD,EAAKssD,EAAWa,OAAO7rD,KAAKorB,SAAS1sB,IAAOssD,EAAWa,OAAOb,EAAWc,eAG5GpE,sBAAsBprD,EAAOwT,EAAMy3C,GAC/B,MAAMyD,EAAahrD,KAAK+rD,uBAAuBj8C,GACjC,OAAVxT,IAEa,OAAbirD,IACAA,EAAWyD,EAAWa,OAAOb,EAAWc,eAE5C9rD,KAAK4rD,sBAAsB97C,EAAMxT,EAAOirD,IAE5CI,oBAAoBjpD,EAAK0/B,EAAempB,GACpC,MAAMyD,EAAahrD,KAAK+rD,uBAAuBrtD,GAC3CsB,KAAKooD,SAAS1pD,GACdsB,KAAK4rD,sBAAsBltD,EAAKssD,EAAWa,OAAO7rD,KAAKorB,SAAS1sB,IAAO6oD,GAGvEvnD,KAAK4rD,sBAAsBltD,EAAKssD,EAAWa,OAAOb,EAAWc,cAAevE,GAGpFoE,yCACI,IAAK,MAAM,IAAEjtD,EAAG,KAAEoR,EAAI,aAAEg8C,EAAY,OAAED,KAAY7rD,KAAKgsD,iBAC/BzsD,MAAhBusD,GAA8B9rD,KAAKmkD,WAAWj9C,KAAK+Y,IAAIvhB,IACvDsB,KAAK4rD,sBAAsB97C,EAAM+7C,EAAOC,QAAevsD,GAInEqsD,sBAAsB97C,EAAMm8C,EAAUC,GAClC,MAAMC,EAAoB,GAAGr8C,WACvBs8C,EAAgBpsD,KAAKorB,SAAS+gC,GACpC,GAA4B,mBAAjBC,EAA6B,CACpC,MAAMpB,EAAahrD,KAAK+rD,uBAAuBj8C,GACzCxT,EAAQ0uD,EAAWqB,OAAOJ,GAChC,IAAI1E,EAAW2E,EACXA,IACA3E,EAAWyD,EAAWqB,OAAOH,IAEjCE,EAAcxsD,KAAKI,KAAKorB,SAAU9uB,EAAOirD,IAG7CyE,uBACA,MAAM,mBAAEN,GAAuB1rD,KAC/B,OAAOzB,OAAOC,KAAKktD,GAAoBjtD,KAAIC,GAAOgtD,EAAmBhtD,KAErEqtD,6BACA,MAAMO,EAAc,GAKpB,OAJA/tD,OAAOC,KAAKwB,KAAK0rD,oBAAoBj5C,SAAQ/T,IACzC,MAAMssD,EAAahrD,KAAK0rD,mBAAmBhtD,GAC3C4tD,EAAYtB,EAAWl7C,MAAQk7C,KAE5BsB,EAEXlE,SAAShqB,GACL,MACMmuB,EAAgB,MAAM5I,GADT3jD,KAAK+rD,uBAAuB3tB,GACGtuB,QAClD,OAAO9P,KAAKorB,SAASmhC,IAI7B,MAAMC,GACF10C,YAAYV,EAASkiB,GACjBt5B,KAAKoX,QAAUA,EACfpX,KAAKs5B,SAAWA,EAChBt5B,KAAKysD,cAAgB,IAAI1E,GAE7B7jD,QACSlE,KAAK8pD,oBACN9pD,KAAK8pD,kBAAoB,IAAItB,GAAkBxoD,KAAK6N,QAAS7N,KAAKo+B,cAAep+B,MACjFA,KAAK8pD,kBAAkB5lD,SAG/Bke,OACQpiB,KAAK8pD,oBACL9pD,KAAK0sD,uBACL1sD,KAAK8pD,kBAAkB1nC,cAChBpiB,KAAK8pD,mBAGpBZ,cAAa,QAAEr7C,EAAS+zB,QAAS9xB,IACzB9P,KAAKwkD,MAAMC,gBAAgB52C,IAC3B7N,KAAK2sD,cAAc9+C,EAASiC,GAGpCq5C,gBAAe,QAAEt7C,EAAS+zB,QAAS9xB,IAC/B9P,KAAK4sD,iBAAiB/+C,EAASiC,GAEnC68C,cAAc9+C,EAASiC,GACnB,IAAI6qB,EACC36B,KAAKysD,cAAcxsC,IAAInQ,EAAMjC,KAC9B7N,KAAKysD,cAAc7/C,IAAIkD,EAAMjC,GACK,QAAjC8sB,EAAK36B,KAAK8pD,yBAAsC,IAAPnvB,GAAyBA,EAAGuqB,OAAM,IAAMllD,KAAKs5B,SAASuzB,gBAAgBh/C,EAASiC,MAGjI88C,iBAAiB/+C,EAASiC,GACtB,IAAI6qB,EACA36B,KAAKysD,cAAcxsC,IAAInQ,EAAMjC,KAC7B7N,KAAKysD,cAAc9pB,OAAO7yB,EAAMjC,GACE,QAAjC8sB,EAAK36B,KAAK8pD,yBAAsC,IAAPnvB,GAAyBA,EAAGuqB,OAAM,IAAMllD,KAAKs5B,SAASwzB,mBAAmBj/C,EAASiC,MAGpI48C,uBACI,IAAK,MAAM58C,KAAQ9P,KAAKysD,cAAcjuD,KAClC,IAAK,MAAMqP,KAAW7N,KAAKysD,cAAcnE,gBAAgBx4C,GACrD9P,KAAK4sD,iBAAiB/+C,EAASiC,GAIvCsuB,oBACA,MAAO,QAAQp+B,KAAKoX,QAAQ+N,oBAE5BtX,cACA,OAAO7N,KAAKoX,QAAQvJ,QAEpB22C,YACA,OAAOxkD,KAAKoX,QAAQotC,OAI5B,MAAMuI,GACFj1C,YAAYxW,EAAQkjD,GAChBxkD,KAAKukD,iBAAmB,CAACyI,EAAc/vB,EAAS,MAC5C,MAAM,WAAE9X,EAAU,WAAEg/B,EAAU,QAAEt2C,GAAY7N,KAC5Ci9B,EAAS1+B,OAAOmmC,OAAO,CAAEvf,aAAYg/B,aAAYt2C,WAAWovB,GAC5Dj9B,KAAK6iD,YAAY0B,iBAAiBvkD,KAAKmlB,WAAY6nC,EAAc/vB,IAErEj9B,KAAKsB,OAASA,EACdtB,KAAKwkD,MAAQA,EACbxkD,KAAKmkD,WAAa,IAAI7iD,EAAO2rD,sBAAsBjtD,MACnDA,KAAKktD,gBAAkB,IAAI1C,GAAgBxqD,KAAMA,KAAKmtD,YACtDntD,KAAKotD,cAAgB,IAAI5B,GAAcxrD,KAAMA,KAAKmkD,YAClDnkD,KAAKqtD,eAAiB,IAAIb,GAAexsD,KAAMA,MAC/C,IACIA,KAAKmkD,WAAWmJ,aAChBttD,KAAKukD,iBAAiB,cAE1B,MAAOp2C,GACHnO,KAAK6E,YAAYsJ,EAAO,4BAGhC0Z,UACI7nB,KAAKktD,gBAAgBhpD,QACrBlE,KAAKotD,cAAclpD,QACnBlE,KAAKqtD,eAAenpD,QACpB,IACIlE,KAAKmkD,WAAWt8B,UAChB7nB,KAAKukD,iBAAiB,WAE1B,MAAOp2C,GACHnO,KAAK6E,YAAYsJ,EAAO,0BAGhCqX,aACI,IACIxlB,KAAKmkD,WAAW3+B,aAChBxlB,KAAKukD,iBAAiB,cAE1B,MAAOp2C,GACHnO,KAAK6E,YAAYsJ,EAAO,4BAE5BnO,KAAKqtD,eAAejrC,OACpBpiB,KAAKotD,cAAchrC,OACnBpiB,KAAKktD,gBAAgB9qC,OAErBygC,kBACA,OAAO7iD,KAAKsB,OAAOuhD,YAEnB19B,iBACA,OAAOnlB,KAAKsB,OAAO6jB,WAEnB0lC,aACA,OAAO7qD,KAAK6iD,YAAYgI,OAExBsC,iBACA,OAAOntD,KAAK6iD,YAAYsK,WAExBt/C,cACA,OAAO7N,KAAKwkD,MAAM32C,QAElB2qB,oBACA,OAAOx4B,KAAK6N,QAAQ2qB,cAExB3zB,YAAYsJ,EAAOlR,EAASggC,EAAS,IACjC,MAAM,WAAE9X,EAAU,WAAEg/B,EAAU,QAAEt2C,GAAY7N,KAC5Ci9B,EAAS1+B,OAAOmmC,OAAO,CAAEvf,aAAYg/B,aAAYt2C,WAAWovB,GAC5Dj9B,KAAK6iD,YAAYh+C,YAAYsJ,EAAO,SAASlR,IAAWggC,GAE5D4vB,gBAAgBh/C,EAASiC,GACrB9P,KAAKutD,uBAAuB,GAAGz9C,mBAAuBjC,GAE1Di/C,mBAAmBj/C,EAASiC,GACxB9P,KAAKutD,uBAAuB,GAAGz9C,sBAA0BjC,GAE7D0/C,uBAAuBnJ,KAAe38B,GAClC,MAAM08B,EAAankD,KAAKmkD,WACa,mBAA1BA,EAAWC,IAClBD,EAAWC,MAAe38B,IAKtC,SAAS+lC,GAAiC11C,EAAa21C,GACnD,MAAMC,EAAYC,GAA2B71C,GAC7C,OAAO1b,MAAM4iC,KAAK0uB,EAAUtuD,QAAO,CAACy+B,EAAQ/lB,KAoBhD,SAAiCA,EAAa21C,GAC1C,MAAM/2B,EAAa5e,EAAY21C,GAC/B,OAAOrxD,MAAMC,QAAQq6B,GAAcA,EAAa,GArB5Ck3B,CAAwB91C,EAAa21C,GAAch7C,SAAQ3C,GAAQ+tB,EAAOjxB,IAAIkD,KACvE+tB,IACR,IAAIwa,MASX,SAASsV,GAA2B71C,GAChC,MAAM41C,EAAY,GAClB,KAAO51C,GACH41C,EAAU7uD,KAAKiZ,GACfA,EAAcvZ,OAAO4vB,eAAerW,GAExC,OAAO41C,EAAUl7C,UAoDrB,MAAMq7C,GACyC,mBAAhCtvD,OAAO2rB,sBACNhE,GAAW,IACZ3nB,OAAOgtB,oBAAoBrF,MAC3B3nB,OAAO2rB,sBAAsBhE,IAI7B3nB,OAAOgtB,oBAGhBjjB,GAAS,MACX,SAASwlD,EAAkBh2C,GACvB,SAASi2C,IACL,OAAO7iC,QAAQqM,UAAUzf,EAAapY,sBAM1C,OAJAquD,EAASpuD,UAAYpB,OAAOsZ,OAAOC,EAAYnY,UAAW,CACtDmY,YAAa,CAAExb,MAAOyxD,KAE1B7iC,QAAQsM,eAAeu2B,EAAUj2C,GAC1Bi2C,EAQX,IAEI,OARJ,WACI,MACMplC,EAAImlC,GADA,WAAc9tD,KAAK0gB,EAAE9gB,KAAKI,SAEpC2oB,EAAEhpB,UAAU+gB,EAAI,aACT,IAAIiI,EAGXqlC,GACOF,EAEX,MAAO3/C,GACH,OAAQ2J,GAAgB,cAAuBA,MAtBxC,GAkCf,MAAMm2C,GACFn2C,YAAY+qC,EAAansB,GACrB12B,KAAK6iD,YAAcA,EACnB7iD,KAAK02B,WAVb,SAAyBA,GACrB,MAAO,CACHvR,WAAYuR,EAAWvR,WACvB8nC,uBAlFOn1C,EAkFsB4e,EAAWu2B,sBA/EhD,SAAgBn1C,EAAavG,GACzB,MAAM28C,EAAoB5lD,GAAOwP,GAC3Bq2C,EAeV,SAA6BxuD,EAAW4R,GACpC,OAAOs8C,GAAWt8C,GAAYnS,QAAO,CAAC+uD,EAAkBzvD,KACpD,MAAMssD,EAOd,SAA+BrrD,EAAW4R,EAAY7S,GAClD,MAAM0vD,EAAsB7vD,OAAO8vD,yBAAyB1uD,EAAWjB,GAEvE,IADwB0vD,KAAuB,UAAWA,GACpC,CAClB,MAAMpD,EAAazsD,OAAO8vD,yBAAyB98C,EAAY7S,GAAKpC,MAKpE,OAJI8xD,IACApD,EAAWh9B,IAAMogC,EAAoBpgC,KAAOg9B,EAAWh9B,IACvDg9B,EAAW/8B,IAAMmgC,EAAoBngC,KAAO+8B,EAAW/8B,KAEpD+8B,GAhBYsD,CAAsB3uD,EAAW4R,EAAY7S,GAIhE,OAHIssD,GACAzsD,OAAOmmC,OAAOypB,EAAkB,CAAE,CAACzvD,GAAMssD,IAEtCmD,IACR,IAtBsBI,CAAoBz2C,EAAYnY,UAAW4R,GAEpE,OADAhT,OAAO+8C,iBAAiB4S,EAAkBvuD,UAAWwuD,GAC9CD,EANAM,CAAO12C,EAQlB,SAA8BA,GAE1B,OADkB01C,GAAiC11C,EAAa,aAC/C1Y,QAAO,CAACqvD,EAAmBC,KACxC,MAAMn9C,EAAam9C,EAAS52C,GAC5B,IAAK,MAAMpZ,KAAO6S,EAAY,CAC1B,MAAMy5C,EAAayD,EAAkB/vD,IAAQ,GAC7C+vD,EAAkB/vD,GAAOH,OAAOmmC,OAAOsmB,EAAYz5C,EAAW7S,IAElE,OAAO+vD,IACR,IAjBwBE,CAAqB72C,MADpD,IAAeA,EAyFW82C,CAAgBl4B,GAClC12B,KAAK6uD,gBAAkB,IAAIz2B,QAC3Bp4B,KAAK8uD,kBAAoB,IAAIzW,IAE7BlzB,iBACA,OAAOnlB,KAAK02B,WAAWvR,WAEvB8nC,4BACA,OAAOjtD,KAAK02B,WAAWu2B,sBAEvB8B,eACA,OAAO3yD,MAAM4iC,KAAKh/B,KAAK8uD,mBAE3BE,uBAAuBxK,GACnB,MAAMptC,EAAUpX,KAAKivD,qBAAqBzK,GAC1CxkD,KAAK8uD,kBAAkBliD,IAAIwK,GAC3BA,EAAQyQ,UAEZqnC,0BAA0B1K,GACtB,MAAMptC,EAAUpX,KAAK6uD,gBAAgB7gC,IAAIw2B,GACrCptC,IACApX,KAAK8uD,kBAAkBnsB,OAAOvrB,GAC9BA,EAAQoO,cAGhBypC,qBAAqBzK,GACjB,IAAIptC,EAAUpX,KAAK6uD,gBAAgB7gC,IAAIw2B,GAKvC,OAJKptC,IACDA,EAAU,IAAI21C,GAAQ/sD,KAAMwkD,GAC5BxkD,KAAK6uD,gBAAgB5gC,IAAIu2B,EAAOptC,IAE7BA,GAIf,MAAM+3C,GACFr3C,YAAY0sC,GACRxkD,KAAKwkD,MAAQA,EAEjBvkC,IAAInQ,GACA,OAAO9P,KAAKkH,KAAK+Y,IAAIjgB,KAAKovD,WAAWt/C,IAEzCke,IAAIle,GACA,OAAO9P,KAAKqvD,OAAOv/C,GAAM,GAE7Bu/C,OAAOv/C,GAEH,OADoB9P,KAAKkH,KAAK8mB,IAAIhuB,KAAKovD,WAAWt/C,KAAU,IAjmCnDwN,MAAM,YAAc,GAomCjCgyC,iBAAiBx/C,GACb,OAAO9P,KAAKkH,KAAKqoD,uBAAuBvvD,KAAKovD,WAAWt/C,IAE5Ds/C,WAAWt/C,GACP,MAAO,GAAGA,UAEV5I,WACA,OAAOlH,KAAKwkD,MAAMt9C,MAI1B,MAAMsoD,GACF13C,YAAY0sC,GACRxkD,KAAKwkD,MAAQA,EAEb32C,cACA,OAAO7N,KAAKwkD,MAAM32C,QAElBsX,iBACA,OAAOnlB,KAAKwkD,MAAMr/B,WAEtB6I,IAAItvB,GACA,MAAMoR,EAAO9P,KAAKuvD,uBAAuB7wD,GACzC,OAAOsB,KAAK6N,QAAQsa,aAAarY,GAErCme,IAAIvvB,EAAKpC,GACL,MAAMwT,EAAO9P,KAAKuvD,uBAAuB7wD,GAEzC,OADAsB,KAAK6N,QAAQf,aAAagD,EAAMxT,GACzB0D,KAAKguB,IAAItvB,GAEpBuhB,IAAIvhB,GACA,MAAMoR,EAAO9P,KAAKuvD,uBAAuB7wD,GACzC,OAAOsB,KAAK6N,QAAQwsB,aAAavqB,GAErC6yB,OAAOjkC,GACH,GAAIsB,KAAKigB,IAAIvhB,GAAM,CACf,MAAMoR,EAAO9P,KAAKuvD,uBAAuB7wD,GAEzC,OADAsB,KAAK6N,QAAQmsB,gBAAgBlqB,IACtB,EAGP,OAAO,EAGfy/C,uBAAuB7wD,GACnB,MAAO,QAAQsB,KAAKmlB,cAAcy+B,GAAUllD,MAIpD,MAAM+wD,GACF33C,YAAYqJ,GACRnhB,KAAK0vD,mBAAqB,IAAIt3B,QAC9Bp4B,KAAKmhB,OAASA,EAElB2L,KAAK5G,EAAQxnB,EAAKzB,GACd,IAAI0yD,EAAa3vD,KAAK0vD,mBAAmB1hC,IAAI9H,GACxCypC,IACDA,EAAa,IAAItX,IACjBr4C,KAAK0vD,mBAAmBzhC,IAAI/H,EAAQypC,IAEnCA,EAAW1vC,IAAIvhB,KAChBixD,EAAW/iD,IAAIlO,GACfsB,KAAKmhB,OAAO2L,KAAK7vB,EAASipB,KAKtC,SAAS0pC,GAA4BxxB,EAAele,GAChD,MAAO,IAAIke,OAAmBle,MAGlC,MAAM2vC,GACF/3C,YAAY0sC,GACRxkD,KAAKwkD,MAAQA,EAEb32C,cACA,OAAO7N,KAAKwkD,MAAM32C,QAElBsX,iBACA,OAAOnlB,KAAKwkD,MAAMr/B,WAElB0lC,aACA,OAAO7qD,KAAKwkD,MAAMqG,OAEtB5qC,IAAI6vC,GACA,OAAgC,MAAzB9vD,KAAK4jC,KAAKksB,GAErBlsB,QAAQmsB,GACJ,OAAOA,EAAY3wD,QAAO,CAAC2R,EAAQ++C,IAAe/+C,GAC3C/Q,KAAKgwD,WAAWF,IAChB9vD,KAAKiwD,iBAAiBH,SAAavwD,GAE9C+nB,WAAWyoC,GACP,OAAOA,EAAY3wD,QAAO,CAACmgD,EAASuQ,IAAe,IAC5CvQ,KACAv/C,KAAKkwD,eAAeJ,MACpB9vD,KAAKmwD,qBAAqBL,KAC9B,IAEPE,WAAWF,GACP,MAAMhJ,EAAW9mD,KAAKowD,yBAAyBN,GAC/C,OAAO9vD,KAAKwkD,MAAM6L,YAAYvJ,GAElCoJ,eAAeJ,GACX,MAAMhJ,EAAW9mD,KAAKowD,yBAAyBN,GAC/C,OAAO9vD,KAAKwkD,MAAM8L,gBAAgBxJ,GAEtCsJ,yBAAyBN,GAErB,OAAOF,GADe5vD,KAAK6qD,OAAO0F,wBAAwBvwD,KAAKmlB,YACb2qC,GAEtDG,iBAAiBH,GACb,MAAMhJ,EAAW9mD,KAAKwwD,+BAA+BV,GACrD,OAAO9vD,KAAKywD,UAAUzwD,KAAKwkD,MAAM6L,YAAYvJ,GAAWgJ,GAE5DK,qBAAqBL,GACjB,MAAMhJ,EAAW9mD,KAAKwwD,+BAA+BV,GACrD,OAAO9vD,KAAKwkD,MAAM8L,gBAAgBxJ,GAAUroD,KAAIoP,GAAW7N,KAAKywD,UAAU5iD,EAASiiD,KAEvFU,+BAA+BV,GAC3B,MAAMY,EAAmB,GAAG1wD,KAAKmlB,cAAc2qC,IAC/C,OAAOF,GAA4B5vD,KAAK6qD,OAAO8F,gBAAiBD,GAEpED,UAAU5iD,EAASiiD,GACf,GAAIjiD,EAAS,CACT,MAAM,WAAEsX,GAAenlB,KACjBo+B,EAAgBp+B,KAAK6qD,OAAO8F,gBAC5BC,EAAuB5wD,KAAK6qD,OAAO0F,wBAAwBprC,GACjEnlB,KAAK6wD,MAAM/jC,KAAKjf,EAAS,UAAUiiD,IAAc,kBAAkB1xB,MAAkBjZ,KAAc2qC,WAAoBc,MAAyBd,WACrI1xB,kFAEf,OAAOvwB,EAEPgjD,YACA,OAAO7wD,KAAKwkD,MAAMqM,OAI1B,MAAMC,GACFh5C,YAAY+yC,EAAQh9C,EAASsX,EAAYhE,GACrCnhB,KAAKu/C,QAAU,IAAIsQ,GAAU7vD,MAC7BA,KAAK+wD,QAAU,IAAI5B,GAASnvD,MAC5BA,KAAKkH,KAAO,IAAIsoD,GAAQxvD,MACxBA,KAAKykD,gBAAmB52C,GACbA,EAAQ4qB,QAAQz4B,KAAKgxD,sBAAwBhxD,KAAK6N,QAE7D7N,KAAK6qD,OAASA,EACd7qD,KAAK6N,QAAUA,EACf7N,KAAKmlB,WAAaA,EAClBnlB,KAAK6wD,MAAQ,IAAIpB,GAAMtuC,GAE3BkvC,YAAYvJ,GACR,OAAO9mD,KAAK6N,QAAQu3C,QAAQ0B,GACtB9mD,KAAK6N,QACL7N,KAAKixD,cAAcnK,GAAUljB,KAAK5jC,KAAKykD,iBAEjD6L,gBAAgBxJ,GACZ,MAAO,IACA9mD,KAAK6N,QAAQu3C,QAAQ0B,GAAY,CAAC9mD,KAAK6N,SAAW,MAClD7N,KAAKixD,cAAcnK,GAAU1mD,OAAOJ,KAAKykD,kBAGpDwM,cAAcnK,GACV,OAAO1qD,MAAM4iC,KAAKh/B,KAAK6N,QAAQ9C,iBAAiB+7C,IAEhDkK,yBACA,OAAOpB,GAA4B5vD,KAAK6qD,OAAOqG,oBAAqBlxD,KAAKmlB,aAIjF,MAAMgsC,GACFr5C,YAAYjK,EAASg9C,EAAQvxB,GACzBt5B,KAAK6N,QAAUA,EACf7N,KAAK6qD,OAASA,EACd7qD,KAAKs5B,SAAWA,EAChBt5B,KAAK0qD,kBAAoB,IAAIb,GAAkB7pD,KAAK6N,QAAS7N,KAAKkxD,oBAAqBlxD,MACvFA,KAAKoxD,4BAA8B,IAAIh5B,QACvCp4B,KAAKqxD,qBAAuB,IAAIj5B,QAEpCl0B,QACIlE,KAAK0qD,kBAAkBxmD,QAE3Bke,OACIpiB,KAAK0qD,kBAAkBtoC,OAEvB8uC,0BACA,OAAOlxD,KAAK6qD,OAAOqG,oBAEvB3G,mBAAmBrqC,GACf,MAAM,QAAErS,EAAS+zB,QAASzc,GAAejF,EACnCoxC,EAAqBtxD,KAAKuxD,kCAAkC1jD,GAClE,IAAI22C,EAAQ8M,EAAmBtjC,IAAI7I,GAKnC,OAJKq/B,IACDA,EAAQxkD,KAAKs5B,SAASk4B,mCAAmC3jD,EAASsX,GAClEmsC,EAAmBrjC,IAAI9I,EAAYq/B,IAEhCA,EAEX2F,oBAAoBt8C,EAASvR,GACzB,MAAMm1D,GAAkBzxD,KAAKqxD,qBAAqBrjC,IAAI1xB,IAAU,GAAK,EACrE0D,KAAKqxD,qBAAqBpjC,IAAI3xB,EAAOm1D,GACf,GAAlBA,GACAzxD,KAAKs5B,SAASo4B,eAAep1D,GAGrC8tD,sBAAsBv8C,EAASvR,GAC3B,MAAMm1D,EAAiBzxD,KAAKqxD,qBAAqBrjC,IAAI1xB,GACjDm1D,IACAzxD,KAAKqxD,qBAAqBpjC,IAAI3xB,EAAOm1D,EAAiB,GAChC,GAAlBA,GACAzxD,KAAKs5B,SAASq4B,kBAAkBr1D,IAI5Ci1D,kCAAkC1jD,GAC9B,IAAIyjD,EAAqBtxD,KAAKoxD,4BAA4BpjC,IAAIngB,GAK9D,OAJKyjD,IACDA,EAAqB,IAAIvO,IACzB/iD,KAAKoxD,4BAA4BnjC,IAAIpgB,EAASyjD,IAE3CA,GAIf,MAAMM,GACF95C,YAAY+qC,GACR7iD,KAAK6iD,YAAcA,EACnB7iD,KAAK6xD,cAAgB,IAAIV,GAAcnxD,KAAK6N,QAAS7N,KAAK6qD,OAAQ7qD,MAClEA,KAAKsxD,mBAAqB,IAAIvJ,GAC9B/nD,KAAK8xD,oBAAsB,IAAI/O,IAE/Bl1C,cACA,OAAO7N,KAAK6iD,YAAYh1C,QAExBg9C,aACA,OAAO7qD,KAAK6iD,YAAYgI,OAExB1pC,aACA,OAAOnhB,KAAK6iD,YAAY1hC,OAExB+vC,0BACA,OAAOlxD,KAAK6qD,OAAOqG,oBAEnBa,cACA,OAAO31D,MAAM4iC,KAAKh/B,KAAK8xD,oBAAoBj0B,UAE3CkxB,eACA,OAAO/uD,KAAK+xD,QAAQ3yD,QAAO,CAAC2vD,EAAUztD,IAAWytD,EAASnyD,OAAO0E,EAAOytD,WAAW,IAEvF7qD,QACIlE,KAAK6xD,cAAc3tD,QAEvBke,OACIpiB,KAAK6xD,cAAczvC,OAEvB4vC,eAAet7B,GACX12B,KAAKiyD,iBAAiBv7B,EAAWvR,YACjC,MAAM7jB,EAAS,IAAI2sD,GAAOjuD,KAAK6iD,YAAansB,GAC5C12B,KAAKkyD,cAAc5wD,GAEvB2wD,iBAAiB9sC,GACb,MAAM7jB,EAAStB,KAAK8xD,oBAAoB9jC,IAAI7I,GACxC7jB,GACAtB,KAAKmyD,iBAAiB7wD,GAG9B8wD,kCAAkCvkD,EAASsX,GACvC,MAAM7jB,EAAStB,KAAK8xD,oBAAoB9jC,IAAI7I,GAC5C,GAAI7jB,EACA,OAAOA,EAAOytD,SAASnrB,MAAKxsB,GAAWA,EAAQvJ,SAAWA,IAGlEhJ,YAAYsJ,EAAOlR,EAASggC,GACxBj9B,KAAK6iD,YAAYh+C,YAAYsJ,EAAOlR,EAASggC,GAEjDu0B,mCAAmC3jD,EAASsX,GACxC,OAAO,IAAI2rC,GAAM9wD,KAAK6qD,OAAQh9C,EAASsX,EAAYnlB,KAAKmhB,QAE5DuwC,eAAelN,GACXxkD,KAAKsxD,mBAAmB1kD,IAAI43C,EAAMr/B,WAAYq/B,GAC9C,MAAMljD,EAAStB,KAAK8xD,oBAAoB9jC,IAAIw2B,EAAMr/B,YAC9C7jB,GACAA,EAAO0tD,uBAAuBxK,GAGtCmN,kBAAkBnN,GACdxkD,KAAKsxD,mBAAmB3uB,OAAO6hB,EAAMr/B,WAAYq/B,GACjD,MAAMljD,EAAStB,KAAK8xD,oBAAoB9jC,IAAIw2B,EAAMr/B,YAC9C7jB,GACAA,EAAO4tD,0BAA0B1K,GAGzC0N,cAAc5wD,GACVtB,KAAK8xD,oBAAoB7jC,IAAI3sB,EAAO6jB,WAAY7jB,GACjCtB,KAAKsxD,mBAAmBhJ,gBAAgBhnD,EAAO6jB,YACvD1S,SAAQ+xC,GAASljD,EAAO0tD,uBAAuBxK,KAE1D2N,iBAAiB7wD,GACbtB,KAAK8xD,oBAAoBnvB,OAAOrhC,EAAO6jB,YACxBnlB,KAAKsxD,mBAAmBhJ,gBAAgBhnD,EAAO6jB,YACvD1S,SAAQ+xC,GAASljD,EAAO4tD,0BAA0B1K,MAIjE,MAAM6N,GAAgB,CAClBnB,oBAAqB,kBACrBvG,gBAAiB,cACjBgG,gBAAiB,cACjBJ,wBAAyBprC,GAAc,QAAQA,YAGnD,MAAMmtC,GACFx6C,YAAYjK,EAAUvD,SAASuwB,gBAAiBgwB,EAASwH,IACrDryD,KAAKmhB,OAASjT,QACdlO,KAAKuyD,OAAQ,EACbvyD,KAAKukD,iBAAmB,CAACp/B,EAAY6nC,EAAc/vB,EAAS,MACpDj9B,KAAKuyD,OACLvyD,KAAKwyD,oBAAoBrtC,EAAY6nC,EAAc/vB,IAG3Dj9B,KAAK6N,QAAUA,EACf7N,KAAK6qD,OAASA,EACd7qD,KAAKmtD,WAAa,IAAIvK,GAAW5iD,MACjCA,KAAKyyD,OAAS,IAAIb,GAAO5xD,MAE7BmhC,aAAatzB,EAASg9C,GAClB,MAAMhI,EAAc,IAAIyP,GAAYzkD,EAASg9C,GAE7C,OADAhI,EAAY3+C,QACL2+C,EAEX5jB,oBA8CO,IAAIh3B,SAAQC,IACY,WAAvBoC,SAAS5D,WACT4D,SAASkC,iBAAiB,oBAAoB,IAAMtE,MAGpDA,OAjDJlI,KAAKukD,iBAAiB,cAAe,YACrCvkD,KAAKmtD,WAAWjpD,QAChBlE,KAAKyyD,OAAOvuD,QACZlE,KAAKukD,iBAAiB,cAAe,SAEzCniC,OACIpiB,KAAKukD,iBAAiB,cAAe,YACrCvkD,KAAKmtD,WAAW/qC,OAChBpiB,KAAKyyD,OAAOrwC,OACZpiB,KAAKukD,iBAAiB,cAAe,QAEzCmO,SAASvtC,EAAY8nC,GACbA,EAAsB0F,YACtB3yD,KAAK4yD,KAAK,CAAEztC,aAAY8nC,0BAGhC2F,KAAK3qC,KAAS4qC,IACUz2D,MAAMC,QAAQ4rB,GAAQA,EAAO,CAACA,KAAS4qC,IAC/CpgD,SAAQikB,GAAc12B,KAAKyyD,OAAOT,eAAet7B,KAEjEo8B,OAAO7qC,KAAS4qC,IACQz2D,MAAMC,QAAQ4rB,GAAQA,EAAO,CAACA,KAAS4qC,IAC/CpgD,SAAQ0S,GAAcnlB,KAAKyyD,OAAOR,iBAAiB9sC,KAE/D4tC,kBACA,OAAO/yD,KAAKyyD,OAAO1D,SAAStwD,KAAI2Y,GAAWA,EAAQ+sC,aAEvD6O,qCAAqCnlD,EAASsX,GAC1C,MAAM/N,EAAUpX,KAAKyyD,OAAOL,kCAAkCvkD,EAASsX,GACvE,OAAO/N,EAAUA,EAAQ+sC,WAAa,KAE1Ct/C,YAAYsJ,EAAOlR,EAASggC,GACxB,IAAItC,EACJ36B,KAAKmhB,OAAOhT,MAAM,iBAAkBlR,EAASkR,EAAO8uB,GAC1B,QAAzBtC,EAAK/yB,OAAOyR,eAA4B,IAAPshB,GAAyBA,EAAG/6B,KAAKgI,OAAQ3K,EAAS,GAAI,EAAG,EAAGkR,GAElGqkD,oBAAoBrtC,EAAY6nC,EAAc/vB,EAAS,IACnDA,EAAS1+B,OAAOmmC,OAAO,CAAEme,YAAa7iD,MAAQi9B,GAC9Cj9B,KAAKmhB,OAAO8xC,eAAe,GAAG9tC,MAAe6nC,KAC7ChtD,KAAKmhB,OAAOE,IAAI,WAAY9iB,OAAOmmC,OAAO,GAAIzH,IAC9Cj9B,KAAKmhB,OAAO+xC,YA8HpB,SAASC,IAA0BjzC,EAAOkzC,IACtC,OAkDJ,SAAkDlzC,EAAOkzC,GACrD,MAAM10D,EAAM,GAAGklD,GAAU1jC,WACnB5T,EApBV,SAAkC8mD,GAC9B,MAAMC,EAXV,SAA8BC,GAC1B,MAAMD,EAAiBE,GAAuBD,EAAWhnD,MACzD,GAAI+mD,EAAgB,CAChB,MAAMG,EAAmBC,GAAsBH,EAAWI,SAC1D,GAAIL,IAAmBG,EACnB,MAAM,IAAIr1D,MAAM,SAASk1D,sEAAmFC,EAAWI,gBAAgBF,MAE3I,OAAOH,GAIYM,CAAqBP,GACtCQ,EAAuBH,GAAsBL,GAC7CS,EAAmBN,GAAuBH,GAC1C9mD,EAAO+mD,GAAkBO,GAAwBC,EACvD,GAAIvnD,EACA,OAAOA,EACX,MAAM,IAAInO,MAAM,uBAAuBi1D,MAa1BU,CAAyBV,GACtC,MAAO,CACH9mD,OACA5N,MACAoR,KAAM2zC,GAAS/kD,GACXotD,mBAAiB,OAhB7B,SAAmCsH,GAC/B,MAAMW,EAAWR,GAAuBH,GACxC,GAAIW,EACA,OAAOC,GAAoBD,GAC/B,MAAMjI,EAAesH,EAAeM,QACpC,YAAqBn0D,IAAjBusD,EACOA,EACJsH,EASyBa,CAA0Bb,IAClDc,4BAA0B,YAAiD30D,IAA1Ck0D,GAAsBL,IAC3D/G,OAAQ8H,GAAQ7nD,GAChBu/C,OAAQuI,GAAQ9nD,IAAS8nD,GAAQV,SA5D9BW,CAAyCn0C,EAAOkzC,GAE3D,SAASG,GAAuBQ,GAC5B,OAAQA,GACJ,KAAK33D,MAAO,MAAO,QACnB,KAAKiE,QAAS,MAAO,UACrB,KAAKorB,OAAQ,MAAO,SACpB,KAAKltB,OAAQ,MAAO,SACpB,KAAKyf,OAAQ,MAAO,UAG5B,SAASy1C,GAAsB3H,GAC3B,cAAeA,GACX,IAAK,UAAW,MAAO,UACvB,IAAK,SAAU,MAAO,SACtB,IAAK,SAAU,MAAO,SAE1B,OAAI1vD,MAAMC,QAAQyvD,GACP,QAC0C,oBAAjDvtD,OAAOoB,UAAU0wB,SAASzwB,KAAKksD,GACxB,cADX,EA4CJ,MAAMkI,GAAsB,CACpB7kC,YAAU,MAAO,IACrBhuB,SAAS,EACTF,OAAQ,EACJilB,aAAW,MAAO,IACtB9kB,OAAQ,IAEN+yD,GAAU,CACZhlC,MAAM7yB,GACF,MAAM6yB,EAAQvuB,KAAK0Z,MAAMhe,GACzB,IAAKF,MAAMC,QAAQ8yB,GACf,MAAM,IAAIzF,UAAU,kBAExB,OAAOyF,GAEXhuB,QAAQ7E,KACc,KAATA,GAAyB,SAATA,GAE7B2E,OAAO3E,GACImvB,OAAOnvB,GAElB4pB,OAAO5pB,GACH,MAAM4pB,EAAStlB,KAAK0Z,MAAMhe,GAC1B,GAAe,OAAX4pB,GAAoC,iBAAVA,GAAsB9pB,MAAMC,QAAQ6pB,GAC9D,MAAM,IAAIwD,UAAU,mBAExB,OAAOxD,GAEX9kB,OAAO9E,GACIA,GAGT83D,GAAU,CACZV,QAOJ,SAAqBp3D,GACjB,MAAO,GAAGA,KAPV6yB,MAAOmlC,GACPpuC,OAAQouC,IAEZ,SAASA,GAAUh4D,GACf,OAAOsE,KAAKC,UAAUvE,GAM1B,MAAMi4D,GACFz8C,YAAYV,GACRpX,KAAKoX,QAAUA,EAERu7C,wBACP,OAAO,EAEP9P,kBACA,OAAO7iD,KAAKoX,QAAQyrC,YAEpB2B,YACA,OAAOxkD,KAAKoX,QAAQotC,MAEpB32C,cACA,OAAO7N,KAAKwkD,MAAM32C,QAElBsX,iBACA,OAAOnlB,KAAKwkD,MAAMr/B,WAElBo6B,cACA,OAAOv/C,KAAKwkD,MAAMjF,QAElBwR,cACA,OAAO/wD,KAAKwkD,MAAMuM,QAElB7pD,WACA,OAAOlH,KAAKwkD,MAAMt9C,KAEtBomD,cAEAzlC,WAEArC,cAEAuX,SAAS/X,GAAW,OAAEjU,EAAS/Q,KAAK6N,QAAO,OAAEovB,EAAS,GAAE,OAAE5T,EAASrpB,KAAKmlB,WAAU,QAAEgY,GAAU,EAAI,WAAEH,GAAa,GAAS,IACtH,MACM93B,EAAQ,IAAIg4B,YADL7T,EAAS,GAAGA,KAAUrE,IAAcA,EACb,CAAEiY,SAAQE,UAASH,eAEvD,OADAjsB,EAAOqkB,cAAclwB,GACdA,GAGfqvD,GAAWC,UAAY,CArQvB,SAAiC18C,GAE7B,OADgB01C,GAAiC11C,EAAa,WAC/C1Y,QAAO,CAACmS,EAAYkjD,KAC/B,OAAOl2D,OAAOmmC,OAAOnzB,EAIlB,CACH,CAAC,GAF6B7S,EAHgC+1D,UAK7C,CACbzmC,MACI,MAAM,QAAE+iC,GAAY/wD,KACpB,GAAI+wD,EAAQ9wC,IAAIvhB,GACZ,OAAOqyD,EAAQ/iC,IAAItvB,GAElB,CACD,MAAMopD,EAAYiJ,EAAQzB,iBAAiB5wD,GAC3C,MAAM,IAAIP,MAAM,sBAAsB2pD,SAIlD,CAAC,GAAGppD,YAAe,CACfsvB,MACI,OAAOhuB,KAAK+wD,QAAQ1B,OAAO3wD,KAGnC,CAAC,MAAMilD,GAAWjlD,WAAc,CAC5BsvB,MACI,OAAOhuB,KAAK+wD,QAAQ9wC,IAAIvhB,OArBxC,IAAsCA,IAF/B,KA6BP,SAAkCoZ,GAE9B,OADgB01C,GAAiC11C,EAAa,WAC/C1Y,QAAO,CAACmS,EAAYmjD,KAC/B,OAAOn2D,OAAOmmC,OAAOnzB,EAIlB,CACH,CAAC,GAF8BzB,EAHgC4kD,WAK5C,CACf1mC,MACI,MAAMjd,EAAS/Q,KAAKu/C,QAAQ3b,KAAK9zB,GACjC,GAAIiB,EACA,OAAOA,EAGP,MAAM,IAAI5S,MAAM,2BAA2B2R,WAAc9P,KAAKmlB,4BAI1E,CAAC,GAAGrV,YAAgB,CAChBke,MACI,OAAOhuB,KAAKu/C,QAAQj4B,QAAQxX,KAGpC,CAAC,MAAM6zC,GAAW7zC,YAAgB,CAC9Bke,MACI,OAAOhuB,KAAKu/C,QAAQt/B,IAAInQ,OApBxC,IAAuCA,IAFhC,KA4BP,SAAiCgI,GAC7B,MAAM68C,EAtmBV,SAA0C78C,EAAa21C,GAEnD,OADkBE,GAA2B71C,GAC5B1Y,QAAO,CAACw1D,EAAO98C,KAC5B88C,EAAM/1D,QAgBd,SAAiCiZ,EAAa21C,GAC1C,MAAM/2B,EAAa5e,EAAY21C,GAC/B,OAAO/2B,EAAan4B,OAAOC,KAAKk4B,GAAYj4B,KAAIC,GAAO,CAACA,EAAKg4B,EAAWh4B,MAAS,GAlB/Dm2D,CAAwB/8C,EAAa21C,IAC5CmH,IACR,IAimB0BE,CAAiCh9C,EAAa,UACrEi9C,EAAwB,CAC1BrJ,mBAAoB,CAChB19B,MACI,OAAO2mC,EAAqBv1D,QAAO,CAACrC,EAAQi4D,KACxC,MAAMC,EAAkB9B,GAAyB6B,GAC3C52B,EAAgBp+B,KAAKkH,KAAKqoD,uBAAuB0F,EAAgBv2D,KACvE,OAAOH,OAAOmmC,OAAO3nC,EAAQ,CAAE,CAACqhC,GAAgB62B,MACjD,OAIf,OAAON,EAAqBv1D,QAAO,CAACmS,EAAYyjD,IACrCz2D,OAAOmmC,OAAOnzB,EAG7B,SAA0CyjD,GACtC,MAAMt+B,EAAay8B,GAAyB6B,IACtC,IAAEt2D,EAAG,KAAEoR,EAAMu8C,OAAQzR,EAAMiR,OAAQ/Q,GAAUpkB,EACnD,MAAO,CACH,CAAC5mB,GAAO,CACJke,MACI,MAAM1xB,EAAQ0D,KAAKkH,KAAK8mB,IAAItvB,GAC5B,OAAc,OAAVpC,EACOs+C,EAAKt+C,GAGLo6B,EAAWo1B,cAG1B79B,IAAI3xB,QACciD,IAAVjD,EACA0D,KAAKkH,KAAKy7B,OAAOjkC,GAGjBsB,KAAKkH,KAAK+mB,IAAIvvB,EAAKo8C,EAAMx+C,MAIrC,CAAC,MAAMqnD,GAAW7zC,MAAU,CACxBke,MACI,OAAOhuB,KAAKkH,KAAK+Y,IAAIvhB,IAAQg4B,EAAWw9B,yBA5BfgB,CAAiCF,KACnED,KAsLPR,GAAWhV,QAAU,GACrBgV,GAAW12B,OAAS,GCn5DpB,MAAMglB,GAAcyP,GAAYpuD,QAGhC2+C,GAAY0P,OAAQ,EACpB3qD,OAAOutD,SAAatS,4BCCpBA,GAAY6P,SAAS,uBCHrB,cAA6B6B,GAC3BpzB,eAAiB,CAAE,WAEnBA,cAAgB,CACdi0B,OAAQp3C,OACR/G,QAAS+G,QAGX6J,UACE7nB,KAAKwD,SAAW,IAAI,KAAJ,CAAmB,CACjC3B,YAAa7B,KAAKq1D,YAClB/yD,MAAO,8DACP6R,YAAanU,KAAKs1D,eAEpBt1D,KAAKwD,SAAS2G,MAAMnK,KAAK6N,SACzB7N,KAAKwD,SAASwK,GAAG,UAAU9I,GAASlF,MAAK,EAAekF,KACxDlF,KAAKwD,SAASwK,GAAG,SAAS,IAAMhO,MAAK,MAGvC,GAAekF,GACblF,KAAKu1D,cAAcj5D,MAAQ4I,EAAMnI,OAAmB,WAGtD,KACEiD,KAAKu1D,cAAcj5D,MAAQ,MDlB/BumD,GAAY6P,SAAS,cEPrB,cAA6B6B,GAC3BpzB,eAAiB,CAAE,YAAa,eAEhCq0B,kBACEx1D,KAAKy1D,gBAAgB9oD,UAAUlF,OAAO,YAGxCiuD,oBACE11D,KAAK21D,kBAAkBhpD,UAAUlF,OAAO,YAG1CmuD,aACE51D,KAAKy1D,gBAAgB9oD,UAAUC,IAAI,YACnC5M,KAAK21D,kBAAkBhpD,UAAUC,IAAI,eFHzCi2C,GAAY6P,SAAS,yBGVrB,cAA6B6B,GAC3BpzB,eAAiB,CAAE,MAAO,KAAM,eAEhC00B,gBACM71D,KAAK81D,UAAUC,QACjB/1D,KAAKg2D,kBAAkBrpD,UAAUC,IAAI,YAC5B5M,KAAKi2D,SAASF,SACvB/1D,KAAKg2D,kBAAkBrpD,UAAUlF,OAAO,eHM9Co7C,GAAY6P,SAAS,2BIbrB,cAA6B6B,GAC3BpzB,eAAiB,CACf,YACA,YACA,YACA,aACA,mBACA,qBACA,aACA,UAGFtZ,UACE7nB,KAAKk2D,SAGPC,aAAa1pD,GACX,GAAG7E,OAAOwuD,YAAc,IAClBxuD,OAAOyuD,QAAU,GACnBr2D,KAAKs2D,aAAa3pD,UAAUC,IAAI,cAEhC5M,KAAKs2D,aAAa3pD,UAAUlF,OAAO,mBAGrC,GAAIG,OAAOyuD,QAAU,GAAI,CAEvBr2D,KAAKu2D,gBAAgB5pD,UAAUC,IAAI,YACnC5M,KAAKw2D,gBAAgB7pD,UAAUlF,OAAO,YAEtC,IAEEzH,KAAKy2D,uBAAuB9pD,UAAUC,IAAI,YAC1C5M,KAAK02D,iBAAiBvlD,MAAMwlD,WAAa,cACzC32D,KAAK02D,iBAAiBvlD,MAAMylD,OAAS,kBACrC,OAIEhvD,OAAOyuD,QAAU,KAEnBr2D,KAAK62D,gBAAgBlqD,UAAUC,IAAI,UACnC5M,KAAK82D,iBAAiBnqD,UAAUC,IAAI,eAEjC,CAEL5M,KAAKu2D,gBAAgB5pD,UAAUlF,OAAO,YACtCzH,KAAKw2D,gBAAgB7pD,UAAUC,IAAI,YACnC5M,KAAK62D,gBAAgBlqD,UAAUlF,OAAO,UACtCzH,KAAK82D,iBAAiBnqD,UAAUlF,OAAO,UAEvC,IAEEzH,KAAK+2D,yBAAyBpqD,UAAUC,IAAI,YAC5C,SAORspD,SACKtuD,OAAOwuD,YAAc,KACtBp2D,KAAKu2D,gBAAgB5pD,UAAUC,IAAI,YACnC5M,KAAKw2D,gBAAgB7pD,UAAUC,IAAI,YACnC5M,KAAKs2D,aAAa3pD,UAAUlF,OAAO,cAEnCzH,KAAKu2D,gBAAgB5pD,UAAUlF,OAAO,YACtCzH,KAAKs2D,aAAa3pD,UAAUC,IAAI,YAEhC5M,KAAKm2D,mBJrDXtT,GAAY6P,SAAS,cKhBrB,cAA6B6B,GAC3BpzB,eAAiB,CAAE,SAEnBtZ,UACE3kB,YAAW,KACTlD,KAAKg3D,YAAYvvD,WAChB,KAGLwvD,eACEj3D,KAAKg3D,YAAYvvD,YLSrBo7C,GAAY6P,SAAS,kBMnBrB,cAA6B6B,GAC3B1sC,UACiBvd,SAAS4d,cAAc,WAC/BzgB,YNmBXo7C,GAAY6P,SAAS,kBOtBrB,cAA6B6B,GAC3B1sC,UACE,MAAMqvC,EAAS5sD,SAAS4d,cAAc,WAChCivC,EAAgB7sD,SAAS4d,cAAc,mBAC7CgvC,EAAOzvD,SACP0vD,EAAcxqD,UAAUlF,OAAO,qBPoBnCo7C,GAAY6P,SAAS,cQzBrB,cAA6B6B,GAC3BpzB,eAAiB,CAAE,WAAY,SAE/BtZ,UACuBvd,SAAS4d,cAAc,kBAC/B1b,iBAAiB,UAAUtH,GAASlF,KAAKo3D,QAAQlyD,KAGhEkyD,QAAQlyD,GACN,MAAMgU,EAAO,oBACAhU,EAAMmyD,WAAWC,MAAM,GAAGxnD,gCACvBmT,KAAKs0C,MAAMryD,EAAMmyD,WAAWC,MAAM,GAAGzhC,KAAO,eAE5D71B,KAAKw3D,eAAeC,mBAAmB,YAAav+C,GACpDlZ,KAAK03D,YAAYjwD,YRcrBo7C,GAAY6P,SAAS,sBS5BrB,cAA6B6B,GAC3BpzB,eAAiB,CAAE,UAEnBtZ,UACE7nB,KAAKk2D,SAGPA,SACKtuD,OAAOwuD,YAAc,IACtBp2D,KAAK23D,aAAahrD,UAAUC,IAAI,YAEhC5M,KAAK23D,aAAahrD,UAAUlF,OAAO,eToBzCo7C,GAAY6P,SAAS,sBU/BrB,cAA6B6B,GAC3BpzB,eAAiB,GAEjBtZ,UACwBvd,SAAS4d,cAAc,mBAE/B/W,MAAMymD,gBAAkB,0CV4B1C/U,GAAY6P,SAAS,QWlCrB,cAA6B6B,GAC3B1sC,cXoCFg7B,GAAY6P,SAAS,sBYrCrB,cAA6B6B,GAC3BpzB,eAAiB,CAAE,gBAAiB,YAEpC02B,iBACE73D,KAAK83D,eAAenrD,UAAUupD,OAAO,YACrCl2D,KAAK+3D,oBAAoBprD,UAAUupD,OAAO,WAC1Cl2D,KAAK+3D,oBAAoBprD,UAAUupD,OAAO,eZkC9CrT,GAAY6P,SAAS,gBaxCrB,cAA6B6B,GAC3BpzB,eAAiB,CAAE,SAEnB62B,cACEh4D,KAAKi4D,YAAYtrD,UAAUlF,OAAO,YAGpCmuD,aACE51D,KAAKi4D,YAAYtrD,UAAUC,IAAI,ebmCnCi2C,GAAY6P,SAAS,4Bc1CrB,cAA6B6B,GAC3BpzB,eAAiB,CAAE,WAEnBA,cAAgB,CACdi0B,OAAQp3C,OACR/G,QAAS+G,QAGX6J,UACE,MAAMa,EAAQpe,SAAS4d,cAAc,kBAErCloB,KAAKu1D,cAAcj5D,MAAQ0D,KAAKs1D,aAChC5sC,EAAMpsB,MAAQ0D,KAAKs1D,aAEnBt1D,KAAKwD,SAAW,IAAI,KAAJ,CAAmB,CACjC3B,YAAa7B,KAAKq1D,YAClB/yD,MAAO,8DACP6R,YAAanU,KAAKs1D,eAEpBt1D,KAAKwD,SAAS2G,MAAMnK,KAAK6N,SACzB7N,KAAKwD,SAASwK,GAAG,UAAU9I,GAASlF,MAAK,EAAekF,KACxDlF,KAAKwD,SAASwK,GAAG,SAAS,IAAMhO,MAAK,MAGvC,GAAekF,GACb,MAAMwjB,EAAQpe,SAAS4d,cAAc,kBAErCloB,KAAKu1D,cAAcj5D,MAAQ4I,EAAMnI,OAAmB,WACpD2rB,EAAMpsB,MAAQ4I,EAAMnI,OAAmB,WAGzC,KACE,MAAM2rB,EAAQpe,SAAS4d,cAAc,kBAErCloB,KAAKu1D,cAAcj5D,MAAQ,GAC3BosB,EAAMpsB,MAAQ,MdUlBumD,GAAY6P,SAAS,gBe9CrB,cAA6B6B,GAC3BpzB,eAAiB,CAAE,aAAc,iBAAkB,gBAEnD02B,iBACE73D,KAAKk4D,mBAAmBvrD,UAAUupD,OAAO,YAGzC,IACiD,uBAA3Cl2D,KAAK02D,iBAAiBvlD,MAAMwlD,YAC9B32D,KAAK02D,iBAAiBvlD,MAAMwlD,WAAa,cACzC32D,KAAK02D,iBAAiBvlD,MAAMylD,OAAS,kBACrC52D,KAAK02D,iBAAiByB,WAAW,GAAGn0D,GAAK,gBAEzChE,KAAK02D,iBAAiBvlD,MAAMwlD,WAAa,UACzC32D,KAAK02D,iBAAiBvlD,MAAMinD,UAAY,aACxCp4D,KAAK02D,iBAAiBvlD,MAAMylD,OAAS,kBACrC52D,KAAK02D,iBAAiByB,WAAW,GAAGn0D,GAAK,IAE3C,MAAOmK,KAOXkqD,cAAcnzD,GACTA,EAAM6L,SAAW/Q,KAAKs4D,sBAAwBpzD,EAAM6L,SAAW/Q,KAAK02D,iBACrExoD,QAAQmT,IAAI,OAEZrhB,KAAKk4D,mBAAmBvrD,UAAUC,IAAI,YACtC5M,KAAK02D,iBAAiBvlD,MAAMwlD,WAAa,cACzC32D,KAAK02D,iBAAiBvlD,MAAMylD,OAAS,kBACrC52D,KAAK02D,iBAAiByB,WAAW,GAAGn0D,GAAK","sources":["webpack://app/./node_modules/@mapbox/fusspot/lib/index.js","webpack://app/./node_modules/@mapbox/mapbox-gl-geocoder/lib/events.js","webpack://app/./node_modules/@mapbox/mapbox-gl-geocoder/lib/exceptions.js","webpack://app/./node_modules/@mapbox/mapbox-gl-geocoder/lib/geolocation.js","webpack://app/./node_modules/@mapbox/mapbox-gl-geocoder/lib/index.js","webpack://app/./node_modules/@mapbox/mapbox-gl-geocoder/lib/localization.js","webpack://app/./node_modules/@mapbox/mapbox-gl-geocoder/lib/utils.js","webpack://app/./node_modules/@mapbox/mapbox-sdk/index.js","webpack://app/./node_modules/@mapbox/mapbox-sdk/lib/browser/browser-client.js","webpack://app/./node_modules/@mapbox/mapbox-sdk/lib/browser/browser-layer.js","webpack://app/./node_modules/@mapbox/mapbox-sdk/lib/classes/mapi-client.js","webpack://app/./node_modules/@mapbox/mapbox-sdk/lib/classes/mapi-error.js","webpack://app/./node_modules/@mapbox/mapbox-sdk/lib/classes/mapi-request.js","webpack://app/./node_modules/@mapbox/mapbox-sdk/lib/classes/mapi-response.js","webpack://app/./node_modules/@mapbox/mapbox-sdk/lib/constants.js","webpack://app/./node_modules/@mapbox/mapbox-sdk/lib/helpers/parse-headers.js","webpack://app/./node_modules/@mapbox/mapbox-sdk/lib/helpers/parse-link-header.js","webpack://app/./node_modules/@mapbox/mapbox-sdk/lib/helpers/url-utils.js","webpack://app/./node_modules/@mapbox/mapbox-sdk/services/geocoding.js","webpack://app/./node_modules/@mapbox/mapbox-sdk/services/service-helpers/create-service-factory.js","webpack://app/./node_modules/@mapbox/mapbox-sdk/services/service-helpers/object-map.js","webpack://app/./node_modules/@mapbox/mapbox-sdk/services/service-helpers/pick.js","webpack://app/./node_modules/@mapbox/mapbox-sdk/services/service-helpers/stringify-booleans.js","webpack://app/./node_modules/@mapbox/mapbox-sdk/services/service-helpers/validator.js","webpack://app/./node_modules/@mapbox/parse-mapbox-token/index.js","webpack://app/./node_modules/@rails/actioncable/src/adapters.js","webpack://app/./node_modules/@rails/actioncable/src/logger.js","webpack://app/./node_modules/@rails/actioncable/src/connection_monitor.js","webpack://app/./node_modules/@rails/actioncable/src/internal.js","webpack://app/./node_modules/@rails/actioncable/src/connection.js","webpack://app/./node_modules/@rails/actioncable/src/subscription.js","webpack://app/./node_modules/@rails/actioncable/src/subscription_guarantor.js","webpack://app/./node_modules/@rails/actioncable/src/subscriptions.js","webpack://app/./node_modules/@rails/actioncable/src/consumer.js","webpack://app/./node_modules/@rails/actioncable/src/index.js","webpack://app/./node_modules/base-64/base64.js","webpack://app/./node_modules/eventemitter3/index.js","webpack://app/./node_modules/events/events.js","webpack://app/./node_modules/fuzzy/lib/fuzzy.js","webpack://app/./node_modules/is-plain-obj/index.js","webpack://app/./node_modules/lodash.debounce/index.js","webpack://app/./node_modules/subtag/subtag.js","webpack://app/./node_modules/suggestions/index.js","webpack://app/./node_modules/suggestions/src/list.js","webpack://app/./node_modules/suggestions/src/suggestions.js","webpack://app/./node_modules/xtend/immutable.js","webpack://app/./node_modules/nanoid/index.browser.js","webpack://app/webpack/bootstrap","webpack://app/webpack/runtime/compat get default export","webpack://app/webpack/runtime/define property getters","webpack://app/webpack/runtime/global","webpack://app/webpack/runtime/hasOwnProperty shorthand","webpack://app/webpack/runtime/make namespace object","webpack://app/webpack/runtime/node module decorator","webpack://app/./node_modules/@hotwired/turbo/dist/turbo.es2017-esm.js","webpack://app/./node_modules/@hotwired/turbo-rails/app/javascript/turbo/cable.js","webpack://app/./node_modules/@hotwired/turbo-rails/app/javascript/turbo/snakeize.js","webpack://app/./node_modules/@hotwired/turbo-rails/app/javascript/turbo/cable_stream_source_element.js","webpack://app/./node_modules/@hotwired/turbo-rails/app/javascript/turbo/index.js","webpack://app/./node_modules/@hotwired/turbo-rails/app/javascript/turbo/form_submissions.js","webpack://app/./node_modules/@hotwired/stimulus/dist/stimulus.js","webpack://app/./app/javascript/controllers/application.js","webpack://app/./app/javascript/controllers/index.js","webpack://app/./app/javascript/controllers/address_autocomplete_controller.js","webpack://app/./app/javascript/controllers/admin_modal_controller.js","webpack://app/./app/javascript/controllers/billing_address_appear_controller.js","webpack://app/./app/javascript/controllers/change_navbar_background_controller.js","webpack://app/./app/javascript/controllers/close_flash_controller.js","webpack://app/./app/javascript/controllers/disapear_footer_controller.js","webpack://app/./app/javascript/controllers/disapear_navbar_controller.js","webpack://app/./app/javascript/controllers/file_upload_controller.js","webpack://app/./app/javascript/controllers/footer_responsivity_controller.js","webpack://app/./app/javascript/controllers/generate_background_controller.js","webpack://app/./app/javascript/controllers/hello_controller.js","webpack://app/./app/javascript/controllers/navbar_responsivity_controller.js","webpack://app/./app/javascript/controllers/painting_zoom_controller.js","webpack://app/./app/javascript/controllers/user_address_autocomplete_controller.js","webpack://app/./app/javascript/controllers/user_dropdown_controller.js"],"sourcesContent":["'use strict';\n/**\n * Validators are functions which assert certain type.\n * They can return a string which can then be used\n * to display a helpful error message.\n * They can also return a function for a custom error message.\n */\nvar isPlainObject = require('is-plain-obj');\nvar xtend = require('xtend');\n\nvar DEFAULT_ERROR_PATH = 'value';\nvar NEWLINE_INDENT = '\\n ';\n\nvar v = {};\n\n/**\n * Runners\n *\n * Take root validators and run assertion\n */\nv.assert = function(rootValidator, options) {\n options = options || {};\n return function(value) {\n var message = validate(rootValidator, value);\n // all good\n if (!message) {\n return;\n }\n\n var errorMessage = processMessage(message, options);\n\n if (options.apiName) {\n errorMessage = options.apiName + ': ' + errorMessage;\n }\n\n throw new Error(errorMessage);\n };\n};\n\n/**\n * Higher Order Validators\n *\n * validators which take other validators as input\n * and output a new validator\n */\nv.shape = function shape(validatorObj) {\n var validators = objectEntries(validatorObj);\n return function shapeValidator(value) {\n var validationResult = validate(v.plainObject, value);\n\n if (validationResult) {\n return validationResult;\n }\n\n var key, validator;\n var errorMessages = [];\n\n for (var i = 0; i < validators.length; i++) {\n key = validators[i].key;\n validator = validators[i].value;\n validationResult = validate(validator, value[key]);\n\n if (validationResult) {\n // return [key].concat(validationResult);\n errorMessages.push([key].concat(validationResult));\n }\n }\n\n if (errorMessages.length < 2) {\n return errorMessages[0];\n }\n\n // enumerate all the error messages\n return function(options) {\n errorMessages = errorMessages.map(function(message) {\n var key = message[0];\n var renderedMessage = processMessage(message, options)\n .split('\\n')\n .join(NEWLINE_INDENT); // indents any inner nesting\n return '- ' + key + ': ' + renderedMessage;\n });\n\n var objectId = options.path.join('.');\n var ofPhrase = objectId === DEFAULT_ERROR_PATH ? '' : ' of ' + objectId;\n\n return (\n 'The following properties' +\n ofPhrase +\n ' have invalid values:' +\n NEWLINE_INDENT +\n errorMessages.join(NEWLINE_INDENT)\n );\n };\n };\n};\n\nv.strictShape = function strictShape(validatorObj) {\n var shapeValidator = v.shape(validatorObj);\n return function strictShapeValidator(value) {\n var shapeResult = shapeValidator(value);\n if (shapeResult) {\n return shapeResult;\n }\n\n var invalidKeys = Object.keys(value).reduce(function(memo, valueKey) {\n if (validatorObj[valueKey] === undefined) {\n memo.push(valueKey);\n }\n return memo;\n }, []);\n\n if (invalidKeys.length !== 0) {\n return function() {\n return 'The following keys are invalid: ' + invalidKeys.join(', ');\n };\n }\n };\n};\n\nv.arrayOf = function arrayOf(validator) {\n return createArrayValidator(validator);\n};\n\nv.tuple = function tuple() {\n var validators = Array.isArray(arguments[0])\n ? arguments[0]\n : Array.prototype.slice.call(arguments);\n return createArrayValidator(validators);\n};\n\n// Currently array validation fails when the first invalid item is found.\nfunction createArrayValidator(validators) {\n var validatingTuple = Array.isArray(validators);\n var getValidator = function(index) {\n if (validatingTuple) {\n return validators[index];\n }\n return validators;\n };\n\n return function arrayValidator(value) {\n var validationResult = validate(v.plainArray, value);\n if (validationResult) {\n return validationResult;\n }\n\n if (validatingTuple && value.length !== validators.length) {\n return 'an array with ' + validators.length + ' items';\n }\n\n for (var i = 0; i < value.length; i++) {\n validationResult = validate(getValidator(i), value[i]);\n if (validationResult) {\n return [i].concat(validationResult);\n }\n }\n };\n}\n\nv.required = function required(validator) {\n function requiredValidator(value) {\n if (value == null) {\n return function(options) {\n return formatErrorMessage(\n options,\n isArrayCulprit(options.path)\n ? 'cannot be undefined/null.'\n : 'is required.'\n );\n };\n }\n return validator.apply(this, arguments);\n }\n requiredValidator.__required = true;\n\n return requiredValidator;\n};\n\nv.oneOfType = function oneOfType() {\n var validators = Array.isArray(arguments[0])\n ? arguments[0]\n : Array.prototype.slice.call(arguments);\n return function oneOfTypeValidator(value) {\n var messages = validators\n .map(function(validator) {\n return validate(validator, value);\n })\n .filter(Boolean);\n\n // If we don't have as many messages as no. of validators,\n // then at least one validator was ok with the value.\n if (messages.length !== validators.length) {\n return;\n }\n\n // check primitive type\n if (\n messages.every(function(message) {\n return message.length === 1 && typeof message[0] === 'string';\n })\n ) {\n return orList(\n messages.map(function(m) {\n return m[0];\n })\n );\n }\n\n // Complex oneOfTypes like\n // `v.oneOftypes(v.shape({name: v.string})`, `v.shape({name: v.number}))`\n // are complex ¯\\_(ツ)_/¯. For the current scope only returning the longest message.\n return messages.reduce(function(max, arr) {\n return arr.length > max.length ? arr : max;\n });\n };\n};\n\n/**\n * Meta Validators\n * which take options as argument (not validators)\n * and return a new primitive validator\n */\nv.equal = function equal(compareWith) {\n return function equalValidator(value) {\n if (value !== compareWith) {\n return JSON.stringify(compareWith);\n }\n };\n};\n\nv.oneOf = function oneOf() {\n var options = Array.isArray(arguments[0])\n ? arguments[0]\n : Array.prototype.slice.call(arguments);\n var validators = options.map(function(value) {\n return v.equal(value);\n });\n\n return v.oneOfType.apply(this, validators);\n};\n\nv.range = function range(compareWith) {\n var min = compareWith[0];\n var max = compareWith[1];\n return function rangeValidator(value) {\n var validationResult = validate(v.number, value);\n\n if (validationResult || value < min || value > max) {\n return 'number between ' + min + ' & ' + max + ' (inclusive)';\n }\n };\n};\n\n/**\n * Primitive validators\n *\n * simple validators which return a string or undefined\n */\nv.any = function any() {\n return;\n};\n\nv.boolean = function boolean(value) {\n if (typeof value !== 'boolean') {\n return 'boolean';\n }\n};\n\nv.number = function number(value) {\n if (typeof value !== 'number') {\n return 'number';\n }\n};\n\nv.plainArray = function plainArray(value) {\n if (!Array.isArray(value)) {\n return 'array';\n }\n};\n\nv.plainObject = function plainObject(value) {\n if (!isPlainObject(value)) {\n return 'object';\n }\n};\n\nv.string = function string(value) {\n if (typeof value !== 'string') {\n return 'string';\n }\n};\n\nv.func = function func(value) {\n if (typeof value !== 'function') {\n return 'function';\n }\n};\n\nfunction validate(validator, value) {\n // assertions are optional by default unless wrapped in v.require\n if (value == null && !validator.hasOwnProperty('__required')) {\n return;\n }\n\n var result = validator(value);\n\n if (result) {\n return Array.isArray(result) ? result : [result];\n }\n}\n\nfunction processMessage(message, options) {\n // message array follows the convention\n // [...path, result]\n // path is an array of object keys / array indices\n // result is output of the validator\n var len = message.length;\n\n var result = message[len - 1];\n var path = message.slice(0, len - 1);\n\n if (path.length === 0) {\n path = [DEFAULT_ERROR_PATH];\n }\n options = xtend(options, { path: path });\n\n return typeof result === 'function'\n ? result(options) // allows customization of result\n : formatErrorMessage(options, prettifyResult(result));\n}\n\nfunction orList(list) {\n if (list.length < 2) {\n return list[0];\n }\n if (list.length === 2) {\n return list.join(' or ');\n }\n return list.slice(0, -1).join(', ') + ', or ' + list.slice(-1);\n}\n\nfunction prettifyResult(result) {\n return 'must be ' + addArticle(result) + '.';\n}\n\nfunction addArticle(nounPhrase) {\n if (/^an? /.test(nounPhrase)) {\n return nounPhrase;\n }\n if (/^[aeiou]/i.test(nounPhrase)) {\n return 'an ' + nounPhrase;\n }\n if (/^[a-z]/i.test(nounPhrase)) {\n return 'a ' + nounPhrase;\n }\n return nounPhrase;\n}\n\nfunction formatErrorMessage(options, prettyResult) {\n var arrayCulprit = isArrayCulprit(options.path);\n var output = options.path.join('.') + ' ' + prettyResult;\n var prepend = arrayCulprit ? 'Item at position ' : '';\n\n return prepend + output;\n}\n\nfunction isArrayCulprit(path) {\n return typeof path[path.length - 1] == 'number' || typeof path[0] == 'number';\n}\n\nfunction objectEntries(obj) {\n return Object.keys(obj || {}).map(function(key) {\n return { key: key, value: obj[key] };\n });\n}\n\nv.validate = validate;\nv.processMessage = processMessage;\n\nmodule.exports = v;\n","'use strict';\nvar nanoid = require('nanoid').nanoid;\n\n/**\n * Construct a new mapbox event client to send interaction events to the mapbox event service\n * @param {Object} options options with which to create the service\n * @param {String} options.accessToken the mapbox access token to make requests\n * @param {Number} [options.flushInterval=1000] the number of ms after which to flush the event queue\n * @param {Number} [options.maxQueueSize=100] the number of events to queue before flushing\n * @private\n */\nfunction MapboxEventManager(options) {\n this.origin = options.origin || 'https://api.mapbox.com';\n this.endpoint = 'events/v2';\n this.access_token = options.accessToken;\n this.version = '0.2.0'\n this.sessionID = this.generateSessionID();\n this.userAgent = this.getUserAgent();\n\n this.options = options;\n this.send = this.send.bind(this);\n\n\n // parse global options to be sent with each request\n this.countries = (options.countries) ? options.countries.split(\",\") : null;\n this.types = (options.types) ? options.types.split(\",\") : null;\n this.bbox = (options.bbox) ? options.bbox : null;\n this.language = (options.language) ? options.language.split(\",\") : null;\n this.limit = (options.limit) ? +options.limit : null;\n this.locale = navigator.language || null;\n this.enableEventLogging = this.shouldEnableLogging(options);\n this.eventQueue = new Array();\n this.flushInterval = options.flushInterval || 1000;\n this.maxQueueSize = options.maxQueueSize || 100;\n this.timer = (this.flushInterval) ? setTimeout(this.flush.bind(this), this.flushInterval) : null;\n // keep some state to deduplicate requests if necessary\n this.lastSentInput = \"\";\n this.lastSentIndex = 0;\n}\n\nMapboxEventManager.prototype = {\n /**\n * Send a search.select event to the mapbox events service\n * This event marks the array index of the item selected by the user out of the array of possible options\n * @private\n * @param {Object} selected the geojson feature selected by the user\n * @param {Object} geocoder a mapbox-gl-geocoder instance\n * @returns {Promise}\n */\n select: function(selected, geocoder){\n var resultIndex = this.getSelectedIndex(selected, geocoder);\n var payload = this.getEventPayload('search.select', geocoder);\n payload.resultIndex = resultIndex;\n payload.resultPlaceName = selected.place_name;\n payload.resultId = selected.id;\n if ((resultIndex === this.lastSentIndex && payload.queryString === this.lastSentInput) || resultIndex == -1) {\n // don't log duplicate events if the user re-selected the same feature on the same search\n return;\n }\n this.lastSentIndex = resultIndex;\n this.lastSentInput = payload.queryString;\n if (!payload.queryString) return; // will be rejected\n return this.push(payload)\n },\n\n /**\n * Send a search-start event to the mapbox events service\n * This turnstile event marks when a user starts a new search\n * @private\n * @param {Object} geocoder a mapbox-gl-geocoder instance\n * @returns {Promise}\n */\n start: function(geocoder){\n var payload = this.getEventPayload('search.start', geocoder);\n if (!payload.queryString) return; // will be rejected\n return this.push(payload);\n },\n\n /**\n * Send a search-keyevent event to the mapbox events service\n * This event records each keypress in sequence\n * @private\n * @param {Object} keyEvent the keydown event to log\n * @param {Object} geocoder a mapbox-gl-geocoder instance\n * \n */\n keyevent: function(keyEvent, geocoder){\n\n //pass invalid event\n if (!keyEvent.key) return;\n // don't send events for keys that don't change the input\n // TAB, ESC, LEFT, RIGHT, ENTER, UP, DOWN\n if (keyEvent.metaKey || [9, 27, 37, 39, 13, 38, 40].indexOf(keyEvent.keyCode) !== -1) return;\n var payload = this.getEventPayload('search.keystroke', geocoder);\n payload.lastAction = keyEvent.key;\n if (!payload.queryString) return; // will be rejected\n return this.push(payload);\n },\n\n /**\n * Send an event to the events service\n *\n * The event is skipped if the instance is not enabled to send logging events\n *\n * @private\n * @param {Object} payload the http POST body of the event\n * @param {Function} [callback] a callback function to invoke when the send has completed\n * @returns {Promise}\n */\n send: function (payload, callback) {\n if (!this.enableEventLogging) {\n if (callback) return callback();\n return;\n }\n var options = this.getRequestOptions(payload);\n this.request(options, function(err){\n if (err) return this.handleError(err, callback);\n if (callback) {\n return callback();\n }\n }.bind(this))\n },\n /**\n * Get http request options\n * @private\n * @param {*} payload\n */\n getRequestOptions: function(payload){\n if (!Array.isArray(payload)) payload = [payload];\n var options = {\n // events must be sent with POST\n method: \"POST\",\n host: this.origin,\n path: this.endpoint + \"?access_token=\" + this.access_token,\n headers: {\n 'Content-Type': 'application/json'\n },\n body:JSON.stringify(payload) //events are arrays\n }\n return options\n },\n\n /**\n * Get the event payload to send to the events service\n * Most payload properties are shared across all events\n * @private\n * @param {String} event the name of the event to send to the events service. Valid options are 'search.start', 'search.select', 'search.feedback'.\n * @param {Object} geocoder a mapbox-gl-geocoder instance\n * @returns {Object} an event payload\n */\n getEventPayload: function (event, geocoder) {\n // Handle proximity, whether null, lat/lng coordinate object, or 'ip'\n var proximity;\n if (!geocoder.options.proximity) {\n proximity = null;\n } else if (typeof geocoder.options.proximity === 'object') {\n proximity = [geocoder.options.proximity.longitude, geocoder.options.proximity.latitude];\n } else if (geocoder.options.proximity === 'ip') {\n proximity = [999,999]; // Alias for 'ip' in event logs\n } else {\n proximity = geocoder.options.proximity;\n }\n\n var zoom = (geocoder._map) ? geocoder._map.getZoom() : undefined;\n var payload = {\n event: event,\n created: +new Date(),\n sessionIdentifier: this.sessionID,\n country: this.countries,\n userAgent: this.userAgent,\n language: this.language,\n bbox: this.bbox,\n types: this.types,\n endpoint: 'mapbox.places',\n autocomplete: geocoder.options.autocomplete,\n fuzzyMatch: geocoder.options.fuzzyMatch,\n proximity: proximity,\n limit: geocoder.options.limit,\n routing: geocoder.options.routing,\n worldview: geocoder.options.worldview,\n mapZoom: zoom,\n keyboardLocale: this.locale\n }\n\n // get the text in the search bar\n if (event === \"search.select\"){\n payload.queryString = geocoder.inputString;\n }else if (event != \"search.select\" && geocoder._inputEl){\n payload.queryString = geocoder._inputEl.value;\n }else{\n payload.queryString = geocoder.inputString;\n }\n return payload;\n },\n\n /**\n * Wraps the request function for easier testing\n * Make an http request and invoke a callback\n * @private\n * @param {Object} opts options describing the http request to be made\n * @param {Function} callback the callback to invoke when the http request is completed\n */\n request: function (opts, callback) {\n var xhttp = new XMLHttpRequest();\n xhttp.onreadystatechange = function() {\n if (this.readyState == 4 ) {\n if (this.status == 204){\n //success\n return callback(null);\n }else {\n return callback(this.statusText);\n }\n }\n };\n\n xhttp.open(opts.method, opts.host + '/' + opts.path, true);\n for (var header in opts.headers){\n var headerValue = opts.headers[header];\n xhttp.setRequestHeader(header, headerValue)\n }\n xhttp.send(opts.body);\n },\n\n /**\n * Handle an error that occurred while making a request\n * @param {Object} err an error instance to log\n * @private\n */\n handleError: function (err, callback) {\n if (callback) return callback(err);\n },\n\n /**\n * Generate a session ID to be returned with all of the searches made by this geocoder instance\n * ID is random and cannot be tracked across sessions\n * @private\n */\n generateSessionID: function () {\n return nanoid();\n },\n\n /**\n * Get a user agent string to send with the request to the events service\n * @private\n */\n getUserAgent: function () {\n return 'mapbox-gl-geocoder.' + this.version + \".\" + navigator.userAgent;\n },\n\n /**\n * Get the 0-based numeric index of the item that the user selected out of the list of options\n * @private\n * @param {Object} selected the geojson feature selected by the user\n * @param {Object} geocoder a Mapbox-GL-Geocoder instance\n * @returns {Number} the index of the selected result\n */\n getSelectedIndex: function(selected, geocoder){\n if (!geocoder._typeahead) return;\n var results = geocoder._typeahead.data;\n var selectedID = selected.id;\n var resultIDs = results.map(function (feature) {\n return feature.id;\n });\n var selectedIdx = resultIDs.indexOf(selectedID);\n return selectedIdx;\n },\n\n /**\n * Check whether events should be logged\n * Clients using a localGeocoder or an origin other than mapbox should not have events logged\n * @private\n */\n shouldEnableLogging: function(options){\n if (options.enableEventLogging === false) return false;\n if (options.origin && options.origin !== 'https://api.mapbox.com') return false;\n // hard to make sense of events when a local instance is suplementing results from origin\n if (options.localGeocoder) return false;\n // hard to make sense of events when a custom filter is in use\n if (options.filter) return false;\n return true;\n },\n\n /**\n * Flush out the event queue by sending events to the events service\n * @private\n */\n flush: function(){\n if (this.eventQueue.length > 0){\n this.send(this.eventQueue);\n this.eventQueue = new Array();\n }\n // //reset the timer\n if (this.timer) clearTimeout(this.timer);\n if (this.flushInterval) this.timer = setTimeout(this.flush.bind(this), this.flushInterval)\n },\n\n /**\n * Push event into the pending queue\n * @param {Object} evt the event to send to the events service\n * @param {Boolean} forceFlush indicates that the event queue should be flushed after adding this event regardless of size of the queue\n * @private\n */\n push: function(evt, forceFlush){\n this.eventQueue.push(evt);\n if (this.eventQueue.length >= this.maxQueueSize || forceFlush){\n this.flush();\n }\n },\n\n /**\n * Flush any remaining events from the queue before it is removed\n * @private\n */\n remove: function(){\n this.flush();\n }\n}\n\n\n\nmodule.exports = MapboxEventManager;\n","module.exports = {\n 'fr': {\n 'name': 'France',\n 'bbox': [[-4.59235, 41.380007], [9.560016, 51.148506]]\n },\n 'us': {\n 'name': 'United States',\n 'bbox': [[-171.791111, 18.91619], [-66.96466, 71.357764]]\n },\n 'ru': {\n 'name': 'Russia',\n 'bbox': [[19.66064, 41.151416], [190.10042, 81.2504]]\n },\n 'ca': {\n 'name': 'Canada',\n 'bbox': [[-140.99778, 41.675105], [-52.648099, 83.23324]]\n }\n};\n","function Geolocation() {}\n\nGeolocation.prototype = {\n\n isSupport: function() {\n return Boolean(window.navigator.geolocation);\n },\n\n getCurrentPosition: function() {\n const positionOptions = {\n enableHighAccuracy: true\n };\n\n return new Promise(function(resolve, reject) {\n window.navigator.geolocation.getCurrentPosition(resolve, reject, positionOptions);\n });\n },\n}\n\nmodule.exports = Geolocation;\n","'use strict';\n\nvar Typeahead = require('suggestions');\nvar debounce = require('lodash.debounce');\nvar extend = require('xtend');\nvar EventEmitter = require('events').EventEmitter;\nvar exceptions = require('./exceptions');\nvar MapboxClient = require('@mapbox/mapbox-sdk');\nvar mbxGeocoder = require('@mapbox/mapbox-sdk/services/geocoding');\nvar MapboxEventManager = require('./events');\nvar localization = require('./localization');\nvar subtag = require('subtag');\nvar Geolocation = require('./geolocation');\nvar utils = require('./utils');\n\n\nconst GEOCODE_REQUEST_TYPE = {\n FORWARD: 0,\n LOCAL: 1,\n REVERSE: 2,\n};\n\n/**\n * Don't include this as part of the options object when creating a new MapboxGeocoder instance.\n */\nfunction getFooterNode() {\n var div = document.createElement('div');\n div.className = 'mapboxgl-ctrl-geocoder--powered-by';\n div.innerHTML = 'Powered by Mapbox';\n\n return div;\n}\n\n/**\n * A geocoder component using the [Mapbox Geocoding API](https://docs.mapbox.com/api/search/#geocoding)\n * @class MapboxGeocoder\n * @param {Object} options\n * @param {String} options.accessToken Required.\n * @param {String} [options.origin=https://api.mapbox.com] Use to set a custom API origin.\n * @param {Object} [options.mapboxgl] A [mapbox-gl](https://github.com/mapbox/mapbox-gl-js) instance to use when creating [Markers](https://docs.mapbox.com/mapbox-gl-js/api/#marker). Required if `options.marker` is `true`.\n * @param {Number} [options.zoom=16] On geocoded result what zoom level should the map animate to when a `bbox` isn't found in the response. If a `bbox` is found the map will fit to the `bbox`.\n * @param {Boolean|Object} [options.flyTo=true] If `false`, animating the map to a selected result is disabled. If `true`, animating the map will use the default animation parameters. If an object, it will be passed as `options` to the map [`flyTo`](https://docs.mapbox.com/mapbox-gl-js/api/#map#flyto) or [`fitBounds`](https://docs.mapbox.com/mapbox-gl-js/api/#map#fitbounds) method providing control over the animation of the transition.\n * @param {String} [options.placeholder=Search] Override the default placeholder attribute value.\n * @param {Object|'ip'} [options.proximity] a geographical point given as an object with `latitude` and `longitude` properties, or the string 'ip' to use a user's IP address location. Search results closer to this point will be given higher priority.\n * @param {Boolean} [options.trackProximity=true] If `true`, the geocoder proximity will dynamically update based on the current map view or user's IP location, depending on zoom level.\n * @param {Boolean} [options.collapsed=false] If `true`, the geocoder control will collapse until hovered or in focus.\n * @param {Boolean} [options.clearAndBlurOnEsc=false] If `true`, the geocoder control will clear it's contents and blur when user presses the escape key.\n * @param {Boolean} [options.clearOnBlur=false] If `true`, the geocoder control will clear its value when the input blurs.\n * @param {Array} [options.bbox] a bounding box argument: this is\n * a bounding box given as an array in the format `[minX, minY, maxX, maxY]`.\n * Search results will be limited to the bounding box.\n * @param {string} [options.countries] a comma separated list of country codes to\n * limit results to specified country or countries.\n * @param {string} [options.types] a comma seperated list of types that filter\n * results to match those specified. See https://docs.mapbox.com/api/search/#data-types\n * for available types.\n * If reverseGeocode is enabled and no type is specified, the type defaults to POIs. Otherwise, if you configure more than one type, the first type will be used.\n * @param {Number} [options.minLength=2] Minimum number of characters to enter before results are shown.\n * @param {Number} [options.limit=5] Maximum number of results to show.\n * @param {string} [options.language] Specify the language to use for response text and query result weighting. Options are IETF language tags comprised of a mandatory ISO 639-1 language code and optionally one or more IETF subtags for country or script. More than one value can also be specified, separated by commas. Defaults to the browser's language settings.\n * @param {Function} [options.filter] A function which accepts a Feature in the [Carmen GeoJSON](https://github.com/mapbox/carmen/blob/master/carmen-geojson.md) format to filter out results from the Geocoding API response before they are included in the suggestions list. Return `true` to keep the item, `false` otherwise.\n * @param {Function} [options.localGeocoder] A function accepting the query string which performs local geocoding to supplement results from the Mapbox Geocoding API. Expected to return an Array of GeoJSON Features in the [Carmen GeoJSON](https://github.com/mapbox/carmen/blob/master/carmen-geojson.md) format.\n * @param {Function} [options.externalGeocoder] A function accepting the query string and current features list which performs geocoding to supplement results from the Mapbox Geocoding API. Expected to return a Promise which resolves to an Array of GeoJSON Features in the [Carmen GeoJSON](https://github.com/mapbox/carmen/blob/master/carmen-geojson.md) format.\n * @param {distance|score} [options.reverseMode=distance] - Set the factors that are used to sort nearby results.\n * @param {boolean} [options.reverseGeocode=false] If `true`, enable reverse geocoding mode. In reverse geocoding, search input is expected to be coordinates in the form `lat, lon`, with suggestions being the reverse geocodes.\n * @param {boolean} [options.flipCoordinates=false] If `true`, search input coordinates for reverse geocoding is expected to be in the form `lon, lat` instead of the default `lat, lon`.\n * @param {Boolean} [options.enableEventLogging=true] Allow Mapbox to collect anonymous usage statistics from the plugin.\n * @param {Boolean|Object} [options.marker=true] If `true`, a [Marker](https://docs.mapbox.com/mapbox-gl-js/api/#marker) will be added to the map at the location of the user-selected result using a default set of Marker options. If the value is an object, the marker will be constructed using these options. If `false`, no marker will be added to the map. Requires that `options.mapboxgl` also be set.\n * @param {Function} [options.render] A function that specifies how the results should be rendered in the dropdown menu. This function should accepts a single [Carmen GeoJSON](https://github.com/mapbox/carmen/blob/master/carmen-geojson.md) object as input and return a string. Any HTML in the returned string will be rendered.\n * @param {Function} [options.getItemValue] A function that specifies how the selected result should be rendered in the search bar. This function should accept a single [Carmen GeoJSON](https://github.com/mapbox/carmen/blob/master/carmen-geojson.md) object as input and return a string. HTML tags in the output string will not be rendered. Defaults to `(item) => item.place_name`.\n * @param {String} [options.mode=mapbox.places] A string specifying the geocoding [endpoint](https://docs.mapbox.com/api/search/#endpoints) to query. Options are `mapbox.places` and `mapbox.places-permanent`. The `mapbox.places-permanent` mode requires an enterprise license for permanent geocodes.\n * @param {Boolean} [options.localGeocoderOnly=false] If `true`, indicates that the `localGeocoder` results should be the only ones returned to the user. If `false`, indicates that the `localGeocoder` results should be combined with those from the Mapbox API with the `localGeocoder` results ranked higher.\n * @param {Boolean} [options.autocomplete=true] Specify whether to return autocomplete results or not. When autocomplete is enabled, results will be included that start with the requested string, rather than just responses that match it exactly.\n * @param {Boolean} [options.fuzzyMatch=true] Specify whether the Geocoding API should attempt approximate, as well as exact, matching when performing searches, or whether it should opt out of this behavior and only attempt exact matching.\n * @param {Boolean} [options.routing=false] Specify whether to request additional metadata about the recommended navigation destination corresponding to the feature or not. Only applicable for address features.\n * @param {String} [options.worldview=\"us\"] Filter results to geographic features whose characteristics are defined differently by audiences belonging to various regional, cultural, or political groups.\n * @param {Boolean} [options.enableGeolocation=false] If `true` enable user geolocation feature.\n * @param {('address'|'street'|'place'|'country')} [options.addressAccuracy=\"street\"] The accuracy for the geolocation feature with which we define the address line to fill. The browser API returns the user's position with accuracy, and sometimes we can get the neighbor's address. To prevent receiving an incorrect address, you can reduce the accuracy of the definition.\n * @example\n * var geocoder = new MapboxGeocoder({ accessToken: mapboxgl.accessToken });\n * map.addControl(geocoder);\n * @return {MapboxGeocoder} `this`\n *\n */\n\nfunction MapboxGeocoder(options) {\n this._eventEmitter = new EventEmitter();\n this.options = extend({}, this.options, options);\n this.inputString = '';\n this.fresh = true;\n this.lastSelected = null;\n this.geolocation = new Geolocation();\n}\n\nMapboxGeocoder.prototype = {\n options: {\n zoom: 16,\n flyTo: true,\n trackProximity: true,\n minLength: 2,\n reverseGeocode: false,\n flipCoordinates: false,\n limit: 5,\n origin: 'https://api.mapbox.com',\n enableEventLogging: true,\n marker: true,\n mapboxgl: null,\n collapsed: false,\n clearAndBlurOnEsc: false,\n clearOnBlur: false,\n enableGeolocation: false,\n addressAccuracy: 'street',\n getItemValue: function(item) {\n return item.place_name\n },\n render: function(item) {\n var placeName = item.place_name.split(',');\n return '
' + placeName[0]+ '
' + placeName.splice(1, placeName.length).join(',') + '
';\n }\n },\n\n /**\n * Add the geocoder to a container. The container can be either a `mapboxgl.Map`, an `HTMLElement` or a CSS selector string.\n *\n * If the container is a [`mapboxgl.Map`](https://docs.mapbox.com/mapbox-gl-js/api/map/), this function will behave identically to [`Map.addControl(geocoder)`](https://docs.mapbox.com/mapbox-gl-js/api/map/#map#addcontrol).\n * If the container is an instance of [`HTMLElement`](https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement), then the geocoder will be appended as a child of that [`HTMLElement`](https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement).\n * If the container is a [CSS selector string](https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Selectors), the geocoder will be appended to the element returned from the query.\n *\n * This function will throw an error if the container is none of the above.\n * It will also throw an error if the referenced HTML element cannot be found in the `document.body`.\n *\n * For example, if the HTML body contains the element `
`, the following script will append the geocoder to `#geocoder-container`:\n *\n * ```javascript\n * var geocoder = new MapboxGeocoder({ accessToken: mapboxgl.accessToken });\n * geocoder.addTo('#geocoder-container');\n * ```\n * @param {String|HTMLElement|mapboxgl.Map} container A reference to the container to which to add the geocoder\n */\n addTo: function(container){\n\n function addToExistingContainer (geocoder, container) {\n if (!document.body.contains(container)) {\n throw new Error(\"Element provided to #addTo() exists, but is not in the DOM\")\n }\n const el = geocoder.onAdd(); //returns the input elements, which are then added to the requested html container\n container.appendChild(el);\n }\n\n // if the container is a map, add the control like normal\n if (container._controlContainer){\n // it's a mapbox-gl map, add like normal\n container.addControl(this);\n }\n // if the container is an HTMLElement, then set the parent to be that element\n else if (container instanceof HTMLElement) {\n addToExistingContainer(this, container);\n }\n // if the container is a string, treat it as a CSS query\n else if (typeof container == 'string'){\n const parent = document.querySelectorAll(container);\n if (parent.length === 0){\n throw new Error(\"Element \", container, \"not found.\")\n }\n\n if (parent.length > 1){\n throw new Error(\"Geocoder can only be added to a single html element\")\n }\n\n addToExistingContainer(this, parent[0]);\n }else{\n throw new Error(\"Error: addTo must be a mapbox-gl-js map, an html element, or a CSS selector query for a single html element\")\n }\n },\n\n onAdd: function(map) {\n if (map && typeof map != 'string'){\n this._map = map;\n }\n\n this.setLanguage();\n\n if (!this.options.localGeocoderOnly){\n this.geocoderService = mbxGeocoder(\n MapboxClient({\n accessToken: this.options.accessToken,\n origin: this.options.origin\n })\n );\n }\n\n if (this.options.localGeocoderOnly && !this.options.localGeocoder){\n throw new Error(\"A localGeocoder function must be specified to use localGeocoderOnly mode\")\n }\n\n this.eventManager = new MapboxEventManager(this.options);\n\n this._onChange = this._onChange.bind(this);\n this._onKeyDown = this._onKeyDown.bind(this);\n this._onPaste = this._onPaste.bind(this);\n this._onBlur = this._onBlur.bind(this);\n this._showButton = this._showButton.bind(this);\n this._hideButton = this._hideButton.bind(this);\n this._onQueryResult = this._onQueryResult.bind(this);\n this.clear = this.clear.bind(this);\n this._updateProximity = this._updateProximity.bind(this);\n this._collapse = this._collapse.bind(this);\n this._unCollapse = this._unCollapse.bind(this);\n this._clear = this._clear.bind(this);\n this._clearOnBlur = this._clearOnBlur.bind(this);\n this._geolocateUser = this._geolocateUser.bind(this);\n\n var el = (this.container = document.createElement('div'));\n el.className = 'mapboxgl-ctrl-geocoder mapboxgl-ctrl';\n\n var searchIcon = this.createIcon('search', '')\n\n this._inputEl = document.createElement('input');\n this._inputEl.type = 'text';\n this._inputEl.className = 'mapboxgl-ctrl-geocoder--input';\n\n this.setPlaceholder();\n\n if (this.options.collapsed) {\n this._collapse();\n this.container.addEventListener('mouseenter', this._unCollapse);\n this.container.addEventListener('mouseleave', this._collapse);\n this._inputEl.addEventListener('focus', this._unCollapse);\n }\n\n if (this.options.collapsed || this.options.clearOnBlur) {\n this._inputEl.addEventListener('blur', this._onBlur);\n }\n\n this._inputEl.addEventListener('keydown', debounce(this._onKeyDown, 200));\n this._inputEl.addEventListener('paste', this._onPaste);\n this._inputEl.addEventListener('change', this._onChange);\n this.container.addEventListener('mouseenter', this._showButton);\n this.container.addEventListener('mouseleave', this._hideButton);\n this._inputEl.addEventListener('keyup', function(e){\n this.eventManager.keyevent(e, this);\n }.bind(this));\n\n var actions = document.createElement('div');\n actions.classList.add('mapboxgl-ctrl-geocoder--pin-right');\n\n this._clearEl = document.createElement('button');\n this._clearEl.setAttribute('aria-label', 'Clear');\n this._clearEl.addEventListener('click', this.clear);\n this._clearEl.className = 'mapboxgl-ctrl-geocoder--button';\n\n var buttonIcon = this.createIcon('close', '')\n this._clearEl.appendChild(buttonIcon);\n\n this._loadingEl = this.createIcon('loading', '');\n\n actions.appendChild(this._clearEl);\n actions.appendChild(this._loadingEl);\n\n el.appendChild(searchIcon);\n el.appendChild(this._inputEl);\n el.appendChild(actions);\n\n if (this.options.enableGeolocation && this.geolocation.isSupport()) {\n this._geolocateEl = document.createElement('button');\n this._geolocateEl.setAttribute('aria-label', 'Geolocate');\n this._geolocateEl.addEventListener('click', this._geolocateUser);\n this._geolocateEl.className = 'mapboxgl-ctrl-geocoder--button';\n\n var geolocateIcon = this.createIcon('geolocate', '');\n this._geolocateEl.appendChild(geolocateIcon);\n\n actions.appendChild(this._geolocateEl);\n this._showGeolocateButton();\n }\n\n var typeahead = this._typeahead = new Typeahead(this._inputEl, [], {\n filter: false,\n minLength: this.options.minLength,\n limit: this.options.limit\n });\n\n this.setRenderFunction(this.options.render);\n typeahead.getItemValue = this.options.getItemValue;\n\n // Add support for footer.\n var parentDraw = typeahead.list.draw;\n var footerNode = this._footerNode = getFooterNode();\n typeahead.list.draw = function() {\n parentDraw.call(this);\n\n footerNode.addEventListener('mousedown', function() {\n this.selectingListItem = true;\n }.bind(this));\n \n footerNode.addEventListener('mouseup', function() {\n this.selectingListItem = false;\n }.bind(this));\n\n this.element.appendChild(footerNode);\n };\n\n this.mapMarker = null;\n this._handleMarker = this._handleMarker.bind(this);\n if (this._map){\n if (this.options.trackProximity ) {\n this._updateProximity();\n this._map.on('moveend', this._updateProximity);\n }\n this._mapboxgl = this.options.mapboxgl;\n if (!this._mapboxgl && this.options.marker) {\n // eslint-disable-next-line no-console\n console.error(\"No mapboxgl detected in options. Map markers are disabled. Please set options.mapboxgl.\");\n this.options.marker = false;\n }\n }\n return el;\n },\n\n _geolocateUser: function () {\n this._hideGeolocateButton();\n this._showLoadingIcon();\n\n this.geolocation.getCurrentPosition().then(function(geolocationPosition) {\n this._hideLoadingIcon();\n\n const geojson = {\n geometry: {\n type: 'Point',\n coordinates: [geolocationPosition.coords.longitude, geolocationPosition.coords.latitude]\n }\n };\n\n this._handleMarker(geojson);\n this._fly(geojson);\n\n this._typeahead.clear();\n this._typeahead.selected = true;\n this.lastSelected = JSON.stringify(geojson);\n this._showClearButton();\n this.fresh = false;\n\n const config = {\n limit: 1,\n language: [this.options.language],\n query: geojson.geometry.coordinates,\n types: [\"address\"]\n };\n\n if (this.options.localGeocoderOnly) {\n const text = geojson.geometry.coordinates[0] + ',' + geojson.geometry.coordinates[1]\n this._setInputValue(text);\n\n this._eventEmitter.emit('result', { result: geojson });\n } else {\n this.geocoderService.reverseGeocode(config).send().then(function (resp) {\n const feature = resp.body.features[0];\n \n if (feature) {\n const locationText = utils.transformFeatureToGeolocationText(feature, this.options.addressAccuracy);\n this._setInputValue(locationText);\n \n feature.user_coordinates = geojson.geometry.coordinates;\n this._eventEmitter.emit('result', { result: feature });\n } else {\n this._eventEmitter.emit('result', { result: { user_coordinates: geojson.geometry.coordinates } });\n }\n }.bind(this));\n }\n }.bind(this)).catch(function(error) {\n if (error.code === 1) {\n this._renderUserDeniedGeolocationError();\n } else {\n this._renderLocationError();\n }\n\n this._hideLoadingIcon();\n this._showGeolocateButton();\n this._hideAttribution();\n }.bind(this));\n },\n\n createIcon: function(name, path) {\n var icon = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n icon.setAttribute('class', 'mapboxgl-ctrl-geocoder--icon mapboxgl-ctrl-geocoder--icon-' + name);\n icon.setAttribute('viewBox', '0 0 18 18');\n icon.setAttribute('xml:space','preserve');\n icon.setAttribute('width', 18);\n icon.setAttribute('height', 18);\n icon.innerHTML = path;\n return icon;\n },\n\n onRemove: function() {\n this.container.parentNode.removeChild(this.container);\n\n if (this.options.trackProximity && this._map) {\n this._map.off('moveend', this._updateProximity);\n }\n\n this._removeMarker();\n\n this._map = null;\n\n return this;\n },\n\n _setInputValue: function (value) {\n this._inputEl.value = value;\n \n setTimeout(function () {\n this._inputEl.focus();\n this._inputEl.scrollLeft = 0;\n this._inputEl.setSelectionRange(0, 0);\n }.bind(this), 1);\n },\n\n _onPaste: function(e){\n var value = (e.clipboardData || window.clipboardData).getData('text');\n if (value.length >= this.options.minLength) {\n this._geocode(value);\n }\n },\n\n _onKeyDown: function(e) {\n var ESC_KEY_CODE = 27,\n TAB_KEY_CODE = 9;\n\n if (e.keyCode === ESC_KEY_CODE && this.options.clearAndBlurOnEsc) {\n this._clear(e);\n return this._inputEl.blur();\n }\n\n // if target has shadowRoot, then get the actual active element inside the shadowRoot\n var target = e.target && e.target.shadowRoot\n ? e.target.shadowRoot.activeElement\n : e.target;\n var value = target ? target.value : '';\n\n if (!value) {\n this.fresh = true;\n // the user has removed all the text\n if (e.keyCode !== TAB_KEY_CODE) this.clear(e);\n this._showGeolocateButton();\n return this._hideClearButton();\n }\n\n this._hideGeolocateButton();\n\n // TAB, ESC, LEFT, RIGHT, ENTER, UP, DOWN\n if ((e.metaKey || [TAB_KEY_CODE, ESC_KEY_CODE, 37, 39, 13, 38, 40].indexOf(e.keyCode) !== -1))\n return;\n\n if (target.value.length >= this.options.minLength) {\n this._geocode(target.value);\n }\n },\n\n _showButton: function() {\n if (this._typeahead.selected) this._showClearButton();\n },\n\n _hideButton: function() {\n if (this._typeahead.selected) this._hideClearButton();\n },\n\n _showClearButton: function() {\n this._clearEl.style.display = 'block';\n },\n\n _hideClearButton: function() {\n this._clearEl.style.display = 'none'\n },\n\n _showGeolocateButton: function() {\n if (this._geolocateEl && this.geolocation.isSupport()) {\n this._geolocateEl.style.display = 'block';\n }\n },\n\n _hideGeolocateButton: function() {\n if (this._geolocateEl) {\n this._geolocateEl.style.display = 'none';\n }\n },\n\n _showLoadingIcon: function() {\n this._loadingEl.style.display = 'block';\n },\n \n _hideLoadingIcon: function() {\n this._loadingEl.style.display = 'none';\n },\n\n _showAttribution: function() {\n this._footerNode.style.display = 'block'\n },\n \n _hideAttribution: function() {\n this._footerNode.style.display = 'none'\n },\n\n _onBlur: function(e) {\n if (this.options.clearOnBlur) {\n this._clearOnBlur(e);\n }\n if (this.options.collapsed) {\n this._collapse();\n }\n },\n _onChange: function() {\n var selected = this._typeahead.selected;\n if (selected && JSON.stringify(selected) !== this.lastSelected) {\n this._hideClearButton();\n if (this.options.flyTo) {\n this._fly(selected);\n }\n if (this.options.marker && this._mapboxgl){\n this._handleMarker(selected);\n }\n\n // After selecting a feature, re-focus the textarea and set\n // cursor at start.\n this._inputEl.focus();\n this._inputEl.scrollLeft = 0;\n this._inputEl.setSelectionRange(0, 0);\n this.lastSelected = JSON.stringify(selected);\n this._eventEmitter.emit('result', { result: selected });\n this.eventManager.select(selected, this);\n }\n },\n\n _fly: function(selected) {\n var flyOptions;\n if (selected.properties && exceptions[selected.properties.short_code]) {\n // Certain geocoder search results return (and therefore zoom to fit)\n // an unexpectedly large bounding box: for example, both Russia and the\n // USA span both sides of -180/180, or France includes the island of\n // Reunion in the Indian Ocean. An incomplete list of these exceptions\n // at ./exceptions.json provides \"reasonable\" bounding boxes as a\n // short-term solution; this may be amended as necessary.\n flyOptions = extend({}, this.options.flyTo);\n if (this._map){\n this._map.fitBounds(exceptions[selected.properties.short_code].bbox, flyOptions);\n }\n } else if (selected.bbox) {\n var bbox = selected.bbox;\n flyOptions = extend({}, this.options.flyTo);\n if (this._map){\n this._map.fitBounds([[bbox[0], bbox[1]], [bbox[2], bbox[3]]], flyOptions);\n }\n } else {\n var defaultFlyOptions = {\n zoom: this.options.zoom\n }\n flyOptions = extend({}, defaultFlyOptions, this.options.flyTo);\n // ensure that center is not overriden by custom options\n if (selected.center) {\n flyOptions.center = selected.center;\n } else if (selected.geometry && selected.geometry.type && selected.geometry.type === 'Point' && selected.geometry.coordinates) {\n flyOptions.center = selected.geometry.coordinates;\n }\n\n if (this._map){\n this._map.flyTo(flyOptions);\n }\n }\n },\n\n _requestType: function(options, search) {\n var type;\n if (options.localGeocoderOnly) {\n type = GEOCODE_REQUEST_TYPE.LOCAL;\n } else if (options.reverseGeocode && utils.REVERSE_GEOCODE_COORD_RGX.test(search)) {\n type = GEOCODE_REQUEST_TYPE.REVERSE;\n } else {\n type = GEOCODE_REQUEST_TYPE.FORWARD;\n }\n return type;\n },\n\n _setupConfig: function(requestType, search) {\n // Possible config properties to pass to client\n const keys = [\n 'bbox',\n 'limit',\n 'proximity',\n 'countries',\n 'types',\n 'language',\n 'reverseMode',\n 'mode',\n 'autocomplete',\n 'fuzzyMatch',\n 'routing',\n 'worldview'\n ];\n const spacesOrCommaRgx = /[\\s,]+/;\n\n var self = this;\n var config = keys.reduce(function(config, key) {\n // don't include undefined/null params, but allow boolean, among other, values\n if (self.options[key] === undefined || self.options[key] === null) {\n return config;\n }\n\n // countries, types, and language need to be passed in as arrays to client\n // https://github.com/mapbox/mapbox-sdk-js/blob/master/services/geocoding.js#L38-L47\n ['countries', 'types', 'language'].indexOf(key) > -1\n ? (config[key] = self.options[key].split(spacesOrCommaRgx))\n : (config[key] = self.options[key]);\n\n const isCoordKey =\n typeof self.options[key].longitude === 'number' &&\n typeof self.options[key].latitude === 'number';\n\n if (key === 'proximity' && isCoordKey) {\n const lng = self.options[key].longitude;\n const lat = self.options[key].latitude;\n\n config[key] = [lng, lat];\n }\n\n return config;\n }, {});\n\n switch (requestType) {\n case GEOCODE_REQUEST_TYPE.REVERSE: {\n var coords = search.split(spacesOrCommaRgx).map(function(c) {\n return parseFloat(c, 10);\n })\n if (!self.options.flipCoordinates) {\n coords.reverse();\n }\n\n // client only accepts one type for reverseGeocode, so\n // use first config type if one, if not default to poi\n config.types ? [config.types[0]] : [\"poi\"];\n config = extend(config, { query: coords, limit: 1 });\n\n // Remove config options not supported by the reverseGeocoder\n ['proximity', 'autocomplete', 'fuzzyMatch', 'bbox'].forEach(function(key) {\n if (key in config) {\n delete config[key]\n }\n });\n } break;\n case GEOCODE_REQUEST_TYPE.FORWARD: {\n // Ensure that any reverse geocoding looking request is cleaned up\n // to be processed as only a forward geocoding request by the server.\n const trimmedSearch = search.trim();\n const reverseGeocodeCoordRgx = /^(-?\\d{1,3}(\\.\\d{0,256})?)[, ]+(-?\\d{1,3}(\\.\\d{0,256})?)?$/;\n if (reverseGeocodeCoordRgx.test(trimmedSearch)) {\n search = search.replace(/,/g, ' ');\n }\n config = extend(config, { query: search });\n } break;\n }\n\n return config;\n },\n\n _geocode: function(searchInput) {\n this.inputString = searchInput;\n this._showLoadingIcon();\n this._eventEmitter.emit('loading', { query: searchInput });\n\n const requestType = this._requestType(this.options, searchInput);\n const config = this._setupConfig(requestType, searchInput);\n\n var request;\n switch (requestType) {\n case GEOCODE_REQUEST_TYPE.LOCAL:\n request = Promise.resolve();\n break;\n case GEOCODE_REQUEST_TYPE.FORWARD:\n request = this.geocoderService.forwardGeocode(config).send();\n break;\n case GEOCODE_REQUEST_TYPE.REVERSE:\n request = this.geocoderService.reverseGeocode(config).send();\n break;\n }\n\n var localGeocoderRes = this.options.localGeocoder ? this.options.localGeocoder(searchInput) || [] : [];\n var externalGeocoderRes = [];\n\n var geocoderError = null;\n request.catch(function(error) {\n geocoderError = error;\n }.bind(this))\n .then(\n function(response) {\n this._hideLoadingIcon();\n\n var res = {};\n\n if (!response){\n res = {\n type: 'FeatureCollection',\n features: []\n }\n } else if (response.statusCode == '200') {\n res = response.body;\n res.request = response.request\n res.headers = response.headers\n }\n\n res.config = config;\n\n if (this.fresh){\n this.eventManager.start(this);\n this.fresh = false;\n }\n\n // supplement Mapbox Geocoding API results with locally populated results\n res.features = res.features\n ? localGeocoderRes.concat(res.features)\n : localGeocoderRes;\n\n if (this.options.externalGeocoder) {\n\n externalGeocoderRes = this.options.externalGeocoder(searchInput, res.features) || Promise.resolve([]);\n // supplement Mapbox Geocoding API results with features returned by a promise\n return externalGeocoderRes.then(function(features) {\n res.features = res.features ? features.concat(res.features) : features;\n return res;\n }, function(){\n // on error, display the original result\n return res;\n });\n }\n return res;\n\n }.bind(this)).then(\n function(res) {\n if (geocoderError) {\n throw geocoderError;\n }\n\n // apply results filter if provided\n if (this.options.filter && res.features.length) {\n res.features = res.features.filter(this.options.filter);\n }\n\n if (res.features.length) {\n this._showClearButton();\n this._hideGeolocateButton();\n this._showAttribution();\n this._eventEmitter.emit('results', res);\n this._typeahead.update(res.features);\n } else {\n this._hideClearButton();\n this._hideAttribution();\n this._typeahead.selected = null;\n this._renderNoResults();\n this._eventEmitter.emit('results', res);\n }\n\n }.bind(this)\n ).catch(\n function(err) {\n this._hideLoadingIcon();\n this._hideAttribution();\n\n // in the event of an error in the Mapbox Geocoding API still display results from the localGeocoder\n if ((localGeocoderRes.length && this.options.localGeocoder) || (externalGeocoderRes.length && this.options.externalGeocoder) ) {\n this._showClearButton();\n this._hideGeolocateButton();\n this._typeahead.update(localGeocoderRes);\n } else {\n this._hideClearButton();\n this._typeahead.selected = null;\n this._renderError();\n }\n\n this._eventEmitter.emit('results', { features: localGeocoderRes });\n this._eventEmitter.emit('error', { error: err });\n }.bind(this)\n );\n\n return request;\n },\n\n /**\n * Shared logic for clearing input\n * @param {Event} [ev] the event that triggered the clear, if available\n * @private\n *\n */\n _clear: function(ev) {\n if (ev) ev.preventDefault();\n this._inputEl.value = '';\n this._typeahead.selected = null;\n this._typeahead.clear();\n this._onChange();\n this._hideClearButton();\n this._showGeolocateButton();\n this._removeMarker();\n this.lastSelected = null;\n this._eventEmitter.emit('clear');\n this.fresh = true;\n },\n\n /**\n * Clear and then focus the input.\n * @param {Event} [ev] the event that triggered the clear, if available\n *\n */\n clear: function(ev) {\n this._clear(ev);\n this._inputEl.focus();\n },\n\n\n /**\n * Clear the input, without refocusing it. Used to implement clearOnBlur\n * constructor option.\n * @param {Event} [ev] the blur event\n * @private\n */\n _clearOnBlur: function(ev) {\n var ctx = this;\n\n /*\n * If relatedTarget is not found, assume user targeted the suggestions list.\n * In that case, do not clear on blur. There are other edge cases where\n * ev.relatedTarget could be null. Clicking on list always results in null\n * relatedtarget because of upstream behavior in `suggestions`.\n *\n * The ideal solution would be to check if ev.relatedTarget is a child of\n * the list. See issue #258 for details on why we can't do that yet.\n */\n if (ev.relatedTarget) {\n ctx._clear(ev);\n }\n },\n\n _onQueryResult: function(response) {\n var results = response.body;\n if (!results.features.length) return;\n var result = results.features[0];\n this._typeahead.selected = result;\n this._inputEl.value = result.place_name;\n this._onChange();\n },\n\n _updateProximity: function() {\n // proximity is designed for local scale, if the user is looking at the whole world,\n // it doesn't make sense to factor in the arbitrary centre of the map\n if (!this._map || !this.options.trackProximity){\n return;\n }\n if (this._map.getZoom() > 9) {\n var center = this._map.getCenter().wrap();\n this.setProximity({ longitude: center.lng, latitude: center.lat }, false);\n } else {\n this.setProximity(null, false);\n }\n },\n\n _collapse: function() {\n // do not collapse if input is in focus\n if (!this._inputEl.value && this._inputEl !== document.activeElement) this.container.classList.add('mapboxgl-ctrl-geocoder--collapsed');\n },\n\n _unCollapse: function() {\n this.container.classList.remove('mapboxgl-ctrl-geocoder--collapsed');\n },\n\n /**\n * Set & query the input\n * @param {string} searchInput location name or other search input\n * @returns {MapboxGeocoder} this\n */\n query: function(searchInput) {\n this._geocode(searchInput).then(this._onQueryResult);\n return this;\n },\n\n _renderError: function(){\n var errorMessage = \"
There was an error reaching the server
\"\n this._renderMessage(errorMessage);\n },\n\n _renderLocationError: function(){\n var errorMessage = \"
A location error has occurred
\"\n this._renderMessage(errorMessage);\n },\n\n _renderNoResults: function(){\n var errorMessage = \"
No results found
\";\n this._renderMessage(errorMessage);\n },\n\n _renderUserDeniedGeolocationError: function() {\n var errorMessage = \"
Geolocation permission denied
\"\n this._renderMessage(errorMessage);\n },\n\n _renderMessage: function(msg){\n this._typeahead.update([]);\n this._typeahead.selected = null;\n this._typeahead.clear();\n this._typeahead.renderError(msg);\n },\n\n /**\n * Get the text to use as the search bar placeholder\n *\n * If placeholder is provided in options, then use options.placeholder\n * Otherwise, if language is provided in options, then use the localized string of the first language if available\n * Otherwise use the default\n *\n * @returns {String} the value to use as the search bar placeholder\n * @private\n */\n _getPlaceholderText: function(){\n if (this.options.placeholder) return this.options.placeholder;\n if (this.options.language){\n var firstLanguage = this.options.language.split(\",\")[0];\n var language = subtag.language(firstLanguage);\n var localizedValue = localization.placeholder[language];\n if (localizedValue) return localizedValue;\n }\n return 'Search';\n },\n\n /**\n * Set input\n * @param {string} searchInput location name or other search input\n * @returns {MapboxGeocoder} this\n */\n setInput: function(searchInput) {\n // Set input value to passed value and clear everything else.\n this._inputEl.value = searchInput;\n this._typeahead.selected = null;\n this._typeahead.clear();\n if (searchInput.length >= this.options.minLength) {\n this._geocode(searchInput);\n }\n return this;\n },\n\n /**\n * Set proximity\n * @param {Object|'ip'} proximity The new `options.proximity` value. This is a geographical point given as an object with `latitude` and `longitude` properties or the string 'ip'.\n * @param {Boolean} disableTrackProximity If true, sets `trackProximity` to false. True by default to prevent `trackProximity` from unintentionally overriding an explicitly set proximity value.\n * @returns {MapboxGeocoder} this\n */\n setProximity: function(proximity, disableTrackProximity = true) {\n this.options.proximity = proximity;\n if (disableTrackProximity) {\n this.options.trackProximity = false;\n }\n return this;\n },\n\n /**\n * Get proximity\n * @returns {Object} The geocoder proximity\n */\n getProximity: function() {\n return this.options.proximity;\n },\n\n /**\n * Set the render function used in the results dropdown\n * @param {Function} fn The function to use as a render function. This function accepts a single [Carmen GeoJSON](https://github.com/mapbox/carmen/blob/master/carmen-geojson.md) object as input and returns a string.\n * @returns {MapboxGeocoder} this\n */\n setRenderFunction: function(fn){\n if (fn && typeof(fn) == \"function\"){\n this._typeahead.render = fn;\n }\n return this;\n },\n\n /**\n * Get the function used to render the results dropdown\n *\n * @returns {Function} the render function\n */\n getRenderFunction: function(){\n return this._typeahead.render;\n },\n\n /**\n * Get the language to use in UI elements and when making search requests\n *\n * Look first at the explicitly set options otherwise use the browser's language settings\n * @param {String} language Specify the language to use for response text and query result weighting. Options are IETF language tags comprised of a mandatory ISO 639-1 language code and optionally one or more IETF subtags for country or script. More than one value can also be specified, separated by commas.\n * @returns {MapboxGeocoder} this\n */\n setLanguage: function(language){\n var browserLocale = navigator.language || navigator.userLanguage || navigator.browserLanguage;\n this.options.language = language || this.options.language || browserLocale;\n return this;\n },\n\n /**\n * Get the language to use in UI elements and when making search requests\n * @returns {String} The language(s) used by the plugin, if any\n */\n getLanguage: function(){\n return this.options.language;\n },\n\n /**\n * Get the zoom level the map will move to when there is no bounding box on the selected result\n * @returns {Number} the map zoom\n */\n getZoom: function(){\n return this.options.zoom;\n },\n\n /**\n * Set the zoom level\n * @param {Number} zoom The zoom level that the map should animate to when a `bbox` isn't found in the response. If a `bbox` is found the map will fit to the `bbox`.\n * @returns {MapboxGeocoder} this\n */\n setZoom: function(zoom){\n this.options.zoom = zoom;\n return this;\n },\n\n /**\n * Get the parameters used to fly to the selected response, if any\n * @returns {Boolean|Object} The `flyTo` option\n */\n getFlyTo: function(){\n return this.options.flyTo;\n },\n\n /**\n * Set the flyTo options\n * @param {Boolean|Object} flyTo If false, animating the map to a selected result is disabled. If true, animating the map will use the default animation parameters. If an object, it will be passed as `options` to the map [`flyTo`](https://docs.mapbox.com/mapbox-gl-js/api/#map#flyto) or [`fitBounds`](https://docs.mapbox.com/mapbox-gl-js/api/#map#fitbounds) method providing control over the animation of the transition.\n */\n setFlyTo: function(flyTo){\n this.options.flyTo = flyTo;\n return this;\n },\n\n /**\n * Get the value of the placeholder string\n * @returns {String} The input element's placeholder value\n */\n getPlaceholder: function(){\n return this.options.placeholder;\n },\n\n /**\n * Set the value of the input element's placeholder\n * @param {String} placeholder the text to use as the input element's placeholder\n * @returns {MapboxGeocoder} this\n */\n setPlaceholder: function(placeholder){\n this.placeholder = (placeholder) ? placeholder : this._getPlaceholderText();\n this._inputEl.placeholder = this.placeholder;\n this._inputEl.setAttribute('aria-label', this.placeholder);\n return this\n },\n\n /**\n * Get the bounding box used by the plugin\n * @returns {Array} the bounding box, if any\n */\n getBbox: function(){\n return this.options.bbox;\n },\n\n /**\n * Set the bounding box to limit search results to\n * @param {Array} bbox a bounding box given as an array in the format [minX, minY, maxX, maxY].\n * @returns {MapboxGeocoder} this\n */\n setBbox: function(bbox){\n this.options.bbox = bbox;\n return this;\n },\n\n /**\n * Get a list of the countries to limit search results to\n * @returns {String} a comma separated list of countries to limit to, if any\n */\n getCountries: function(){\n return this.options.countries;\n },\n\n /**\n * Set the countries to limit search results to\n * @param {String} countries a comma separated list of countries to limit to\n * @returns {MapboxGeocoder} this\n */\n setCountries: function(countries){\n this.options.countries = countries;\n return this;\n },\n\n /**\n * Get a list of the types to limit search results to\n * @returns {String} a comma separated list of types to limit to\n */\n getTypes: function(){\n return this.options.types;\n },\n\n /**\n * Set the types to limit search results to\n * @param {String} countries a comma separated list of types to limit to\n * @returns {MapboxGeocoder} this\n */\n setTypes: function(types){\n this.options.types = types;\n return this;\n },\n\n /**\n * Get the minimum number of characters typed to trigger results used in the plugin\n * @returns {Number} The minimum length in characters before a search is triggered\n */\n getMinLength: function(){\n return this.options.minLength;\n },\n\n /**\n * Set the minimum number of characters typed to trigger results used by the plugin\n * @param {Number} minLength the minimum length in characters\n * @returns {MapboxGeocoder} this\n */\n setMinLength: function(minLength){\n this.options.minLength = minLength;\n if (this._typeahead) this._typeahead.options.minLength = minLength;\n return this;\n },\n\n /**\n * Get the limit value for the number of results to display used by the plugin\n * @returns {Number} The limit value for the number of results to display used by the plugin\n */\n getLimit: function(){\n return this.options.limit;\n },\n\n /**\n * Set the limit value for the number of results to display used by the plugin\n * @param {Number} limit the number of search results to return\n * @returns {MapboxGeocoder}\n */\n setLimit: function(limit){\n this.options.limit = limit;\n if (this._typeahead) this._typeahead.options.limit = limit;\n return this;\n },\n\n /**\n * Get the filter function used by the plugin\n * @returns {Function} the filter function\n */\n getFilter: function(){\n return this.options.filter;\n },\n\n /**\n * Set the filter function used by the plugin.\n * @param {Function} filter A function which accepts a Feature in the [Carmen GeoJSON](https://github.com/mapbox/carmen/blob/master/carmen-geojson.md) format to filter out results from the Geocoding API response before they are included in the suggestions list. Return `true` to keep the item, `false` otherwise.\n * @returns {MapboxGeocoder} this\n */\n setFilter: function(filter){\n this.options.filter = filter;\n return this;\n },\n\n /**\n * Set the geocoding endpoint used by the plugin.\n * @param {Function} origin A function which accepts an HTTPS URL to specify the endpoint to query results from.\n * @returns {MapboxGeocoder} this\n */\n setOrigin: function(origin){\n this.options.origin = origin;\n this.geocoderService = mbxGeocoder(\n MapboxClient({\n accessToken: this.options.accessToken,\n origin: this.options.origin\n })\n );\n return this;\n },\n\n /**\n * Get the geocoding endpoint the plugin is currently set to\n * @returns {Function} the endpoint URL\n */\n getOrigin: function(){\n return this.options.origin;\n },\n\n /**\n * Set the accessToken option used for the geocoding request endpoint.\n * @param {String} accessToken value\n * @returns {MapboxGeocoder} this\n */\n setAccessToken: function(accessToken){\n this.options.accessToken = accessToken;\n this.geocoderService = mbxGeocoder(\n MapboxClient({\n accessToken: this.options.accessToken,\n origin: this.options.origin\n })\n );\n return this;\n },\n\n /**\n * Set the autocomplete option used for geocoding requests\n * @param {Boolean} value The boolean value to set autocomplete to\n * @returns\n */\n setAutocomplete: function(value){\n this.options.autocomplete = value;\n return this;\n },\n\n /**\n * Get the current autocomplete parameter value used for requests\n * @returns {Boolean} The autocomplete parameter value\n */\n getAutocomplete: function(){\n return this.options.autocomplete\n },\n\n /**\n * Set the fuzzyMatch option used for approximate matching in geocoding requests\n * @param {Boolean} value The boolean value to set fuzzyMatch to\n * @returns\n */\n setFuzzyMatch: function(value){\n this.options.fuzzyMatch = value;\n return this;\n },\n\n /**\n * Get the current fuzzyMatch parameter value used for requests\n * @returns {Boolean} The fuzzyMatch parameter value\n */\n getFuzzyMatch: function(){\n return this.options.fuzzyMatch\n },\n\n /**\n * Set the routing parameter used to ask for routable point metadata in geocoding requests\n * @param {Boolean} value The boolean value to set routing to\n * @returns\n */\n setRouting: function(value){\n this.options.routing = value;\n return this;\n },\n\n /**\n * Get the current routing parameter value used for requests\n * @returns {Boolean} The routing parameter value\n */\n getRouting: function(){\n return this.options.routing\n },\n\n /**\n * Set the worldview parameter\n * @param {String} code The country code representing the worldview (e.g. \"us\" | \"cn\" | \"jp\", \"in\")\n * @returns\n */\n setWorldview: function(code){\n this.options.worldview = code;\n return this;\n },\n\n /**\n * Get the current worldview parameter value used for requests\n * @returns {String} The worldview parameter value\n */\n getWorldview: function(){\n return this.options.worldview\n },\n\n /**\n * Handle the placement of a result marking the selected result\n * @private\n * @param {Object} selected the selected geojson feature\n * @returns {MapboxGeocoder} this\n */\n _handleMarker: function(selected){\n // clean up any old marker that might be present\n if (!this._map){\n return;\n }\n this._removeMarker();\n var defaultMarkerOptions = {\n color: '#4668F2'\n }\n var markerOptions = extend({}, defaultMarkerOptions, this.options.marker)\n this.mapMarker = new this._mapboxgl.Marker(markerOptions);\n if (selected.center) {\n this.mapMarker\n .setLngLat(selected.center)\n .addTo(this._map);\n } else if (selected.geometry && selected.geometry.type && selected.geometry.type === 'Point' && selected.geometry.coordinates) {\n this.mapMarker\n .setLngLat(selected.geometry.coordinates)\n .addTo(this._map);\n }\n return this;\n },\n\n /**\n * Handle the removal of a result marker\n * @private\n */\n _removeMarker: function(){\n if (this.mapMarker){\n this.mapMarker.remove();\n this.mapMarker = null;\n }\n },\n\n /**\n * Subscribe to events that happen within the plugin.\n * @param {String} type name of event. Available events and the data passed into their respective event objects are:\n *\n * - __clear__ `Emitted when the input is cleared`\n * - __loading__ `{ query } Emitted when the geocoder is looking up a query`\n * - __results__ `{ results } Fired when the geocoder returns a response`\n * - __result__ `{ result } Fired when input is set`\n * - __error__ `{ error } Error as string`\n * @param {Function} fn function that's called when the event is emitted.\n * @returns {MapboxGeocoder} this;\n */\n on: function(type, fn) {\n this._eventEmitter.on(type, fn);\n return this;\n },\n\n /**\n * Remove an event\n * @returns {MapboxGeocoder} this\n * @param {String} type Event name.\n * @param {Function} fn Function that should unsubscribe to the event emitted.\n */\n off: function(type, fn) {\n this._eventEmitter.removeListener(type, fn);\n this.eventManager.remove();\n return this;\n }\n};\n\nmodule.exports = MapboxGeocoder;\n","'use strict';\n\n/**\n * Localized values for the placeholder string\n * \n * @private\n */\nvar placeholder = {\n // list drawn from https://docs.mapbox.com/api/search/#language-coverage\n 'de': 'Suche', // german\n 'it': 'Ricerca', //italian\n 'en': 'Search', // english\n 'nl': 'Zoeken', //dutch\n 'fr': 'Chercher', //french\n 'ca': 'Cerca', //catalan\n 'he': 'לחפש', //hebrew\n 'ja': 'サーチ', //japanese\n 'lv': 'Meklēt', //latvian\n 'pt': 'Procurar', //portuguese \n 'sr': 'Претрага', //serbian\n 'zh': '搜索', //chinese-simplified\n 'cs': 'Vyhledávání', //czech\n 'hu': 'Keresés', //hungarian\n 'ka': 'ძიება', // georgian\n 'nb': 'Søke', //norwegian\n 'sk': 'Vyhľadávanie', //slovak\n 'th': 'ค้นหา', //thai\n 'fi': 'Hae',//finnish\n 'is': 'Leita',//icelandic\n 'ko': '수색',//korean\n 'pl': 'Szukaj', //polish\n 'sl': 'Iskanje', //slovenian\n 'fa': 'جستجو', //persian(aka farsi)\n 'ru': 'Поиск'//russian\n}\n\nmodule.exports = {placeholder: placeholder};\n","/**\n * This function transforms the feature from reverse geocoding to plain text with specified accuracy\n * @param {object} feature \n * @param {string} accuracy \n * @returns \n */\nfunction transformFeatureToGeolocationText(feature, accuracy) {\n const addrInfo = getAddressInfo(feature);\n\n const addressAccuracy = ['address', 'street', 'place', 'country'];\n var currentAccuracy;\n\n if (typeof accuracy === 'function') {\n return accuracy(addrInfo)\n }\n\n const accuracyIndex = addressAccuracy.indexOf(accuracy);\n\n if (accuracyIndex === -1) {\n currentAccuracy = addressAccuracy;\n } else {\n currentAccuracy = addressAccuracy.slice(accuracyIndex);\n }\n\n return currentAccuracy.reduce(function(acc, name) {\n if (!addrInfo[name]) {\n return acc;\n }\n\n if (acc !== '') {\n acc = acc + ', ';\n }\n\n return acc + addrInfo[name];\n }, '');\n}\n/**\n * This function transforms the feature from reverse geocoding to AddressInfo object\n * @param {object} feature \n * @returns {object}\n */\nfunction getAddressInfo(feature) {\n const houseNumber = feature.address || '';\n const street = feature.text || '';\n const placeName = feature.place_name || '';\n const address = placeName.split(',')[0];\n\n const addrInfo = {\n address: address,\n houseNumber: houseNumber,\n street: street,\n placeName: placeName,\n }\n\n feature.context.forEach(function (context) {\n const layer = context.id.split('.')[0];\n addrInfo[layer] = context.text;\n });\n\n return addrInfo;\n}\n\nconst REVERSE_GEOCODE_COORD_RGX = /^[ ]*(-?\\d{1,3}(\\.\\d{0,256})?)[, ]+(-?\\d{1,3}(\\.\\d{0,256})?)[ ]*$/;\n\nmodule.exports = {\n transformFeatureToGeolocationText: transformFeatureToGeolocationText,\n getAddressInfo: getAddressInfo,\n REVERSE_GEOCODE_COORD_RGX: REVERSE_GEOCODE_COORD_RGX,\n}","'use strict';\n\nvar client = require('./lib/client');\n\nmodule.exports = client;\n","'use strict';\n\nvar browser = require('./browser-layer');\nvar MapiClient = require('../classes/mapi-client');\n\nfunction BrowserClient(options) {\n MapiClient.call(this, options);\n}\nBrowserClient.prototype = Object.create(MapiClient.prototype);\nBrowserClient.prototype.constructor = BrowserClient;\n\nBrowserClient.prototype.sendRequest = browser.browserSend;\nBrowserClient.prototype.abortRequest = browser.browserAbort;\n\n/**\n * Create a client for the browser.\n *\n * @param {Object} options\n * @param {string} options.accessToken\n * @param {string} [options.origin]\n * @returns {MapiClient}\n */\nfunction createBrowserClient(options) {\n return new BrowserClient(options);\n}\n\nmodule.exports = createBrowserClient;\n","'use strict';\n\nvar MapiResponse = require('../classes/mapi-response');\nvar MapiError = require('../classes/mapi-error');\nvar constants = require('../constants');\nvar parseHeaders = require('../helpers/parse-headers');\n\n// Keys are request IDs, values are XHRs.\nvar requestsUnderway = {};\n\nfunction browserAbort(request) {\n var xhr = requestsUnderway[request.id];\n if (!xhr) return;\n xhr.abort();\n delete requestsUnderway[request.id];\n}\n\nfunction createResponse(request, xhr) {\n return new MapiResponse(request, {\n body: xhr.response,\n headers: parseHeaders(xhr.getAllResponseHeaders()),\n statusCode: xhr.status\n });\n}\n\nfunction normalizeBrowserProgressEvent(event) {\n var total = event.total;\n var transferred = event.loaded;\n var percent = (100 * transferred) / total;\n return {\n total: total,\n transferred: transferred,\n percent: percent\n };\n}\n\nfunction sendRequestXhr(request, xhr) {\n return new Promise(function(resolve, reject) {\n xhr.onprogress = function(event) {\n request.emitter.emit(\n constants.EVENT_PROGRESS_DOWNLOAD,\n normalizeBrowserProgressEvent(event)\n );\n };\n\n var file = request.file;\n if (file) {\n xhr.upload.onprogress = function(event) {\n request.emitter.emit(\n constants.EVENT_PROGRESS_UPLOAD,\n normalizeBrowserProgressEvent(event)\n );\n };\n }\n\n xhr.onerror = function(error) {\n reject(error);\n };\n\n xhr.onabort = function() {\n var mapiError = new MapiError({\n request: request,\n type: constants.ERROR_REQUEST_ABORTED\n });\n reject(mapiError);\n };\n\n xhr.onload = function() {\n delete requestsUnderway[request.id];\n if (xhr.status < 200 || xhr.status >= 400) {\n var mapiError = new MapiError({\n request: request,\n body: xhr.response,\n statusCode: xhr.status\n });\n reject(mapiError);\n return;\n }\n resolve(xhr);\n };\n\n var body = request.body;\n\n // matching service needs to send a www-form-urlencoded request\n if (typeof body === 'string') {\n xhr.send(body);\n } else if (body) {\n xhr.send(JSON.stringify(body));\n } else if (file) {\n xhr.send(file);\n } else {\n xhr.send();\n }\n\n requestsUnderway[request.id] = xhr;\n }).then(function(xhr) {\n return createResponse(request, xhr);\n });\n}\n\n// The accessToken argument gives this function flexibility\n// for Mapbox's internal client.\nfunction createRequestXhr(request, accessToken) {\n var url = request.url(accessToken);\n var xhr = new window.XMLHttpRequest();\n xhr.open(request.method, url);\n Object.keys(request.headers).forEach(function(key) {\n xhr.setRequestHeader(key, request.headers[key]);\n });\n return xhr;\n}\n\nfunction browserSend(request) {\n return Promise.resolve().then(function() {\n var xhr = createRequestXhr(request, request.client.accessToken);\n return sendRequestXhr(request, xhr);\n });\n}\n\nmodule.exports = {\n browserAbort: browserAbort,\n sendRequestXhr: sendRequestXhr,\n browserSend: browserSend,\n createRequestXhr: createRequestXhr\n};\n","'use strict';\n\nvar parseToken = require('@mapbox/parse-mapbox-token');\nvar MapiRequest = require('./mapi-request');\nvar constants = require('../constants');\n\n/**\n * A low-level Mapbox API client. Use it to create service clients\n * that share the same configuration.\n *\n * Services and `MapiRequest`s use the underlying `MapiClient` to\n * determine how to create, send, and abort requests in a way\n * that is appropriate to the configuration and environment\n * (Node or the browser).\n *\n * @class MapiClient\n * @property {string} accessToken - The Mapbox access token assigned\n * to this client.\n * @property {string} [origin] - The origin\n * to use for API requests. Defaults to https://api.mapbox.com.\n */\n\nfunction MapiClient(options) {\n if (!options || !options.accessToken) {\n throw new Error('Cannot create a client without an access token');\n }\n // Try parsing the access token to determine right away if it's valid.\n parseToken(options.accessToken);\n\n this.accessToken = options.accessToken;\n this.origin = options.origin || constants.API_ORIGIN;\n}\n\nMapiClient.prototype.createRequest = function createRequest(requestOptions) {\n return new MapiRequest(this, requestOptions);\n};\n\nmodule.exports = MapiClient;\n","'use strict';\n\nvar constants = require('../constants');\n\n/**\n * A Mapbox API error.\n *\n * If there's an error during the API transaction,\n * the Promise returned by `MapiRequest`'s [`send`](#send)\n * method should reject with a `MapiError`.\n *\n * @class MapiError\n * @hideconstructor\n * @property {MapiRequest} request - The errored request.\n * @property {string} type - The type of error. Usually this is `'HttpError'`.\n * If the request was aborted, so the error was\n * not sent from the server, the type will be\n * `'RequestAbortedError'`.\n * @property {number} [statusCode] - The numeric status code of\n * the HTTP response.\n * @property {Object | string} [body] - If the server sent a response body,\n * this property exposes that response, parsed as JSON if possible.\n * @property {string} [message] - Whatever message could be derived from the\n * call site and HTTP response.\n *\n * @param {MapiRequest} options.request\n * @param {number} [options.statusCode]\n * @param {string} [options.body]\n * @param {string} [options.message]\n * @param {string} [options.type]\n */\nfunction MapiError(options) {\n var errorType = options.type || constants.ERROR_HTTP;\n\n var body;\n if (options.body) {\n try {\n body = JSON.parse(options.body);\n } catch (e) {\n body = options.body;\n }\n } else {\n body = null;\n }\n\n var message = options.message || null;\n if (!message) {\n if (typeof body === 'string') {\n message = body;\n } else if (body && typeof body.message === 'string') {\n message = body.message;\n } else if (errorType === constants.ERROR_REQUEST_ABORTED) {\n message = 'Request aborted';\n }\n }\n\n this.message = message;\n this.type = errorType;\n this.statusCode = options.statusCode || null;\n this.request = options.request;\n this.body = body;\n}\n\nmodule.exports = MapiError;\n","'use strict';\n\nvar parseToken = require('@mapbox/parse-mapbox-token');\nvar xtend = require('xtend');\nvar EventEmitter = require('eventemitter3');\nvar urlUtils = require('../helpers/url-utils');\nvar constants = require('../constants');\n\nvar requestId = 1;\n\n/**\n * A Mapbox API request.\n *\n * Note that creating a `MapiRequest` does *not* send the request automatically.\n * Use the request's `send` method to send it off and get a `Promise`.\n *\n * The `emitter` property is an `EventEmitter` that emits the following events:\n *\n * - `'response'` - Listeners will be called with a `MapiResponse`.\n * - `'error'` - Listeners will be called with a `MapiError`.\n * - `'downloadProgress'` - Listeners will be called with `ProgressEvents`.\n * - `'uploadProgress'` - Listeners will be called with `ProgressEvents`.\n * Upload events are only available when the request includes a file.\n *\n * @class MapiRequest\n * @property {EventEmitter} emitter - An event emitter. See above.\n * @property {MapiClient} client - This request's `MapiClient`.\n * @property {MapiResponse|null} response - If this request has been sent and received\n * a response, the response is available on this property.\n * @property {MapiError|Error|null} error - If this request has been sent and\n * received an error in response, the error is available on this property.\n * @property {boolean} aborted - If the request has been aborted\n * (via [`abort`](#abort)), this property will be `true`.\n * @property {boolean} sent - If the request has been sent, this property will\n * be `true`. You cannot send the same request twice, so if you need to create\n * a new request that is the equivalent of an existing one, use\n * [`clone`](#clone).\n * @property {string} path - The request's path, including colon-prefixed route\n * parameters.\n * @property {string} origin - The request's origin.\n * @property {string} method - The request's HTTP method.\n * @property {Object} query - A query object, which will be transformed into\n * a URL query string.\n * @property {Object} params - A route parameters object, whose values will\n * be interpolated the path.\n * @property {Object} headers - The request's headers.\n * @property {Object|string|null} body - Data to send with the request.\n * If the request has a body, it will also be sent with the header\n * `'Content-Type: application/json'`.\n * @property {Blob|ArrayBuffer|string|ReadStream} file - A file to\n * send with the request. The browser client accepts Blobs and ArrayBuffers;\n * the Node client accepts strings (filepaths) and ReadStreams.\n * @property {string} encoding - The encoding of the response.\n * @property {string} sendFileAs - The method to send the `file`. Options are\n * `data` (x-www-form-urlencoded) or `form` (multipart/form-data).\n */\n\n/**\n * @ignore\n * @param {MapiClient} client\n * @param {Object} options\n * @param {string} options.method\n * @param {string} options.path\n * @param {Object} [options.query={}]\n * @param {Object} [options.params={}]\n * @param {string} [options.origin]\n * @param {Object} [options.headers]\n * @param {Object} [options.body=null]\n * @param {Blob|ArrayBuffer|string|ReadStream} [options.file=null]\n * @param {string} [options.encoding=utf8]\n */\nfunction MapiRequest(client, options) {\n if (!client) {\n throw new Error('MapiRequest requires a client');\n }\n if (!options || !options.path || !options.method) {\n throw new Error(\n 'MapiRequest requires an options object with path and method properties'\n );\n }\n\n var defaultHeaders = {};\n if (options.body) {\n defaultHeaders['content-type'] = 'application/json';\n }\n\n var headersWithDefaults = xtend(defaultHeaders, options.headers);\n\n // Disallows duplicate header names of mixed case,\n // e.g. Content-Type and content-type.\n var headers = Object.keys(headersWithDefaults).reduce(function(memo, name) {\n memo[name.toLowerCase()] = headersWithDefaults[name];\n return memo;\n }, {});\n\n this.id = requestId++;\n this._options = options;\n\n this.emitter = new EventEmitter();\n this.client = client;\n this.response = null;\n this.error = null;\n this.sent = false;\n this.aborted = false;\n this.path = options.path;\n this.method = options.method;\n this.origin = options.origin || client.origin;\n this.query = options.query || {};\n this.params = options.params || {};\n this.body = options.body || null;\n this.file = options.file || null;\n this.encoding = options.encoding || 'utf8';\n this.sendFileAs = options.sendFileAs || null;\n this.headers = headers;\n}\n\n/**\n * Get the URL of the request.\n *\n * @param {string} [accessToken] - By default, the access token of the request's\n * client is used.\n * @return {string}\n */\nMapiRequest.prototype.url = function url(accessToken) {\n var url = urlUtils.prependOrigin(this.path, this.origin);\n url = urlUtils.appendQueryObject(url, this.query);\n var routeParams = this.params;\n var actualAccessToken =\n accessToken == null ? this.client.accessToken : accessToken;\n if (actualAccessToken) {\n url = urlUtils.appendQueryParam(url, 'access_token', actualAccessToken);\n var accessTokenOwnerId = parseToken(actualAccessToken).user;\n routeParams = xtend({ ownerId: accessTokenOwnerId }, routeParams);\n }\n url = urlUtils.interpolateRouteParams(url, routeParams);\n return url;\n};\n\n/**\n * Send the request. Returns a Promise that resolves with a `MapiResponse`.\n * You probably want to use `response.body`.\n *\n * `send` only retrieves the first page of paginated results. You can get\n * the next page by using the `MapiResponse`'s [`nextPage`](#nextpage)\n * function, or iterate through all pages using [`eachPage`](#eachpage)\n * instead of `send`.\n *\n * @returns {Promise}\n */\nMapiRequest.prototype.send = function send() {\n var self = this;\n\n if (self.sent) {\n throw new Error(\n 'This request has already been sent. Check the response and error properties. Create a new request with clone().'\n );\n }\n self.sent = true;\n\n return self.client.sendRequest(self).then(\n function(response) {\n self.response = response;\n self.emitter.emit(constants.EVENT_RESPONSE, response);\n return response;\n },\n function(error) {\n self.error = error;\n self.emitter.emit(constants.EVENT_ERROR, error);\n throw error;\n }\n );\n};\n\n/**\n * Abort the request.\n *\n * Any pending `Promise` returned by [`send`](#send) will be rejected with\n * an error with `type: 'RequestAbortedError'`. If you've created a request\n * that might be aborted, you need to catch and handle such errors.\n *\n * This method will also abort any requests created while fetching subsequent\n * pages via [`eachPage`](#eachpage).\n *\n * If the request has not been sent or has already been aborted, nothing\n * will happen.\n */\nMapiRequest.prototype.abort = function abort() {\n if (this._nextPageRequest) {\n this._nextPageRequest.abort();\n delete this._nextPageRequest;\n }\n\n if (this.response || this.error || this.aborted) return;\n\n this.aborted = true;\n this.client.abortRequest(this);\n};\n\n/**\n * Invoke a callback for each page of a paginated API response.\n *\n * The callback should have the following signature:\n *\n * ```js\n * (\n * error: MapiError,\n * response: MapiResponse,\n * next: () => void\n * ) => void\n * ```\n *\n * **The next page will not be fetched until you've invoked the\n * `next` callback**, indicating that you're ready for it.\n *\n * @param {Function} callback\n */\nMapiRequest.prototype.eachPage = function eachPage(callback) {\n var self = this;\n\n function handleResponse(response) {\n function getNextPage() {\n delete self._nextPageRequest;\n var nextPageRequest = response.nextPage();\n if (nextPageRequest) {\n self._nextPageRequest = nextPageRequest;\n getPage(nextPageRequest);\n }\n }\n callback(null, response, getNextPage);\n }\n\n function handleError(error) {\n callback(error, null, function() {});\n }\n\n function getPage(request) {\n request.send().then(handleResponse, handleError);\n }\n getPage(this);\n};\n\n/**\n * Clone this request.\n *\n * Each request can only be sent *once*. So if you'd like to send the\n * same request again, clone it and send away.\n *\n * @returns {MapiRequest} - A new `MapiRequest` configured just like this one.\n */\nMapiRequest.prototype.clone = function clone() {\n return this._extend();\n};\n\n/**\n * @ignore\n */\nMapiRequest.prototype._extend = function _extend(options) {\n var extendedOptions = xtend(this._options, options);\n return new MapiRequest(this.client, extendedOptions);\n};\n\nmodule.exports = MapiRequest;\n","'use strict';\n\nvar parseLinkHeader = require('../helpers/parse-link-header');\n\n/**\n * A Mapbox API response.\n *\n * @class MapiResponse\n * @property {Object} body - The response body, parsed as JSON.\n * @property {string} rawBody - The raw response body.\n * @property {number} statusCode - The response's status code.\n * @property {Object} headers - The parsed response headers.\n * @property {Object} links - The parsed response links.\n * @property {MapiRequest} request - The response's originating `MapiRequest`.\n */\n\n/**\n * @ignore\n * @param {MapiRequest} request\n * @param {Object} responseData\n * @param {Object} responseData.headers\n * @param {string} responseData.body\n * @param {number} responseData.statusCode\n */\nfunction MapiResponse(request, responseData) {\n this.request = request;\n this.headers = responseData.headers;\n this.rawBody = responseData.body;\n this.statusCode = responseData.statusCode;\n try {\n this.body = JSON.parse(responseData.body || '{}');\n } catch (parseError) {\n this.body = responseData.body;\n }\n this.links = parseLinkHeader(this.headers.link);\n}\n\n/**\n * Check if there is a next page that you can fetch.\n *\n * @returns {boolean}\n */\nMapiResponse.prototype.hasNextPage = function hasNextPage() {\n return !!this.links.next;\n};\n\n/**\n * Create a request for the next page, if there is one.\n * If there is no next page, returns `null`.\n *\n * @returns {MapiRequest | null}\n */\nMapiResponse.prototype.nextPage = function nextPage() {\n if (!this.hasNextPage()) return null;\n return this.request._extend({\n path: this.links.next.url\n });\n};\n\nmodule.exports = MapiResponse;\n","'use strict';\n\nmodule.exports = {\n API_ORIGIN: 'https://api.mapbox.com',\n EVENT_PROGRESS_DOWNLOAD: 'downloadProgress',\n EVENT_PROGRESS_UPLOAD: 'uploadProgress',\n EVENT_ERROR: 'error',\n EVENT_RESPONSE: 'response',\n ERROR_HTTP: 'HttpError',\n ERROR_REQUEST_ABORTED: 'RequestAbortedError'\n};\n","'use strict';\n\nfunction parseSingleHeader(raw) {\n var boundary = raw.indexOf(':');\n var name = raw\n .substring(0, boundary)\n .trim()\n .toLowerCase();\n var value = raw.substring(boundary + 1).trim();\n return {\n name: name,\n value: value\n };\n}\n\n/**\n * Parse raw headers into an object with lowercase properties.\n * Does not fully parse headings into more complete data structure,\n * as larger libraries might do. Also does not deal with duplicate\n * headers because Node doesn't seem to deal with those well, so\n * we shouldn't let the browser either, for consistency.\n *\n * @param {string} raw\n * @returns {Object}\n */\nfunction parseHeaders(raw) {\n var headers = {};\n if (!raw) {\n return headers;\n }\n\n raw\n .trim()\n .split(/[\\r|\\n]+/)\n .forEach(function(rawHeader) {\n var parsed = parseSingleHeader(rawHeader);\n headers[parsed.name] = parsed.value;\n });\n\n return headers;\n}\n\nmodule.exports = parseHeaders;\n","'use strict';\n\n// Like https://github.com/thlorenz/lib/parse-link-header but without any\n// additional dependencies.\n\nfunction parseParam(param) {\n var parts = param.match(/\\s*(.+)\\s*=\\s*\"?([^\"]+)\"?/);\n if (!parts) return null;\n\n return {\n key: parts[1],\n value: parts[2]\n };\n}\n\nfunction parseLink(link) {\n var parts = link.match(/]*)>(.*)/);\n if (!parts) return null;\n\n var linkUrl = parts[1];\n var linkParams = parts[2].split(';');\n var rel = null;\n var parsedLinkParams = linkParams.reduce(function(result, param) {\n var parsed = parseParam(param);\n if (!parsed) return result;\n if (parsed.key === 'rel') {\n if (!rel) {\n rel = parsed.value;\n }\n return result;\n }\n result[parsed.key] = parsed.value;\n return result;\n }, {});\n if (!rel) return null;\n\n return {\n url: linkUrl,\n rel: rel,\n params: parsedLinkParams\n };\n}\n\n/**\n * Parse a Link header.\n *\n * @param {string} linkHeader\n * @returns {{\n * [string]: {\n * url: string,\n * params: { [string]: string }\n * }\n * }}\n */\nfunction parseLinkHeader(linkHeader) {\n if (!linkHeader) return {};\n\n return linkHeader.split(/,\\s*>} [value] - Provide an array\n * if the value is a list and commas between values need to be\n * preserved, unencoded.\n * @returns {string} - Modified URL.\n */\nfunction appendQueryParam(url, key, value) {\n if (value === false || value === null) {\n return url;\n }\n var punctuation = /\\?/.test(url) ? '&' : '?';\n var query = encodeURIComponent(key);\n if (value !== undefined && value !== '' && value !== true) {\n query += '=' + encodeValue(value);\n }\n return '' + url + punctuation + query;\n}\n\n/**\n * Derive a query string from an object and append it\n * to a URL.\n *\n * @param {string} url\n * @param {Object} [queryObject] - Values should be primitives.\n * @returns {string} - Modified URL.\n */\nfunction appendQueryObject(url, queryObject) {\n if (!queryObject) {\n return url;\n }\n\n var result = url;\n Object.keys(queryObject).forEach(function(key) {\n var value = queryObject[key];\n if (value === undefined) {\n return;\n }\n if (Array.isArray(value)) {\n value = value\n .filter(function(v) {\n return v !== null && v !== undefined;\n })\n .join(',');\n }\n result = appendQueryParam(result, key, value);\n });\n return result;\n}\n\n/**\n * Prepend an origin to a URL. If the URL already has an\n * origin, do nothing.\n *\n * @param {string} url\n * @param {string} origin\n * @returns {string} - Modified URL.\n */\nfunction prependOrigin(url, origin) {\n if (!origin) {\n return url;\n }\n\n if (url.slice(0, 4) === 'http') {\n return url;\n }\n\n var delimiter = url[0] === '/' ? '' : '/';\n return '' + origin.replace(/\\/$/, '') + delimiter + url;\n}\n\n/**\n * Interpolate values into a route with express-style,\n * colon-prefixed route parameters.\n *\n * @param {string} route\n * @param {Object} [params] - Values should be primitives\n * or arrays of primitives. Provide an array if the value\n * is a list and commas between values need to be\n * preserved, unencoded.\n * @returns {string} - Modified URL.\n */\nfunction interpolateRouteParams(route, params) {\n if (!params) {\n return route;\n }\n return route.replace(/\\/:([a-zA-Z0-9]+)/g, function(_, paramId) {\n var value = params[paramId];\n if (value === undefined) {\n throw new Error('Unspecified route parameter ' + paramId);\n }\n var preppedValue = encodeValue(value);\n return '/' + preppedValue;\n });\n}\n\nmodule.exports = {\n appendQueryObject: appendQueryObject,\n appendQueryParam: appendQueryParam,\n prependOrigin: prependOrigin,\n interpolateRouteParams: interpolateRouteParams\n};\n","'use strict';\n\nvar xtend = require('xtend');\nvar v = require('./service-helpers/validator');\nvar pick = require('./service-helpers/pick');\nvar stringifyBooleans = require('./service-helpers/stringify-booleans');\nvar createServiceFactory = require('./service-helpers/create-service-factory');\n\n/**\n * Geocoding API service.\n *\n * Learn more about this service and its responses in\n * [the HTTP service documentation](https://docs.mapbox.com/api/search/#geocoding).\n */\nvar Geocoding = {};\n\nvar featureTypes = [\n 'country',\n 'region',\n 'postcode',\n 'district',\n 'place',\n 'locality',\n 'neighborhood',\n 'address',\n 'poi',\n 'poi.landmark'\n];\n\n/**\n * Search for a place.\n *\n * See the [public documentation](https://docs.mapbox.com/api/search/#forward-geocoding).\n *\n * @param {Object} config\n * @param {string} config.query - A place name.\n * @param {'mapbox.places'|'mapbox.places-permanent'} [config.mode=\"mapbox.places\"] - Either `mapbox.places` for ephemeral geocoding, or `mapbox.places-permanent` for storing results and batch geocoding.\n * @param {Array} [config.countries] - Limits results to the specified countries.\n * Each item in the array should be an [ISO 3166 alpha 2 country code](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2).\n * @param {Coordinates|'ip'} [config.proximity] - Bias local results based on a provided coordinate location or a user's IP address.\n * @param {Array<'country'|'region'|'postcode'|'district'|'place'|'locality'|'neighborhood'|'address'|'poi'|'poi.landmark'>} [config.types] - Filter results by feature types.\n * @param {boolean} [config.autocomplete=true] - Return autocomplete results or not.\n * @param {BoundingBox} [config.bbox] - Limit results to a bounding box.\n * @param {number} [config.limit=5] - Limit the number of results returned.\n * @param {Array} [config.language] - Specify the language to use for response text and, for forward geocoding, query result weighting.\n * Options are [IETF language tags](https://en.wikipedia.org/wiki/IETF_language_tag) comprised of a mandatory\n * [ISO 639-1 language code](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes) and optionally one or more IETF subtags for country or script.\n * @param {boolean} [config.routing=false] - Specify whether to request additional metadata about the recommended navigation destination. Only applicable for address features.\n * @param {boolean} [config.fuzzyMatch=true] - Specify whether the Geocoding API should attempt approximate, as well as exact, matching.\n * @param {String} [config.worldview=\"us\"] - Filter results to geographic features whose characteristics are defined differently by audiences belonging to various regional, cultural, or political groups.\n * @return {MapiRequest}\n *\n * @example\n * geocodingClient.forwardGeocode({\n * query: 'Paris, France',\n * limit: 2\n * })\n * .send()\n * .then(response => {\n * const match = response.body;\n * });\n *\n * @example\n * // geocoding with proximity\n * geocodingClient.forwardGeocode({\n * query: 'Paris, France',\n * proximity: [-95.4431142, 33.6875431]\n * })\n * .send()\n * .then(response => {\n * const match = response.body;\n * });\n *\n * // geocoding with countries\n * geocodingClient.forwardGeocode({\n * query: 'Paris, France',\n * countries: ['fr']\n * })\n * .send()\n * .then(response => {\n * const match = response.body;\n * });\n *\n * // geocoding with bounding box\n * geocodingClient.forwardGeocode({\n * query: 'Paris, France',\n * bbox: [2.14, 48.72, 2.55, 48.96]\n * })\n * .send()\n * .then(response => {\n * const match = response.body;\n * });\n */\nGeocoding.forwardGeocode = function(config) {\n v.assertShape({\n query: v.required(v.string),\n mode: v.oneOf('mapbox.places', 'mapbox.places-permanent'),\n countries: v.arrayOf(v.string),\n proximity: v.oneOf(v.coordinates, 'ip'),\n types: v.arrayOf(v.oneOf(featureTypes)),\n autocomplete: v.boolean,\n bbox: v.arrayOf(v.number),\n limit: v.number,\n language: v.arrayOf(v.string),\n routing: v.boolean,\n fuzzyMatch: v.boolean,\n worldview: v.string\n })(config);\n\n config.mode = config.mode || 'mapbox.places';\n\n var query = stringifyBooleans(\n xtend(\n { country: config.countries },\n pick(config, [\n 'proximity',\n 'types',\n 'autocomplete',\n 'bbox',\n 'limit',\n 'language',\n 'routing',\n 'fuzzyMatch',\n 'worldview'\n ])\n )\n );\n\n return this.client.createRequest({\n method: 'GET',\n path: '/geocoding/v5/:mode/:query.json',\n params: pick(config, ['mode', 'query']),\n query: query\n });\n};\n\n/**\n * Search for places near coordinates.\n *\n * See the [public documentation](https://docs.mapbox.com/api/search/#reverse-geocoding).\n *\n * @param {Object} config\n * @param {Coordinates} config.query - Coordinates at which features will be searched.\n * @param {'mapbox.places'|'mapbox.places-permanent'} [config.mode=\"mapbox.places\"] - Either `mapbox.places` for ephemeral geocoding, or `mapbox.places-permanent` for storing results and batch geocoding.\n * @param {Array} [config.countries] - Limits results to the specified countries.\n * Each item in the array should be an [ISO 3166 alpha 2 country code](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2).\n * @param {Array<'country'|'region'|'postcode'|'district'|'place'|'locality'|'neighborhood'|'address'|'poi'|'poi.landmark'>} [config.types] - Filter results by feature types.\n * @param {BoundingBox} [config.bbox] - Limit results to a bounding box.\n * @param {number} [config.limit=1] - Limit the number of results returned. If using this option, you must provide a single item for `types`.\n * @param {Array} [config.language] - Specify the language to use for response text and, for forward geocoding, query result weighting.\n * Options are [IETF language tags](https://en.wikipedia.org/wiki/IETF_language_tag) comprised of a mandatory\n * [ISO 639-1 language code](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes) and optionally one or more IETF subtags for country or script.\n * @param {'distance'|'score'} [config.reverseMode='distance'] - Set the factors that are used to sort nearby results.\n * @param {boolean} [config.routing=false] - Specify whether to request additional metadata about the recommended navigation destination. Only applicable for address features.\n * @param {String} [config.worldview=\"us\"] - Filter results to geographic features whose characteristics are defined differently by audiences belonging to various regional, cultural, or political groups.\n * @return {MapiRequest}\n *\n * @example\n * geocodingClient.reverseGeocode({\n * query: [-95.4431142, 33.6875431]\n * })\n * .send()\n * .then(response => {\n * // GeoJSON document with geocoding matches\n * const match = response.body;\n * });\n */\nGeocoding.reverseGeocode = function(config) {\n v.assertShape({\n query: v.required(v.coordinates),\n mode: v.oneOf('mapbox.places', 'mapbox.places-permanent'),\n countries: v.arrayOf(v.string),\n types: v.arrayOf(v.oneOf(featureTypes)),\n bbox: v.arrayOf(v.number),\n limit: v.number,\n language: v.arrayOf(v.string),\n reverseMode: v.oneOf('distance', 'score'),\n routing: v.boolean,\n worldview: v.string\n })(config);\n\n config.mode = config.mode || 'mapbox.places';\n\n var query = stringifyBooleans(\n xtend(\n { country: config.countries },\n pick(config, [\n 'country',\n 'types',\n 'bbox',\n 'limit',\n 'language',\n 'reverseMode',\n 'routing',\n 'worldview'\n ])\n )\n );\n\n return this.client.createRequest({\n method: 'GET',\n path: '/geocoding/v5/:mode/:query.json',\n params: pick(config, ['mode', 'query']),\n query: query\n });\n};\n\nmodule.exports = createServiceFactory(Geocoding);\n","'use strict';\n\nvar MapiClient = require('../../lib/classes/mapi-client');\n// This will create the environment-appropriate client.\nvar createClient = require('../../lib/client');\n\nfunction createServiceFactory(ServicePrototype) {\n return function(clientOrConfig) {\n var client;\n if (MapiClient.prototype.isPrototypeOf(clientOrConfig)) {\n client = clientOrConfig;\n } else {\n client = createClient(clientOrConfig);\n }\n var service = Object.create(ServicePrototype);\n service.client = client;\n return service;\n };\n}\n\nmodule.exports = createServiceFactory;\n","'use strict';\n\nfunction objectMap(obj, cb) {\n return Object.keys(obj).reduce(function(result, key) {\n result[key] = cb(key, obj[key]);\n return result;\n }, {});\n}\n\nmodule.exports = objectMap;\n","'use strict';\n\n/**\n * Create a new object by picking properties off an existing object.\n * The second param can be overloaded as a callback for\n * more fine grained picking of properties.\n * @param {Object} source\n * @param {Array|function(string, Object):boolean} keys\n * @returns {Object}\n */\nfunction pick(source, keys) {\n var filter = function(key, val) {\n return keys.indexOf(key) !== -1 && val !== undefined;\n };\n\n if (typeof keys === 'function') {\n filter = keys;\n }\n\n return Object.keys(source)\n .filter(function(key) {\n return filter(key, source[key]);\n })\n .reduce(function(result, key) {\n result[key] = source[key];\n return result;\n }, {});\n}\n\nmodule.exports = pick;\n","'use strict';\n\nvar objectMap = require('./object-map');\n\n/**\n * Stringify all the boolean values in an object, so true becomes \"true\".\n *\n * @param {Object} obj\n * @returns {Object}\n */\nfunction stringifyBoolean(obj) {\n return objectMap(obj, function(_, value) {\n return typeof value === 'boolean' ? JSON.stringify(value) : value;\n });\n}\n\nmodule.exports = stringifyBoolean;\n","'use strict';\n\nvar xtend = require('xtend');\nvar v = require('@mapbox/fusspot');\n\nfunction file(value) {\n // If we're in a browser so Blob is available, the file must be that.\n // In Node, however, it could be a filepath or a pipeable (Readable) stream.\n if (typeof window !== 'undefined') {\n if (value instanceof global.Blob || value instanceof global.ArrayBuffer) {\n return;\n }\n return 'Blob or ArrayBuffer';\n }\n if (typeof value === 'string' || value.pipe !== undefined) {\n return;\n }\n return 'Filename or Readable stream';\n}\n\nfunction assertShape(validatorObj, apiName) {\n return v.assert(v.strictShape(validatorObj), apiName);\n}\n\nfunction date(value) {\n var msg = 'date';\n if (typeof value === 'boolean') {\n return msg;\n }\n try {\n var date = new Date(value);\n if (date.getTime && isNaN(date.getTime())) {\n return msg;\n }\n } catch (e) {\n return msg;\n }\n}\n\nfunction coordinates(value) {\n return v.tuple(v.number, v.number)(value);\n}\n\nmodule.exports = xtend(v, {\n file: file,\n date: date,\n coordinates: coordinates,\n assertShape: assertShape\n});\n","'use strict';\n\nvar base64 = require('base-64');\n\nvar tokenCache = {};\n\nfunction parseToken(token) {\n if (tokenCache[token]) {\n return tokenCache[token];\n }\n\n var parts = token.split('.');\n var usage = parts[0];\n var rawPayload = parts[1];\n if (!rawPayload) {\n throw new Error('Invalid token');\n }\n\n var parsedPayload = parsePaylod(rawPayload);\n\n var result = {\n usage: usage,\n user: parsedPayload.u\n };\n if (has(parsedPayload, 'a')) result.authorization = parsedPayload.a;\n if (has(parsedPayload, 'exp')) result.expires = parsedPayload.exp * 1000;\n if (has(parsedPayload, 'iat')) result.created = parsedPayload.iat * 1000;\n if (has(parsedPayload, 'scopes')) result.scopes = parsedPayload.scopes;\n if (has(parsedPayload, 'client')) result.client = parsedPayload.client;\n if (has(parsedPayload, 'll')) result.lastLogin = parsedPayload.ll;\n if (has(parsedPayload, 'iu')) result.impersonator = parsedPayload.iu;\n\n tokenCache[token] = result;\n return result;\n}\n\nfunction parsePaylod(rawPayload) {\n try {\n return JSON.parse(base64.decode(rawPayload));\n } catch (parseError) {\n throw new Error('Invalid token');\n }\n}\n\nfunction has(obj, key) {\n return Object.prototype.hasOwnProperty.call(obj, key);\n}\n\nmodule.exports = parseToken;\n","export default {\n logger: self.console,\n WebSocket: self.WebSocket\n}\n","import adapters from \"./adapters\"\n\n// The logger is disabled by default. You can enable it with:\n//\n// ActionCable.logger.enabled = true\n//\n// Example:\n//\n// import * as ActionCable from '@rails/actioncable'\n//\n// ActionCable.logger.enabled = true\n// ActionCable.logger.log('Connection Established.')\n//\n\nexport default {\n log(...messages) {\n if (this.enabled) {\n messages.push(Date.now())\n adapters.logger.log(\"[ActionCable]\", ...messages)\n }\n },\n}\n","import logger from \"./logger\"\n\n// Responsible for ensuring the cable connection is in good health by validating the heartbeat pings sent from the server, and attempting\n// revival reconnections if things go astray. Internal class, not intended for direct user manipulation.\n\nconst now = () => new Date().getTime()\n\nconst secondsSince = time => (now() - time) / 1000\n\nclass ConnectionMonitor {\n constructor(connection) {\n this.visibilityDidChange = this.visibilityDidChange.bind(this)\n this.connection = connection\n this.reconnectAttempts = 0\n }\n\n start() {\n if (!this.isRunning()) {\n this.startedAt = now()\n delete this.stoppedAt\n this.startPolling()\n addEventListener(\"visibilitychange\", this.visibilityDidChange)\n logger.log(`ConnectionMonitor started. stale threshold = ${this.constructor.staleThreshold} s`)\n }\n }\n\n stop() {\n if (this.isRunning()) {\n this.stoppedAt = now()\n this.stopPolling()\n removeEventListener(\"visibilitychange\", this.visibilityDidChange)\n logger.log(\"ConnectionMonitor stopped\")\n }\n }\n\n isRunning() {\n return this.startedAt && !this.stoppedAt\n }\n\n recordPing() {\n this.pingedAt = now()\n }\n\n recordConnect() {\n this.reconnectAttempts = 0\n this.recordPing()\n delete this.disconnectedAt\n logger.log(\"ConnectionMonitor recorded connect\")\n }\n\n recordDisconnect() {\n this.disconnectedAt = now()\n logger.log(\"ConnectionMonitor recorded disconnect\")\n }\n\n // Private\n\n startPolling() {\n this.stopPolling()\n this.poll()\n }\n\n stopPolling() {\n clearTimeout(this.pollTimeout)\n }\n\n poll() {\n this.pollTimeout = setTimeout(() => {\n this.reconnectIfStale()\n this.poll()\n }\n , this.getPollInterval())\n }\n\n getPollInterval() {\n const { staleThreshold, reconnectionBackoffRate } = this.constructor\n const backoff = Math.pow(1 + reconnectionBackoffRate, Math.min(this.reconnectAttempts, 10))\n const jitterMax = this.reconnectAttempts === 0 ? 1.0 : reconnectionBackoffRate\n const jitter = jitterMax * Math.random()\n return staleThreshold * 1000 * backoff * (1 + jitter)\n }\n\n reconnectIfStale() {\n if (this.connectionIsStale()) {\n logger.log(`ConnectionMonitor detected stale connection. reconnectAttempts = ${this.reconnectAttempts}, time stale = ${secondsSince(this.refreshedAt)} s, stale threshold = ${this.constructor.staleThreshold} s`)\n this.reconnectAttempts++\n if (this.disconnectedRecently()) {\n logger.log(`ConnectionMonitor skipping reopening recent disconnect. time disconnected = ${secondsSince(this.disconnectedAt)} s`)\n } else {\n logger.log(\"ConnectionMonitor reopening\")\n this.connection.reopen()\n }\n }\n }\n\n get refreshedAt() {\n return this.pingedAt ? this.pingedAt : this.startedAt\n }\n\n connectionIsStale() {\n return secondsSince(this.refreshedAt) > this.constructor.staleThreshold\n }\n\n disconnectedRecently() {\n return this.disconnectedAt && (secondsSince(this.disconnectedAt) < this.constructor.staleThreshold)\n }\n\n visibilityDidChange() {\n if (document.visibilityState === \"visible\") {\n setTimeout(() => {\n if (this.connectionIsStale() || !this.connection.isOpen()) {\n logger.log(`ConnectionMonitor reopening stale connection on visibilitychange. visibilityState = ${document.visibilityState}`)\n this.connection.reopen()\n }\n }\n , 200)\n }\n }\n\n}\n\nConnectionMonitor.staleThreshold = 6 // Server::Connections::BEAT_INTERVAL * 2 (missed two pings)\nConnectionMonitor.reconnectionBackoffRate = 0.15\n\nexport default ConnectionMonitor\n","export default {\n \"message_types\": {\n \"welcome\": \"welcome\",\n \"disconnect\": \"disconnect\",\n \"ping\": \"ping\",\n \"confirmation\": \"confirm_subscription\",\n \"rejection\": \"reject_subscription\"\n },\n \"disconnect_reasons\": {\n \"unauthorized\": \"unauthorized\",\n \"invalid_request\": \"invalid_request\",\n \"server_restart\": \"server_restart\"\n },\n \"default_mount_path\": \"/cable\",\n \"protocols\": [\n \"actioncable-v1-json\",\n \"actioncable-unsupported\"\n ]\n}\n","import adapters from \"./adapters\"\nimport ConnectionMonitor from \"./connection_monitor\"\nimport INTERNAL from \"./internal\"\nimport logger from \"./logger\"\n\n// Encapsulate the cable connection held by the consumer. This is an internal class not intended for direct user manipulation.\n\nconst {message_types, protocols} = INTERNAL\nconst supportedProtocols = protocols.slice(0, protocols.length - 1)\n\nconst indexOf = [].indexOf\n\nclass Connection {\n constructor(consumer) {\n this.open = this.open.bind(this)\n this.consumer = consumer\n this.subscriptions = this.consumer.subscriptions\n this.monitor = new ConnectionMonitor(this)\n this.disconnected = true\n }\n\n send(data) {\n if (this.isOpen()) {\n this.webSocket.send(JSON.stringify(data))\n return true\n } else {\n return false\n }\n }\n\n open() {\n if (this.isActive()) {\n logger.log(`Attempted to open WebSocket, but existing socket is ${this.getState()}`)\n return false\n } else {\n logger.log(`Opening WebSocket, current state is ${this.getState()}, subprotocols: ${protocols}`)\n if (this.webSocket) { this.uninstallEventHandlers() }\n this.webSocket = new adapters.WebSocket(this.consumer.url, protocols)\n this.installEventHandlers()\n this.monitor.start()\n return true\n }\n }\n\n close({allowReconnect} = {allowReconnect: true}) {\n if (!allowReconnect) { this.monitor.stop() }\n // Avoid closing websockets in a \"connecting\" state due to Safari 15.1+ bug. See: https://github.com/rails/rails/issues/43835#issuecomment-1002288478\n if (this.isOpen()) {\n return this.webSocket.close()\n }\n }\n\n reopen() {\n logger.log(`Reopening WebSocket, current state is ${this.getState()}`)\n if (this.isActive()) {\n try {\n return this.close()\n } catch (error) {\n logger.log(\"Failed to reopen WebSocket\", error)\n }\n finally {\n logger.log(`Reopening WebSocket in ${this.constructor.reopenDelay}ms`)\n setTimeout(this.open, this.constructor.reopenDelay)\n }\n } else {\n return this.open()\n }\n }\n\n getProtocol() {\n if (this.webSocket) {\n return this.webSocket.protocol\n }\n }\n\n isOpen() {\n return this.isState(\"open\")\n }\n\n isActive() {\n return this.isState(\"open\", \"connecting\")\n }\n\n // Private\n\n isProtocolSupported() {\n return indexOf.call(supportedProtocols, this.getProtocol()) >= 0\n }\n\n isState(...states) {\n return indexOf.call(states, this.getState()) >= 0\n }\n\n getState() {\n if (this.webSocket) {\n for (let state in adapters.WebSocket) {\n if (adapters.WebSocket[state] === this.webSocket.readyState) {\n return state.toLowerCase()\n }\n }\n }\n return null\n }\n\n installEventHandlers() {\n for (let eventName in this.events) {\n const handler = this.events[eventName].bind(this)\n this.webSocket[`on${eventName}`] = handler\n }\n }\n\n uninstallEventHandlers() {\n for (let eventName in this.events) {\n this.webSocket[`on${eventName}`] = function() {}\n }\n }\n\n}\n\nConnection.reopenDelay = 500\n\nConnection.prototype.events = {\n message(event) {\n if (!this.isProtocolSupported()) { return }\n const {identifier, message, reason, reconnect, type} = JSON.parse(event.data)\n switch (type) {\n case message_types.welcome:\n this.monitor.recordConnect()\n return this.subscriptions.reload()\n case message_types.disconnect:\n logger.log(`Disconnecting. Reason: ${reason}`)\n return this.close({allowReconnect: reconnect})\n case message_types.ping:\n return this.monitor.recordPing()\n case message_types.confirmation:\n this.subscriptions.confirmSubscription(identifier)\n return this.subscriptions.notify(identifier, \"connected\")\n case message_types.rejection:\n return this.subscriptions.reject(identifier)\n default:\n return this.subscriptions.notify(identifier, \"received\", message)\n }\n },\n\n open() {\n logger.log(`WebSocket onopen event, using '${this.getProtocol()}' subprotocol`)\n this.disconnected = false\n if (!this.isProtocolSupported()) {\n logger.log(\"Protocol is unsupported. Stopping monitor and disconnecting.\")\n return this.close({allowReconnect: false})\n }\n },\n\n close(event) {\n logger.log(\"WebSocket onclose event\")\n if (this.disconnected) { return }\n this.disconnected = true\n this.monitor.recordDisconnect()\n return this.subscriptions.notifyAll(\"disconnected\", {willAttemptReconnect: this.monitor.isRunning()})\n },\n\n error() {\n logger.log(\"WebSocket onerror event\")\n }\n}\n\nexport default Connection\n","// A new subscription is created through the ActionCable.Subscriptions instance available on the consumer.\n// It provides a number of callbacks and a method for calling remote procedure calls on the corresponding\n// Channel instance on the server side.\n//\n// An example demonstrates the basic functionality:\n//\n// App.appearance = App.cable.subscriptions.create(\"AppearanceChannel\", {\n// connected() {\n// // Called once the subscription has been successfully completed\n// },\n//\n// disconnected({ willAttemptReconnect: boolean }) {\n// // Called when the client has disconnected with the server.\n// // The object will have an `willAttemptReconnect` property which\n// // says whether the client has the intention of attempting\n// // to reconnect.\n// },\n//\n// appear() {\n// this.perform('appear', {appearing_on: this.appearingOn()})\n// },\n//\n// away() {\n// this.perform('away')\n// },\n//\n// appearingOn() {\n// $('main').data('appearing-on')\n// }\n// })\n//\n// The methods #appear and #away forward their intent to the remote AppearanceChannel instance on the server\n// by calling the `perform` method with the first parameter being the action (which maps to AppearanceChannel#appear/away).\n// The second parameter is a hash that'll get JSON encoded and made available on the server in the data parameter.\n//\n// This is how the server component would look:\n//\n// class AppearanceChannel < ApplicationActionCable::Channel\n// def subscribed\n// current_user.appear\n// end\n//\n// def unsubscribed\n// current_user.disappear\n// end\n//\n// def appear(data)\n// current_user.appear on: data['appearing_on']\n// end\n//\n// def away\n// current_user.away\n// end\n// end\n//\n// The \"AppearanceChannel\" name is automatically mapped between the client-side subscription creation and the server-side Ruby class name.\n// The AppearanceChannel#appear/away public methods are exposed automatically to client-side invocation through the perform method.\n\nconst extend = function(object, properties) {\n if (properties != null) {\n for (let key in properties) {\n const value = properties[key]\n object[key] = value\n }\n }\n return object\n}\n\nexport default class Subscription {\n constructor(consumer, params = {}, mixin) {\n this.consumer = consumer\n this.identifier = JSON.stringify(params)\n extend(this, mixin)\n }\n\n // Perform a channel action with the optional data passed as an attribute\n perform(action, data = {}) {\n data.action = action\n return this.send(data)\n }\n\n send(data) {\n return this.consumer.send({command: \"message\", identifier: this.identifier, data: JSON.stringify(data)})\n }\n\n unsubscribe() {\n return this.consumer.subscriptions.remove(this)\n }\n}\n","import logger from \"./logger\"\n\n// Responsible for ensuring channel subscribe command is confirmed, retrying until confirmation is received.\n// Internal class, not intended for direct user manipulation.\n\nclass SubscriptionGuarantor {\n constructor(subscriptions) {\n this.subscriptions = subscriptions\n this.pendingSubscriptions = []\n }\n\n guarantee(subscription) {\n if(this.pendingSubscriptions.indexOf(subscription) == -1){ \n logger.log(`SubscriptionGuarantor guaranteeing ${subscription.identifier}`)\n this.pendingSubscriptions.push(subscription) \n }\n else {\n logger.log(`SubscriptionGuarantor already guaranteeing ${subscription.identifier}`)\n }\n this.startGuaranteeing()\n }\n\n forget(subscription) {\n logger.log(`SubscriptionGuarantor forgetting ${subscription.identifier}`)\n this.pendingSubscriptions = (this.pendingSubscriptions.filter((s) => s !== subscription))\n }\n\n startGuaranteeing() {\n this.stopGuaranteeing()\n this.retrySubscribing()\n }\n \n stopGuaranteeing() {\n clearTimeout(this.retryTimeout)\n }\n\n retrySubscribing() {\n this.retryTimeout = setTimeout(() => {\n if (this.subscriptions && typeof(this.subscriptions.subscribe) === \"function\") {\n this.pendingSubscriptions.map((subscription) => {\n logger.log(`SubscriptionGuarantor resubscribing ${subscription.identifier}`)\n this.subscriptions.subscribe(subscription)\n })\n }\n }\n , 500)\n }\n}\n\nexport default SubscriptionGuarantor","import Subscription from \"./subscription\"\nimport SubscriptionGuarantor from \"./subscription_guarantor\"\nimport logger from \"./logger\"\n\n// Collection class for creating (and internally managing) channel subscriptions.\n// The only method intended to be triggered by the user is ActionCable.Subscriptions#create,\n// and it should be called through the consumer like so:\n//\n// App = {}\n// App.cable = ActionCable.createConsumer(\"ws://example.com/accounts/1\")\n// App.appearance = App.cable.subscriptions.create(\"AppearanceChannel\")\n//\n// For more details on how you'd configure an actual channel subscription, see ActionCable.Subscription.\n\nexport default class Subscriptions {\n constructor(consumer) {\n this.consumer = consumer\n this.guarantor = new SubscriptionGuarantor(this)\n this.subscriptions = []\n }\n\n create(channelName, mixin) {\n const channel = channelName\n const params = typeof channel === \"object\" ? channel : {channel}\n const subscription = new Subscription(this.consumer, params, mixin)\n return this.add(subscription)\n }\n\n // Private\n\n add(subscription) {\n this.subscriptions.push(subscription)\n this.consumer.ensureActiveConnection()\n this.notify(subscription, \"initialized\")\n this.subscribe(subscription)\n return subscription\n }\n\n remove(subscription) {\n this.forget(subscription)\n if (!this.findAll(subscription.identifier).length) {\n this.sendCommand(subscription, \"unsubscribe\")\n }\n return subscription\n }\n\n reject(identifier) {\n return this.findAll(identifier).map((subscription) => {\n this.forget(subscription)\n this.notify(subscription, \"rejected\")\n return subscription\n })\n }\n\n forget(subscription) {\n this.guarantor.forget(subscription)\n this.subscriptions = (this.subscriptions.filter((s) => s !== subscription))\n return subscription\n }\n\n findAll(identifier) {\n return this.subscriptions.filter((s) => s.identifier === identifier)\n }\n\n reload() {\n return this.subscriptions.map((subscription) =>\n this.subscribe(subscription))\n }\n\n notifyAll(callbackName, ...args) {\n return this.subscriptions.map((subscription) =>\n this.notify(subscription, callbackName, ...args))\n }\n\n notify(subscription, callbackName, ...args) {\n let subscriptions\n if (typeof subscription === \"string\") {\n subscriptions = this.findAll(subscription)\n } else {\n subscriptions = [subscription]\n }\n\n return subscriptions.map((subscription) =>\n (typeof subscription[callbackName] === \"function\" ? subscription[callbackName](...args) : undefined))\n }\n\n subscribe(subscription) {\n if (this.sendCommand(subscription, \"subscribe\")) {\n this.guarantor.guarantee(subscription)\n }\n }\n\n confirmSubscription(identifier) {\n logger.log(`Subscription confirmed ${identifier}`)\n this.findAll(identifier).map((subscription) =>\n this.guarantor.forget(subscription))\n }\n\n sendCommand(subscription, command) {\n const {identifier} = subscription\n return this.consumer.send({command, identifier})\n }\n}\n","import Connection from \"./connection\"\nimport Subscriptions from \"./subscriptions\"\n\n// The ActionCable.Consumer establishes the connection to a server-side Ruby Connection object. Once established,\n// the ActionCable.ConnectionMonitor will ensure that its properly maintained through heartbeats and checking for stale updates.\n// The Consumer instance is also the gateway to establishing subscriptions to desired channels through the #createSubscription\n// method.\n//\n// The following example shows how this can be set up:\n//\n// App = {}\n// App.cable = ActionCable.createConsumer(\"ws://example.com/accounts/1\")\n// App.appearance = App.cable.subscriptions.create(\"AppearanceChannel\")\n//\n// For more details on how you'd configure an actual channel subscription, see ActionCable.Subscription.\n//\n// When a consumer is created, it automatically connects with the server.\n//\n// To disconnect from the server, call\n//\n// App.cable.disconnect()\n//\n// and to restart the connection:\n//\n// App.cable.connect()\n//\n// Any channel subscriptions which existed prior to disconnecting will\n// automatically resubscribe.\n\nexport default class Consumer {\n constructor(url) {\n this._url = url\n this.subscriptions = new Subscriptions(this)\n this.connection = new Connection(this)\n }\n\n get url() {\n return createWebSocketURL(this._url)\n }\n\n send(data) {\n return this.connection.send(data)\n }\n\n connect() {\n return this.connection.open()\n }\n\n disconnect() {\n return this.connection.close({allowReconnect: false})\n }\n\n ensureActiveConnection() {\n if (!this.connection.isActive()) {\n return this.connection.open()\n }\n }\n}\n\nexport function createWebSocketURL(url) {\n if (typeof url === \"function\") {\n url = url()\n }\n\n if (url && !/^wss?:/i.test(url)) {\n const a = document.createElement(\"a\")\n a.href = url\n // Fix populating Location properties in IE. Otherwise, protocol will be blank.\n a.href = a.href\n a.protocol = a.protocol.replace(\"http\", \"ws\")\n return a.href\n } else {\n return url\n }\n}\n","import Connection from \"./connection\"\nimport ConnectionMonitor from \"./connection_monitor\"\nimport Consumer, { createWebSocketURL } from \"./consumer\"\nimport INTERNAL from \"./internal\"\nimport Subscription from \"./subscription\"\nimport Subscriptions from \"./subscriptions\"\nimport SubscriptionGuarantor from \"./subscription_guarantor\"\nimport adapters from \"./adapters\"\nimport logger from \"./logger\"\n\nexport {\n Connection,\n ConnectionMonitor,\n Consumer,\n INTERNAL,\n Subscription,\n Subscriptions,\n SubscriptionGuarantor,\n adapters,\n createWebSocketURL,\n logger,\n}\n\nexport function createConsumer(url = getConfig(\"url\") || INTERNAL.default_mount_path) {\n return new Consumer(url)\n}\n\nexport function getConfig(name) {\n const element = document.head.querySelector(`meta[name='action-cable-${name}']`)\n if (element) {\n return element.getAttribute(\"content\")\n }\n}\n","/*! http://mths.be/base64 v0.1.0 by @mathias | MIT license */\n;(function(root) {\n\n\t// Detect free variables `exports`.\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`.\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code, and use\n\t// it as `root`.\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar InvalidCharacterError = function(message) {\n\t\tthis.message = message;\n\t};\n\tInvalidCharacterError.prototype = new Error;\n\tInvalidCharacterError.prototype.name = 'InvalidCharacterError';\n\n\tvar error = function(message) {\n\t\t// Note: the error messages used throughout this file match those used by\n\t\t// the native `atob`/`btoa` implementation in Chromium.\n\t\tthrow new InvalidCharacterError(message);\n\t};\n\n\tvar TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\t// http://whatwg.org/html/common-microsyntaxes.html#space-character\n\tvar REGEX_SPACE_CHARACTERS = /[\\t\\n\\f\\r ]/g;\n\n\t// `decode` is designed to be fully compatible with `atob` as described in the\n\t// HTML Standard. http://whatwg.org/html/webappapis.html#dom-windowbase64-atob\n\t// The optimized base64-decoding algorithm used is based on @atk’s excellent\n\t// implementation. https://gist.github.com/atk/1020396\n\tvar decode = function(input) {\n\t\tinput = String(input)\n\t\t\t.replace(REGEX_SPACE_CHARACTERS, '');\n\t\tvar length = input.length;\n\t\tif (length % 4 == 0) {\n\t\t\tinput = input.replace(/==?$/, '');\n\t\t\tlength = input.length;\n\t\t}\n\t\tif (\n\t\t\tlength % 4 == 1 ||\n\t\t\t// http://whatwg.org/C#alphanumeric-ascii-characters\n\t\t\t/[^+a-zA-Z0-9/]/.test(input)\n\t\t) {\n\t\t\terror(\n\t\t\t\t'Invalid character: the string to be decoded is not correctly encoded.'\n\t\t\t);\n\t\t}\n\t\tvar bitCounter = 0;\n\t\tvar bitStorage;\n\t\tvar buffer;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\twhile (++position < length) {\n\t\t\tbuffer = TABLE.indexOf(input.charAt(position));\n\t\t\tbitStorage = bitCounter % 4 ? bitStorage * 64 + buffer : buffer;\n\t\t\t// Unless this is the first of a group of 4 characters…\n\t\t\tif (bitCounter++ % 4) {\n\t\t\t\t// …convert the first 8 bits to a single ASCII character.\n\t\t\t\toutput += String.fromCharCode(\n\t\t\t\t\t0xFF & bitStorage >> (-2 * bitCounter & 6)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t};\n\n\t// `encode` is designed to be fully compatible with `btoa` as described in the\n\t// HTML Standard: http://whatwg.org/html/webappapis.html#dom-windowbase64-btoa\n\tvar encode = function(input) {\n\t\tinput = String(input);\n\t\tif (/[^\\0-\\xFF]/.test(input)) {\n\t\t\t// Note: no need to special-case astral symbols here, as surrogates are\n\t\t\t// matched, and the input is supposed to only contain ASCII anyway.\n\t\t\terror(\n\t\t\t\t'The string to be encoded contains characters outside of the ' +\n\t\t\t\t'Latin1 range.'\n\t\t\t);\n\t\t}\n\t\tvar padding = input.length % 3;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\tvar a;\n\t\tvar b;\n\t\tvar c;\n\t\tvar d;\n\t\tvar buffer;\n\t\t// Make sure any padding is handled outside of the loop.\n\t\tvar length = input.length - padding;\n\n\t\twhile (++position < length) {\n\t\t\t// Read three bytes, i.e. 24 bits.\n\t\t\ta = input.charCodeAt(position) << 16;\n\t\t\tb = input.charCodeAt(++position) << 8;\n\t\t\tc = input.charCodeAt(++position);\n\t\t\tbuffer = a + b + c;\n\t\t\t// Turn the 24 bits into four chunks of 6 bits each, and append the\n\t\t\t// matching character for each of them to the output.\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 18 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 12 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 6 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer & 0x3F)\n\t\t\t);\n\t\t}\n\n\t\tif (padding == 2) {\n\t\t\ta = input.charCodeAt(position) << 8;\n\t\t\tb = input.charCodeAt(++position);\n\t\t\tbuffer = a + b;\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 10) +\n\t\t\t\tTABLE.charAt((buffer >> 4) & 0x3F) +\n\t\t\t\tTABLE.charAt((buffer << 2) & 0x3F) +\n\t\t\t\t'='\n\t\t\t);\n\t\t} else if (padding == 1) {\n\t\t\tbuffer = input.charCodeAt(position);\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 2) +\n\t\t\t\tTABLE.charAt((buffer << 4) & 0x3F) +\n\t\t\t\t'=='\n\t\t\t);\n\t\t}\n\n\t\treturn output;\n\t};\n\n\tvar base64 = {\n\t\t'encode': encode,\n\t\t'decode': decode,\n\t\t'version': '0.1.0'\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn base64;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = base64;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (var key in base64) {\n\t\t\t\tbase64.hasOwnProperty(key) && (freeExports[key] = base64[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.base64 = base64;\n\t}\n\n}(this));\n","'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n , prefix = '~';\n\n/**\n * Constructor to create a storage for our `EE` objects.\n * An `Events` instance is a plain object whose properties are event names.\n *\n * @constructor\n * @private\n */\nfunction Events() {}\n\n//\n// We try to not inherit from `Object.prototype`. In some engines creating an\n// instance in this way is faster than calling `Object.create(null)` directly.\n// If `Object.create(null)` is not supported we prefix the event names with a\n// character to make sure that the built-in object properties are not\n// overridden or used as an attack vector.\n//\nif (Object.create) {\n Events.prototype = Object.create(null);\n\n //\n // This hack is needed because the `__proto__` property is still inherited in\n // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n //\n if (!new Events().__proto__) prefix = false;\n}\n\n/**\n * Representation of a single event listener.\n *\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n * @constructor\n * @private\n */\nfunction EE(fn, context, once) {\n this.fn = fn;\n this.context = context;\n this.once = once || false;\n}\n\n/**\n * Add a listener for a given event.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} once Specify if the listener is a one-time listener.\n * @returns {EventEmitter}\n * @private\n */\nfunction addListener(emitter, event, fn, context, once) {\n if (typeof fn !== 'function') {\n throw new TypeError('The listener must be a function');\n }\n\n var listener = new EE(fn, context || emitter, once)\n , evt = prefix ? prefix + event : event;\n\n if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;\n else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);\n else emitter._events[evt] = [emitter._events[evt], listener];\n\n return emitter;\n}\n\n/**\n * Clear event by name.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} evt The Event name.\n * @private\n */\nfunction clearEvent(emitter, evt) {\n if (--emitter._eventsCount === 0) emitter._events = new Events();\n else delete emitter._events[evt];\n}\n\n/**\n * Minimal `EventEmitter` interface that is molded against the Node.js\n * `EventEmitter` interface.\n *\n * @constructor\n * @public\n */\nfunction EventEmitter() {\n this._events = new Events();\n this._eventsCount = 0;\n}\n\n/**\n * Return an array listing the events for which the emitter has registered\n * listeners.\n *\n * @returns {Array}\n * @public\n */\nEventEmitter.prototype.eventNames = function eventNames() {\n var names = []\n , events\n , name;\n\n if (this._eventsCount === 0) return names;\n\n for (name in (events = this._events)) {\n if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n }\n\n if (Object.getOwnPropertySymbols) {\n return names.concat(Object.getOwnPropertySymbols(events));\n }\n\n return names;\n};\n\n/**\n * Return the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Array} The registered listeners.\n * @public\n */\nEventEmitter.prototype.listeners = function listeners(event) {\n var evt = prefix ? prefix + event : event\n , handlers = this._events[evt];\n\n if (!handlers) return [];\n if (handlers.fn) return [handlers.fn];\n\n for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {\n ee[i] = handlers[i].fn;\n }\n\n return ee;\n};\n\n/**\n * Return the number of listeners listening to a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Number} The number of listeners.\n * @public\n */\nEventEmitter.prototype.listenerCount = function listenerCount(event) {\n var evt = prefix ? prefix + event : event\n , listeners = this._events[evt];\n\n if (!listeners) return 0;\n if (listeners.fn) return 1;\n return listeners.length;\n};\n\n/**\n * Calls each of the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Boolean} `true` if the event had listeners, else `false`.\n * @public\n */\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return false;\n\n var listeners = this._events[evt]\n , len = arguments.length\n , args\n , i;\n\n if (listeners.fn) {\n if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n switch (len) {\n case 1: return listeners.fn.call(listeners.context), true;\n case 2: return listeners.fn.call(listeners.context, a1), true;\n case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n }\n\n for (i = 1, args = new Array(len -1); i < len; i++) {\n args[i - 1] = arguments[i];\n }\n\n listeners.fn.apply(listeners.context, args);\n } else {\n var length = listeners.length\n , j;\n\n for (i = 0; i < length; i++) {\n if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n switch (len) {\n case 1: listeners[i].fn.call(listeners[i].context); break;\n case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n default:\n if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n args[j - 1] = arguments[j];\n }\n\n listeners[i].fn.apply(listeners[i].context, args);\n }\n }\n }\n\n return true;\n};\n\n/**\n * Add a listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.on = function on(event, fn, context) {\n return addListener(this, event, fn, context, false);\n};\n\n/**\n * Add a one-time listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.once = function once(event, fn, context) {\n return addListener(this, event, fn, context, true);\n};\n\n/**\n * Remove the listeners of a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn Only remove the listeners that match this function.\n * @param {*} context Only remove the listeners that have this context.\n * @param {Boolean} once Only remove one-time listeners.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return this;\n if (!fn) {\n clearEvent(this, evt);\n return this;\n }\n\n var listeners = this._events[evt];\n\n if (listeners.fn) {\n if (\n listeners.fn === fn &&\n (!once || listeners.once) &&\n (!context || listeners.context === context)\n ) {\n clearEvent(this, evt);\n }\n } else {\n for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n if (\n listeners[i].fn !== fn ||\n (once && !listeners[i].once) ||\n (context && listeners[i].context !== context)\n ) {\n events.push(listeners[i]);\n }\n }\n\n //\n // Reset the array, or remove it completely if we have no more listeners.\n //\n if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n else clearEvent(this, evt);\n }\n\n return this;\n};\n\n/**\n * Remove all listeners, or those of the specified event.\n *\n * @param {(String|Symbol)} [event] The event name.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n var evt;\n\n if (event) {\n evt = prefix ? prefix + event : event;\n if (this._events[evt]) clearEvent(this, evt);\n } else {\n this._events = new Events();\n this._eventsCount = 0;\n }\n\n return this;\n};\n\n//\n// Alias methods names because people roll like that.\n//\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n//\n// Expose the prefix.\n//\nEventEmitter.prefixed = prefix;\n\n//\n// Allow `EventEmitter` to be imported as module namespace.\n//\nEventEmitter.EventEmitter = EventEmitter;\n\n//\n// Expose the module.\n//\nif ('undefined' !== typeof module) {\n module.exports = EventEmitter;\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// 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 permit\n// persons to whom the Software is furnished to do so, subject to the\n// 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. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function errorListener(err) {\n emitter.removeListener(name, resolver);\n reject(err);\n }\n\n function resolver() {\n if (typeof emitter.removeListener === 'function') {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n };\n\n eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n if (name !== 'error') {\n addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n }\n });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n if (typeof emitter.on === 'function') {\n eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n if (typeof emitter.on === 'function') {\n if (flags.once) {\n emitter.once(name, listener);\n } else {\n emitter.on(name, listener);\n }\n } else if (typeof emitter.addEventListener === 'function') {\n // EventTarget does not have `error` event semantics like Node\n // EventEmitters, we do not listen for `error` events here.\n emitter.addEventListener(name, function wrapListener(arg) {\n // IE does not have builtin `{ once: true }` support so we\n // have to do it manually.\n if (flags.once) {\n emitter.removeEventListener(name, wrapListener);\n }\n listener(arg);\n });\n } else {\n throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n }\n}\n","/*\n * Fuzzy\n * https://github.com/myork/fuzzy\n *\n * Copyright (c) 2012 Matt York\n * Licensed under the MIT license.\n */\n\n(function() {\n\nvar root = this;\n\nvar fuzzy = {};\n\n// Use in node or in browser\nif (typeof exports !== 'undefined') {\n module.exports = fuzzy;\n} else {\n root.fuzzy = fuzzy;\n}\n\n// Return all elements of `array` that have a fuzzy\n// match against `pattern`.\nfuzzy.simpleFilter = function(pattern, array) {\n return array.filter(function(str) {\n return fuzzy.test(pattern, str);\n });\n};\n\n// Does `pattern` fuzzy match `str`?\nfuzzy.test = function(pattern, str) {\n return fuzzy.match(pattern, str) !== null;\n};\n\n// If `pattern` matches `str`, wrap each matching character\n// in `opts.pre` and `opts.post`. If no match, return null\nfuzzy.match = function(pattern, str, opts) {\n opts = opts || {};\n var patternIdx = 0\n , result = []\n , len = str.length\n , totalScore = 0\n , currScore = 0\n // prefix\n , pre = opts.pre || ''\n // suffix\n , post = opts.post || ''\n // String to compare against. This might be a lowercase version of the\n // raw string\n , compareString = opts.caseSensitive && str || str.toLowerCase()\n , ch;\n\n pattern = opts.caseSensitive && pattern || pattern.toLowerCase();\n\n // For each character in the string, either add it to the result\n // or wrap in template if it's the next string in the pattern\n for(var idx = 0; idx < len; idx++) {\n ch = str[idx];\n if(compareString[idx] === pattern[patternIdx]) {\n ch = pre + ch + post;\n patternIdx += 1;\n\n // consecutive characters should increase the score more than linearly\n currScore += 1 + currScore;\n } else {\n currScore = 0;\n }\n totalScore += currScore;\n result[result.length] = ch;\n }\n\n // return rendered string if we have a match for every char\n if(patternIdx === pattern.length) {\n // if the string is an exact match with pattern, totalScore should be maxed\n totalScore = (compareString === pattern) ? Infinity : totalScore;\n return {rendered: result.join(''), score: totalScore};\n }\n\n return null;\n};\n\n// The normal entry point. Filters `arr` for matches against `pattern`.\n// It returns an array with matching values of the type:\n//\n// [{\n// string: 'lah' // The rendered string\n// , index: 2 // The index of the element in `arr`\n// , original: 'blah' // The original element in `arr`\n// }]\n//\n// `opts` is an optional argument bag. Details:\n//\n// opts = {\n// // string to put before a matching character\n// pre: ''\n//\n// // string to put after matching character\n// , post: ''\n//\n// // Optional function. Input is an entry in the given arr`,\n// // output should be the string to test `pattern` against.\n// // In this example, if `arr = [{crying: 'koala'}]` we would return\n// // 'koala'.\n// , extract: function(arg) { return arg.crying; }\n// }\nfuzzy.filter = function(pattern, arr, opts) {\n if(!arr || arr.length === 0) {\n return [];\n }\n if (typeof pattern !== 'string') {\n return arr;\n }\n opts = opts || {};\n return arr\n .reduce(function(prev, element, idx, arr) {\n var str = element;\n if(opts.extract) {\n str = opts.extract(element);\n }\n var rendered = fuzzy.match(pattern, str, opts);\n if(rendered != null) {\n prev[prev.length] = {\n string: rendered.rendered\n , score: rendered.score\n , index: idx\n , original: element\n };\n }\n return prev;\n }, [])\n\n // Sort by score. Browsers are inconsistent wrt stable/unstable\n // sorting, so force stable by using the index in the case of tie.\n // See http://ofb.net/~sethml/is-sort-stable.html\n .sort(function(a,b) {\n var compare = b.score - a.score;\n if(compare) return compare;\n return a.index - b.index;\n });\n};\n\n\n}());\n\n","'use strict';\nvar toString = Object.prototype.toString;\n\nmodule.exports = function (x) {\n\tvar prototype;\n\treturn toString.call(x) === '[object Object]' && (prototype = Object.getPrototypeOf(x), prototype === null || prototype === Object.getPrototypeOf({}));\n};\n","/**\n * lodash (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n result = wait - timeSinceLastCall;\n\n return maxing ? nativeMin(result, maxWait - timeSinceLastInvoke) : result;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = value.replace(reTrim, '');\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = debounce;\n","!function(root, name, make) {\r\n if (typeof module != 'undefined' && module.exports) module.exports = make()\r\n else root[name] = make()\r\n}(this, 'subtag', function() {\r\n\r\n var empty = ''\r\n var pattern = /^([a-zA-Z]{2,3})(?:[_-]+([a-zA-Z]{3})(?=$|[_-]+))?(?:[_-]+([a-zA-Z]{4})(?=$|[_-]+))?(?:[_-]+([a-zA-Z]{2}|[0-9]{3})(?=$|[_-]+))?/\r\n\r\n function match(tag) {\r\n return tag.match(pattern) || []\r\n }\r\n\r\n function split(tag) {\r\n return match(tag).filter(function(v, i) { return v && i })\r\n }\r\n\r\n function api(tag) {\r\n tag = match(tag)\r\n return {\r\n language: tag[1] || empty,\r\n extlang: tag[2] || empty,\r\n script: tag[3] || empty,\r\n region: tag[4] || empty\r\n }\r\n }\r\n\r\n function expose(target, key, value) {\r\n Object.defineProperty(target, key, {\r\n value: value,\r\n enumerable: true\r\n })\r\n }\r\n\r\n function part(position, pattern, type) {\r\n function method(tag) {\r\n return match(tag)[position] || empty\r\n }\r\n expose(method, 'pattern', pattern)\r\n expose(api, type, method)\r\n }\r\n\r\n part(1, /^[a-zA-Z]{2,3}$/, 'language')\r\n part(2, /^[a-zA-Z]{3}$/, 'extlang')\r\n part(3, /^[a-zA-Z]{4}$/, 'script')\r\n part(4, /^[a-zA-Z]{2}$|^[0-9]{3}$/, 'region')\r\n\r\n expose(api, 'split', split)\r\n\r\n return api\r\n});\r\n","'use strict';\n\n/**\n * A typeahead component for inputs\n * @class Suggestions\n *\n * @param {HTMLInputElement} el A valid HTML input element\n * @param {Array} data An array of data used for results\n * @param {Object} options\n * @param {Number} [options.limit=5] Max number of results to display in the auto suggest list.\n * @param {Number} [options.minLength=2] Number of characters typed into an input to trigger suggestions.\n * @param {Boolean} [options.hideOnBlur=true] If `true`, hides the suggestions when focus is lost.\n * @return {Suggestions} `this`\n * @example\n * // in the browser\n * var input = document.querySelector('input');\n * var data = [\n * 'Roy Eldridge',\n * 'Roy Hargrove',\n * 'Rex Stewart'\n * ];\n *\n * new Suggestions(input, data);\n *\n * // with options\n * var input = document.querySelector('input');\n * var data = [{\n * name: 'Roy Eldridge',\n * year: 1911\n * }, {\n * name: 'Roy Hargrove',\n * year: 1969\n * }, {\n * name: 'Rex Stewart',\n * year: 1907\n * }];\n *\n * var typeahead = new Suggestions(input, data, {\n * filter: false, // Disable filtering\n * minLength: 3, // Number of characters typed into an input to trigger suggestions.\n * limit: 3, // Max number of results to display.\n * hideOnBlur: false // Don't hide results when input loses focus\n * });\n *\n * // As we're passing an object of an arrays as data, override\n * // `getItemValue` by specifying the specific property to search on.\n * typeahead.getItemValue = function(item) { return item.name };\n *\n * input.addEventListener('change', function() {\n * console.log(typeahead.selected); // Current selected item.\n * });\n *\n * // With browserify\n * var Suggestions = require('suggestions');\n *\n * new Suggestions(input, data);\n */\nvar Suggestions = require('./src/suggestions');\nmodule.exports = Suggestions;\n\nif (typeof window !== 'undefined') {\n window.Suggestions = Suggestions;\n}\n","'use strict';\n\nvar List = function(component) {\n this.component = component;\n this.items = [];\n this.active = 0;\n this.wrapper = document.createElement('div');\n this.wrapper.className = 'suggestions-wrapper';\n this.element = document.createElement('ul');\n this.element.className = 'suggestions';\n this.wrapper.appendChild(this.element);\n\n // selectingListItem is set to true in the time between the mousedown and mouseup when clicking an item in the list\n // mousedown on a list item will cause the input to blur which normally hides the list, so this flag is used to keep\n // the list open until the mouseup\n this.selectingListItem = false;\n\n component.el.parentNode.insertBefore(this.wrapper, component.el.nextSibling);\n return this;\n};\n\nList.prototype.show = function() {\n this.element.style.display = 'block';\n};\n\nList.prototype.hide = function() {\n this.element.style.display = 'none';\n};\n\nList.prototype.add = function(item) {\n this.items.push(item);\n};\n\nList.prototype.clear = function() {\n this.items = [];\n this.active = 0;\n};\n\nList.prototype.isEmpty = function() {\n return !this.items.length;\n};\n\nList.prototype.isVisible = function() {\n return this.element.style.display === 'block';\n};\n\nList.prototype.draw = function() {\n this.element.innerHTML = '';\n\n if (this.items.length === 0) {\n this.hide();\n return;\n }\n\n for (var i = 0; i < this.items.length; i++) {\n this.drawItem(this.items[i], this.active === i);\n }\n\n this.show();\n};\n\nList.prototype.drawItem = function(item, active) {\n var li = document.createElement('li'),\n a = document.createElement('a');\n\n if (active) li.className += ' active';\n\n a.innerHTML = item.string;\n\n li.appendChild(a);\n this.element.appendChild(li);\n\n li.addEventListener('mousedown', function() {\n this.selectingListItem = true;\n }.bind(this));\n\n li.addEventListener('mouseup', function() {\n this.handleMouseUp.call(this, item);\n }.bind(this));\n};\n\nList.prototype.handleMouseUp = function(item) {\n this.selectingListItem = false;\n this.component.value(item.original);\n this.clear();\n this.draw();\n};\n\nList.prototype.move = function(index) {\n this.active = index;\n this.draw();\n};\n\nList.prototype.previous = function() {\n this.move(this.active === 0 ? this.items.length - 1 : this.active - 1);\n};\n\nList.prototype.next = function() {\n this.move(this.active === this.items.length - 1 ? 0 : this.active + 1);\n};\n\nList.prototype.drawError = function(msg){\n var li = document.createElement('li');\n\n li.innerHTML = msg;\n\n this.element.appendChild(li);\n this.show();\n}\n\nmodule.exports = List;\n","'use strict';\n\nvar extend = require('xtend');\nvar fuzzy = require('fuzzy');\nvar List = require('./list');\n\nvar Suggestions = function(el, data, options) {\n options = options || {};\n\n this.options = extend({\n minLength: 2,\n limit: 5,\n filter: true,\n hideOnBlur: true\n }, options);\n\n this.el = el;\n this.data = data || [];\n this.list = new List(this);\n\n this.query = '';\n this.selected = null;\n\n this.list.draw();\n\n this.el.addEventListener('keyup', function(e) {\n this.handleKeyUp(e.keyCode);\n }.bind(this), false);\n\n this.el.addEventListener('keydown', function(e) {\n this.handleKeyDown(e);\n }.bind(this));\n\n this.el.addEventListener('focus', function() {\n this.handleFocus();\n }.bind(this));\n\n this.el.addEventListener('blur', function() {\n this.handleBlur();\n }.bind(this));\n\n this.el.addEventListener('paste', function(e) {\n this.handlePaste(e);\n }.bind(this));\n\n // use user-provided render function if given, otherwise just use the default\n this.render = (this.options.render) ? this.options.render.bind(this) : this.render.bind(this)\n\n this.getItemValue = (this.options.getItemValue) ? this.options.getItemValue.bind(this) : this.getItemValue.bind(this);\n\n return this;\n};\n\nSuggestions.prototype.handleKeyUp = function(keyCode) {\n // 40 - DOWN\n // 38 - UP\n // 27 - ESC\n // 13 - ENTER\n // 9 - TAB\n\n if (keyCode === 40 ||\n keyCode === 38 ||\n keyCode === 27 ||\n keyCode === 13 ||\n keyCode === 9) return;\n\n this.handleInputChange(this.el.value);\n};\n\nSuggestions.prototype.handleKeyDown = function(e) {\n switch (e.keyCode) {\n case 13: // ENTER\n case 9: // TAB\n if (!this.list.isEmpty()) {\n if (this.list.isVisible()) {\n e.preventDefault();\n }\n this.value(this.list.items[this.list.active].original);\n this.list.hide();\n }\n break;\n case 27: // ESC\n if (!this.list.isEmpty()) this.list.hide();\n break;\n case 38: // UP\n this.list.previous();\n break;\n case 40: // DOWN\n this.list.next();\n break;\n }\n};\n\nSuggestions.prototype.handleBlur = function() {\n if (!this.list.selectingListItem && this.options.hideOnBlur) {\n this.list.hide();\n }\n};\n\nSuggestions.prototype.handlePaste = function(e) {\n if (e.clipboardData) {\n this.handleInputChange(e.clipboardData.getData('Text'));\n } else {\n var self = this;\n setTimeout(function () {\n self.handleInputChange(e.target.value);\n }, 100);\n }\n};\n\nSuggestions.prototype.handleInputChange = function(query) {\n this.query = this.normalize(query);\n\n this.list.clear();\n\n if (this.query.length < this.options.minLength) {\n this.list.draw();\n return;\n }\n\n this.getCandidates(function(data) {\n for (var i = 0; i < data.length; i++) {\n this.list.add(data[i]);\n if (i === (this.options.limit - 1)) break;\n }\n this.list.draw();\n }.bind(this));\n};\n\nSuggestions.prototype.handleFocus = function() {\n if (!this.list.isEmpty()) this.list.show();\n this.list.selectingListItem = false;\n};\n\n/**\n * Update data previously passed\n *\n * @param {Array} revisedData\n */\nSuggestions.prototype.update = function(revisedData) {\n this.data = revisedData;\n this.handleKeyUp();\n};\n\n/**\n * Clears data\n */\nSuggestions.prototype.clear = function() {\n this.data = [];\n this.list.clear();\n};\n\n/**\n * Normalize the results list and input value for matching\n *\n * @param {String} value\n * @return {String}\n */\nSuggestions.prototype.normalize = function(value) {\n value = value.toLowerCase();\n return value;\n};\n\n/**\n * Evaluates whether an array item qualifies as a match with the current query\n *\n * @param {String} candidate a possible item from the array passed\n * @param {String} query the current query\n * @return {Boolean}\n */\nSuggestions.prototype.match = function(candidate, query) {\n return candidate.indexOf(query) > -1;\n};\n\nSuggestions.prototype.value = function(value) {\n this.selected = value;\n this.el.value = this.getItemValue(value);\n\n if (document.createEvent) {\n var e = document.createEvent('HTMLEvents');\n e.initEvent('change', true, false);\n this.el.dispatchEvent(e);\n } else {\n this.el.fireEvent('onchange');\n }\n};\n\nSuggestions.prototype.getCandidates = function(callback) {\n var options = {\n pre: '',\n post: '',\n extract: function(d) { return this.getItemValue(d); }.bind(this)\n };\n var results;\n if(this.options.filter){\n results = fuzzy.filter(this.query, this.data, options);\n\n results = results.map(function(item){\n return {\n original: item.original,\n string: this.render(item.original, item.string)\n };\n }.bind(this))\n }else{\n results = this.data.map(function(d) {\n var renderedString = this.render(d);\n return {\n original: d,\n string: renderedString\n };\n }.bind(this));\n }\n callback(results);\n};\n\n/**\n * For a given item in the data array, return what should be used as the candidate string\n *\n * @param {Object|String} item an item from the data array\n * @return {String} item\n */\nSuggestions.prototype.getItemValue = function(item) {\n return item;\n};\n\n/**\n * For a given item in the data array, return a string of html that should be rendered in the dropdown\n * @param {Object|String} item an item from the data array\n * @param {String} sourceFormatting a string that has pre-formatted html that should be passed directly through the render function \n * @return {String} html\n */\nSuggestions.prototype.render = function(item, sourceFormatting) {\n if (sourceFormatting){\n // use existing formatting on the source string\n return sourceFormatting;\n }\n var boldString = (item.original) ? this.getItemValue(item.original) : this.getItemValue(item);\n var indexString = this.normalize(boldString);\n var indexOfQuery = indexString.lastIndexOf(this.query);\n while (indexOfQuery > -1) {\n var endIndexOfQuery = indexOfQuery + this.query.length;\n boldString = boldString.slice(0, indexOfQuery) + '' + boldString.slice(indexOfQuery, endIndexOfQuery) + '' + boldString.slice(endIndexOfQuery);\n indexOfQuery = indexString.slice(0, indexOfQuery).lastIndexOf(this.query);\n }\n return boldString\n}\n\n/**\n * Render an custom error message in the suggestions list\n * @param {String} msg An html string to render as an error message\n */\nSuggestions.prototype.renderError = function(msg){\n this.list.drawError(msg);\n}\n\nmodule.exports = Suggestions;\n","module.exports = extend\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nfunction extend() {\n var target = {}\n\n for (var i = 0; i < arguments.length; i++) {\n var source = arguments[i]\n\n for (var key in source) {\n if (hasOwnProperty.call(source, key)) {\n target[key] = source[key]\n }\n }\n }\n\n return target\n}\n","import { urlAlphabet } from './url-alphabet/index.js'\nlet random = bytes => crypto.getRandomValues(new Uint8Array(bytes))\nlet customRandom = (alphabet, defaultSize, getRandom) => {\n let mask = (2 << (Math.log(alphabet.length - 1) / Math.LN2)) - 1\n let step = -~((1.6 * mask * defaultSize) / alphabet.length)\n return (size = defaultSize) => {\n let id = ''\n while (true) {\n let bytes = getRandom(step)\n let j = step\n while (j--) {\n id += alphabet[bytes[j] & mask] || ''\n if (id.length === size) return id\n }\n }\n }\n}\nlet customAlphabet = (alphabet, size = 21) =>\n customRandom(alphabet, size, random)\nlet nanoid = (size = 21) =>\n crypto.getRandomValues(new Uint8Array(size)).reduce((id, byte) => {\n byte &= 63\n if (byte < 36) {\n id += byte.toString(36)\n } else if (byte < 62) {\n id += (byte - 26).toString(36).toUpperCase()\n } else if (byte > 62) {\n id += '-'\n } else {\n id += '_'\n }\n return id\n }, '')\nexport { nanoid, customAlphabet, customRandom, urlAlphabet, random }\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","/*\nTurbo 7.1.0\nCopyright © 2021 Basecamp, LLC\n */\n(function () {\n if (window.Reflect === undefined || window.customElements === undefined ||\n window.customElements.polyfillWrapFlushCallback) {\n return;\n }\n const BuiltInHTMLElement = HTMLElement;\n const wrapperForTheName = {\n 'HTMLElement': function HTMLElement() {\n return Reflect.construct(BuiltInHTMLElement, [], this.constructor);\n }\n };\n window.HTMLElement =\n wrapperForTheName['HTMLElement'];\n HTMLElement.prototype = BuiltInHTMLElement.prototype;\n HTMLElement.prototype.constructor = HTMLElement;\n Object.setPrototypeOf(HTMLElement, BuiltInHTMLElement);\n})();\n\n/**\n * The MIT License (MIT)\n * \n * Copyright (c) 2019 Javan Makhmali\n * \n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n * \n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n * \n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\n(function(prototype) {\n if (typeof prototype.requestSubmit == \"function\") return\n\n prototype.requestSubmit = function(submitter) {\n if (submitter) {\n validateSubmitter(submitter, this);\n submitter.click();\n } else {\n submitter = document.createElement(\"input\");\n submitter.type = \"submit\";\n submitter.hidden = true;\n this.appendChild(submitter);\n submitter.click();\n this.removeChild(submitter);\n }\n };\n\n function validateSubmitter(submitter, form) {\n submitter instanceof HTMLElement || raise(TypeError, \"parameter 1 is not of type 'HTMLElement'\");\n submitter.type == \"submit\" || raise(TypeError, \"The specified element is not a submit button\");\n submitter.form == form || raise(DOMException, \"The specified element is not owned by this form element\", \"NotFoundError\");\n }\n\n function raise(errorConstructor, message, name) {\n throw new errorConstructor(\"Failed to execute 'requestSubmit' on 'HTMLFormElement': \" + message + \".\", name)\n }\n})(HTMLFormElement.prototype);\n\nconst submittersByForm = new WeakMap;\nfunction findSubmitterFromClickTarget(target) {\n const element = target instanceof Element ? target : target instanceof Node ? target.parentElement : null;\n const candidate = element ? element.closest(\"input, button\") : null;\n return (candidate === null || candidate === void 0 ? void 0 : candidate.type) == \"submit\" ? candidate : null;\n}\nfunction clickCaptured(event) {\n const submitter = findSubmitterFromClickTarget(event.target);\n if (submitter && submitter.form) {\n submittersByForm.set(submitter.form, submitter);\n }\n}\n(function () {\n if (\"submitter\" in Event.prototype)\n return;\n let prototype;\n if (\"SubmitEvent\" in window && /Apple Computer/.test(navigator.vendor)) {\n prototype = window.SubmitEvent.prototype;\n }\n else if (\"SubmitEvent\" in window) {\n return;\n }\n else {\n prototype = window.Event.prototype;\n }\n addEventListener(\"click\", clickCaptured, true);\n Object.defineProperty(prototype, \"submitter\", {\n get() {\n if (this.type == \"submit\" && this.target instanceof HTMLFormElement) {\n return submittersByForm.get(this.target);\n }\n }\n });\n})();\n\nvar FrameLoadingStyle;\n(function (FrameLoadingStyle) {\n FrameLoadingStyle[\"eager\"] = \"eager\";\n FrameLoadingStyle[\"lazy\"] = \"lazy\";\n})(FrameLoadingStyle || (FrameLoadingStyle = {}));\nclass FrameElement extends HTMLElement {\n constructor() {\n super();\n this.loaded = Promise.resolve();\n this.delegate = new FrameElement.delegateConstructor(this);\n }\n static get observedAttributes() {\n return [\"disabled\", \"loading\", \"src\"];\n }\n connectedCallback() {\n this.delegate.connect();\n }\n disconnectedCallback() {\n this.delegate.disconnect();\n }\n reload() {\n const { src } = this;\n this.src = null;\n this.src = src;\n }\n attributeChangedCallback(name) {\n if (name == \"loading\") {\n this.delegate.loadingStyleChanged();\n }\n else if (name == \"src\") {\n this.delegate.sourceURLChanged();\n }\n else {\n this.delegate.disabledChanged();\n }\n }\n get src() {\n return this.getAttribute(\"src\");\n }\n set src(value) {\n if (value) {\n this.setAttribute(\"src\", value);\n }\n else {\n this.removeAttribute(\"src\");\n }\n }\n get loading() {\n return frameLoadingStyleFromString(this.getAttribute(\"loading\") || \"\");\n }\n set loading(value) {\n if (value) {\n this.setAttribute(\"loading\", value);\n }\n else {\n this.removeAttribute(\"loading\");\n }\n }\n get disabled() {\n return this.hasAttribute(\"disabled\");\n }\n set disabled(value) {\n if (value) {\n this.setAttribute(\"disabled\", \"\");\n }\n else {\n this.removeAttribute(\"disabled\");\n }\n }\n get autoscroll() {\n return this.hasAttribute(\"autoscroll\");\n }\n set autoscroll(value) {\n if (value) {\n this.setAttribute(\"autoscroll\", \"\");\n }\n else {\n this.removeAttribute(\"autoscroll\");\n }\n }\n get complete() {\n return !this.delegate.isLoading;\n }\n get isActive() {\n return this.ownerDocument === document && !this.isPreview;\n }\n get isPreview() {\n var _a, _b;\n return (_b = (_a = this.ownerDocument) === null || _a === void 0 ? void 0 : _a.documentElement) === null || _b === void 0 ? void 0 : _b.hasAttribute(\"data-turbo-preview\");\n }\n}\nfunction frameLoadingStyleFromString(style) {\n switch (style.toLowerCase()) {\n case \"lazy\": return FrameLoadingStyle.lazy;\n default: return FrameLoadingStyle.eager;\n }\n}\n\nfunction expandURL(locatable) {\n return new URL(locatable.toString(), document.baseURI);\n}\nfunction getAnchor(url) {\n let anchorMatch;\n if (url.hash) {\n return url.hash.slice(1);\n }\n else if (anchorMatch = url.href.match(/#(.*)$/)) {\n return anchorMatch[1];\n }\n}\nfunction getAction(form, submitter) {\n const action = (submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute(\"formaction\")) || form.getAttribute(\"action\") || form.action;\n return expandURL(action);\n}\nfunction getExtension(url) {\n return (getLastPathComponent(url).match(/\\.[^.]*$/) || [])[0] || \"\";\n}\nfunction isHTML(url) {\n return !!getExtension(url).match(/^(?:|\\.(?:htm|html|xhtml))$/);\n}\nfunction isPrefixedBy(baseURL, url) {\n const prefix = getPrefix(url);\n return baseURL.href === expandURL(prefix).href || baseURL.href.startsWith(prefix);\n}\nfunction locationIsVisitable(location, rootLocation) {\n return isPrefixedBy(location, rootLocation) && isHTML(location);\n}\nfunction getRequestURL(url) {\n const anchor = getAnchor(url);\n return anchor != null\n ? url.href.slice(0, -(anchor.length + 1))\n : url.href;\n}\nfunction toCacheKey(url) {\n return getRequestURL(url);\n}\nfunction urlsAreEqual(left, right) {\n return expandURL(left).href == expandURL(right).href;\n}\nfunction getPathComponents(url) {\n return url.pathname.split(\"/\").slice(1);\n}\nfunction getLastPathComponent(url) {\n return getPathComponents(url).slice(-1)[0];\n}\nfunction getPrefix(url) {\n return addTrailingSlash(url.origin + url.pathname);\n}\nfunction addTrailingSlash(value) {\n return value.endsWith(\"/\") ? value : value + \"/\";\n}\n\nclass FetchResponse {\n constructor(response) {\n this.response = response;\n }\n get succeeded() {\n return this.response.ok;\n }\n get failed() {\n return !this.succeeded;\n }\n get clientError() {\n return this.statusCode >= 400 && this.statusCode <= 499;\n }\n get serverError() {\n return this.statusCode >= 500 && this.statusCode <= 599;\n }\n get redirected() {\n return this.response.redirected;\n }\n get location() {\n return expandURL(this.response.url);\n }\n get isHTML() {\n return this.contentType && this.contentType.match(/^(?:text\\/([^\\s;,]+\\b)?html|application\\/xhtml\\+xml)\\b/);\n }\n get statusCode() {\n return this.response.status;\n }\n get contentType() {\n return this.header(\"Content-Type\");\n }\n get responseText() {\n return this.response.clone().text();\n }\n get responseHTML() {\n if (this.isHTML) {\n return this.response.clone().text();\n }\n else {\n return Promise.resolve(undefined);\n }\n }\n header(name) {\n return this.response.headers.get(name);\n }\n}\n\nfunction dispatch(eventName, { target, cancelable, detail } = {}) {\n const event = new CustomEvent(eventName, { cancelable, bubbles: true, detail });\n if (target && target.isConnected) {\n target.dispatchEvent(event);\n }\n else {\n document.documentElement.dispatchEvent(event);\n }\n return event;\n}\nfunction nextAnimationFrame() {\n return new Promise(resolve => requestAnimationFrame(() => resolve()));\n}\nfunction nextEventLoopTick() {\n return new Promise(resolve => setTimeout(() => resolve(), 0));\n}\nfunction nextMicrotask() {\n return Promise.resolve();\n}\nfunction parseHTMLDocument(html = \"\") {\n return new DOMParser().parseFromString(html, \"text/html\");\n}\nfunction unindent(strings, ...values) {\n const lines = interpolate(strings, values).replace(/^\\n/, \"\").split(\"\\n\");\n const match = lines[0].match(/^\\s+/);\n const indent = match ? match[0].length : 0;\n return lines.map(line => line.slice(indent)).join(\"\\n\");\n}\nfunction interpolate(strings, values) {\n return strings.reduce((result, string, i) => {\n const value = values[i] == undefined ? \"\" : values[i];\n return result + string + value;\n }, \"\");\n}\nfunction uuid() {\n return Array.apply(null, { length: 36 }).map((_, i) => {\n if (i == 8 || i == 13 || i == 18 || i == 23) {\n return \"-\";\n }\n else if (i == 14) {\n return \"4\";\n }\n else if (i == 19) {\n return (Math.floor(Math.random() * 4) + 8).toString(16);\n }\n else {\n return Math.floor(Math.random() * 15).toString(16);\n }\n }).join(\"\");\n}\nfunction getAttribute(attributeName, ...elements) {\n for (const value of elements.map(element => element === null || element === void 0 ? void 0 : element.getAttribute(attributeName))) {\n if (typeof value == \"string\")\n return value;\n }\n return null;\n}\nfunction markAsBusy(...elements) {\n for (const element of elements) {\n if (element.localName == \"turbo-frame\") {\n element.setAttribute(\"busy\", \"\");\n }\n element.setAttribute(\"aria-busy\", \"true\");\n }\n}\nfunction clearBusyState(...elements) {\n for (const element of elements) {\n if (element.localName == \"turbo-frame\") {\n element.removeAttribute(\"busy\");\n }\n element.removeAttribute(\"aria-busy\");\n }\n}\n\nvar FetchMethod;\n(function (FetchMethod) {\n FetchMethod[FetchMethod[\"get\"] = 0] = \"get\";\n FetchMethod[FetchMethod[\"post\"] = 1] = \"post\";\n FetchMethod[FetchMethod[\"put\"] = 2] = \"put\";\n FetchMethod[FetchMethod[\"patch\"] = 3] = \"patch\";\n FetchMethod[FetchMethod[\"delete\"] = 4] = \"delete\";\n})(FetchMethod || (FetchMethod = {}));\nfunction fetchMethodFromString(method) {\n switch (method.toLowerCase()) {\n case \"get\": return FetchMethod.get;\n case \"post\": return FetchMethod.post;\n case \"put\": return FetchMethod.put;\n case \"patch\": return FetchMethod.patch;\n case \"delete\": return FetchMethod.delete;\n }\n}\nclass FetchRequest {\n constructor(delegate, method, location, body = new URLSearchParams, target = null) {\n this.abortController = new AbortController;\n this.resolveRequestPromise = (value) => { };\n this.delegate = delegate;\n this.method = method;\n this.headers = this.defaultHeaders;\n this.body = body;\n this.url = location;\n this.target = target;\n }\n get location() {\n return this.url;\n }\n get params() {\n return this.url.searchParams;\n }\n get entries() {\n return this.body ? Array.from(this.body.entries()) : [];\n }\n cancel() {\n this.abortController.abort();\n }\n async perform() {\n var _a, _b;\n const { fetchOptions } = this;\n (_b = (_a = this.delegate).prepareHeadersForRequest) === null || _b === void 0 ? void 0 : _b.call(_a, this.headers, this);\n await this.allowRequestToBeIntercepted(fetchOptions);\n try {\n this.delegate.requestStarted(this);\n const response = await fetch(this.url.href, fetchOptions);\n return await this.receive(response);\n }\n catch (error) {\n if (error.name !== 'AbortError') {\n this.delegate.requestErrored(this, error);\n throw error;\n }\n }\n finally {\n this.delegate.requestFinished(this);\n }\n }\n async receive(response) {\n const fetchResponse = new FetchResponse(response);\n const event = dispatch(\"turbo:before-fetch-response\", { cancelable: true, detail: { fetchResponse }, target: this.target });\n if (event.defaultPrevented) {\n this.delegate.requestPreventedHandlingResponse(this, fetchResponse);\n }\n else if (fetchResponse.succeeded) {\n this.delegate.requestSucceededWithResponse(this, fetchResponse);\n }\n else {\n this.delegate.requestFailedWithResponse(this, fetchResponse);\n }\n return fetchResponse;\n }\n get fetchOptions() {\n var _a;\n return {\n method: FetchMethod[this.method].toUpperCase(),\n credentials: \"same-origin\",\n headers: this.headers,\n redirect: \"follow\",\n body: this.isIdempotent ? null : this.body,\n signal: this.abortSignal,\n referrer: (_a = this.delegate.referrer) === null || _a === void 0 ? void 0 : _a.href\n };\n }\n get defaultHeaders() {\n return {\n \"Accept\": \"text/html, application/xhtml+xml\"\n };\n }\n get isIdempotent() {\n return this.method == FetchMethod.get;\n }\n get abortSignal() {\n return this.abortController.signal;\n }\n async allowRequestToBeIntercepted(fetchOptions) {\n const requestInterception = new Promise(resolve => this.resolveRequestPromise = resolve);\n const event = dispatch(\"turbo:before-fetch-request\", {\n cancelable: true,\n detail: {\n fetchOptions,\n url: this.url,\n resume: this.resolveRequestPromise\n },\n target: this.target\n });\n if (event.defaultPrevented)\n await requestInterception;\n }\n}\n\nclass AppearanceObserver {\n constructor(delegate, element) {\n this.started = false;\n this.intersect = entries => {\n const lastEntry = entries.slice(-1)[0];\n if (lastEntry === null || lastEntry === void 0 ? void 0 : lastEntry.isIntersecting) {\n this.delegate.elementAppearedInViewport(this.element);\n }\n };\n this.delegate = delegate;\n this.element = element;\n this.intersectionObserver = new IntersectionObserver(this.intersect);\n }\n start() {\n if (!this.started) {\n this.started = true;\n this.intersectionObserver.observe(this.element);\n }\n }\n stop() {\n if (this.started) {\n this.started = false;\n this.intersectionObserver.unobserve(this.element);\n }\n }\n}\n\nclass StreamMessage {\n constructor(html) {\n this.templateElement = document.createElement(\"template\");\n this.templateElement.innerHTML = html;\n }\n static wrap(message) {\n if (typeof message == \"string\") {\n return new this(message);\n }\n else {\n return message;\n }\n }\n get fragment() {\n const fragment = document.createDocumentFragment();\n for (const element of this.foreignElements) {\n fragment.appendChild(document.importNode(element, true));\n }\n return fragment;\n }\n get foreignElements() {\n return this.templateChildren.reduce((streamElements, child) => {\n if (child.tagName.toLowerCase() == \"turbo-stream\") {\n return [...streamElements, child];\n }\n else {\n return streamElements;\n }\n }, []);\n }\n get templateChildren() {\n return Array.from(this.templateElement.content.children);\n }\n}\nStreamMessage.contentType = \"text/vnd.turbo-stream.html\";\n\nvar FormSubmissionState;\n(function (FormSubmissionState) {\n FormSubmissionState[FormSubmissionState[\"initialized\"] = 0] = \"initialized\";\n FormSubmissionState[FormSubmissionState[\"requesting\"] = 1] = \"requesting\";\n FormSubmissionState[FormSubmissionState[\"waiting\"] = 2] = \"waiting\";\n FormSubmissionState[FormSubmissionState[\"receiving\"] = 3] = \"receiving\";\n FormSubmissionState[FormSubmissionState[\"stopping\"] = 4] = \"stopping\";\n FormSubmissionState[FormSubmissionState[\"stopped\"] = 5] = \"stopped\";\n})(FormSubmissionState || (FormSubmissionState = {}));\nvar FormEnctype;\n(function (FormEnctype) {\n FormEnctype[\"urlEncoded\"] = \"application/x-www-form-urlencoded\";\n FormEnctype[\"multipart\"] = \"multipart/form-data\";\n FormEnctype[\"plain\"] = \"text/plain\";\n})(FormEnctype || (FormEnctype = {}));\nfunction formEnctypeFromString(encoding) {\n switch (encoding.toLowerCase()) {\n case FormEnctype.multipart: return FormEnctype.multipart;\n case FormEnctype.plain: return FormEnctype.plain;\n default: return FormEnctype.urlEncoded;\n }\n}\nclass FormSubmission {\n constructor(delegate, formElement, submitter, mustRedirect = false) {\n this.state = FormSubmissionState.initialized;\n this.delegate = delegate;\n this.formElement = formElement;\n this.submitter = submitter;\n this.formData = buildFormData(formElement, submitter);\n this.location = expandURL(this.action);\n if (this.method == FetchMethod.get) {\n mergeFormDataEntries(this.location, [...this.body.entries()]);\n }\n this.fetchRequest = new FetchRequest(this, this.method, this.location, this.body, this.formElement);\n this.mustRedirect = mustRedirect;\n }\n static confirmMethod(message, element) {\n return confirm(message);\n }\n get method() {\n var _a;\n const method = ((_a = this.submitter) === null || _a === void 0 ? void 0 : _a.getAttribute(\"formmethod\")) || this.formElement.getAttribute(\"method\") || \"\";\n return fetchMethodFromString(method.toLowerCase()) || FetchMethod.get;\n }\n get action() {\n var _a;\n const formElementAction = typeof this.formElement.action === 'string' ? this.formElement.action : null;\n return ((_a = this.submitter) === null || _a === void 0 ? void 0 : _a.getAttribute(\"formaction\")) || this.formElement.getAttribute(\"action\") || formElementAction || \"\";\n }\n get body() {\n if (this.enctype == FormEnctype.urlEncoded || this.method == FetchMethod.get) {\n return new URLSearchParams(this.stringFormData);\n }\n else {\n return this.formData;\n }\n }\n get enctype() {\n var _a;\n return formEnctypeFromString(((_a = this.submitter) === null || _a === void 0 ? void 0 : _a.getAttribute(\"formenctype\")) || this.formElement.enctype);\n }\n get isIdempotent() {\n return this.fetchRequest.isIdempotent;\n }\n get stringFormData() {\n return [...this.formData].reduce((entries, [name, value]) => {\n return entries.concat(typeof value == \"string\" ? [[name, value]] : []);\n }, []);\n }\n get confirmationMessage() {\n return this.formElement.getAttribute(\"data-turbo-confirm\");\n }\n get needsConfirmation() {\n return this.confirmationMessage !== null;\n }\n async start() {\n const { initialized, requesting } = FormSubmissionState;\n if (this.needsConfirmation) {\n const answer = FormSubmission.confirmMethod(this.confirmationMessage, this.formElement);\n if (!answer) {\n return;\n }\n }\n if (this.state == initialized) {\n this.state = requesting;\n return this.fetchRequest.perform();\n }\n }\n stop() {\n const { stopping, stopped } = FormSubmissionState;\n if (this.state != stopping && this.state != stopped) {\n this.state = stopping;\n this.fetchRequest.cancel();\n return true;\n }\n }\n prepareHeadersForRequest(headers, request) {\n if (!request.isIdempotent) {\n const token = getCookieValue(getMetaContent(\"csrf-param\")) || getMetaContent(\"csrf-token\");\n if (token) {\n headers[\"X-CSRF-Token\"] = token;\n }\n headers[\"Accept\"] = [StreamMessage.contentType, headers[\"Accept\"]].join(\", \");\n }\n }\n requestStarted(request) {\n var _a;\n this.state = FormSubmissionState.waiting;\n (_a = this.submitter) === null || _a === void 0 ? void 0 : _a.setAttribute(\"disabled\", \"\");\n dispatch(\"turbo:submit-start\", { target: this.formElement, detail: { formSubmission: this } });\n this.delegate.formSubmissionStarted(this);\n }\n requestPreventedHandlingResponse(request, response) {\n this.result = { success: response.succeeded, fetchResponse: response };\n }\n requestSucceededWithResponse(request, response) {\n if (response.clientError || response.serverError) {\n this.delegate.formSubmissionFailedWithResponse(this, response);\n }\n else if (this.requestMustRedirect(request) && responseSucceededWithoutRedirect(response)) {\n const error = new Error(\"Form responses must redirect to another location\");\n this.delegate.formSubmissionErrored(this, error);\n }\n else {\n this.state = FormSubmissionState.receiving;\n this.result = { success: true, fetchResponse: response };\n this.delegate.formSubmissionSucceededWithResponse(this, response);\n }\n }\n requestFailedWithResponse(request, response) {\n this.result = { success: false, fetchResponse: response };\n this.delegate.formSubmissionFailedWithResponse(this, response);\n }\n requestErrored(request, error) {\n this.result = { success: false, error };\n this.delegate.formSubmissionErrored(this, error);\n }\n requestFinished(request) {\n var _a;\n this.state = FormSubmissionState.stopped;\n (_a = this.submitter) === null || _a === void 0 ? void 0 : _a.removeAttribute(\"disabled\");\n dispatch(\"turbo:submit-end\", { target: this.formElement, detail: Object.assign({ formSubmission: this }, this.result) });\n this.delegate.formSubmissionFinished(this);\n }\n requestMustRedirect(request) {\n return !request.isIdempotent && this.mustRedirect;\n }\n}\nfunction buildFormData(formElement, submitter) {\n const formData = new FormData(formElement);\n const name = submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute(\"name\");\n const value = submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute(\"value\");\n if (name && value != null && formData.get(name) != value) {\n formData.append(name, value);\n }\n return formData;\n}\nfunction getCookieValue(cookieName) {\n if (cookieName != null) {\n const cookies = document.cookie ? document.cookie.split(\"; \") : [];\n const cookie = cookies.find((cookie) => cookie.startsWith(cookieName));\n if (cookie) {\n const value = cookie.split(\"=\").slice(1).join(\"=\");\n return value ? decodeURIComponent(value) : undefined;\n }\n }\n}\nfunction getMetaContent(name) {\n const element = document.querySelector(`meta[name=\"${name}\"]`);\n return element && element.content;\n}\nfunction responseSucceededWithoutRedirect(response) {\n return response.statusCode == 200 && !response.redirected;\n}\nfunction mergeFormDataEntries(url, entries) {\n const searchParams = new URLSearchParams;\n for (const [name, value] of entries) {\n if (value instanceof File)\n continue;\n searchParams.append(name, value);\n }\n url.search = searchParams.toString();\n return url;\n}\n\nclass Snapshot {\n constructor(element) {\n this.element = element;\n }\n get children() {\n return [...this.element.children];\n }\n hasAnchor(anchor) {\n return this.getElementForAnchor(anchor) != null;\n }\n getElementForAnchor(anchor) {\n return anchor ? this.element.querySelector(`[id='${anchor}'], a[name='${anchor}']`) : null;\n }\n get isConnected() {\n return this.element.isConnected;\n }\n get firstAutofocusableElement() {\n return this.element.querySelector(\"[autofocus]\");\n }\n get permanentElements() {\n return [...this.element.querySelectorAll(\"[id][data-turbo-permanent]\")];\n }\n getPermanentElementById(id) {\n return this.element.querySelector(`#${id}[data-turbo-permanent]`);\n }\n getPermanentElementMapForSnapshot(snapshot) {\n const permanentElementMap = {};\n for (const currentPermanentElement of this.permanentElements) {\n const { id } = currentPermanentElement;\n const newPermanentElement = snapshot.getPermanentElementById(id);\n if (newPermanentElement) {\n permanentElementMap[id] = [currentPermanentElement, newPermanentElement];\n }\n }\n return permanentElementMap;\n }\n}\n\nclass FormInterceptor {\n constructor(delegate, element) {\n this.submitBubbled = ((event) => {\n const form = event.target;\n if (!event.defaultPrevented && form instanceof HTMLFormElement && form.closest(\"turbo-frame, html\") == this.element) {\n const submitter = event.submitter || undefined;\n const method = (submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute(\"formmethod\")) || form.method;\n if (method != \"dialog\" && this.delegate.shouldInterceptFormSubmission(form, submitter)) {\n event.preventDefault();\n event.stopImmediatePropagation();\n this.delegate.formSubmissionIntercepted(form, submitter);\n }\n }\n });\n this.delegate = delegate;\n this.element = element;\n }\n start() {\n this.element.addEventListener(\"submit\", this.submitBubbled);\n }\n stop() {\n this.element.removeEventListener(\"submit\", this.submitBubbled);\n }\n}\n\nclass View {\n constructor(delegate, element) {\n this.resolveRenderPromise = (value) => { };\n this.resolveInterceptionPromise = (value) => { };\n this.delegate = delegate;\n this.element = element;\n }\n scrollToAnchor(anchor) {\n const element = this.snapshot.getElementForAnchor(anchor);\n if (element) {\n this.scrollToElement(element);\n this.focusElement(element);\n }\n else {\n this.scrollToPosition({ x: 0, y: 0 });\n }\n }\n scrollToAnchorFromLocation(location) {\n this.scrollToAnchor(getAnchor(location));\n }\n scrollToElement(element) {\n element.scrollIntoView();\n }\n focusElement(element) {\n if (element instanceof HTMLElement) {\n if (element.hasAttribute(\"tabindex\")) {\n element.focus();\n }\n else {\n element.setAttribute(\"tabindex\", \"-1\");\n element.focus();\n element.removeAttribute(\"tabindex\");\n }\n }\n }\n scrollToPosition({ x, y }) {\n this.scrollRoot.scrollTo(x, y);\n }\n scrollToTop() {\n this.scrollToPosition({ x: 0, y: 0 });\n }\n get scrollRoot() {\n return window;\n }\n async render(renderer) {\n const { isPreview, shouldRender, newSnapshot: snapshot } = renderer;\n if (shouldRender) {\n try {\n this.renderPromise = new Promise(resolve => this.resolveRenderPromise = resolve);\n this.renderer = renderer;\n this.prepareToRenderSnapshot(renderer);\n const renderInterception = new Promise(resolve => this.resolveInterceptionPromise = resolve);\n const immediateRender = this.delegate.allowsImmediateRender(snapshot, this.resolveInterceptionPromise);\n if (!immediateRender)\n await renderInterception;\n await this.renderSnapshot(renderer);\n this.delegate.viewRenderedSnapshot(snapshot, isPreview);\n this.finishRenderingSnapshot(renderer);\n }\n finally {\n delete this.renderer;\n this.resolveRenderPromise(undefined);\n delete this.renderPromise;\n }\n }\n else {\n this.invalidate();\n }\n }\n invalidate() {\n this.delegate.viewInvalidated();\n }\n prepareToRenderSnapshot(renderer) {\n this.markAsPreview(renderer.isPreview);\n renderer.prepareToRender();\n }\n markAsPreview(isPreview) {\n if (isPreview) {\n this.element.setAttribute(\"data-turbo-preview\", \"\");\n }\n else {\n this.element.removeAttribute(\"data-turbo-preview\");\n }\n }\n async renderSnapshot(renderer) {\n await renderer.render();\n }\n finishRenderingSnapshot(renderer) {\n renderer.finishRendering();\n }\n}\n\nclass FrameView extends View {\n invalidate() {\n this.element.innerHTML = \"\";\n }\n get snapshot() {\n return new Snapshot(this.element);\n }\n}\n\nclass LinkInterceptor {\n constructor(delegate, element) {\n this.clickBubbled = (event) => {\n if (this.respondsToEventTarget(event.target)) {\n this.clickEvent = event;\n }\n else {\n delete this.clickEvent;\n }\n };\n this.linkClicked = ((event) => {\n if (this.clickEvent && this.respondsToEventTarget(event.target) && event.target instanceof Element) {\n if (this.delegate.shouldInterceptLinkClick(event.target, event.detail.url)) {\n this.clickEvent.preventDefault();\n event.preventDefault();\n this.delegate.linkClickIntercepted(event.target, event.detail.url);\n }\n }\n delete this.clickEvent;\n });\n this.willVisit = () => {\n delete this.clickEvent;\n };\n this.delegate = delegate;\n this.element = element;\n }\n start() {\n this.element.addEventListener(\"click\", this.clickBubbled);\n document.addEventListener(\"turbo:click\", this.linkClicked);\n document.addEventListener(\"turbo:before-visit\", this.willVisit);\n }\n stop() {\n this.element.removeEventListener(\"click\", this.clickBubbled);\n document.removeEventListener(\"turbo:click\", this.linkClicked);\n document.removeEventListener(\"turbo:before-visit\", this.willVisit);\n }\n respondsToEventTarget(target) {\n const element = target instanceof Element\n ? target\n : target instanceof Node\n ? target.parentElement\n : null;\n return element && element.closest(\"turbo-frame, html\") == this.element;\n }\n}\n\nclass Bardo {\n constructor(permanentElementMap) {\n this.permanentElementMap = permanentElementMap;\n }\n static preservingPermanentElements(permanentElementMap, callback) {\n const bardo = new this(permanentElementMap);\n bardo.enter();\n callback();\n bardo.leave();\n }\n enter() {\n for (const id in this.permanentElementMap) {\n const [, newPermanentElement] = this.permanentElementMap[id];\n this.replaceNewPermanentElementWithPlaceholder(newPermanentElement);\n }\n }\n leave() {\n for (const id in this.permanentElementMap) {\n const [currentPermanentElement] = this.permanentElementMap[id];\n this.replaceCurrentPermanentElementWithClone(currentPermanentElement);\n this.replacePlaceholderWithPermanentElement(currentPermanentElement);\n }\n }\n replaceNewPermanentElementWithPlaceholder(permanentElement) {\n const placeholder = createPlaceholderForPermanentElement(permanentElement);\n permanentElement.replaceWith(placeholder);\n }\n replaceCurrentPermanentElementWithClone(permanentElement) {\n const clone = permanentElement.cloneNode(true);\n permanentElement.replaceWith(clone);\n }\n replacePlaceholderWithPermanentElement(permanentElement) {\n const placeholder = this.getPlaceholderById(permanentElement.id);\n placeholder === null || placeholder === void 0 ? void 0 : placeholder.replaceWith(permanentElement);\n }\n getPlaceholderById(id) {\n return this.placeholders.find(element => element.content == id);\n }\n get placeholders() {\n return [...document.querySelectorAll(\"meta[name=turbo-permanent-placeholder][content]\")];\n }\n}\nfunction createPlaceholderForPermanentElement(permanentElement) {\n const element = document.createElement(\"meta\");\n element.setAttribute(\"name\", \"turbo-permanent-placeholder\");\n element.setAttribute(\"content\", permanentElement.id);\n return element;\n}\n\nclass Renderer {\n constructor(currentSnapshot, newSnapshot, isPreview, willRender = true) {\n this.currentSnapshot = currentSnapshot;\n this.newSnapshot = newSnapshot;\n this.isPreview = isPreview;\n this.willRender = willRender;\n this.promise = new Promise((resolve, reject) => this.resolvingFunctions = { resolve, reject });\n }\n get shouldRender() {\n return true;\n }\n prepareToRender() {\n return;\n }\n finishRendering() {\n if (this.resolvingFunctions) {\n this.resolvingFunctions.resolve();\n delete this.resolvingFunctions;\n }\n }\n createScriptElement(element) {\n if (element.getAttribute(\"data-turbo-eval\") == \"false\") {\n return element;\n }\n else {\n const createdScriptElement = document.createElement(\"script\");\n if (this.cspNonce) {\n createdScriptElement.nonce = this.cspNonce;\n }\n createdScriptElement.textContent = element.textContent;\n createdScriptElement.async = false;\n copyElementAttributes(createdScriptElement, element);\n return createdScriptElement;\n }\n }\n preservingPermanentElements(callback) {\n Bardo.preservingPermanentElements(this.permanentElementMap, callback);\n }\n focusFirstAutofocusableElement() {\n const element = this.connectedSnapshot.firstAutofocusableElement;\n if (elementIsFocusable(element)) {\n element.focus();\n }\n }\n get connectedSnapshot() {\n return this.newSnapshot.isConnected ? this.newSnapshot : this.currentSnapshot;\n }\n get currentElement() {\n return this.currentSnapshot.element;\n }\n get newElement() {\n return this.newSnapshot.element;\n }\n get permanentElementMap() {\n return this.currentSnapshot.getPermanentElementMapForSnapshot(this.newSnapshot);\n }\n get cspNonce() {\n var _a;\n return (_a = document.head.querySelector('meta[name=\"csp-nonce\"]')) === null || _a === void 0 ? void 0 : _a.getAttribute(\"content\");\n }\n}\nfunction copyElementAttributes(destinationElement, sourceElement) {\n for (const { name, value } of [...sourceElement.attributes]) {\n destinationElement.setAttribute(name, value);\n }\n}\nfunction elementIsFocusable(element) {\n return element && typeof element.focus == \"function\";\n}\n\nclass FrameRenderer extends Renderer {\n get shouldRender() {\n return true;\n }\n async render() {\n await nextAnimationFrame();\n this.preservingPermanentElements(() => {\n this.loadFrameElement();\n });\n this.scrollFrameIntoView();\n await nextAnimationFrame();\n this.focusFirstAutofocusableElement();\n await nextAnimationFrame();\n this.activateScriptElements();\n }\n loadFrameElement() {\n var _a;\n const destinationRange = document.createRange();\n destinationRange.selectNodeContents(this.currentElement);\n destinationRange.deleteContents();\n const frameElement = this.newElement;\n const sourceRange = (_a = frameElement.ownerDocument) === null || _a === void 0 ? void 0 : _a.createRange();\n if (sourceRange) {\n sourceRange.selectNodeContents(frameElement);\n this.currentElement.appendChild(sourceRange.extractContents());\n }\n }\n scrollFrameIntoView() {\n if (this.currentElement.autoscroll || this.newElement.autoscroll) {\n const element = this.currentElement.firstElementChild;\n const block = readScrollLogicalPosition(this.currentElement.getAttribute(\"data-autoscroll-block\"), \"end\");\n if (element) {\n element.scrollIntoView({ block });\n return true;\n }\n }\n return false;\n }\n activateScriptElements() {\n for (const inertScriptElement of this.newScriptElements) {\n const activatedScriptElement = this.createScriptElement(inertScriptElement);\n inertScriptElement.replaceWith(activatedScriptElement);\n }\n }\n get newScriptElements() {\n return this.currentElement.querySelectorAll(\"script\");\n }\n}\nfunction readScrollLogicalPosition(value, defaultValue) {\n if (value == \"end\" || value == \"start\" || value == \"center\" || value == \"nearest\") {\n return value;\n }\n else {\n return defaultValue;\n }\n}\n\nclass ProgressBar {\n constructor() {\n this.hiding = false;\n this.value = 0;\n this.visible = false;\n this.trickle = () => {\n this.setValue(this.value + Math.random() / 100);\n };\n this.stylesheetElement = this.createStylesheetElement();\n this.progressElement = this.createProgressElement();\n this.installStylesheetElement();\n this.setValue(0);\n }\n static get defaultCSS() {\n return unindent `\n .turbo-progress-bar {\n position: fixed;\n display: block;\n top: 0;\n left: 0;\n height: 3px;\n background: #0076ff;\n z-index: 9999;\n transition:\n width ${ProgressBar.animationDuration}ms ease-out,\n opacity ${ProgressBar.animationDuration / 2}ms ${ProgressBar.animationDuration / 2}ms ease-in;\n transform: translate3d(0, 0, 0);\n }\n `;\n }\n show() {\n if (!this.visible) {\n this.visible = true;\n this.installProgressElement();\n this.startTrickling();\n }\n }\n hide() {\n if (this.visible && !this.hiding) {\n this.hiding = true;\n this.fadeProgressElement(() => {\n this.uninstallProgressElement();\n this.stopTrickling();\n this.visible = false;\n this.hiding = false;\n });\n }\n }\n setValue(value) {\n this.value = value;\n this.refresh();\n }\n installStylesheetElement() {\n document.head.insertBefore(this.stylesheetElement, document.head.firstChild);\n }\n installProgressElement() {\n this.progressElement.style.width = \"0\";\n this.progressElement.style.opacity = \"1\";\n document.documentElement.insertBefore(this.progressElement, document.body);\n this.refresh();\n }\n fadeProgressElement(callback) {\n this.progressElement.style.opacity = \"0\";\n setTimeout(callback, ProgressBar.animationDuration * 1.5);\n }\n uninstallProgressElement() {\n if (this.progressElement.parentNode) {\n document.documentElement.removeChild(this.progressElement);\n }\n }\n startTrickling() {\n if (!this.trickleInterval) {\n this.trickleInterval = window.setInterval(this.trickle, ProgressBar.animationDuration);\n }\n }\n stopTrickling() {\n window.clearInterval(this.trickleInterval);\n delete this.trickleInterval;\n }\n refresh() {\n requestAnimationFrame(() => {\n this.progressElement.style.width = `${10 + (this.value * 90)}%`;\n });\n }\n createStylesheetElement() {\n const element = document.createElement(\"style\");\n element.type = \"text/css\";\n element.textContent = ProgressBar.defaultCSS;\n return element;\n }\n createProgressElement() {\n const element = document.createElement(\"div\");\n element.className = \"turbo-progress-bar\";\n return element;\n }\n}\nProgressBar.animationDuration = 300;\n\nclass HeadSnapshot extends Snapshot {\n constructor() {\n super(...arguments);\n this.detailsByOuterHTML = this.children\n .filter((element) => !elementIsNoscript(element))\n .map((element) => elementWithoutNonce(element))\n .reduce((result, element) => {\n const { outerHTML } = element;\n const details = outerHTML in result\n ? result[outerHTML]\n : {\n type: elementType(element),\n tracked: elementIsTracked(element),\n elements: []\n };\n return Object.assign(Object.assign({}, result), { [outerHTML]: Object.assign(Object.assign({}, details), { elements: [...details.elements, element] }) });\n }, {});\n }\n get trackedElementSignature() {\n return Object.keys(this.detailsByOuterHTML)\n .filter(outerHTML => this.detailsByOuterHTML[outerHTML].tracked)\n .join(\"\");\n }\n getScriptElementsNotInSnapshot(snapshot) {\n return this.getElementsMatchingTypeNotInSnapshot(\"script\", snapshot);\n }\n getStylesheetElementsNotInSnapshot(snapshot) {\n return this.getElementsMatchingTypeNotInSnapshot(\"stylesheet\", snapshot);\n }\n getElementsMatchingTypeNotInSnapshot(matchedType, snapshot) {\n return Object.keys(this.detailsByOuterHTML)\n .filter(outerHTML => !(outerHTML in snapshot.detailsByOuterHTML))\n .map(outerHTML => this.detailsByOuterHTML[outerHTML])\n .filter(({ type }) => type == matchedType)\n .map(({ elements: [element] }) => element);\n }\n get provisionalElements() {\n return Object.keys(this.detailsByOuterHTML).reduce((result, outerHTML) => {\n const { type, tracked, elements } = this.detailsByOuterHTML[outerHTML];\n if (type == null && !tracked) {\n return [...result, ...elements];\n }\n else if (elements.length > 1) {\n return [...result, ...elements.slice(1)];\n }\n else {\n return result;\n }\n }, []);\n }\n getMetaValue(name) {\n const element = this.findMetaElementByName(name);\n return element\n ? element.getAttribute(\"content\")\n : null;\n }\n findMetaElementByName(name) {\n return Object.keys(this.detailsByOuterHTML).reduce((result, outerHTML) => {\n const { elements: [element] } = this.detailsByOuterHTML[outerHTML];\n return elementIsMetaElementWithName(element, name) ? element : result;\n }, undefined);\n }\n}\nfunction elementType(element) {\n if (elementIsScript(element)) {\n return \"script\";\n }\n else if (elementIsStylesheet(element)) {\n return \"stylesheet\";\n }\n}\nfunction elementIsTracked(element) {\n return element.getAttribute(\"data-turbo-track\") == \"reload\";\n}\nfunction elementIsScript(element) {\n const tagName = element.tagName.toLowerCase();\n return tagName == \"script\";\n}\nfunction elementIsNoscript(element) {\n const tagName = element.tagName.toLowerCase();\n return tagName == \"noscript\";\n}\nfunction elementIsStylesheet(element) {\n const tagName = element.tagName.toLowerCase();\n return tagName == \"style\" || (tagName == \"link\" && element.getAttribute(\"rel\") == \"stylesheet\");\n}\nfunction elementIsMetaElementWithName(element, name) {\n const tagName = element.tagName.toLowerCase();\n return tagName == \"meta\" && element.getAttribute(\"name\") == name;\n}\nfunction elementWithoutNonce(element) {\n if (element.hasAttribute(\"nonce\")) {\n element.setAttribute(\"nonce\", \"\");\n }\n return element;\n}\n\nclass PageSnapshot extends Snapshot {\n constructor(element, headSnapshot) {\n super(element);\n this.headSnapshot = headSnapshot;\n }\n static fromHTMLString(html = \"\") {\n return this.fromDocument(parseHTMLDocument(html));\n }\n static fromElement(element) {\n return this.fromDocument(element.ownerDocument);\n }\n static fromDocument({ head, body }) {\n return new this(body, new HeadSnapshot(head));\n }\n clone() {\n return new PageSnapshot(this.element.cloneNode(true), this.headSnapshot);\n }\n get headElement() {\n return this.headSnapshot.element;\n }\n get rootLocation() {\n var _a;\n const root = (_a = this.getSetting(\"root\")) !== null && _a !== void 0 ? _a : \"/\";\n return expandURL(root);\n }\n get cacheControlValue() {\n return this.getSetting(\"cache-control\");\n }\n get isPreviewable() {\n return this.cacheControlValue != \"no-preview\";\n }\n get isCacheable() {\n return this.cacheControlValue != \"no-cache\";\n }\n get isVisitable() {\n return this.getSetting(\"visit-control\") != \"reload\";\n }\n getSetting(name) {\n return this.headSnapshot.getMetaValue(`turbo-${name}`);\n }\n}\n\nvar TimingMetric;\n(function (TimingMetric) {\n TimingMetric[\"visitStart\"] = \"visitStart\";\n TimingMetric[\"requestStart\"] = \"requestStart\";\n TimingMetric[\"requestEnd\"] = \"requestEnd\";\n TimingMetric[\"visitEnd\"] = \"visitEnd\";\n})(TimingMetric || (TimingMetric = {}));\nvar VisitState;\n(function (VisitState) {\n VisitState[\"initialized\"] = \"initialized\";\n VisitState[\"started\"] = \"started\";\n VisitState[\"canceled\"] = \"canceled\";\n VisitState[\"failed\"] = \"failed\";\n VisitState[\"completed\"] = \"completed\";\n})(VisitState || (VisitState = {}));\nconst defaultOptions = {\n action: \"advance\",\n historyChanged: false,\n visitCachedSnapshot: () => { },\n willRender: true,\n};\nvar SystemStatusCode;\n(function (SystemStatusCode) {\n SystemStatusCode[SystemStatusCode[\"networkFailure\"] = 0] = \"networkFailure\";\n SystemStatusCode[SystemStatusCode[\"timeoutFailure\"] = -1] = \"timeoutFailure\";\n SystemStatusCode[SystemStatusCode[\"contentTypeMismatch\"] = -2] = \"contentTypeMismatch\";\n})(SystemStatusCode || (SystemStatusCode = {}));\nclass Visit {\n constructor(delegate, location, restorationIdentifier, options = {}) {\n this.identifier = uuid();\n this.timingMetrics = {};\n this.followedRedirect = false;\n this.historyChanged = false;\n this.scrolled = false;\n this.snapshotCached = false;\n this.state = VisitState.initialized;\n this.delegate = delegate;\n this.location = location;\n this.restorationIdentifier = restorationIdentifier || uuid();\n const { action, historyChanged, referrer, snapshotHTML, response, visitCachedSnapshot, willRender } = Object.assign(Object.assign({}, defaultOptions), options);\n this.action = action;\n this.historyChanged = historyChanged;\n this.referrer = referrer;\n this.snapshotHTML = snapshotHTML;\n this.response = response;\n this.isSamePage = this.delegate.locationWithActionIsSamePage(this.location, this.action);\n this.visitCachedSnapshot = visitCachedSnapshot;\n this.willRender = willRender;\n this.scrolled = !willRender;\n }\n get adapter() {\n return this.delegate.adapter;\n }\n get view() {\n return this.delegate.view;\n }\n get history() {\n return this.delegate.history;\n }\n get restorationData() {\n return this.history.getRestorationDataForIdentifier(this.restorationIdentifier);\n }\n get silent() {\n return this.isSamePage;\n }\n start() {\n if (this.state == VisitState.initialized) {\n this.recordTimingMetric(TimingMetric.visitStart);\n this.state = VisitState.started;\n this.adapter.visitStarted(this);\n this.delegate.visitStarted(this);\n }\n }\n cancel() {\n if (this.state == VisitState.started) {\n if (this.request) {\n this.request.cancel();\n }\n this.cancelRender();\n this.state = VisitState.canceled;\n }\n }\n complete() {\n if (this.state == VisitState.started) {\n this.recordTimingMetric(TimingMetric.visitEnd);\n this.state = VisitState.completed;\n this.adapter.visitCompleted(this);\n this.delegate.visitCompleted(this);\n this.followRedirect();\n }\n }\n fail() {\n if (this.state == VisitState.started) {\n this.state = VisitState.failed;\n this.adapter.visitFailed(this);\n }\n }\n changeHistory() {\n var _a;\n if (!this.historyChanged) {\n const actionForHistory = this.location.href === ((_a = this.referrer) === null || _a === void 0 ? void 0 : _a.href) ? \"replace\" : this.action;\n const method = this.getHistoryMethodForAction(actionForHistory);\n this.history.update(method, this.location, this.restorationIdentifier);\n this.historyChanged = true;\n }\n }\n issueRequest() {\n if (this.hasPreloadedResponse()) {\n this.simulateRequest();\n }\n else if (this.shouldIssueRequest() && !this.request) {\n this.request = new FetchRequest(this, FetchMethod.get, this.location);\n this.request.perform();\n }\n }\n simulateRequest() {\n if (this.response) {\n this.startRequest();\n this.recordResponse();\n this.finishRequest();\n }\n }\n startRequest() {\n this.recordTimingMetric(TimingMetric.requestStart);\n this.adapter.visitRequestStarted(this);\n }\n recordResponse(response = this.response) {\n this.response = response;\n if (response) {\n const { statusCode } = response;\n if (isSuccessful(statusCode)) {\n this.adapter.visitRequestCompleted(this);\n }\n else {\n this.adapter.visitRequestFailedWithStatusCode(this, statusCode);\n }\n }\n }\n finishRequest() {\n this.recordTimingMetric(TimingMetric.requestEnd);\n this.adapter.visitRequestFinished(this);\n }\n loadResponse() {\n if (this.response) {\n const { statusCode, responseHTML } = this.response;\n this.render(async () => {\n this.cacheSnapshot();\n if (this.view.renderPromise)\n await this.view.renderPromise;\n if (isSuccessful(statusCode) && responseHTML != null) {\n await this.view.renderPage(PageSnapshot.fromHTMLString(responseHTML), false, this.willRender);\n this.adapter.visitRendered(this);\n this.complete();\n }\n else {\n await this.view.renderError(PageSnapshot.fromHTMLString(responseHTML));\n this.adapter.visitRendered(this);\n this.fail();\n }\n });\n }\n }\n getCachedSnapshot() {\n const snapshot = this.view.getCachedSnapshotForLocation(this.location) || this.getPreloadedSnapshot();\n if (snapshot && (!getAnchor(this.location) || snapshot.hasAnchor(getAnchor(this.location)))) {\n if (this.action == \"restore\" || snapshot.isPreviewable) {\n return snapshot;\n }\n }\n }\n getPreloadedSnapshot() {\n if (this.snapshotHTML) {\n return PageSnapshot.fromHTMLString(this.snapshotHTML);\n }\n }\n hasCachedSnapshot() {\n return this.getCachedSnapshot() != null;\n }\n loadCachedSnapshot() {\n const snapshot = this.getCachedSnapshot();\n if (snapshot) {\n const isPreview = this.shouldIssueRequest();\n this.render(async () => {\n this.cacheSnapshot();\n if (this.isSamePage) {\n this.adapter.visitRendered(this);\n }\n else {\n if (this.view.renderPromise)\n await this.view.renderPromise;\n await this.view.renderPage(snapshot, isPreview, this.willRender);\n this.adapter.visitRendered(this);\n if (!isPreview) {\n this.complete();\n }\n }\n });\n }\n }\n followRedirect() {\n var _a;\n if (this.redirectedToLocation && !this.followedRedirect && ((_a = this.response) === null || _a === void 0 ? void 0 : _a.redirected)) {\n this.adapter.visitProposedToLocation(this.redirectedToLocation, {\n action: 'replace',\n response: this.response\n });\n this.followedRedirect = true;\n }\n }\n goToSamePageAnchor() {\n if (this.isSamePage) {\n this.render(async () => {\n this.cacheSnapshot();\n this.adapter.visitRendered(this);\n });\n }\n }\n requestStarted() {\n this.startRequest();\n }\n requestPreventedHandlingResponse(request, response) {\n }\n async requestSucceededWithResponse(request, response) {\n const responseHTML = await response.responseHTML;\n const { redirected, statusCode } = response;\n if (responseHTML == undefined) {\n this.recordResponse({ statusCode: SystemStatusCode.contentTypeMismatch, redirected });\n }\n else {\n this.redirectedToLocation = response.redirected ? response.location : undefined;\n this.recordResponse({ statusCode: statusCode, responseHTML, redirected });\n }\n }\n async requestFailedWithResponse(request, response) {\n const responseHTML = await response.responseHTML;\n const { redirected, statusCode } = response;\n if (responseHTML == undefined) {\n this.recordResponse({ statusCode: SystemStatusCode.contentTypeMismatch, redirected });\n }\n else {\n this.recordResponse({ statusCode: statusCode, responseHTML, redirected });\n }\n }\n requestErrored(request, error) {\n this.recordResponse({ statusCode: SystemStatusCode.networkFailure, redirected: false });\n }\n requestFinished() {\n this.finishRequest();\n }\n performScroll() {\n if (!this.scrolled) {\n if (this.action == \"restore\") {\n this.scrollToRestoredPosition() || this.scrollToAnchor() || this.view.scrollToTop();\n }\n else {\n this.scrollToAnchor() || this.view.scrollToTop();\n }\n if (this.isSamePage) {\n this.delegate.visitScrolledToSamePageLocation(this.view.lastRenderedLocation, this.location);\n }\n this.scrolled = true;\n }\n }\n scrollToRestoredPosition() {\n const { scrollPosition } = this.restorationData;\n if (scrollPosition) {\n this.view.scrollToPosition(scrollPosition);\n return true;\n }\n }\n scrollToAnchor() {\n const anchor = getAnchor(this.location);\n if (anchor != null) {\n this.view.scrollToAnchor(anchor);\n return true;\n }\n }\n recordTimingMetric(metric) {\n this.timingMetrics[metric] = new Date().getTime();\n }\n getTimingMetrics() {\n return Object.assign({}, this.timingMetrics);\n }\n getHistoryMethodForAction(action) {\n switch (action) {\n case \"replace\": return history.replaceState;\n case \"advance\":\n case \"restore\": return history.pushState;\n }\n }\n hasPreloadedResponse() {\n return typeof this.response == \"object\";\n }\n shouldIssueRequest() {\n if (this.isSamePage) {\n return false;\n }\n else if (this.action == \"restore\") {\n return !this.hasCachedSnapshot();\n }\n else {\n return this.willRender;\n }\n }\n cacheSnapshot() {\n if (!this.snapshotCached) {\n this.view.cacheSnapshot().then(snapshot => snapshot && this.visitCachedSnapshot(snapshot));\n this.snapshotCached = true;\n }\n }\n async render(callback) {\n this.cancelRender();\n await new Promise(resolve => {\n this.frame = requestAnimationFrame(() => resolve());\n });\n await callback();\n delete this.frame;\n this.performScroll();\n }\n cancelRender() {\n if (this.frame) {\n cancelAnimationFrame(this.frame);\n delete this.frame;\n }\n }\n}\nfunction isSuccessful(statusCode) {\n return statusCode >= 200 && statusCode < 300;\n}\n\nclass BrowserAdapter {\n constructor(session) {\n this.progressBar = new ProgressBar;\n this.showProgressBar = () => {\n this.progressBar.show();\n };\n this.session = session;\n }\n visitProposedToLocation(location, options) {\n this.navigator.startVisit(location, uuid(), options);\n }\n visitStarted(visit) {\n visit.loadCachedSnapshot();\n visit.issueRequest();\n visit.changeHistory();\n visit.goToSamePageAnchor();\n }\n visitRequestStarted(visit) {\n this.progressBar.setValue(0);\n if (visit.hasCachedSnapshot() || visit.action != \"restore\") {\n this.showVisitProgressBarAfterDelay();\n }\n else {\n this.showProgressBar();\n }\n }\n visitRequestCompleted(visit) {\n visit.loadResponse();\n }\n visitRequestFailedWithStatusCode(visit, statusCode) {\n switch (statusCode) {\n case SystemStatusCode.networkFailure:\n case SystemStatusCode.timeoutFailure:\n case SystemStatusCode.contentTypeMismatch:\n return this.reload();\n default:\n return visit.loadResponse();\n }\n }\n visitRequestFinished(visit) {\n this.progressBar.setValue(1);\n this.hideVisitProgressBar();\n }\n visitCompleted(visit) {\n }\n pageInvalidated() {\n this.reload();\n }\n visitFailed(visit) {\n }\n visitRendered(visit) {\n }\n formSubmissionStarted(formSubmission) {\n this.progressBar.setValue(0);\n this.showFormProgressBarAfterDelay();\n }\n formSubmissionFinished(formSubmission) {\n this.progressBar.setValue(1);\n this.hideFormProgressBar();\n }\n showVisitProgressBarAfterDelay() {\n this.visitProgressBarTimeout = window.setTimeout(this.showProgressBar, this.session.progressBarDelay);\n }\n hideVisitProgressBar() {\n this.progressBar.hide();\n if (this.visitProgressBarTimeout != null) {\n window.clearTimeout(this.visitProgressBarTimeout);\n delete this.visitProgressBarTimeout;\n }\n }\n showFormProgressBarAfterDelay() {\n if (this.formProgressBarTimeout == null) {\n this.formProgressBarTimeout = window.setTimeout(this.showProgressBar, this.session.progressBarDelay);\n }\n }\n hideFormProgressBar() {\n this.progressBar.hide();\n if (this.formProgressBarTimeout != null) {\n window.clearTimeout(this.formProgressBarTimeout);\n delete this.formProgressBarTimeout;\n }\n }\n reload() {\n window.location.reload();\n }\n get navigator() {\n return this.session.navigator;\n }\n}\n\nclass CacheObserver {\n constructor() {\n this.started = false;\n }\n start() {\n if (!this.started) {\n this.started = true;\n addEventListener(\"turbo:before-cache\", this.removeStaleElements, false);\n }\n }\n stop() {\n if (this.started) {\n this.started = false;\n removeEventListener(\"turbo:before-cache\", this.removeStaleElements, false);\n }\n }\n removeStaleElements() {\n const staleElements = [...document.querySelectorAll('[data-turbo-cache=\"false\"]')];\n for (const element of staleElements) {\n element.remove();\n }\n }\n}\n\nclass FormSubmitObserver {\n constructor(delegate) {\n this.started = false;\n this.submitCaptured = () => {\n removeEventListener(\"submit\", this.submitBubbled, false);\n addEventListener(\"submit\", this.submitBubbled, false);\n };\n this.submitBubbled = ((event) => {\n if (!event.defaultPrevented) {\n const form = event.target instanceof HTMLFormElement ? event.target : undefined;\n const submitter = event.submitter || undefined;\n if (form) {\n const method = (submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute(\"formmethod\")) || form.getAttribute(\"method\");\n if (method != \"dialog\" && this.delegate.willSubmitForm(form, submitter)) {\n event.preventDefault();\n this.delegate.formSubmitted(form, submitter);\n }\n }\n }\n });\n this.delegate = delegate;\n }\n start() {\n if (!this.started) {\n addEventListener(\"submit\", this.submitCaptured, true);\n this.started = true;\n }\n }\n stop() {\n if (this.started) {\n removeEventListener(\"submit\", this.submitCaptured, true);\n this.started = false;\n }\n }\n}\n\nclass FrameRedirector {\n constructor(element) {\n this.element = element;\n this.linkInterceptor = new LinkInterceptor(this, element);\n this.formInterceptor = new FormInterceptor(this, element);\n }\n start() {\n this.linkInterceptor.start();\n this.formInterceptor.start();\n }\n stop() {\n this.linkInterceptor.stop();\n this.formInterceptor.stop();\n }\n shouldInterceptLinkClick(element, url) {\n return this.shouldRedirect(element);\n }\n linkClickIntercepted(element, url) {\n const frame = this.findFrameElement(element);\n if (frame) {\n frame.delegate.linkClickIntercepted(element, url);\n }\n }\n shouldInterceptFormSubmission(element, submitter) {\n return this.shouldSubmit(element, submitter);\n }\n formSubmissionIntercepted(element, submitter) {\n const frame = this.findFrameElement(element, submitter);\n if (frame) {\n frame.removeAttribute(\"reloadable\");\n frame.delegate.formSubmissionIntercepted(element, submitter);\n }\n }\n shouldSubmit(form, submitter) {\n var _a;\n const action = getAction(form, submitter);\n const meta = this.element.ownerDocument.querySelector(`meta[name=\"turbo-root\"]`);\n const rootLocation = expandURL((_a = meta === null || meta === void 0 ? void 0 : meta.content) !== null && _a !== void 0 ? _a : \"/\");\n return this.shouldRedirect(form, submitter) && locationIsVisitable(action, rootLocation);\n }\n shouldRedirect(element, submitter) {\n const frame = this.findFrameElement(element, submitter);\n return frame ? frame != element.closest(\"turbo-frame\") : false;\n }\n findFrameElement(element, submitter) {\n const id = (submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute(\"data-turbo-frame\")) || element.getAttribute(\"data-turbo-frame\");\n if (id && id != \"_top\") {\n const frame = this.element.querySelector(`#${id}:not([disabled])`);\n if (frame instanceof FrameElement) {\n return frame;\n }\n }\n }\n}\n\nclass History {\n constructor(delegate) {\n this.restorationIdentifier = uuid();\n this.restorationData = {};\n this.started = false;\n this.pageLoaded = false;\n this.onPopState = (event) => {\n if (this.shouldHandlePopState()) {\n const { turbo } = event.state || {};\n if (turbo) {\n this.location = new URL(window.location.href);\n const { restorationIdentifier } = turbo;\n this.restorationIdentifier = restorationIdentifier;\n this.delegate.historyPoppedToLocationWithRestorationIdentifier(this.location, restorationIdentifier);\n }\n }\n };\n this.onPageLoad = async (event) => {\n await nextMicrotask();\n this.pageLoaded = true;\n };\n this.delegate = delegate;\n }\n start() {\n if (!this.started) {\n addEventListener(\"popstate\", this.onPopState, false);\n addEventListener(\"load\", this.onPageLoad, false);\n this.started = true;\n this.replace(new URL(window.location.href));\n }\n }\n stop() {\n if (this.started) {\n removeEventListener(\"popstate\", this.onPopState, false);\n removeEventListener(\"load\", this.onPageLoad, false);\n this.started = false;\n }\n }\n push(location, restorationIdentifier) {\n this.update(history.pushState, location, restorationIdentifier);\n }\n replace(location, restorationIdentifier) {\n this.update(history.replaceState, location, restorationIdentifier);\n }\n update(method, location, restorationIdentifier = uuid()) {\n const state = { turbo: { restorationIdentifier } };\n method.call(history, state, \"\", location.href);\n this.location = location;\n this.restorationIdentifier = restorationIdentifier;\n }\n getRestorationDataForIdentifier(restorationIdentifier) {\n return this.restorationData[restorationIdentifier] || {};\n }\n updateRestorationData(additionalData) {\n const { restorationIdentifier } = this;\n const restorationData = this.restorationData[restorationIdentifier];\n this.restorationData[restorationIdentifier] = Object.assign(Object.assign({}, restorationData), additionalData);\n }\n assumeControlOfScrollRestoration() {\n var _a;\n if (!this.previousScrollRestoration) {\n this.previousScrollRestoration = (_a = history.scrollRestoration) !== null && _a !== void 0 ? _a : \"auto\";\n history.scrollRestoration = \"manual\";\n }\n }\n relinquishControlOfScrollRestoration() {\n if (this.previousScrollRestoration) {\n history.scrollRestoration = this.previousScrollRestoration;\n delete this.previousScrollRestoration;\n }\n }\n shouldHandlePopState() {\n return this.pageIsLoaded();\n }\n pageIsLoaded() {\n return this.pageLoaded || document.readyState == \"complete\";\n }\n}\n\nclass LinkClickObserver {\n constructor(delegate) {\n this.started = false;\n this.clickCaptured = () => {\n removeEventListener(\"click\", this.clickBubbled, false);\n addEventListener(\"click\", this.clickBubbled, false);\n };\n this.clickBubbled = (event) => {\n if (this.clickEventIsSignificant(event)) {\n const target = (event.composedPath && event.composedPath()[0]) || event.target;\n const link = this.findLinkFromClickTarget(target);\n if (link) {\n const location = this.getLocationForLink(link);\n if (this.delegate.willFollowLinkToLocation(link, location)) {\n event.preventDefault();\n this.delegate.followedLinkToLocation(link, location);\n }\n }\n }\n };\n this.delegate = delegate;\n }\n start() {\n if (!this.started) {\n addEventListener(\"click\", this.clickCaptured, true);\n this.started = true;\n }\n }\n stop() {\n if (this.started) {\n removeEventListener(\"click\", this.clickCaptured, true);\n this.started = false;\n }\n }\n clickEventIsSignificant(event) {\n return !((event.target && event.target.isContentEditable)\n || event.defaultPrevented\n || event.which > 1\n || event.altKey\n || event.ctrlKey\n || event.metaKey\n || event.shiftKey);\n }\n findLinkFromClickTarget(target) {\n if (target instanceof Element) {\n return target.closest(\"a[href]:not([target^=_]):not([download])\");\n }\n }\n getLocationForLink(link) {\n return expandURL(link.getAttribute(\"href\") || \"\");\n }\n}\n\nfunction isAction(action) {\n return action == \"advance\" || action == \"replace\" || action == \"restore\";\n}\n\nclass Navigator {\n constructor(delegate) {\n this.delegate = delegate;\n }\n proposeVisit(location, options = {}) {\n if (this.delegate.allowsVisitingLocationWithAction(location, options.action)) {\n if (locationIsVisitable(location, this.view.snapshot.rootLocation)) {\n this.delegate.visitProposedToLocation(location, options);\n }\n else {\n window.location.href = location.toString();\n }\n }\n }\n startVisit(locatable, restorationIdentifier, options = {}) {\n this.stop();\n this.currentVisit = new Visit(this, expandURL(locatable), restorationIdentifier, Object.assign({ referrer: this.location }, options));\n this.currentVisit.start();\n }\n submitForm(form, submitter) {\n this.stop();\n this.formSubmission = new FormSubmission(this, form, submitter, true);\n this.formSubmission.start();\n }\n stop() {\n if (this.formSubmission) {\n this.formSubmission.stop();\n delete this.formSubmission;\n }\n if (this.currentVisit) {\n this.currentVisit.cancel();\n delete this.currentVisit;\n }\n }\n get adapter() {\n return this.delegate.adapter;\n }\n get view() {\n return this.delegate.view;\n }\n get history() {\n return this.delegate.history;\n }\n formSubmissionStarted(formSubmission) {\n if (typeof this.adapter.formSubmissionStarted === 'function') {\n this.adapter.formSubmissionStarted(formSubmission);\n }\n }\n async formSubmissionSucceededWithResponse(formSubmission, fetchResponse) {\n if (formSubmission == this.formSubmission) {\n const responseHTML = await fetchResponse.responseHTML;\n if (responseHTML) {\n if (formSubmission.method != FetchMethod.get) {\n this.view.clearSnapshotCache();\n }\n const { statusCode, redirected } = fetchResponse;\n const action = this.getActionForFormSubmission(formSubmission);\n const visitOptions = { action, response: { statusCode, responseHTML, redirected } };\n this.proposeVisit(fetchResponse.location, visitOptions);\n }\n }\n }\n async formSubmissionFailedWithResponse(formSubmission, fetchResponse) {\n const responseHTML = await fetchResponse.responseHTML;\n if (responseHTML) {\n const snapshot = PageSnapshot.fromHTMLString(responseHTML);\n if (fetchResponse.serverError) {\n await this.view.renderError(snapshot);\n }\n else {\n await this.view.renderPage(snapshot);\n }\n this.view.scrollToTop();\n this.view.clearSnapshotCache();\n }\n }\n formSubmissionErrored(formSubmission, error) {\n console.error(error);\n }\n formSubmissionFinished(formSubmission) {\n if (typeof this.adapter.formSubmissionFinished === 'function') {\n this.adapter.formSubmissionFinished(formSubmission);\n }\n }\n visitStarted(visit) {\n this.delegate.visitStarted(visit);\n }\n visitCompleted(visit) {\n this.delegate.visitCompleted(visit);\n }\n locationWithActionIsSamePage(location, action) {\n const anchor = getAnchor(location);\n const currentAnchor = getAnchor(this.view.lastRenderedLocation);\n const isRestorationToTop = action === 'restore' && typeof anchor === 'undefined';\n return action !== \"replace\" &&\n getRequestURL(location) === getRequestURL(this.view.lastRenderedLocation) &&\n (isRestorationToTop || (anchor != null && anchor !== currentAnchor));\n }\n visitScrolledToSamePageLocation(oldURL, newURL) {\n this.delegate.visitScrolledToSamePageLocation(oldURL, newURL);\n }\n get location() {\n return this.history.location;\n }\n get restorationIdentifier() {\n return this.history.restorationIdentifier;\n }\n getActionForFormSubmission(formSubmission) {\n const { formElement, submitter } = formSubmission;\n const action = getAttribute(\"data-turbo-action\", submitter, formElement);\n return isAction(action) ? action : \"advance\";\n }\n}\n\nvar PageStage;\n(function (PageStage) {\n PageStage[PageStage[\"initial\"] = 0] = \"initial\";\n PageStage[PageStage[\"loading\"] = 1] = \"loading\";\n PageStage[PageStage[\"interactive\"] = 2] = \"interactive\";\n PageStage[PageStage[\"complete\"] = 3] = \"complete\";\n})(PageStage || (PageStage = {}));\nclass PageObserver {\n constructor(delegate) {\n this.stage = PageStage.initial;\n this.started = false;\n this.interpretReadyState = () => {\n const { readyState } = this;\n if (readyState == \"interactive\") {\n this.pageIsInteractive();\n }\n else if (readyState == \"complete\") {\n this.pageIsComplete();\n }\n };\n this.pageWillUnload = () => {\n this.delegate.pageWillUnload();\n };\n this.delegate = delegate;\n }\n start() {\n if (!this.started) {\n if (this.stage == PageStage.initial) {\n this.stage = PageStage.loading;\n }\n document.addEventListener(\"readystatechange\", this.interpretReadyState, false);\n addEventListener(\"pagehide\", this.pageWillUnload, false);\n this.started = true;\n }\n }\n stop() {\n if (this.started) {\n document.removeEventListener(\"readystatechange\", this.interpretReadyState, false);\n removeEventListener(\"pagehide\", this.pageWillUnload, false);\n this.started = false;\n }\n }\n pageIsInteractive() {\n if (this.stage == PageStage.loading) {\n this.stage = PageStage.interactive;\n this.delegate.pageBecameInteractive();\n }\n }\n pageIsComplete() {\n this.pageIsInteractive();\n if (this.stage == PageStage.interactive) {\n this.stage = PageStage.complete;\n this.delegate.pageLoaded();\n }\n }\n get readyState() {\n return document.readyState;\n }\n}\n\nclass ScrollObserver {\n constructor(delegate) {\n this.started = false;\n this.onScroll = () => {\n this.updatePosition({ x: window.pageXOffset, y: window.pageYOffset });\n };\n this.delegate = delegate;\n }\n start() {\n if (!this.started) {\n addEventListener(\"scroll\", this.onScroll, false);\n this.onScroll();\n this.started = true;\n }\n }\n stop() {\n if (this.started) {\n removeEventListener(\"scroll\", this.onScroll, false);\n this.started = false;\n }\n }\n updatePosition(position) {\n this.delegate.scrollPositionChanged(position);\n }\n}\n\nclass StreamObserver {\n constructor(delegate) {\n this.sources = new Set;\n this.started = false;\n this.inspectFetchResponse = ((event) => {\n const response = fetchResponseFromEvent(event);\n if (response && fetchResponseIsStream(response)) {\n event.preventDefault();\n this.receiveMessageResponse(response);\n }\n });\n this.receiveMessageEvent = (event) => {\n if (this.started && typeof event.data == \"string\") {\n this.receiveMessageHTML(event.data);\n }\n };\n this.delegate = delegate;\n }\n start() {\n if (!this.started) {\n this.started = true;\n addEventListener(\"turbo:before-fetch-response\", this.inspectFetchResponse, false);\n }\n }\n stop() {\n if (this.started) {\n this.started = false;\n removeEventListener(\"turbo:before-fetch-response\", this.inspectFetchResponse, false);\n }\n }\n connectStreamSource(source) {\n if (!this.streamSourceIsConnected(source)) {\n this.sources.add(source);\n source.addEventListener(\"message\", this.receiveMessageEvent, false);\n }\n }\n disconnectStreamSource(source) {\n if (this.streamSourceIsConnected(source)) {\n this.sources.delete(source);\n source.removeEventListener(\"message\", this.receiveMessageEvent, false);\n }\n }\n streamSourceIsConnected(source) {\n return this.sources.has(source);\n }\n async receiveMessageResponse(response) {\n const html = await response.responseHTML;\n if (html) {\n this.receiveMessageHTML(html);\n }\n }\n receiveMessageHTML(html) {\n this.delegate.receivedMessageFromStream(new StreamMessage(html));\n }\n}\nfunction fetchResponseFromEvent(event) {\n var _a;\n const fetchResponse = (_a = event.detail) === null || _a === void 0 ? void 0 : _a.fetchResponse;\n if (fetchResponse instanceof FetchResponse) {\n return fetchResponse;\n }\n}\nfunction fetchResponseIsStream(response) {\n var _a;\n const contentType = (_a = response.contentType) !== null && _a !== void 0 ? _a : \"\";\n return contentType.startsWith(StreamMessage.contentType);\n}\n\nclass ErrorRenderer extends Renderer {\n async render() {\n this.replaceHeadAndBody();\n this.activateScriptElements();\n }\n replaceHeadAndBody() {\n const { documentElement, head, body } = document;\n documentElement.replaceChild(this.newHead, head);\n documentElement.replaceChild(this.newElement, body);\n }\n activateScriptElements() {\n for (const replaceableElement of this.scriptElements) {\n const parentNode = replaceableElement.parentNode;\n if (parentNode) {\n const element = this.createScriptElement(replaceableElement);\n parentNode.replaceChild(element, replaceableElement);\n }\n }\n }\n get newHead() {\n return this.newSnapshot.headSnapshot.element;\n }\n get scriptElements() {\n return [...document.documentElement.querySelectorAll(\"script\")];\n }\n}\n\nclass PageRenderer extends Renderer {\n get shouldRender() {\n return this.newSnapshot.isVisitable && this.trackedElementsAreIdentical;\n }\n prepareToRender() {\n this.mergeHead();\n }\n async render() {\n if (this.willRender) {\n this.replaceBody();\n }\n }\n finishRendering() {\n super.finishRendering();\n if (!this.isPreview) {\n this.focusFirstAutofocusableElement();\n }\n }\n get currentHeadSnapshot() {\n return this.currentSnapshot.headSnapshot;\n }\n get newHeadSnapshot() {\n return this.newSnapshot.headSnapshot;\n }\n get newElement() {\n return this.newSnapshot.element;\n }\n mergeHead() {\n this.copyNewHeadStylesheetElements();\n this.copyNewHeadScriptElements();\n this.removeCurrentHeadProvisionalElements();\n this.copyNewHeadProvisionalElements();\n }\n replaceBody() {\n this.preservingPermanentElements(() => {\n this.activateNewBody();\n this.assignNewBody();\n });\n }\n get trackedElementsAreIdentical() {\n return this.currentHeadSnapshot.trackedElementSignature == this.newHeadSnapshot.trackedElementSignature;\n }\n copyNewHeadStylesheetElements() {\n for (const element of this.newHeadStylesheetElements) {\n document.head.appendChild(element);\n }\n }\n copyNewHeadScriptElements() {\n for (const element of this.newHeadScriptElements) {\n document.head.appendChild(this.createScriptElement(element));\n }\n }\n removeCurrentHeadProvisionalElements() {\n for (const element of this.currentHeadProvisionalElements) {\n document.head.removeChild(element);\n }\n }\n copyNewHeadProvisionalElements() {\n for (const element of this.newHeadProvisionalElements) {\n document.head.appendChild(element);\n }\n }\n activateNewBody() {\n document.adoptNode(this.newElement);\n this.activateNewBodyScriptElements();\n }\n activateNewBodyScriptElements() {\n for (const inertScriptElement of this.newBodyScriptElements) {\n const activatedScriptElement = this.createScriptElement(inertScriptElement);\n inertScriptElement.replaceWith(activatedScriptElement);\n }\n }\n assignNewBody() {\n if (document.body && this.newElement instanceof HTMLBodyElement) {\n document.body.replaceWith(this.newElement);\n }\n else {\n document.documentElement.appendChild(this.newElement);\n }\n }\n get newHeadStylesheetElements() {\n return this.newHeadSnapshot.getStylesheetElementsNotInSnapshot(this.currentHeadSnapshot);\n }\n get newHeadScriptElements() {\n return this.newHeadSnapshot.getScriptElementsNotInSnapshot(this.currentHeadSnapshot);\n }\n get currentHeadProvisionalElements() {\n return this.currentHeadSnapshot.provisionalElements;\n }\n get newHeadProvisionalElements() {\n return this.newHeadSnapshot.provisionalElements;\n }\n get newBodyScriptElements() {\n return this.newElement.querySelectorAll(\"script\");\n }\n}\n\nclass SnapshotCache {\n constructor(size) {\n this.keys = [];\n this.snapshots = {};\n this.size = size;\n }\n has(location) {\n return toCacheKey(location) in this.snapshots;\n }\n get(location) {\n if (this.has(location)) {\n const snapshot = this.read(location);\n this.touch(location);\n return snapshot;\n }\n }\n put(location, snapshot) {\n this.write(location, snapshot);\n this.touch(location);\n return snapshot;\n }\n clear() {\n this.snapshots = {};\n }\n read(location) {\n return this.snapshots[toCacheKey(location)];\n }\n write(location, snapshot) {\n this.snapshots[toCacheKey(location)] = snapshot;\n }\n touch(location) {\n const key = toCacheKey(location);\n const index = this.keys.indexOf(key);\n if (index > -1)\n this.keys.splice(index, 1);\n this.keys.unshift(key);\n this.trim();\n }\n trim() {\n for (const key of this.keys.splice(this.size)) {\n delete this.snapshots[key];\n }\n }\n}\n\nclass PageView extends View {\n constructor() {\n super(...arguments);\n this.snapshotCache = new SnapshotCache(10);\n this.lastRenderedLocation = new URL(location.href);\n }\n renderPage(snapshot, isPreview = false, willRender = true) {\n const renderer = new PageRenderer(this.snapshot, snapshot, isPreview, willRender);\n return this.render(renderer);\n }\n renderError(snapshot) {\n const renderer = new ErrorRenderer(this.snapshot, snapshot, false);\n return this.render(renderer);\n }\n clearSnapshotCache() {\n this.snapshotCache.clear();\n }\n async cacheSnapshot() {\n if (this.shouldCacheSnapshot) {\n this.delegate.viewWillCacheSnapshot();\n const { snapshot, lastRenderedLocation: location } = this;\n await nextEventLoopTick();\n const cachedSnapshot = snapshot.clone();\n this.snapshotCache.put(location, cachedSnapshot);\n return cachedSnapshot;\n }\n }\n getCachedSnapshotForLocation(location) {\n return this.snapshotCache.get(location);\n }\n get snapshot() {\n return PageSnapshot.fromElement(this.element);\n }\n get shouldCacheSnapshot() {\n return this.snapshot.isCacheable;\n }\n}\n\nclass Session {\n constructor() {\n this.navigator = new Navigator(this);\n this.history = new History(this);\n this.view = new PageView(this, document.documentElement);\n this.adapter = new BrowserAdapter(this);\n this.pageObserver = new PageObserver(this);\n this.cacheObserver = new CacheObserver();\n this.linkClickObserver = new LinkClickObserver(this);\n this.formSubmitObserver = new FormSubmitObserver(this);\n this.scrollObserver = new ScrollObserver(this);\n this.streamObserver = new StreamObserver(this);\n this.frameRedirector = new FrameRedirector(document.documentElement);\n this.drive = true;\n this.enabled = true;\n this.progressBarDelay = 500;\n this.started = false;\n }\n start() {\n if (!this.started) {\n this.pageObserver.start();\n this.cacheObserver.start();\n this.linkClickObserver.start();\n this.formSubmitObserver.start();\n this.scrollObserver.start();\n this.streamObserver.start();\n this.frameRedirector.start();\n this.history.start();\n this.started = true;\n this.enabled = true;\n }\n }\n disable() {\n this.enabled = false;\n }\n stop() {\n if (this.started) {\n this.pageObserver.stop();\n this.cacheObserver.stop();\n this.linkClickObserver.stop();\n this.formSubmitObserver.stop();\n this.scrollObserver.stop();\n this.streamObserver.stop();\n this.frameRedirector.stop();\n this.history.stop();\n this.started = false;\n }\n }\n registerAdapter(adapter) {\n this.adapter = adapter;\n }\n visit(location, options = {}) {\n this.navigator.proposeVisit(expandURL(location), options);\n }\n connectStreamSource(source) {\n this.streamObserver.connectStreamSource(source);\n }\n disconnectStreamSource(source) {\n this.streamObserver.disconnectStreamSource(source);\n }\n renderStreamMessage(message) {\n document.documentElement.appendChild(StreamMessage.wrap(message).fragment);\n }\n clearCache() {\n this.view.clearSnapshotCache();\n }\n setProgressBarDelay(delay) {\n this.progressBarDelay = delay;\n }\n get location() {\n return this.history.location;\n }\n get restorationIdentifier() {\n return this.history.restorationIdentifier;\n }\n historyPoppedToLocationWithRestorationIdentifier(location, restorationIdentifier) {\n if (this.enabled) {\n this.navigator.startVisit(location, restorationIdentifier, { action: \"restore\", historyChanged: true });\n }\n else {\n this.adapter.pageInvalidated();\n }\n }\n scrollPositionChanged(position) {\n this.history.updateRestorationData({ scrollPosition: position });\n }\n willFollowLinkToLocation(link, location) {\n return this.elementDriveEnabled(link)\n && locationIsVisitable(location, this.snapshot.rootLocation)\n && this.applicationAllowsFollowingLinkToLocation(link, location);\n }\n followedLinkToLocation(link, location) {\n const action = this.getActionForLink(link);\n this.convertLinkWithMethodClickToFormSubmission(link) || this.visit(location.href, { action });\n }\n convertLinkWithMethodClickToFormSubmission(link) {\n const linkMethod = link.getAttribute(\"data-turbo-method\");\n if (linkMethod) {\n const form = document.createElement(\"form\");\n form.method = linkMethod;\n form.action = link.getAttribute(\"href\") || \"undefined\";\n form.hidden = true;\n if (link.hasAttribute(\"data-turbo-confirm\")) {\n form.setAttribute(\"data-turbo-confirm\", link.getAttribute(\"data-turbo-confirm\"));\n }\n const frame = this.getTargetFrameForLink(link);\n if (frame) {\n form.setAttribute(\"data-turbo-frame\", frame);\n form.addEventListener(\"turbo:submit-start\", () => form.remove());\n }\n else {\n form.addEventListener(\"submit\", () => form.remove());\n }\n document.body.appendChild(form);\n return dispatch(\"submit\", { cancelable: true, target: form });\n }\n else {\n return false;\n }\n }\n allowsVisitingLocationWithAction(location, action) {\n return this.locationWithActionIsSamePage(location, action) || this.applicationAllowsVisitingLocation(location);\n }\n visitProposedToLocation(location, options) {\n extendURLWithDeprecatedProperties(location);\n this.adapter.visitProposedToLocation(location, options);\n }\n visitStarted(visit) {\n extendURLWithDeprecatedProperties(visit.location);\n if (!visit.silent) {\n this.notifyApplicationAfterVisitingLocation(visit.location, visit.action);\n }\n }\n visitCompleted(visit) {\n this.notifyApplicationAfterPageLoad(visit.getTimingMetrics());\n }\n locationWithActionIsSamePage(location, action) {\n return this.navigator.locationWithActionIsSamePage(location, action);\n }\n visitScrolledToSamePageLocation(oldURL, newURL) {\n this.notifyApplicationAfterVisitingSamePageLocation(oldURL, newURL);\n }\n willSubmitForm(form, submitter) {\n const action = getAction(form, submitter);\n return this.elementDriveEnabled(form)\n && (!submitter || this.elementDriveEnabled(submitter))\n && locationIsVisitable(expandURL(action), this.snapshot.rootLocation);\n }\n formSubmitted(form, submitter) {\n this.navigator.submitForm(form, submitter);\n }\n pageBecameInteractive() {\n this.view.lastRenderedLocation = this.location;\n this.notifyApplicationAfterPageLoad();\n }\n pageLoaded() {\n this.history.assumeControlOfScrollRestoration();\n }\n pageWillUnload() {\n this.history.relinquishControlOfScrollRestoration();\n }\n receivedMessageFromStream(message) {\n this.renderStreamMessage(message);\n }\n viewWillCacheSnapshot() {\n var _a;\n if (!((_a = this.navigator.currentVisit) === null || _a === void 0 ? void 0 : _a.silent)) {\n this.notifyApplicationBeforeCachingSnapshot();\n }\n }\n allowsImmediateRender({ element }, resume) {\n const event = this.notifyApplicationBeforeRender(element, resume);\n return !event.defaultPrevented;\n }\n viewRenderedSnapshot(snapshot, isPreview) {\n this.view.lastRenderedLocation = this.history.location;\n this.notifyApplicationAfterRender();\n }\n viewInvalidated() {\n this.adapter.pageInvalidated();\n }\n frameLoaded(frame) {\n this.notifyApplicationAfterFrameLoad(frame);\n }\n frameRendered(fetchResponse, frame) {\n this.notifyApplicationAfterFrameRender(fetchResponse, frame);\n }\n applicationAllowsFollowingLinkToLocation(link, location) {\n const event = this.notifyApplicationAfterClickingLinkToLocation(link, location);\n return !event.defaultPrevented;\n }\n applicationAllowsVisitingLocation(location) {\n const event = this.notifyApplicationBeforeVisitingLocation(location);\n return !event.defaultPrevented;\n }\n notifyApplicationAfterClickingLinkToLocation(link, location) {\n return dispatch(\"turbo:click\", { target: link, detail: { url: location.href }, cancelable: true });\n }\n notifyApplicationBeforeVisitingLocation(location) {\n return dispatch(\"turbo:before-visit\", { detail: { url: location.href }, cancelable: true });\n }\n notifyApplicationAfterVisitingLocation(location, action) {\n markAsBusy(document.documentElement);\n return dispatch(\"turbo:visit\", { detail: { url: location.href, action } });\n }\n notifyApplicationBeforeCachingSnapshot() {\n return dispatch(\"turbo:before-cache\");\n }\n notifyApplicationBeforeRender(newBody, resume) {\n return dispatch(\"turbo:before-render\", { detail: { newBody, resume }, cancelable: true });\n }\n notifyApplicationAfterRender() {\n return dispatch(\"turbo:render\");\n }\n notifyApplicationAfterPageLoad(timing = {}) {\n clearBusyState(document.documentElement);\n return dispatch(\"turbo:load\", { detail: { url: this.location.href, timing } });\n }\n notifyApplicationAfterVisitingSamePageLocation(oldURL, newURL) {\n dispatchEvent(new HashChangeEvent(\"hashchange\", { oldURL: oldURL.toString(), newURL: newURL.toString() }));\n }\n notifyApplicationAfterFrameLoad(frame) {\n return dispatch(\"turbo:frame-load\", { target: frame });\n }\n notifyApplicationAfterFrameRender(fetchResponse, frame) {\n return dispatch(\"turbo:frame-render\", { detail: { fetchResponse }, target: frame, cancelable: true });\n }\n elementDriveEnabled(element) {\n const container = element === null || element === void 0 ? void 0 : element.closest(\"[data-turbo]\");\n if (this.drive) {\n if (container) {\n return container.getAttribute(\"data-turbo\") != \"false\";\n }\n else {\n return true;\n }\n }\n else {\n if (container) {\n return container.getAttribute(\"data-turbo\") == \"true\";\n }\n else {\n return false;\n }\n }\n }\n getActionForLink(link) {\n const action = link.getAttribute(\"data-turbo-action\");\n return isAction(action) ? action : \"advance\";\n }\n getTargetFrameForLink(link) {\n const frame = link.getAttribute(\"data-turbo-frame\");\n if (frame) {\n return frame;\n }\n else {\n const container = link.closest(\"turbo-frame\");\n if (container) {\n return container.id;\n }\n }\n }\n get snapshot() {\n return this.view.snapshot;\n }\n}\nfunction extendURLWithDeprecatedProperties(url) {\n Object.defineProperties(url, deprecatedLocationPropertyDescriptors);\n}\nconst deprecatedLocationPropertyDescriptors = {\n absoluteURL: {\n get() {\n return this.toString();\n }\n }\n};\n\nconst session = new Session;\nconst { navigator: navigator$1 } = session;\nfunction start() {\n session.start();\n}\nfunction registerAdapter(adapter) {\n session.registerAdapter(adapter);\n}\nfunction visit(location, options) {\n session.visit(location, options);\n}\nfunction connectStreamSource(source) {\n session.connectStreamSource(source);\n}\nfunction disconnectStreamSource(source) {\n session.disconnectStreamSource(source);\n}\nfunction renderStreamMessage(message) {\n session.renderStreamMessage(message);\n}\nfunction clearCache() {\n session.clearCache();\n}\nfunction setProgressBarDelay(delay) {\n session.setProgressBarDelay(delay);\n}\nfunction setConfirmMethod(confirmMethod) {\n FormSubmission.confirmMethod = confirmMethod;\n}\n\nvar Turbo = /*#__PURE__*/Object.freeze({\n __proto__: null,\n navigator: navigator$1,\n session: session,\n PageRenderer: PageRenderer,\n PageSnapshot: PageSnapshot,\n start: start,\n registerAdapter: registerAdapter,\n visit: visit,\n connectStreamSource: connectStreamSource,\n disconnectStreamSource: disconnectStreamSource,\n renderStreamMessage: renderStreamMessage,\n clearCache: clearCache,\n setProgressBarDelay: setProgressBarDelay,\n setConfirmMethod: setConfirmMethod\n});\n\nclass FrameController {\n constructor(element) {\n this.fetchResponseLoaded = (fetchResponse) => { };\n this.currentFetchRequest = null;\n this.resolveVisitPromise = () => { };\n this.connected = false;\n this.hasBeenLoaded = false;\n this.settingSourceURL = false;\n this.element = element;\n this.view = new FrameView(this, this.element);\n this.appearanceObserver = new AppearanceObserver(this, this.element);\n this.linkInterceptor = new LinkInterceptor(this, this.element);\n this.formInterceptor = new FormInterceptor(this, this.element);\n }\n connect() {\n if (!this.connected) {\n this.connected = true;\n this.reloadable = false;\n if (this.loadingStyle == FrameLoadingStyle.lazy) {\n this.appearanceObserver.start();\n }\n this.linkInterceptor.start();\n this.formInterceptor.start();\n this.sourceURLChanged();\n }\n }\n disconnect() {\n if (this.connected) {\n this.connected = false;\n this.appearanceObserver.stop();\n this.linkInterceptor.stop();\n this.formInterceptor.stop();\n }\n }\n disabledChanged() {\n if (this.loadingStyle == FrameLoadingStyle.eager) {\n this.loadSourceURL();\n }\n }\n sourceURLChanged() {\n if (this.loadingStyle == FrameLoadingStyle.eager || this.hasBeenLoaded) {\n this.loadSourceURL();\n }\n }\n loadingStyleChanged() {\n if (this.loadingStyle == FrameLoadingStyle.lazy) {\n this.appearanceObserver.start();\n }\n else {\n this.appearanceObserver.stop();\n this.loadSourceURL();\n }\n }\n async loadSourceURL() {\n if (!this.settingSourceURL && this.enabled && this.isActive && (this.reloadable || this.sourceURL != this.currentURL)) {\n const previousURL = this.currentURL;\n this.currentURL = this.sourceURL;\n if (this.sourceURL) {\n try {\n this.element.loaded = this.visit(expandURL(this.sourceURL));\n this.appearanceObserver.stop();\n await this.element.loaded;\n this.hasBeenLoaded = true;\n }\n catch (error) {\n this.currentURL = previousURL;\n throw error;\n }\n }\n }\n }\n async loadResponse(fetchResponse) {\n if (fetchResponse.redirected || (fetchResponse.succeeded && fetchResponse.isHTML)) {\n this.sourceURL = fetchResponse.response.url;\n }\n try {\n const html = await fetchResponse.responseHTML;\n if (html) {\n const { body } = parseHTMLDocument(html);\n const snapshot = new Snapshot(await this.extractForeignFrameElement(body));\n const renderer = new FrameRenderer(this.view.snapshot, snapshot, false, false);\n if (this.view.renderPromise)\n await this.view.renderPromise;\n await this.view.render(renderer);\n session.frameRendered(fetchResponse, this.element);\n session.frameLoaded(this.element);\n this.fetchResponseLoaded(fetchResponse);\n }\n }\n catch (error) {\n console.error(error);\n this.view.invalidate();\n }\n finally {\n this.fetchResponseLoaded = () => { };\n }\n }\n elementAppearedInViewport(element) {\n this.loadSourceURL();\n }\n shouldInterceptLinkClick(element, url) {\n if (element.hasAttribute(\"data-turbo-method\")) {\n return false;\n }\n else {\n return this.shouldInterceptNavigation(element);\n }\n }\n linkClickIntercepted(element, url) {\n this.reloadable = true;\n this.navigateFrame(element, url);\n }\n shouldInterceptFormSubmission(element, submitter) {\n return this.shouldInterceptNavigation(element, submitter);\n }\n formSubmissionIntercepted(element, submitter) {\n if (this.formSubmission) {\n this.formSubmission.stop();\n }\n this.reloadable = false;\n this.formSubmission = new FormSubmission(this, element, submitter);\n const { fetchRequest } = this.formSubmission;\n this.prepareHeadersForRequest(fetchRequest.headers, fetchRequest);\n this.formSubmission.start();\n }\n prepareHeadersForRequest(headers, request) {\n headers[\"Turbo-Frame\"] = this.id;\n }\n requestStarted(request) {\n markAsBusy(this.element);\n }\n requestPreventedHandlingResponse(request, response) {\n this.resolveVisitPromise();\n }\n async requestSucceededWithResponse(request, response) {\n await this.loadResponse(response);\n this.resolveVisitPromise();\n }\n requestFailedWithResponse(request, response) {\n console.error(response);\n this.resolveVisitPromise();\n }\n requestErrored(request, error) {\n console.error(error);\n this.resolveVisitPromise();\n }\n requestFinished(request) {\n clearBusyState(this.element);\n }\n formSubmissionStarted({ formElement }) {\n markAsBusy(formElement, this.findFrameElement(formElement));\n }\n formSubmissionSucceededWithResponse(formSubmission, response) {\n const frame = this.findFrameElement(formSubmission.formElement, formSubmission.submitter);\n this.proposeVisitIfNavigatedWithAction(frame, formSubmission.formElement, formSubmission.submitter);\n frame.delegate.loadResponse(response);\n }\n formSubmissionFailedWithResponse(formSubmission, fetchResponse) {\n this.element.delegate.loadResponse(fetchResponse);\n }\n formSubmissionErrored(formSubmission, error) {\n console.error(error);\n }\n formSubmissionFinished({ formElement }) {\n clearBusyState(formElement, this.findFrameElement(formElement));\n }\n allowsImmediateRender(snapshot, resume) {\n return true;\n }\n viewRenderedSnapshot(snapshot, isPreview) {\n }\n viewInvalidated() {\n }\n async visit(url) {\n var _a;\n const request = new FetchRequest(this, FetchMethod.get, url, new URLSearchParams, this.element);\n (_a = this.currentFetchRequest) === null || _a === void 0 ? void 0 : _a.cancel();\n this.currentFetchRequest = request;\n return new Promise(resolve => {\n this.resolveVisitPromise = () => {\n this.resolveVisitPromise = () => { };\n this.currentFetchRequest = null;\n resolve();\n };\n request.perform();\n });\n }\n navigateFrame(element, url, submitter) {\n const frame = this.findFrameElement(element, submitter);\n this.proposeVisitIfNavigatedWithAction(frame, element, submitter);\n frame.setAttribute(\"reloadable\", \"\");\n frame.src = url;\n }\n proposeVisitIfNavigatedWithAction(frame, element, submitter) {\n const action = getAttribute(\"data-turbo-action\", submitter, element, frame);\n if (isAction(action)) {\n const { visitCachedSnapshot } = new SnapshotSubstitution(frame);\n frame.delegate.fetchResponseLoaded = (fetchResponse) => {\n if (frame.src) {\n const { statusCode, redirected } = fetchResponse;\n const responseHTML = frame.ownerDocument.documentElement.outerHTML;\n const response = { statusCode, redirected, responseHTML };\n session.visit(frame.src, { action, response, visitCachedSnapshot, willRender: false });\n }\n };\n }\n }\n findFrameElement(element, submitter) {\n var _a;\n const id = getAttribute(\"data-turbo-frame\", submitter, element) || this.element.getAttribute(\"target\");\n return (_a = getFrameElementById(id)) !== null && _a !== void 0 ? _a : this.element;\n }\n async extractForeignFrameElement(container) {\n let element;\n const id = CSS.escape(this.id);\n try {\n if (element = activateElement(container.querySelector(`turbo-frame#${id}`), this.currentURL)) {\n return element;\n }\n if (element = activateElement(container.querySelector(`turbo-frame[src][recurse~=${id}]`), this.currentURL)) {\n await element.loaded;\n return await this.extractForeignFrameElement(element);\n }\n console.error(`Response has no matching element`);\n }\n catch (error) {\n console.error(error);\n }\n return new FrameElement();\n }\n formActionIsVisitable(form, submitter) {\n const action = getAction(form, submitter);\n return locationIsVisitable(expandURL(action), this.rootLocation);\n }\n shouldInterceptNavigation(element, submitter) {\n const id = getAttribute(\"data-turbo-frame\", submitter, element) || this.element.getAttribute(\"target\");\n if (element instanceof HTMLFormElement && !this.formActionIsVisitable(element, submitter)) {\n return false;\n }\n if (!this.enabled || id == \"_top\") {\n return false;\n }\n if (id) {\n const frameElement = getFrameElementById(id);\n if (frameElement) {\n return !frameElement.disabled;\n }\n }\n if (!session.elementDriveEnabled(element)) {\n return false;\n }\n if (submitter && !session.elementDriveEnabled(submitter)) {\n return false;\n }\n return true;\n }\n get id() {\n return this.element.id;\n }\n get enabled() {\n return !this.element.disabled;\n }\n get sourceURL() {\n if (this.element.src) {\n return this.element.src;\n }\n }\n get reloadable() {\n const frame = this.findFrameElement(this.element);\n return frame.hasAttribute(\"reloadable\");\n }\n set reloadable(value) {\n const frame = this.findFrameElement(this.element);\n if (value) {\n frame.setAttribute(\"reloadable\", \"\");\n }\n else {\n frame.removeAttribute(\"reloadable\");\n }\n }\n set sourceURL(sourceURL) {\n this.settingSourceURL = true;\n this.element.src = sourceURL !== null && sourceURL !== void 0 ? sourceURL : null;\n this.currentURL = this.element.src;\n this.settingSourceURL = false;\n }\n get loadingStyle() {\n return this.element.loading;\n }\n get isLoading() {\n return this.formSubmission !== undefined || this.resolveVisitPromise() !== undefined;\n }\n get isActive() {\n return this.element.isActive && this.connected;\n }\n get rootLocation() {\n var _a;\n const meta = this.element.ownerDocument.querySelector(`meta[name=\"turbo-root\"]`);\n const root = (_a = meta === null || meta === void 0 ? void 0 : meta.content) !== null && _a !== void 0 ? _a : \"/\";\n return expandURL(root);\n }\n}\nclass SnapshotSubstitution {\n constructor(element) {\n this.visitCachedSnapshot = ({ element }) => {\n var _a;\n const { id, clone } = this;\n (_a = element.querySelector(\"#\" + id)) === null || _a === void 0 ? void 0 : _a.replaceWith(clone);\n };\n this.clone = element.cloneNode(true);\n this.id = element.id;\n }\n}\nfunction getFrameElementById(id) {\n if (id != null) {\n const element = document.getElementById(id);\n if (element instanceof FrameElement) {\n return element;\n }\n }\n}\nfunction activateElement(element, currentURL) {\n if (element) {\n const src = element.getAttribute(\"src\");\n if (src != null && currentURL != null && urlsAreEqual(src, currentURL)) {\n throw new Error(`Matching element has a source URL which references itself`);\n }\n if (element.ownerDocument !== document) {\n element = document.importNode(element, true);\n }\n if (element instanceof FrameElement) {\n element.connectedCallback();\n element.disconnectedCallback();\n return element;\n }\n }\n}\n\nconst StreamActions = {\n after() {\n this.targetElements.forEach(e => { var _a; return (_a = e.parentElement) === null || _a === void 0 ? void 0 : _a.insertBefore(this.templateContent, e.nextSibling); });\n },\n append() {\n this.removeDuplicateTargetChildren();\n this.targetElements.forEach(e => e.append(this.templateContent));\n },\n before() {\n this.targetElements.forEach(e => { var _a; return (_a = e.parentElement) === null || _a === void 0 ? void 0 : _a.insertBefore(this.templateContent, e); });\n },\n prepend() {\n this.removeDuplicateTargetChildren();\n this.targetElements.forEach(e => e.prepend(this.templateContent));\n },\n remove() {\n this.targetElements.forEach(e => e.remove());\n },\n replace() {\n this.targetElements.forEach(e => e.replaceWith(this.templateContent));\n },\n update() {\n this.targetElements.forEach(e => {\n e.innerHTML = \"\";\n e.append(this.templateContent);\n });\n }\n};\n\nclass StreamElement extends HTMLElement {\n async connectedCallback() {\n try {\n await this.render();\n }\n catch (error) {\n console.error(error);\n }\n finally {\n this.disconnect();\n }\n }\n async render() {\n var _a;\n return (_a = this.renderPromise) !== null && _a !== void 0 ? _a : (this.renderPromise = (async () => {\n if (this.dispatchEvent(this.beforeRenderEvent)) {\n await nextAnimationFrame();\n this.performAction();\n }\n })());\n }\n disconnect() {\n try {\n this.remove();\n }\n catch (_a) { }\n }\n removeDuplicateTargetChildren() {\n this.duplicateChildren.forEach(c => c.remove());\n }\n get duplicateChildren() {\n var _a;\n const existingChildren = this.targetElements.flatMap(e => [...e.children]).filter(c => !!c.id);\n const newChildrenIds = [...(_a = this.templateContent) === null || _a === void 0 ? void 0 : _a.children].filter(c => !!c.id).map(c => c.id);\n return existingChildren.filter(c => newChildrenIds.includes(c.id));\n }\n get performAction() {\n if (this.action) {\n const actionFunction = StreamActions[this.action];\n if (actionFunction) {\n return actionFunction;\n }\n this.raise(\"unknown action\");\n }\n this.raise(\"action attribute is missing\");\n }\n get targetElements() {\n if (this.target) {\n return this.targetElementsById;\n }\n else if (this.targets) {\n return this.targetElementsByQuery;\n }\n else {\n this.raise(\"target or targets attribute is missing\");\n }\n }\n get templateContent() {\n return this.templateElement.content.cloneNode(true);\n }\n get templateElement() {\n if (this.firstElementChild instanceof HTMLTemplateElement) {\n return this.firstElementChild;\n }\n this.raise(\"first child element must be a