{"mappings":"IAOIA,EAAW,SAAUC,GAGvB,IAEIC,EAFAC,EAAKC,OAAOC,UACZC,EAASH,EAAGI,eAEZC,EAA4B,mBAAXC,OAAwBA,OAAS,GAClDC,EAAiBF,EAAQG,UAAY,aACrCC,EAAsBJ,EAAQK,eAAiB,kBAC/CC,EAAoBN,EAAQO,aAAe,yBAEtCC,EAAOC,EAAKC,EAAKC,GAOxB,OANAf,OAAOgB,eAAeH,EAAKC,EAAK,CAC9BC,MAAOA,EACPE,YAAY,EACZC,cAAc,EACdC,UAAU,IAELN,EAAIC,GAEb,IAEEF,EAAO,GAAI,IACX,MAAOQ,GACPR,EAAS,SAASC,EAAKC,EAAKC,GAC1B,OAAOF,EAAIC,GAAOC,YAIbM,EAAKC,EAASC,EAASC,EAAMC,GAEpC,IAAIC,EAAiBH,GAAWA,EAAQtB,qBAAqB0B,EAAYJ,EAAUI,EAC/EC,EAAY5B,OAAO6B,OAAOH,EAAezB,WACzC6B,EAAU,IAAIC,EAAQN,GAAe,IAMzC,OAFAG,EAAUI,iBAuMcV,EAASE,EAAMM,GACvC,IAAIG,EAAQC,EAEZ,OAAO,SAAgBC,EAAQC,GAC7B,GAAIH,IAAUI,EACZ,MAAM,IAAIC,MAAM,gCAGlB,GAAIL,IAAUM,EAAmB,CAC/B,GAAe,UAAXJ,EACF,MAAMC,EAKR,OAAOI,QAGTV,EAAQK,OAASA,EACjBL,EAAQM,IAAMA,IAED,CACX,IAAIK,EAAWX,EAAQW,SACvB,GAAIA,EAAU,CACZ,IAAIC,EAAiBC,EAAoBF,EAAUX,GACnD,GAAIY,EAAgB,CAClB,GAAIA,IAAmBE,EAAkB,SACzC,OAAOF,GAIX,GAAuB,SAAnBZ,EAAQK,OAGVL,EAAQe,KAAOf,EAAQgB,MAAQhB,EAAQM,SAElC,GAAuB,UAAnBN,EAAQK,OAAoB,CACrC,GAAIF,IAAUC,EAEZ,MADAD,EAAQM,EACFT,EAAQM,IAGhBN,EAAQiB,kBAAkBjB,EAAQM,SAEN,WAAnBN,EAAQK,QACjBL,EAAQkB,OAAO,SAAUlB,EAAQM,KAGnCH,EAAQI,EAER,IAAIY,EAASC,EAAS5B,EAASE,EAAMM,GACrC,GAAoB,WAAhBmB,EAAOE,KAAmB,CAO5B,GAJAlB,EAAQH,EAAQsB,KACZb,EACAc,EAEAJ,EAAOb,MAAQQ,EACjB,SAGF,MAAO,CACL7B,MAAOkC,EAAOb,IACdgB,KAAMtB,EAAQsB,MAGS,UAAhBH,EAAOE,OAChBlB,EAAQM,EAGRT,EAAQK,OAAS,QACjBL,EAAQM,IAAMa,EAAOb,OA/QPkB,CAAiBhC,EAASE,EAAMM,GAE7CF,WAcAsB,EAASK,EAAI1C,EAAKuB,GACzB,IACE,MAAO,CAAEe,KAAM,SAAUf,IAAKmB,EAAGC,KAAK3C,EAAKuB,IAC3C,MAAOqB,GACP,MAAO,CAAEN,KAAM,QAASf,IAAKqB,IAhBjC5D,EAAQwB,KAAOA,EAoBf,IAAIa,EAAyB,iBACzBmB,EAAyB,iBACzBhB,EAAoB,YACpBE,EAAoB,YAIpBK,EAAmB,YAMdjB,cACA+B,cACAC,KAIT,IAAIC,EAAoB,GACxBhD,EAAOgD,EAAmBtD,GAAgB,WACxC,OAAOuD,QAGT,IAAIC,EAAW9D,OAAO+D,eAClBC,EAA0BF,GAAYA,EAASA,EAASG,EAAO,MAC/DD,GACAA,IAA4BjE,GAC5BG,EAAOsD,KAAKQ,EAAyB1D,KAGvCsD,EAAoBI,GAGtB,IAAIE,EAAKP,EAA2B1D,UAClC0B,EAAU1B,UAAYD,OAAO6B,OAAO+B,YAY7BO,EAAsBlE,GAC7B,CAAC,OAAQ,QAAS,UAAUmE,SAAQ,SAASjC,GAC3CvB,EAAOX,EAAWkC,GAAQ,SAASC,GACjC,OAAOyB,KAAK7B,QAAQG,EAAQC,kBAkCzBiC,EAAczC,EAAW0C,YACvBC,EAAOpC,EAAQC,EAAKoC,EAASC,GACpC,IAAIxB,EAASC,EAAStB,EAAUO,GAASP,EAAWQ,GACpD,GAAoB,UAAhBa,EAAOE,KAEJ,CACL,IAAIuB,EAASzB,EAAOb,IAChBuC,EAAQD,EAAO3D,MACnB,OAAI4D,GACiB,iBAAVA,GACPzE,EAAOsD,KAAKmB,EAAO,WACdL,EAAYE,QAAQG,EAAMC,SAASC,MAAK,SAAS9D,GACtDwD,EAAO,OAAQxD,EAAOyD,EAASC,MAC9B,SAAShB,GACVc,EAAO,QAASd,EAAKe,EAASC,MAI3BH,EAAYE,QAAQG,GAAOE,MAAK,SAASC,GAI9CJ,EAAO3D,MAAQ+D,EACfN,EAAQE,MACP,SAASK,GAGV,OAAOR,EAAO,QAASQ,EAAOP,EAASC,MAvBzCA,EAAOxB,EAAOb,KA4BlB,IAAI4C,EAgCJnB,KAAK7B,iBA9BYG,EAAQC,YACd6C,IACP,OAAO,IAAIX,GAAY,SAASE,EAASC,GACvCF,EAAOpC,EAAQC,EAAKoC,EAASC,MAIjC,OAAOO,EAaLA,EAAkBA,EAAgBH,KAChCI,EAGAA,GACEA,cAkHDtC,EAAoBF,EAAUX,GACrC,IAAIK,EAASM,EAASlC,SAASuB,EAAQK,QACvC,GAAIA,IAAWrC,EAAW,CAKxB,GAFAgC,EAAQW,SAAW,KAEI,UAAnBX,EAAQK,OAAoB,CAE9B,GAAIM,EAASlC,SAAiB,SAG5BuB,EAAQK,OAAS,SACjBL,EAAQM,IAAMtC,EACd6C,EAAoBF,EAAUX,GAEP,UAAnBA,EAAQK,QAGV,OAAOS,EAIXd,EAAQK,OAAS,QACjBL,EAAQM,IAAM,IAAI8C,UAChB,kDAGJ,OAAOtC,EAGT,IAAIK,EAASC,EAASf,EAAQM,EAASlC,SAAUuB,EAAQM,KAEzD,GAAoB,UAAhBa,EAAOE,KAIT,OAHArB,EAAQK,OAAS,QACjBL,EAAQM,IAAMa,EAAOb,IACrBN,EAAQW,SAAW,KACZG,EAGT,IAAIuC,EAAOlC,EAAOb,IAElB,OAAM+C,EAOFA,EAAK/B,MAGPtB,EAAQW,EAAS2C,YAAcD,EAAKpE,MAGpCe,EAAQuD,KAAO5C,EAAS6C,QAQD,WAAnBxD,EAAQK,SACVL,EAAQK,OAAS,OACjBL,EAAQM,IAAMtC,GAUlBgC,EAAQW,SAAW,KACZG,GANEuC,GA3BPrD,EAAQK,OAAS,QACjBL,EAAQM,IAAM,IAAI8C,UAAU,oCAC5BpD,EAAQW,SAAW,KACZG,YAoDF2C,EAAaC,GACpB,IAAIC,EAAQ,CAAEC,OAAQF,EAAK,IAEvB,KAAKA,IACPC,EAAME,SAAWH,EAAK,IAGpB,KAAKA,IACPC,EAAMG,WAAaJ,EAAK,GACxBC,EAAMI,SAAWL,EAAK,IAGxB3B,KAAKiC,WAAWC,KAAKN,YAGdO,EAAcP,GACrB,IAAIxC,EAASwC,EAAMQ,YAAc,GACjChD,EAAOE,KAAO,gBACPF,EAAOb,IACdqD,EAAMQ,WAAahD,WAGZlB,EAAQN,GAIfoC,KAAKiC,WAAa,CAAC,CAAEJ,OAAQ,SAC7BjE,EAAY2C,QAAQmB,EAAc1B,MAClCA,KAAKqC,OAAM,YA8BJjC,EAAOkC,GACd,GAAIA,EAAU,CACZ,IAAIC,EAAiBD,EAAS7F,GAC9B,GAAI8F,EACF,OAAOA,EAAe5C,KAAK2C,GAG7B,GAA6B,mBAAlBA,EAASd,KAClB,OAAOc,EAGT,IAAKE,MAAMF,EAASG,QAAS,CAC3B,IAAIC,GAAI,EAAIC,EAAO,SAASnB,WACjBkB,EAAIJ,EAASG,WAChBpG,EAAOsD,KAAK2C,EAAUI,GAGxB,OAFAlB,EAAKtE,MAAQoF,EAASI,GACtBlB,EAAKjC,MAAO,EACLiC,EAOX,OAHAA,EAAKtE,MAAQjB,EACbuF,EAAKjC,MAAO,EAELiC,GAGT,OAAOmB,EAAKnB,KAAOmB,GAKvB,MAAO,CAAEnB,KAAM7C,YAIRA,IACP,MAAO,CAAEzB,MAAOjB,EAAWsD,MAAM,GA+MnC,OA7mBAM,EAAkBzD,UAAY0D,EAC9B/C,EAAOsD,EAAI,cAAeP,GAC1B/C,EAAO+C,EAA4B,cAAeD,GAClDA,EAAkB+C,YAAc7F,EAC9B+C,EACAjD,EACA,qBAaFb,EAAQ6G,oBAAsB,SAASC,GACrC,IAAIC,EAAyB,mBAAXD,GAAyBA,EAAOE,YAClD,QAAOD,IACHA,IAASlD,GAG2B,uBAAnCkD,EAAKH,aAAeG,EAAKE,QAIhCjH,EAAQkH,KAAO,SAASJ,GAQtB,OAPI3G,OAAOgH,eACThH,OAAOgH,eAAeL,EAAQhD,IAE9BgD,EAAOM,UAAYtD,EACnB/C,EAAO+F,EAAQjG,EAAmB,sBAEpCiG,EAAO1G,UAAYD,OAAO6B,OAAOqC,GAC1ByC,GAOT9G,EAAQqH,MAAQ,SAAS9E,GACvB,MAAO,CAAEwC,QAASxC,IAsEpB+B,EAAsBE,EAAcpE,WACpCW,EAAOyD,EAAcpE,UAAWO,GAAqB,WACnD,OAAOqD,QAEThE,EAAQwE,cAAgBA,EAKxBxE,EAAQsH,MAAQ,SAAS7F,EAASC,EAASC,EAAMC,EAAa6C,QACxC,IAAhBA,IAAwBA,EAAc8C,SAE1C,IAAIC,EAAO,IAAIhD,EACbhD,EAAKC,EAASC,EAASC,EAAMC,GAC7B6C,GAGF,OAAOzE,EAAQ6G,oBAAoBnF,GAC/B8F,EACAA,EAAKhC,OAAOR,MAAK,SAASH,GACxB,OAAOA,EAAOtB,KAAOsB,EAAO3D,MAAQsG,EAAKhC,WAuKjDlB,EAAsBD,GAEtBtD,EAAOsD,EAAIxD,EAAmB,aAO9BE,EAAOsD,EAAI5D,GAAgB,WACzB,OAAOuD,QAGTjD,EAAOsD,EAAI,YAAY,WACrB,MAAO,wBAkCTrE,EAAQyH,KAAO,SAASC,GACtB,IAAID,EAAO,GACX,IAAK,IAAIE,KAAOD,EACdD,EAAKvB,KAAKyB,GAMZ,OAJAF,EAAKG,UAIE,SAASpC,SACPiC,EAAKhB,QAAQ,CAClB,IAAIxF,EAAMwG,EAAKI,MACf,GAAI5G,KAAOyG,EAGT,OAFAlC,EAAKtE,MAAQD,EACbuE,EAAKjC,MAAO,EACLiC,EAQX,OADAA,EAAKjC,MAAO,EACLiC,IAsCXxF,EAAQoE,OAASA,EAMjBlC,EAAQ9B,UAAY,CAClB4G,YAAa9E,EAEbmE,MAAO,SAASyB,GAcd,GAbA9D,KAAK+D,KAAO,EACZ/D,KAAKwB,KAAO,EAGZxB,KAAKhB,KAAOgB,KAAKf,MAAQhD,EACzB+D,KAAKT,MAAO,EACZS,KAAKpB,SAAW,KAEhBoB,KAAK1B,OAAS,OACd0B,KAAKzB,IAAMtC,EAEX+D,KAAKiC,WAAW1B,QAAQ4B,IAEnB2B,EACH,IAAK,IAAIb,KAAQjD,KAEQ,MAAnBiD,EAAKe,OAAO,IACZ3H,EAAOsD,KAAKK,KAAMiD,KACjBT,OAAOS,EAAKgB,MAAM,MACrBjE,KAAKiD,GAAQhH,IAMrBiI,KAAM,WACJlE,KAAKT,MAAO,EAEZ,IACI4E,EADYnE,KAAKiC,WAAW,GACLG,WAC3B,GAAwB,UAApB+B,EAAW7E,KACb,MAAM6E,EAAW5F,IAGnB,OAAOyB,KAAKoE,MAGdlF,kBAAmB,SAASmF,GAC1B,GAAIrE,KAAKT,KACP,MAAM8E,EAGR,IAAIpG,EAAU+B,cACLsE,EAAOC,EAAKC,GAYnB,OAXApF,EAAOE,KAAO,QACdF,EAAOb,IAAM8F,EACbpG,EAAQuD,KAAO+C,EAEXC,IAGFvG,EAAQK,OAAS,OACjBL,EAAQM,IAAMtC,KAGNuI,EAGZ,IAAK,IAAI9B,EAAI1C,KAAKiC,WAAWQ,OAAS,EAAGC,GAAK,IAAKA,EAAG,CACpD,IAAId,EAAQ5B,KAAKiC,WAAWS,GACxBtD,EAASwC,EAAMQ,WAEnB,GAAqB,SAAjBR,EAAMC,OAIR,OAAOyC,EAAO,OAGhB,GAAI1C,EAAMC,QAAU7B,KAAK+D,KAAM,CAC7B,IAAIU,EAAWpI,EAAOsD,KAAKiC,EAAO,YAC9B8C,EAAarI,EAAOsD,KAAKiC,EAAO,cAEpC,GAAI6C,GAAYC,EAAY,CAC1B,GAAI1E,KAAK+D,KAAOnC,EAAME,SACpB,OAAOwC,EAAO1C,EAAME,UAAU,GACzB,GAAI9B,KAAK+D,KAAOnC,EAAMG,WAC3B,OAAOuC,EAAO1C,EAAMG,iBAGjB,GAAI0C,GACT,GAAIzE,KAAK+D,KAAOnC,EAAME,SACpB,OAAOwC,EAAO1C,EAAME,UAAU,OAG3B,CAAA,IAAI4C,EAMT,MAAM,IAAIjG,MAAM,0CALhB,GAAIuB,KAAK+D,KAAOnC,EAAMG,WACpB,OAAOuC,EAAO1C,EAAMG,gBAU9B5C,OAAQ,SAASG,EAAMf,GACrB,IAAK,IAAImE,EAAI1C,KAAKiC,WAAWQ,OAAS,EAAGC,GAAK,IAAKA,EAAG,CACpD,IAAId,EAAQ5B,KAAKiC,WAAWS,GAC5B,GAAId,EAAMC,QAAU7B,KAAK+D,MACrB1H,EAAOsD,KAAKiC,EAAO,eACnB5B,KAAK+D,KAAOnC,EAAMG,WAAY,CAChC,IAAI4C,EAAe/C,EACnB,OAIA+C,IACU,UAATrF,GACS,aAATA,IACDqF,EAAa9C,QAAUtD,GACvBA,GAAOoG,EAAa5C,aAGtB4C,EAAe,MAGjB,IAAIvF,EAASuF,EAAeA,EAAavC,WAAa,GAItD,OAHAhD,EAAOE,KAAOA,EACdF,EAAOb,IAAMA,EAEToG,GACF3E,KAAK1B,OAAS,OACd0B,KAAKwB,KAAOmD,EAAa5C,WAClBhD,GAGFiB,KAAK4E,SAASxF,IAGvBwF,SAAU,SAASxF,EAAQ4C,GACzB,GAAoB,UAAhB5C,EAAOE,KACT,MAAMF,EAAOb,IAcf,MAXoB,UAAhBa,EAAOE,MACS,aAAhBF,EAAOE,KACTU,KAAKwB,KAAOpC,EAAOb,IACM,WAAhBa,EAAOE,MAChBU,KAAKoE,KAAOpE,KAAKzB,IAAMa,EAAOb,IAC9ByB,KAAK1B,OAAS,SACd0B,KAAKwB,KAAO,OACa,WAAhBpC,EAAOE,MAAqB0C,IACrChC,KAAKwB,KAAOQ,GAGPjD,GAGT8F,OAAQ,SAAS9C,GACf,IAAK,IAAIW,EAAI1C,KAAKiC,WAAWQ,OAAS,EAAGC,GAAK,IAAKA,EAAG,CACpD,IAAId,EAAQ5B,KAAKiC,WAAWS,GAC5B,GAAId,EAAMG,aAAeA,EAGvB,OAFA/B,KAAK4E,SAAShD,EAAMQ,WAAYR,EAAMI,UACtCG,EAAcP,GACP7C,IAKb+F,MAAS,SAASjD,GAChB,IAAK,IAAIa,EAAI1C,KAAKiC,WAAWQ,OAAS,EAAGC,GAAK,IAAKA,EAAG,CACpD,IAAId,EAAQ5B,KAAKiC,WAAWS,GAC5B,GAAId,EAAMC,SAAWA,EAAQ,CAC3B,IAAIzC,EAASwC,EAAMQ,WACnB,GAAoB,UAAhBhD,EAAOE,KAAkB,CAC3B,IAAIyF,EAAS3F,EAAOb,IACpB4D,EAAcP,GAEhB,OAAOmD,GAMX,MAAM,IAAItG,MAAM,0BAGlBuG,cAAe,SAAS1C,EAAUf,EAAYE,GAa5C,OAZAzB,KAAKpB,SAAW,CACdlC,SAAU0D,EAAOkC,GACjBf,WAAYA,EACZE,QAASA,GAGS,SAAhBzB,KAAK1B,SAGP0B,KAAKzB,IAAMtC,GAGN8C,IAQJ/C,EA9sBM,KAwtBf,IACEiJ,mBAAqBlJ,EACrB,MAAOmJ,GAWmB,iBAAfC,WACTA,WAAWF,mBAAqBlJ,EAEhCqJ,SAAS,IAAK,yBAAdA,CAAwCrJ,cC/uBnBsJ,GACrB,IAAIC,EAActF,KAAKsF,KAAOD,EAAIC,KAAO,CACrCC,SAAU,GAGVC,EAAcxF,KAAKwF,KAAOF,EAAKE,KAAO,IAAIC,KAC9CD,EAAKE,OAAS,IACdF,EAAKG,KAAO,WACJL,EAAKM,UACLN,EAAKO,OAAOC,OAEZC,OAAOC,aAAaR,EAAKS,UACzBT,EAAKS,SAAWF,OAAOG,WAAWV,EAAKM,IAAKN,EAAKE,UAIzDJ,EAAKa,MAAQ,IAAIV,KACjBH,EAAKa,MAAMR,KAAO,WACdI,OAAOC,aAAaR,EAAKS,UACzBX,EAAKM,UAAY,GAErBP,EAAIe,SAASC,UAAUnE,KAAKoD,EAAKa,MAAML,KAEvCR,EAAKO,OAAS,IAAIJ,KAClBH,EAAKO,OAAOF,KAAO,WACfL,EAAKM,UAAY,EACjBJ,EAAKG,QAGTL,EAAKgB,cAAgB,IAAIb,KACzBH,EAAKgB,cAAcX,KAAO,WAClBL,EAAKM,UACLN,EAAKO,OAAOC,MAEZR,EAAKa,MAAML,OAInBR,EAAKiB,MAAQ,IAAId,KAAKH,EAAKO,OAAOF,MAClCN,EAAIkB,MAAMC,MAAMtE,KAAKoD,EAAKiB,MAAMT,gBCvCXT,GACrBA,EAAIoB,KAAO,GAEMpB,EAAIoB,KAAKC,UAAY,YAAaC,KAAnD,IAEIC,EAASvB,EAAIoB,KAAKG,MAAQ,UAAWL,EAAOrC,EAAO,KAAM2C,EAAO,GACnD,OAAT3C,IACAA,EAAOqC,EACPA,EAAQ,GAEZ,IAAI9D,EAASqE,KAAKC,MAAM7C,EAAOqC,GAASM,GACxC,IAAK,IAAInE,EAAI,EAAGA,EAAID,EAAQC,UAClB6D,EAAQ7D,EAAImE,GAItBG,EAAU3B,EAAIoB,KAAKO,OAAS,SAC5BC,EACAC,GAEA,IAAKA,GAAyC,GAAxBA,EAAczE,OAChC,OAAQwE,EACL,GAA4B,GAAxBC,EAAczE,OACrB,OAAQ0E,MAAMD,EAAc,IAAIE,KAAKH,GAClC,GAAIC,EAAczE,OAAS,EAAG,CACjC,IAAI4E,EAASF,MAAMD,EAAc,IAAIE,UAAKnL,GACtCqL,EAAMJ,EAAcjD,MAAM,GAC9B,IAAK,IAAIvB,KAAK2E,EACVA,EAAE3E,GAAKsE,EAAOC,EAAcK,GAEhC,OAAOD,IAIf,IAAIE,EAAS,SAAUC,GACnB,OAAOA,EAAIA,GAGf,IAAIC,EAAUpC,EAAIoB,KAAKgB,OAAS,CAC5BC,MAAO,SAAUC,EAAMC,GACnB,OAAOD,EAAKE,KAAKC,GAAOF,EAASE,KAErCC,IAAK,SAAUC,EAAOC,GAClB,IAAIC,EAAMf,MAAML,KAAKqB,IAAIH,EAAMvF,OAAQwF,EAAMxF,kBACpC2F,EAASN,EAAIpF,GAClBwF,EAAIxF,IAAMoF,EAId,OAFAE,EAAMzH,QAAQ6H,GACdH,EAAM1H,QAAQ6H,GACPF,GAEXG,SAAU,SAAUL,EAAOC,GACvB,OAAOR,EAAOM,IAAIC,EAAOP,EAAOC,MAAMO,GAAO,MAIxC5C,EAAIoB,KAAK6B,MAAQ,CAC1BC,MAAO,CAAC,EAAG,EAAG,GACdC,MAAO,CAAC,IAAK,IAAK,KAClBC,gBAAiB,SAAUC,GACvB,IAAIC,EAAO,IACX,IAAK,IAAIjG,KAAKkE,EAAM,GAChB+B,IAAS,IAAMD,EAAQhG,IAAIkG,SAAS,IAAI3E,MAAM,GAElD,OAAO0E,GAEXE,gBAAiB,SAAUF,GACvB,GAAgB,MAAZA,EAAK,GAAY,KAAM,mCAC3B,IAAID,EAAoC,CAAC,EAAG,EAAG,GAC/C,IAAK,IAAIhG,KAAKkE,EAAM,GAChB8B,EAAQhG,GAAKoG,SAASH,EAAK1E,MAAM,EAAIvB,EAAI,EAAG,EAAIA,EAAI,GAAI,IAE5D,OAAOgG,GAEXK,IAAK,SAAUC,EAAMC,GACjB,OAAOxB,EAAOM,IAAIiB,EAAKnB,IAAIN,GAAS0B,EAAKpB,IAAIN,IAASM,IAClDf,KAAKoC,QAKjB7D,EAAIoB,KAAKhB,KAAI,qBAQMkB,GACX3G,KAAKmJ,OAAS,GACdnJ,KAAKqG,UAAYc,MAAMiC,KAAKzC,GAC5B3G,KAAKwG,MAAQ,GACbxG,KAAKqJ,SAAU,EACf,IAAIC,EAAKtJ,KACTA,KAAK8F,IAAM,WACP,GAAIwD,EAAGD,QACH,IAAK,IAAIE,KAAQD,EAAGE,eACG,mBAARD,EACPA,KAEAE,QAAQC,KAAI,IAAIjL,OAAQkL,OACxBF,QAAQC,IAAG,0DACmDH,OAO9E9G,aACA,SACOzC,KAAK2F,KACR3F,KAAKmJ,OAAO1G,OACZzC,KAAKqG,UAAU5D,OACfzC,KAAKwG,MAAM/D,OAGnBmH,OACI,QAAS5J,KAAKyC,OAEd+G,qBACA,IAAIK,EAAgB7J,KAAK2F,KAAO,CAAC3F,KAAK2F,MAAQ,GAC9C,OAAO3F,KAAKmJ,OAAOW,OACfD,EACA7J,KAAKqG,UACLrG,KAAKwG,SAKjBnB,EAAIoB,KAAKsD,OAAS,SAAUC,EAAIC,GAC5B,IAAK,IAAIhH,KAAQgH,EACbD,EAAG/G,GAAQgH,EAAGhH,GAElB,OAAO+G,GAGX,IAAIE,EAAc7E,EAAIoB,KAAKyD,WAAa,SAAUF,EAAIC,GAClD,IAAK,IAAIhH,KAAQgH,EAAI,CACjB,IAAIE,EAAMF,EAAGhH,GACK,iBAAPkH,GACgB,iBAAZH,EAAG/G,KACV+G,EAAG/G,GAAQ,IAEfiH,EAAWF,EAAG/G,GAAOkH,IAGrBH,EAAG/G,GAAQkH,EAGnB,OAAOH,GCvJR,ICmBHI,EAAiB,CACjBC,WCpBqBhF,GACrBA,EAAIiF,KAAO,IAAI7E,KACfJ,EAAIkB,MAAQ,IAAId,KAChBJ,EAAIe,SAAW,IAAIX,KAEnBJ,EAAIiF,KAAK3E,KAAO,WACZ,IAAI4E,EAAUlF,EAAIkF,OAASC,SAASC,cAAc,UAClDF,EAAOG,GAAK,eACZF,SAASG,KAAKC,YAAYL,KDc9BM,WEtBqBxF,GACrBA,EAAIyF,KAAO,GACXzF,EAAIyF,KAAKC,QAAU,SAAUC,EAAQC,GACjC,IAAIH,EAAa3D,MAAM6D,GACvBF,EAAKE,OAASA,EACdF,EAAKG,MAAQA,EACbH,EAAKI,YAAc,WACf,IAAIC,EAAOhE,MAAM8D,EAAQ,GAAG7D,KAAK,GAEjC,OADA+D,GAAK,GAAMA,EAAKF,IAAS,EAClBE,GAEX,IAAK,IAAIC,KAAK/F,EAAIoB,KAAKG,MAAMoE,EAAS,GAClCF,EAAKM,GAAKN,EAAKI,cAKnB,OAHAJ,GAAK,GAAM3D,MAAc8D,GAAO7D,MAAK,GACrC0D,GAAK,GAAMA,GAAK,GAChBA,EAAKE,EAAS,GAAKF,GAAK,GACjBA,GAKX9K,KAAKqL,KAAOhG,EAAIgG,KAAOhG,EAAIyF,KAAKC,QAFnB,GACD,cCrBS1F,GACrB,IAAIgG,EAAOhG,EAAIgG,KACfA,EAAKjF,SAAW,IAAIX,KACpB4F,EAAKjF,SAASkF,OAAM,6FAYfC,MAAM,MACNtH,MAAM,GAAG,GACdoH,EAAKjF,SAASoF,MAAQ,CAClBC,EAAG,GACHC,EAAG,EACHC,EAAG,GAEPN,EAAKjF,SAAST,KAAO,WACjB,IAAK,IAAIyF,KAAKxE,MAAM,IAChB,IAAK,IAAIY,KAAKZ,MAAM,IAAK,CACrB,IAAIgF,EAASP,EAAKjF,SAASkF,OAAO,EAAIF,GAAG5D,IAAM,IACjC,KAAVoE,IACAP,EAAKD,EAAI,GAAG5D,GAAK6D,EAAKjF,SAASoF,MAAMI,MAKrDvG,EAAIe,SAASC,UAAUnE,KAAKmJ,EAAKjF,SAASN,eChCrBT,GACrB,IAAIwG,EAAsB7L,KAAK6L,SAAWxG,EAAIwG,SAAW,CACrDC,OAAQ,CACJC,EAAG,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GACzBC,EAAG,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GACzBC,EAAG,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GACzBC,EAAG,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GACzBC,EAAG,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GACzBC,EAAG,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GACzBC,EAAG,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAE7BC,eAAgB,CACZP,EAAG,CAAC,GAAK,KACTC,EAAG,CAAC,GAAK,KACTC,EAAG,CAAC,GAAK,KACTC,EAAG,CAAC,GAAK,KACTC,EAAG,CAAC,EAAG,GACPC,EAAG,CAAC,EAAG,GACPC,EAAG,CAAC,EAAG,IAEXE,OAAQ,CACJR,EAAG,EACHC,EAAG,EACHC,EAAG,EACHC,EAAG,EACHC,EAAG,EACHC,EAAG,EACHC,EAAG,IAGXR,EAASW,MAAQrQ,OAAOsH,KAAKoI,EAASC,QAEtCD,EAASY,WAAa,WAGlB,OADIZ,EAASW,MAAM1F,KAAK4F,MAAMb,EAASW,MAAM/J,OAASqE,KAAK6F,sBClC1CtH,GACrB,IAAIuH,EAAoBvH,EAAIwH,KAAO,GACnCxH,EAAIwH,KAAKC,QAAU,CACfxN,KAAM,GACNyN,MAAO,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAC7BC,IAAK,EACLxB,MAAO,EACPyB,IAAK,CACD7B,EAAG,EACH5D,EAAG,IAGVnC,EAAIwH,KAAKC,QAAgBI,IAAM,CAC5BD,IAAK,IAET5H,EAAIoB,KAAKyD,WAAW0C,EAAMA,EAAKE,SAC/BF,EAAKK,IAAM,CACP7B,EAAG,GACH5D,EAAG,GAGPnC,EAAI8H,MAAQ,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GACpD9H,EAAI8H,OAAM,GAAM,EAEhB9H,EAAI+H,SAAW,SAAUP,EAAW/B,GAChC+B,EAAKQ,KAAO,IAAI5H,KAChBoH,EAAKQ,KAAK1H,KAAO,WACb,IAAK,IAAIjD,KAAKkE,MAAM,EAAG,EAAG,GAAI,CAC1B,IAAIwE,EAAIyB,EAAKI,IAAI7B,EAAIyB,EAAKE,MAAMrK,GAC5B8E,EAAIqF,EAAKI,IAAIzF,EAAIqF,EAAKE,MAAMrK,EAAI,GACpCoI,EAAKM,GAAG5D,GAAKqF,EAAKrB,QAI1BqB,EAAKS,OAAS,IAAI7H,KAClBoH,EAAKS,OAAO3H,KAAO,WACf,IAAK,IAAIjD,KAAKkE,MAAM,EAAG,EAAG,GAAI,CAC1B,IAAIwE,EAAIyB,EAAKI,IAAI7B,EAAIyB,EAAKE,MAAMrK,GAC5B8E,EAAIqF,EAAKI,IAAIzF,EAAIqF,EAAKE,MAAMrK,EAAI,GAChCoI,EAAKM,GAAG5D,IAAMqF,EAAKrB,QACnBV,EAAKM,GAAG5D,GAAK,KAKzBqF,EAAKU,UAAY,WACb,IAAK,IAAI7K,KAAKkE,MAAM,EAAG,EAAG,GAAI,CAC1B,IAAIwE,EAAIyB,EAAKI,IAAI7B,EAAIyB,EAAKE,MAAMrK,GAC5B8E,EAAIqF,EAAKI,IAAIzF,EAAIqF,EAAKE,MAAMrK,EAAI,GACpC,GAAI2C,EAAI8H,MAAMrC,EAAKM,GAAG5D,IAAK,OAAO,EAEtC,OAAO,IAIfnC,EAAI+H,SAASR,EAAMvH,EAAIgG,MAEvBuB,EAAKY,SAAW,WACZ,IAAIN,EAAMN,EAAKM,IACfA,EAAI5N,KAAOsN,EAAKtN,KAChB4N,EAAIH,MAAQH,EAAKG,MACjBG,EAAIF,IAAMJ,EAAKI,IACfE,EAAI1B,MAAQoB,EAAKpB,MACjB0B,EAAID,IAAIzF,EAAIoF,EAAKK,IAAIzF,EACrB0F,EAAID,IAAI7B,EAAIwB,EAAKK,IAAI7B,GAGzBwB,EAAKa,YAAc,WACf,IAAIP,EAAMN,EAAKM,IACfN,EAAKtN,KAAO4N,EAAI5N,KAChBsN,EAAKG,MAAQG,EAAIH,MACjBH,EAAKI,IAAME,EAAIF,IACfJ,EAAKpB,MAAQ0B,EAAI1B,MACjBoB,EAAKK,IAAIzF,EAAI0F,EAAID,IAAIzF,EACrBoF,EAAKK,IAAI7B,EAAI8B,EAAID,IAAI7B,GAGzBwB,EAAKc,KAAO,IAAIjI,KAChBmH,EAAKc,KAAKvE,OAAOjH,KAAK0K,EAAKU,OAAOxH,KAClC8G,EAAKc,KAAKlH,MAAMtE,KAAK0K,EAAKS,KAAKvH,KAC/B8G,EAAKc,KAAKlG,EAAI,EACdoF,EAAKc,KAAKtC,EAAI,EACdwB,EAAKc,KAAK/H,KAAO,WACbiH,EAAKK,IAAIzF,GAAKoF,EAAKc,KAAKlG,EACxBoF,EAAKK,IAAI7B,GAAKwB,EAAKc,KAAKtC,GACnBwB,EAAKc,KAAKH,UAAYX,EAAKW,eAC5BX,EAAKK,IAAIzF,GAAKoF,EAAKc,KAAKlG,EACxBoF,EAAKK,IAAI7B,GAAKwB,EAAKc,KAAKtC,GAE5BwB,EAAKc,KAAKlG,EAAI,EACdoF,EAAKc,KAAKtC,EAAI,GAGlBwB,EAAKe,OAAS,IAAIlI,KAClBmH,EAAKe,OAAOxE,OAAOjH,KAAK0K,EAAKU,OAAOxH,KACpC8G,EAAKe,OAAOnH,MAAMtE,KAAK0K,EAAKS,KAAKvH,KACjC8G,EAAKe,OAAOhI,KAAO,WACf,IAAIiI,EAAKC,EACT,CACI,IAAIC,EAAYjC,EAASS,eAAeM,EAAKtN,MAC7CsO,EAAME,EAAU,GAChBD,EAAMC,EAAU,GAEpB,IAAIC,EAAWnB,EAAKG,MAChBiB,EAAMpB,EAAKG,MAAQ5F,MAAM,GAC7B,IAAK,IAAIzE,KAAKkE,MAAM,EAAG,EAAG,GAAI,CAC1B,IAAIqH,EAAKF,EAASrL,GAAKkL,EACnBM,EAAKH,EAASrL,EAAI,GAAKmL,EAC3B,OAAQjB,EAAKe,OAAOX,IAAM,GACtB,KAAK,EACDgB,EAAGtL,GAAKkL,EAAMK,EACdD,EAAGtL,EAAI,GAAKmL,EAAMK,EAClB,MACJ,KAAK,EACDF,EAAGtL,GAAKkL,EAAMM,EACdF,EAAGtL,EAAI,GAAKmL,EAAMI,EAClB,MACJ,KAAK,EACDD,EAAGtL,GAAKkL,EAAMK,EACdD,EAAGtL,EAAI,GAAKmL,EAAMK,EAClB,MACJ,KAAK,EACDF,EAAGtL,GAAKkL,EAAMM,EACdF,EAAGtL,EAAI,GAAKmL,EAAMI,GAI9BrB,EAAKI,KAAOJ,EAAKI,IAAMJ,EAAKe,OAAOX,KAAO,EAC1C,IAAIO,EAAYX,EAAKW,YACrB,IAAK,IAAI/F,IAAK,EAAC,GAAI,EAAI,EAAG,GAElB+F,IACAX,EAAKc,KAAKlG,EAAIA,EACdoF,EAAKc,KAAK/H,OACV4H,EAAYX,EAAKc,KAAKH,WAG9BX,EAAKe,OAAOJ,UAAYA,EACpBA,IAEAX,EAAKG,MAAQgB,EACbnB,EAAKI,KAAOJ,EAAKI,IAAMJ,EAAKe,OAAOX,KAAO,GAE9CJ,EAAKe,OAAOX,IAAM,GAGtBJ,EAAKuB,KAAO,IAAI1I,KAChBmH,EAAKuB,KAAKZ,UAAY,IAAI9H,KAC1BmH,EAAKuB,KAAKxI,KAAO,WACbiH,EAAKc,KAAKtC,GAAI,EACdwB,EAAKc,KAAK5H,MACN8G,EAAKc,KAAKH,WACVX,EAAKuB,KAAKZ,UAAUzH,OAG5BT,EAAIC,KAAKE,KAAKgB,MAAMtE,KAAK0K,EAAKuB,KAAKrI,KAEnC8G,EAAKwB,KAAO,IAAI3I,KAChBmH,EAAKwB,KAAK/H,UAAUnE,KAAK0K,EAAKuB,KAAKxI,MACnCiH,EAAKwB,KAAK/H,UAAUnE,KAAKmD,EAAIC,KAAKE,KAAKG,MAEvCiH,EAAKyB,UAAY,IAAI5I,KACrBmH,EAAKyB,UAAUlF,OAAOjH,KAAK0K,EAAKU,OAAOxH,KACvC8G,EAAKyB,UAAU7H,MAAMtE,KAAK0K,EAAKS,KAAKvH,KACpC8G,EAAKyB,UAAU7H,MAAMtE,KAAKmD,EAAIC,KAAKE,KAAKM,KACxC8G,EAAK0B,iBAAmB,SAAUzB,GAC9B,OAAO,cAECA,EAAKI,IAAI7B,GAAK,SACRyB,EAAKU,aACfV,EAAKI,IAAI7B,GAAK,IAGtBwB,EAAKyB,UAAU1I,KAAOiH,EAAK0B,iBAAiB1B,GAE5CA,EAAK2B,WAAa,IAAI9I,KACtBmH,EAAK2B,WAAWC,MAAQ,EACxB5B,EAAK2B,WAAWpF,OAAOjH,KAAK0K,EAAKU,OAAOxH,KACxC8G,EAAK2B,WAAW/H,MAAMtE,KAAK0K,EAAKS,KAAKvH,KACrC8G,EAAK2B,WAAW5I,KAAO,WACnB,IAAI8I,EAAO7B,EAAKK,IAAI7B,EACpBwB,EAAKK,IAAI7B,GAAK,EACVwB,EAAKW,YACLX,EAAKK,IAAI7B,GAAK,GAGlBwB,EAAKyB,UAAU1I,OACfiH,EAAKK,IAAI7B,GAAKwB,EAAK2B,WAAWC,MAC1B5B,EAAKK,IAAI7B,EAAIqD,GACbnJ,KAAKE,KAAKG,SAKlB,IAAIkG,EAAWxG,EAAIwG,SAEnBe,EAAK8B,MAAQ,IAAIjJ,KACjBmH,EAAK8B,MAAM/I,KAAO,WACdiH,EAAKY,WACL,IAAIlO,EAAQsN,EAAKtN,KAAOsN,EAAK8B,MAAMC,SACnC/B,EAAKG,MAAQlB,EAASC,OAAOxM,GAAM2E,MAAM,GACzC2I,EAAKI,IAAM,EACXJ,EAAKpB,MAAQK,EAASU,OAAOjN,GAC7BsN,EAAKK,IAAI7B,EAAI,GACbwB,EAAKK,IAAIzF,EAAI,EACToF,EAAKW,cACLX,EAAKa,cACLpI,EAAIe,SAASN,OAEjB8G,EAAK8B,MAAMC,SAAW,IAG1B/B,EAAK8B,MAAMrI,UAAUnE,KAAK0K,EAAKS,KAAKvH,KACpCT,EAAIiF,KAAK9D,MAAMtE,KAAK0K,EAAK8B,MAAM5I,KAC/B8G,EAAKuB,KAAKZ,UAAU/G,MAAMtE,KAAK0K,EAAK8B,MAAM5I,KAE1C8G,EAAKgC,QAAU,IAAInJ,KACnBmH,EAAK8B,MAAMvF,OAAOjH,KAAK0K,EAAKgC,QAAQ9I,KACpC8G,EAAKgC,QAAQjJ,KAAO,WACXiH,EAAK8B,MAAMC,WACZ/B,EAAK8B,MAAMC,SAAWtJ,EAAIwG,SAASY,yBC5NtBpH,GAErB,IAAIwJ,EACC7O,KAAK6O,IACNxJ,EAAIwJ,IACA,CACIC,MAAO,CACH7D,MAAO5F,EAAIgG,KAAKJ,MAAQ,IAAM,IAC9BD,OAAQ3F,EAAIgG,KAAKL,QAErB6B,KAAM,GACNxB,KAAM,GACNG,MAAO,CACH,EAAG,OACH,EAAG,QACH,EAAG,QACH,EAAG,OACH,EAAG,MACH,EAAG,SACH,EAAG,SACH,EAAG,QACH,EAAG,OACH,EAAG,OACH,GAAI,SACJ,GAAI,QACJ,GAAI,QACJ,GAAI,QAERuD,IAAK,CACDC,KAAM,UACN,QAAS,UACT,QAAS,UACTzG,MAAO,UACPC,MAAO,UACPyG,KAAM,UACNC,IAAK,UACLC,OAAQ,UACRC,OAAQ,UACRC,MAAO,UACPC,KAAM,UACNC,KAAM,UACNC,OAAQ,YAIxBzJ,OAAO0J,WAAa,IAAIhK,KACxB+E,SAASG,KAAK+E,SAAW3J,OAAO0J,WAAW3J,IAE3C+I,EAAIvE,KAAO,IAAI7E,KACfoJ,EAAIvE,KAAK3E,KAAO,WACZ,IAAIgK,EAAQnF,SAASC,cAAc,SACnCkF,EAAMC,YAAW,wKAYjBpF,SAASqF,KAAKjF,YAAY+E,GAC1Bd,EAAIiB,IAAMzK,EAAIkF,OAAOwF,WAAW,MAChChK,OAAO0J,WAAWjJ,MAAMtE,KAAK2M,EAAImB,eAErC3K,EAAIiF,KAAK9D,MAAMtE,KAAK6D,OAAO0J,WAAW3J,KACtCT,EAAIiF,KAAKjE,UAAUnE,KAAK2M,EAAIvE,KAAKxE,KAEjC+I,EAAImB,aAAe,WACf,IAAIC,EAAKpB,EAAIC,MACToB,EAAM7K,EAAIkF,OAAOU,MAAQlF,OAAOoK,WAChCC,EAAM/K,EAAIkF,OAAOS,OAASjF,OAAOsK,YAGjCH,EAAKD,EAAGjF,OAASoF,EAAKH,EAAGhF,MAGzB4D,EAAIyB,IAAM,EAAIxJ,KAAK4F,MAAM0D,GAAM,EAAIH,EAAGjF,SAGtC6D,EAAIyB,IAAM,EAAIxJ,KAAK4F,MAAMwD,GAAM,EAAID,EAAGhF,QAE1C4D,EAAI0B,QAAUzJ,KAAKC,KAAK8H,EAAIyB,IAAM,IAClCzB,EAAI2B,SAAW1J,KAAKC,KAAM,EAAI8H,EAAIyB,IAAO,GACzCL,EAAGQ,OAAS5B,EAAIyB,IAAML,EAAGhF,MACzBgF,EAAGS,QAAU7B,EAAIyB,IAAML,EAAGjF,OAC1BiF,EAAGU,MAAQ7J,KAAKC,MAAMmJ,EAAKD,EAAGQ,QAAU,GACxCR,EAAGW,MAAQ9J,KAAKC,MAAMqJ,EAAKH,EAAGS,SAAW,GACzCT,EAAG5C,KAAKvH,OAGZ+I,EAAIC,MAAMzB,KAAO,IAAI5H,KACrBoJ,EAAIC,MAAMzB,KAAK1H,KAAO,WAElBkJ,EAAIiB,IAAIe,SAAS,EAAG,EAAGxL,EAAIkF,OAAOU,MAAO5F,EAAIkF,OAAOS,SAMxD6D,EAAIiC,SAAW,SAAUC,EAAcC,EAAcf,GACjDc,EAAQ1D,KAAO,WACX,IAAIyC,EAAMjB,EAAIiB,IACdA,EAAImB,UAAY,OAChB,IAAIC,EAAIrC,EAAI0B,QACZT,EAAIe,SACAZ,EAAGU,MAAQK,EAAQG,KAAOtC,EAAIyB,IAAMY,EACpCjB,EAAGW,MAAQI,EAAQI,KAAOvC,EAAIyB,IAAMY,EACpCrC,EAAIyB,IAAMU,EAAQ/F,MAAQ,EAAIiG,EAC9BrC,EAAIyB,IAAMU,EAAQhG,OAAS,EAAIkG,GAEnC,IAAK,IAAI9F,KAAKxE,MAAMoK,EAAQhG,QACxB,IAAK,IAAIxD,KAAKZ,MAAMoK,EAAQ/F,OACxB8F,EAAQM,WAAWjG,EAAG5D,IAIlCqH,EAAIC,MAAMzB,KAAKhH,UAAUnE,KAAK6O,EAAQ1D,MAEtC0D,EAAQM,WAAa,SAAUjG,EAAG5D,GAC9B,KAAI4D,GAAK4F,EAAQhG,QAAUI,EAAI,GAAK5D,EAAI,GAAKA,EAAIwJ,EAAQM,OAAzD,CAGA,IAAIhB,EAAMzB,EAAIyB,IACVR,EAAMjB,EAAIiB,IACVc,EAAQX,EAAGW,OAASX,EAAGjF,OAAS,EAAII,EAAI4F,EAAQI,MAAQd,EACxDK,EAAQV,EAAGU,OAASnJ,EAAIwJ,EAAQG,MAAQb,EACxCiB,EAAWP,EAAQ5F,GAAG5D,GAEtBgE,EAAQqD,EAAIE,IAAIF,EAAIrD,MAAM+F,GAAY,IAAO/J,EAAI4D,GAAK,IAC1D,GAAImG,EAAU,CACV,IAAIC,EAAYnM,EAAIoB,KAAK6B,MAAMG,gBAC3BpD,EAAIoB,KAAKgB,OAAOC,MACZrC,EAAIoB,KAAK6B,MAAMO,gBAAgB2C,GAC/B,IACF3D,IAAIf,KAAK2K,QAEf3B,EAAImB,UAAYO,EAChB1B,EAAIe,SAASF,EAAOC,EAAON,EAAKA,GAChCR,EAAImB,UAAYzF,EAChBsE,EAAIe,SACAF,EAAQ9B,EAAI0B,QACZK,EAAQ/B,EAAI0B,QACZD,EAAM,EAAIzB,EAAI0B,QACdD,EAAM,EAAIzB,EAAI0B,SAElB,IAAImB,EAAgBrM,EAAIoB,KAAK6B,MAAMG,gBAC/BpD,EAAIoB,KAAKgB,OAAOC,MACZrC,EAAIoB,KAAK6B,MAAMO,gBAAgB2C,GAC/B,IACF3D,IAAIf,KAAK2K,QAEf3B,EAAImB,UAAYS,EAChB5B,EAAIe,SACAF,EAAQ9B,EAAI2B,SACZI,EAAQ/B,EAAI2B,SACZF,EAAM,EAAIzB,EAAI2B,SACdF,EAAM,EAAIzB,EAAI2B,eAGlBV,EAAImB,UAAYzF,EAChBsE,EAAIe,SAASF,EAAOC,EAAON,EAAKA,MAK5CjL,EAAIgG,KAAK+F,KAAO,EAChB/L,EAAIgG,KAAK8F,KAAO,IAChBtC,EAAIiC,SAASjC,EAAIxD,KAAMhG,EAAIgG,KAAMwD,EAAIC,OAErCD,EAAIzB,SAAW,SAAUuE,EAAcC,EAAcb,GACjDY,EAAQtE,KAAO,WACX,IAAK,IAAI3K,KAAK2C,EAAIoB,KAAKG,MAAM,EAAG,EAAG,GAAI,CACnC,IAAIwE,EAAIwG,EAAQ3E,IAAI7B,EAAIwG,EAAQ7E,MAAMrK,GAClC8E,EAAIoK,EAAQ3E,IAAIzF,EAAIoK,EAAQ7E,MAAMrK,EAAI,GAC1CqO,EAAQM,WAAWjG,EAAG5D,KAG9BoK,EAAQvE,KAAK7G,MAAMtE,KAAKyP,EAAQtE,MAEhCsE,EAAQE,OAAS1K,MAAM,GAAGC,KAAK,GAC/BuK,EAAQG,QAAU,WACd,IAAIC,EAAOJ,EAAQE,OACnB,IAAK,IAAInP,KAAKkE,MAAM,EAAG,EAAG,GACtBmL,EAAKrP,GAAKkP,EAAQ3E,IAAI7B,EAAIwG,EAAQ7E,MAAMrK,GACxCqP,EAAKrP,EAAI,GAAKkP,EAAQ3E,IAAIzF,EAAIoK,EAAQ7E,MAAMrK,EAAI,IAGxDkP,EAAQtE,OAAOjH,UAAUnE,KAAKyP,EAAQG,SAEtCH,EAAQK,MAAQ,WACZ,IAAID,EAAOJ,EAAQE,OACnB,IAAK,IAAInP,KAAKkE,MAAM,EAAG,EAAG,GACtBmK,EAAQM,WAAWU,EAAKrP,GAAIqP,EAAKrP,EAAI,KAG7CkP,EAAQvE,KAAKhH,UAAUnE,KAAKyP,EAAQK,QAMxCnD,EAAIzB,SAASyB,EAAIhC,KAAMxH,EAAIwH,KAAMgC,EAAIxD,MAErChG,EAAIgG,KAAKjF,SAASI,MAAMtE,KAAK2M,EAAIxD,KAAKgC,gBC9MjBhI,GAErB,IAAI4M,EAAYjS,KAAKiS,IAAM5M,EAAI4M,IAAM,GAErCA,EAAI3H,KAAO,IAAI7E,KACfwM,EAAI3H,KAAK3E,KAAO,WAEZ6E,SAASG,KAAKuH,UAAYD,EAAIE,eAElC9M,EAAIiF,KAAKjE,UAAUnE,KAAK+P,EAAI3H,KAAKxE,KAEjCmM,EAAIG,QAAUjL,MAAM,KACpB,IAAK,IAAIzE,KAAK2C,EAAIoB,KAAKG,MAAM,KACzBqL,EAAIG,QAAQ1P,GAAK,IAAI+C,KAEzBwM,EAAIE,cAAgB,SAAUE,GAC1BJ,EAAIG,QAAQC,GAAKA,EACjB,IAAIC,EAAID,EAAGE,QAEPN,EAAIG,QAAQE,GAAG1I,OACfqI,EAAIG,QAAQE,GAAGxM,MACRT,EAAImN,OACX/I,QAAQC,IAAI2I,EAAGE,UAIvB,CACI,IAAIE,EAAKR,EAAIG,QACbK,EAAGC,OAASD,EAAG,IACfA,EAAGE,SAAWF,EAAG,IACjBA,EAAGG,KAAOH,EAAG,IACbA,EAAGI,OAASJ,EAAG,IACfA,EAAGK,IAAML,EAAG,IACZA,EAAGM,UAAYN,EAAG,IAClBA,EAAGO,KAAOP,EAAG,IACbA,EAAGQ,GAAKR,EAAG,IACXA,EAAGS,MAAQT,EAAG,IACdA,EAAGrE,KAAOqE,EAAG,IACbA,EAAGU,EAAIV,EAAG,eCpCOpN,GAErB,IAAI+N,EAAcpT,KAAKoT,KAAO/N,EAAI+N,KAAO,GCCP,GAAKC,QACvCA,EAAOC,SACPA,MAEA,IAAIC,EAAcC,GAGVA,EAAMC,UAAU,IAAMD,EAAME,eAAeD,UAAU,IAAMD,EAI/DG,GAAW,EACXC,EAAQ,EAERC,EAAoBC,IACpBH,GAAW,EACX,IAAII,EAAQR,EAAWO,GAEvBF,EAAQG,EAAMC,SAGdC,EAAmBH,IAEnB,GADAH,GAAW,GACNC,EACD,OAGJ,IAEIM,EAFQX,EAAWO,GAEFE,QAEjB9F,EAAKgG,EAAWN,EAEhB9M,KAAKqN,IAAIjG,GAAM,KAInB0F,EAAQM,EAGJZ,EADApF,EAAK,EACI,OAEA,WAGbkG,EAAc,KACTT,IACDL,EAAS,OACTK,GAAW,IAIfU,GAAc,EACdC,EAAmBjC,IACnBgC,GAAc,EACdR,EAAiBxB,IAGjBkC,EAAmBlC,IACfgC,GACAJ,EAAgB5B,IAIpBmC,EAAa,KACbH,GAAc,EACdD,KAGJf,EAAQoB,iBAAiB,aAAcZ,GAAkB,GACzDR,EAAQoB,iBAAiB,YAAaR,GAAiB,GACvDZ,EAAQoB,iBAAiB,WAAYL,GAAgB,GACrDf,EAAQoB,iBAAiB,YAAaH,GAAiB,GACvDjB,EAAQoB,iBAAiB,YAAaF,GAAiB,GACvDlB,EAAQoB,iBAAiB,UAAWD,GAAe,IDzEnDE,CAA4B,CACxBrB,QAAS7I,SAASmK,gBAClBrB,SAAWsB,IACPnL,QAAQC,IAAI,OAAQkL,GACP,SAATA,EACAxB,EAAKyB,SAAS/O,MACE,UAAT8O,EACPxB,EAAK0B,UAAUhP,MACC,QAAT8O,GACPxB,EAAKzF,OAAO7H,SAKxBsN,EAAK2B,eACD,0DAA0DxJ,MAAM,KACpE,IAAK,IAAIyJ,KAAY5B,EAAK2B,eACtB3B,EAAK4B,GAAY,IAAIvP,KAEzB2N,EAAK9M,cAAgB,IAAIb,KAEzB2N,EAAK6B,OAAS,WACV,IAAK,IAAID,KAAY5B,EAAK2B,eACtB3B,EAAK4B,GAAU3L,SAAU,GAGjC/D,KAAKO,OAAOQ,UAAUnE,KAAKkR,EAAK6B,QAEhC7B,EAAK8B,QAAU,WACX,IAAK,IAAIF,KAAY5B,EAAK2B,eACtB3B,EAAK4B,GAAU3L,SAAU,GAGjC/D,KAAKa,MAAME,UAAUnE,KAAKkR,EAAK8B,SAG/B,CACI,IAAIzC,EAAKpN,EAAI4M,IAAIG,QAEjBK,EAAGI,OAAOxM,UAAUnE,KAAKkR,EAAK7E,WAAWzI,KAEzC2M,EAAGO,KAAK3M,UAAUnE,KAAKkR,EAAKyB,SAAS/O,KACrC2M,EAAGS,MAAM7M,UAAUnE,KAAKkR,EAAK0B,UAAUhP,KACvC2M,EAAGrE,KAAK/H,UAAUnE,KAAKkR,EAAK+B,SAASrP,KAErC2M,EAAGQ,GAAG5M,UAAUnE,KAAKkR,EAAKzF,OAAO7H,KAEjC2M,EAAGE,SAAStM,UAAUnE,KAAKkR,EAAK/E,UAAUvI,KAE1C2M,EAAGC,OAAOrM,UAAUnE,KAAKkR,EAAK9M,cAAcR,KAC5C2M,EAAGU,EAAE9M,UAAUnE,KAAKkR,EAAK9M,cAAcR,KAI3C,IAAI+G,EAAOxH,EAAIwH,KACfuG,EAAK+B,SAAS9O,UAAUnE,KAAK2K,EAAKuB,KAAKtI,KACvCsN,EAAKyB,SAASlP,KAAO,WACjBkH,EAAKa,KAAKlG,GAAI,EACdqF,EAAKa,KAAK5H,OAEdsN,EAAK0B,UAAUnP,KAAO,WAClBkH,EAAKa,KAAKlG,EAAI,EACdqF,EAAKa,KAAK5H,OAEdsN,EAAKzF,OAAOhI,KAAO,WACfkH,EAAKc,OAAOX,IAAM,EAClBH,EAAKc,OAAO7H,OAEhBsN,EAAK/E,UAAUhI,UAAUnE,KAAK2K,EAAKwB,UAAUvI,KAC7CsN,EAAK7E,WAAWlI,UAAUnE,KAAK2K,EAAK0B,WAAWzI,KAE/CsN,EAAK9M,cAAcD,UAAUnE,KAAKoD,KAAKgB,cAAcR,eE7EhCT,GACrB,IAAI+P,EAAoBpV,KAAKoV,GAAK/P,EAAIgQ,aAAe,GACjDxI,EAAOxH,EAAIwH,KACXxB,EAAOhG,EAAIgG,KACXzE,EAAQvB,EAAIoB,KAAKG,MAErBwO,EAAGE,WAAa,IAAIjQ,EAAIoB,KAAKhB,KAC7B2P,EAAGE,WAAW3P,KAAO,WACjB0F,EAAKkK,OAAOH,EAAGE,WAAWlK,EAAG,GAC7BC,EAAKA,EAAKL,QAAUK,EAAKH,cACzBG,EAAKA,EAAKL,OAAS,GAAKK,GAAK,IAEjC+J,EAAGE,WAAW9O,MAAMtE,KAAKmD,EAAIwJ,IAAIxD,KAAKgC,MAEtC+H,EAAGI,WAAa,WACZ,IAAIC,EAAiB,GACrB,IAAK,IAAI/S,KAAKkE,EAAM,EAAG,EAAG,GAAI,CAC1B,IAAIwE,EAAIyB,EAAKI,IAAI7B,EAAIyB,EAAKE,MAAMrK,GAC5B2C,EAAIgG,KAAKD,GAAGsK,OAAOC,GAAMA,KACzBF,EAAevT,KAAKkJ,GAG5BqK,EAAeG,MAAI,CAAEvO,EAAGsE,IAAMA,EAAItE,IAClC,IAAIwO,GAAO,EACX,IAAK,IAAIzK,KAAKqK,EACNrK,IAAMyK,IACNT,EAAGE,WAAWlK,EAAIA,EAClBgK,EAAGE,WAAWxP,OAElB+P,EAAOzK,GAGfyB,EAAKsB,KAAKZ,UAAU/G,MAAMsP,QAAQV,EAAGI,sBChChBnQ,GACrB,IAAI0Q,EAAc/V,KAAK+V,KAAO1Q,EAAI0Q,KAAO,GAErCC,EAAchW,KAAKgW,KAAO3Q,EAAI2Q,KAAO,CACrC1W,KAAM,GACNyN,MAAO,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAC7BC,IAAK,EACLxB,MAAO,EACPyB,IAAK,CACDzF,EAAG,EACH4D,EAAG,GAEPyD,IAAK,IAMTkH,EAAKjL,KAAOzF,EAAIyF,KAAKC,QAFR,EACD,GAIZ1F,EAAI+H,SAAS4I,EAAMD,EAAKjL,MACxBkL,EAAKtH,MAAQ,IAAIjJ,KACjBuQ,EAAKtH,MAAM/I,KAAO,WACd,IAAIrG,EAAQ0W,EAAK1W,KAAO0W,EAAKtH,MAAMC,SACnCqH,EAAKjJ,MAAQ1H,EAAIwG,SAASC,OAAOxM,GACjC0W,EAAKxK,MAAQnG,EAAIwG,SAASU,OAAOjN,IAErC0W,EAAKtH,MAAMlI,MAAMtE,KAAK8T,EAAK3I,KAAKvH,KAEhCiQ,EAAKE,KAAO,IAAIxQ,KAChBsQ,EAAKE,KAAKtQ,KAAO,WACb,IAAIuQ,EAAW7Q,EAAIwH,KAAKvN,KACxB,GAAI0W,EAAK1W,KAAM,CACX,IAAI6W,EAAWH,EAAK1W,KACpB+F,EAAIwH,KAAK6B,MAAMC,SAAWwH,EAE9B9Q,EAAIwH,KAAK6B,MAAM5I,MACfkQ,EAAKtH,MAAMC,SAAWuH,EACtBF,EAAKtH,MAAM5I,OAEfiQ,EAAKE,KAAK9M,OAAOjH,KAAKmD,EAAIwH,KAAKS,OAAOxH,KACtCiQ,EAAKE,KAAK9M,OAAOjH,KAAK8T,EAAK1I,OAAOxH,KAGlCT,EAAIwJ,IAAIzB,SAAS4I,EAAKnH,IAAKmH,EAAMD,EAAKjL,MAEtC,IAAImF,EAAM5K,EAAI0Q,KAAKjH,MAAQ3S,OAAO6B,OAAOqH,EAAIwJ,IAAIC,OACjDmB,EAAGhF,MA/BS,EAgCZgF,EAAGjF,OAjCU,EAmCb+K,EAAKjL,KAAKsG,KAAO,EACjB2E,EAAKjL,KAAKqG,KAAO,IACjB9L,EAAIwJ,IAAIiC,SAASiF,EAAKjL,KAAMiL,EAAKjL,KAAMmF,GAEvC,CAEI,IAAIwC,EAAKpN,EAAI4M,IAAIG,QACjBK,EAAG2D,OAAS3D,EAAG,IAGfpN,EAAI+N,KAAK2C,KAAO,IAAItQ,KACpBgN,EAAG2D,OAAO/P,UAAUnE,KAAKmD,EAAI+N,KAAK2C,KAAKjQ,KACvCT,EAAI+N,KAAK2C,KAAK1P,UAAUnE,KAAK6T,EAAKE,KAAKnQ,gBC/DtBT,GACrB,IAAIgR,EAAoBrW,KAAKqW,QAAUhR,EAAIgR,QAAU,YAU5CC,EAAKC,GACV,IAAIjN,EAAWtJ,KACfsJ,EAAGiN,MAAQA,EACX,IAAI1J,EAAcvD,EAAGuD,KAAO,IAE5B3C,EADiB7E,EAAIoB,KAAKyD,YACf2C,EAAMxH,EAAIwH,KAAKC,SAC1BD,EAAKvN,KAAO+F,EAAIwG,SAASY,aACzBnD,EAAGqI,QAAU,GACbrI,EAAGwB,KAAOzF,EAAIyF,KAAKC,QAXN,EACD,GAWZ,IAAIkF,EAAM3G,EAAGwF,MAAQ3S,OAAO6B,OAAOqH,EAAIwJ,IAAIC,OAC3CmB,EAAGhF,MAZS,EAaZgF,EAAGjF,OAdU,EAeb1B,EAAGwB,KAAKsG,MAAO,KAAQmF,EACvBjN,EAAGwB,KAAKqG,KAAO9L,EAAIgG,KAAK8F,KAAO9L,EAAIgG,KAAKJ,MAAQ,IAEhD5F,EAAI+H,SAASP,EAAMvD,EAAGwB,MACtBzF,EAAIwJ,IAAIzB,SAAS9D,EAAGqI,QAAS9E,EAAMvD,EAAGwB,MACtCzF,EAAIwJ,IAAIiC,SAASxH,EAAGwB,KAAMxB,EAAGwB,KAAMmF,GAEnC3G,EAAGoF,MAAQ,IAAIjJ,KACf6D,EAAGoF,MAAM/I,KAAO,WACZ,IAAIrG,EAAQuN,EAAKvN,KAAOgK,EAAGkN,QAC3B3J,EAAKE,MAAQ1H,EAAIwG,SAASC,OAAOxM,GACjCuN,EAAKrB,MAAQnG,EAAIwG,SAASU,OAAOjN,IAErCgK,EAAGoF,MAAMvF,OAAOjH,KAAM2K,EAAaS,OAAOxH,KAC1CwD,EAAGoF,MAAMlI,MAAMtE,KAAM2K,EAAaQ,KAAKvH,KAEvCwD,EAAGkN,WAAQva,EACXqN,EAAGmN,OAAS,WACR,IAAIC,EAAcpN,EAAGuD,KAAKvN,KAE1B,OADAgK,EAAGoF,MAAM5I,MACF4Q,GAxCfL,EAAQ5T,OAAS,EAEjB4T,EAAQM,QAAU,GA0ClB,IAAI/P,EAAQvB,EAAIoB,KAAKG,MAErB,IAAK,IAAIlE,KAAKkE,EAAMyP,EAAQ5T,QACxB4T,EAAQM,QAAQzU,KAAK,IAAIoU,EAAK5T,IAElC,IAAK,IAAIkU,KAAKhQ,EAAMyP,EAAQ5T,OAAS,GACjC4T,EAAQM,QAAQC,GAAGJ,MAAQH,EAAQM,QAAQC,EAAI,GAAGH,OAGtDJ,EAAQQ,QAAUR,EAAQM,QAAQN,EAAQ5T,OAAS,GACnD4T,EAAQQ,QAAQL,MAAQnR,EAAIwG,SAASY,WAErC4J,EAAQS,SAAWT,EAAQM,QAAQ,GACnCtR,EAAIwH,KAAK+B,QAAQjJ,KAAO,WACfN,EAAIwH,KAAK6B,MAAMC,WAChBtJ,EAAIwH,KAAK6B,MAAMC,SAAW0H,EAAQS,SAASL,qBC9D9BpR,GAErB,IAAI0R,EAAkB1R,EAAI0R,OAAS5a,OAAO6B,OAAOqH,EAAIwH,MACrDkK,EAAO9J,IAAM5H,EAAIoB,KAAKsD,OAAO,GAAI1E,EAAIwH,KAAKC,QAAQG,KAClD8J,EAAOvL,MAAQ,GACfuL,EAAOlI,IAAM,GACbxJ,EAAI+H,SAAS2J,EAAQ1R,EAAIgG,MACzBhG,EAAIwJ,IAAIzB,SAAS2J,EAAOlI,IAAKkI,EAAQ1R,EAAIwJ,IAAIxD,MAE7C,IAAIwB,EAAOxH,EAAIwH,KAEfkK,EAAOhN,OAAS,IAAItE,KACpBsR,EAAOhN,OAAOpE,KAAO,eACjBoR,EAAO9J,IAAIzF,EAAIqF,EAAKI,IAAIzF,EACxBuP,EAAO9J,IAAI7B,EAAIyB,EAAKI,IAAI7B,EAAI,EACrB2L,EAAO9J,IAAI7B,GAAK,IAAM2L,EAAOxJ,aAChCwJ,EAAO9J,IAAI7B,GAAK,OAEb2L,EAAO9J,IAAI7B,GAAK,IAAM2L,EAAOxJ,aAChCwJ,EAAO9J,IAAI7B,GAAK,GAGxB2L,EAAOhN,OAAOvD,MAAMtE,KAAK6U,EAAO1J,KAAKvH,KAGrCiR,EAAOC,cAAgB,WACnBD,EAAOE,WAAgC,GAAnB5R,EAAIwH,KAAKa,KAAKlG,GAEtCqF,EAAKa,KAAKvE,OAAOjH,KAAK6U,EAAOC,eAE7BD,EAAOG,sBAAqB,IACxBH,EAAOE,WAAaF,EAAOzJ,OAAOxH,MAAQ,KAE9C+G,EAAKa,KAAKvE,OAAOjH,KAAK6U,EAAOG,uBAC7BrK,EAAKc,OAAOxE,OAAOjH,KAAK6U,EAAOzJ,OAAOxH,KACtC+G,EAAK6B,MAAMvF,OAAOjH,KAAK6U,EAAOzJ,OAAOxH,KAErCiR,EAAOI,sBAAqB,IACxBJ,EAAOE,WAAaF,EAAOhN,OAAOjE,MAAQ,KAE9C+G,EAAKa,KAAKrH,UAAUnE,KAAK6U,EAAOI,uBAChCtK,EAAKc,OAAOtH,UAAUnE,KAAK6U,EAAOhN,OAAOjE,KACzC+G,EAAK6B,MAAMrI,UAAUnE,KAAK6U,EAAOhN,OAAOjE,ObN5C,IAAIsR,EAAW,GAEf,IAAK,IAAIC,KAAQjN,EACbiN,EAAK1X,KAAKyX,EAAKA,GACXC,GAAQhN,IACRtE,OAAON,KAAO2R,EAAI3Q,KAAKhB,KACvBM,OAAOa,MAAQwQ,EAAI3Q,KAAKG,OAExByQ,GAAQxM,IACR9E,OAAOT,KAAO8R,EAAI9R,MAI1BS,OAAOuR,EAAIF,EAEXA,EAAI9M,KAAKxE,MACTsR,EAAI7Q,MAAMT,MAEV,IAAIyR,EAAS/M,SAASC,cAAc,OAEpC8M,EAAOC,UDvDG,YCsDK,ogDAEfhN,SAASG,KAAK8M,OAAOF,GAErB9N,QAAQC,IAJO","sources":["node_modules/regenerator-runtime/runtime.js","src/time.ts","src/util.ts","src/lib/githubCorner.ts","tetris.ts","src/jst.ts","src/zone.ts","src/grid-gameOver.ts","src/trisBank.ts","src/tris.ts","src/crd.ts","src/acq.ts","src/uact.ts","src/lib/horizontalFingerMoveManager.ts","src/linedeletion.ts","src/hold.ts","src/preview.ts","src/shadow.ts"],"sourcesContent":["/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar runtime = (function (exports) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function define(obj, key, value) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n return obj[key];\n }\n try {\n // IE 8 has a broken Object.defineProperty that only works on DOM objects.\n define({}, \"\");\n } catch (err) {\n define = function(obj, key, value) {\n return obj[key] = value;\n };\n }\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n exports.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n define(IteratorPrototype, iteratorSymbol, function () {\n return this;\n });\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = GeneratorFunctionPrototype;\n define(Gp, \"constructor\", GeneratorFunctionPrototype);\n define(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction);\n GeneratorFunction.displayName = define(\n GeneratorFunctionPrototype,\n toStringTagSymbol,\n \"GeneratorFunction\"\n );\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n define(prototype, method, function(arg) {\n return this._invoke(method, arg);\n });\n });\n }\n\n exports.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n exports.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n define(genFun, toStringTagSymbol, \"GeneratorFunction\");\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n exports.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator, PromiseImpl) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return PromiseImpl.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return PromiseImpl.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new PromiseImpl(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n define(AsyncIterator.prototype, asyncIteratorSymbol, function () {\n return this;\n });\n exports.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n if (PromiseImpl === void 0) PromiseImpl = Promise;\n\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList),\n PromiseImpl\n );\n\n return exports.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n define(Gp, toStringTagSymbol, \"Generator\");\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n define(Gp, iteratorSymbol, function() {\n return this;\n });\n\n define(Gp, \"toString\", function() {\n return \"[object Generator]\";\n });\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n exports.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n\n // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n return exports;\n\n}(\n // If this script is executing as a CommonJS module, use module.exports\n // as the regeneratorRuntime namespace. Otherwise create a new empty\n // object. Either way, the resulting object will be used to initialize\n // the regeneratorRuntime variable at the top of this file.\n typeof module === \"object\" ? module.exports : {}\n));\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, in modern engines\n // we can explicitly access globalThis. In older engines we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n if (typeof globalThis === \"object\") {\n globalThis.regeneratorRuntime = runtime;\n } else {\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n }\n}\n","export default function (jst: Jst) {\n var time: Time = (this.time = jst.time = {\n supended: 1,\n } as any);\n\n var tick: Tick = (this.tick = time.tick = new Hook() as any);\n tick.period = 900;\n tick.core = function () {\n if (time.suspended) {\n time.resume.run();\n } else {\n window.clearTimeout(tick.schedule);\n tick.schedule = window.setTimeout(tick.run, tick.period);\n }\n };\n\n time.pause = new Hook();\n time.pause.core = function () {\n window.clearTimeout(tick.schedule);\n time.suspended = 1;\n };\n jst.gameOver.execution.push(time.pause.run);\n\n time.resume = new Hook();\n time.resume.core = function () {\n time.suspended = 0;\n tick.core();\n };\n\n time.toogleSuspend = new Hook();\n time.toogleSuspend.core = function () {\n if (time.suspended) {\n time.resume.run();\n } else {\n time.pause.run();\n }\n };\n\n time.start = new Hook(time.resume.core);\n jst.start.after.push(time.start.run);\n} // End of jst.time.js\n","export default function (jst: Jst) {\n jst.util = {} as any;\n\n var doNothing = (jst.util.doNothing = function (...args) {});\n\n var range = (jst.util.range = function* (start, stop = null, step = 1) {\n if (stop === null) {\n stop = start;\n start = 0;\n }\n var length = Math.ceil((stop - start) / step);\n for (let i = 0; i < length; i++) {\n yield start + i * step;\n }\n });\n\n var Matrix = (jst.util.Matrix = function >(\n filler_value: TF,\n dimensionList: number[]\n ) {\n if (!dimensionList || dimensionList.length == 0) {\n return (filler_value as any) as TR;\n } else if (dimensionList.length == 1) {\n return (Array(dimensionList[0]).fill(filler_value) as any) as TR;\n } else if (dimensionList.length > 1) {\n var a: any = Array(dimensionList[0]).fill(undefined);\n var dim = dimensionList.slice(1);\n for (let i in a) {\n a[i] = Matrix(filler_value, dim);\n }\n return a as TR;\n }\n });\n\n let square = function (x: number) {\n return x * x;\n };\n\n var Vector = (jst.util.Vector = {\n scale: function (vect, factor) {\n return vect.map((el) => factor * el);\n },\n add: function (vectA, vectB) {\n let sum = Array(Math.max(vectA.length, vectB.length));\n function addToSum(el, i) {\n sum[i] += el;\n }\n vectA.forEach(addToSum);\n vectB.forEach(addToSum);\n return sum;\n },\n subtract: function (vectA, vectB) {\n return Vector.add(vectA, Vector.scale(vectB, -1));\n },\n });\n\n var Color = (jst.util.Color = {\n black: [0, 0, 0],\n white: [255, 255, 255],\n textFromTriplet: function (triplet) {\n let text = \"#\";\n for (let i of range(3)) {\n text += (256 + triplet[i]).toString(16).slice(1);\n }\n return text;\n },\n tripletFromText: function (text) {\n if (text[0] !== \"#\") throw \"Given text-color not recognized.\";\n let triplet: [number, number, number] = [0, 0, 0];\n for (let i of range(3)) {\n triplet[i] = parseInt(text.slice(2 * i + 1, 2 * i + 3), 16);\n }\n return triplet;\n },\n avg: function (col1, col2) {\n return Vector.add(col1.map(square), col2.map(square)).map(\n Math.sqrt\n );\n },\n });\n\n jst.util.Hook = class {\n core?: () => void;\n before: (() => void)[];\n execution: (() => void)[];\n after: (() => void)[];\n enabled: boolean;\n run: () => void;\n\n constructor(...args) {\n this.before = [];\n this.execution = Array.from(args);\n this.after = [];\n this.enabled = true;\n var me = this;\n this.run = function () {\n if (me.enabled) {\n for (let func of me.wholeExecution) {\n if (typeof func == \"function\") {\n func();\n } else {\n console.log(new Error().stack);\n console.log(\n `Error - cannot execute it since it is not a function - ${func}`\n );\n }\n }\n }\n };\n }\n get length() {\n return (\n +!!this.core +\n this.before.length +\n this.execution.length +\n this.after.length\n );\n }\n used() {\n return !!this.length;\n }\n get wholeExecution() {\n var coreExecution = this.core ? [this.core] : [];\n return this.before.concat(\n coreExecution,\n this.execution,\n this.after\n );\n }\n };\n\n jst.util.update = function (oA, oB) {\n for (let name in oB) {\n oA[name] = oB[name];\n }\n return oA as any;\n };\n\n var deepUpdate = (jst.util.deepUpdate = function (oA, oB) {\n for (let name in oB) {\n let val = oB[name];\n if (typeof val == \"object\") {\n if (typeof oA[name] != \"object\") {\n oA[name] = {} as any;\n }\n deepUpdate(oA[name], val);\n } else {\n // The simple case:\n oA[name] = val;\n }\n }\n return oA;\n }); // OVERWRITE values of oA with those of oB\n} // End of jst.util.js\n","export let githubCornerHTML = (repositoryUrl: string) => {\n return ``;\n};\n","import \"regenerator-runtime/runtime\";\n\nimport { default as jstAcq } from \"./src/acq\";\nimport { default as jstCrd } from \"./src/crd\";\nimport { default as jstGrid } from \"./src/grid-gameOver\";\nimport { default as jstHold } from \"./src/hold\";\nimport { default as jstJst } from \"./src/jst\";\nimport { default as jstLinedeletion } from \"./src/linedeletion\";\nimport { default as jstPreview } from \"./src/preview\";\nimport { default as jstShadow } from \"./src/shadow\";\nimport { default as jstTime } from \"./src/time\";\nimport { default as jstTris } from \"./src/tris\";\nimport { default as jstTrisBank } from \"./src/trisBank\";\nimport { default as jstUact } from \"./src/uact\";\nimport { default as jstUtil } from \"./src/util\";\nimport { default as jstZone } from \"./src/zone\";\n\nimport { githubCornerHTML } from \"./src/lib/githubCorner\";\n\nlet jstModuleArray = [\n jstUtil,\n jstJst,\n jstTime,\n jstZone,\n jstGrid,\n jstTrisBank,\n jstTris,\n jstCrd,\n jstAcq,\n jstUact,\n jstLinedeletion,\n jstHold,\n jstPreview,\n jstShadow,\n];\n\nvar jst: Jst = {} as any;\n\nfor (let modu of jstModuleArray) {\n modu.call(jst, jst);\n if (modu == jstUtil) {\n window.Hook = jst.util.Hook;\n window.range = jst.util.range;\n }\n if (modu == jstTime) {\n window.time = jst.time;\n }\n}\n\nwindow.j = jst;\n\njst.init.run();\njst.start.run();\n\nlet corner = document.createElement(\"div\");\nlet REPO_URL = \"https://github.com/mathieucaroff/tetris\";\ncorner.innerHTML = githubCornerHTML(REPO_URL);\ndocument.body.append(corner);\n\nconsole.log(REPO_URL);\n","export default function (jst) {\n jst.init = new Hook();\n jst.start = new Hook();\n jst.gameOver = new Hook();\n\n jst.init.core = function () {\n var canvas = (jst.canvas = document.createElement(\"canvas\"));\n canvas.id = \"tetrisCanvas\";\n document.body.appendChild(canvas);\n };\n} // End of jst.jst.js\n","export default function (jst: Jst) {\n jst.zone = {} as any;\n jst.zone.NewZone = function (height, width) {\n var zone: Zone = Array(height) as any;\n zone.height = height;\n zone.width = width;\n zone.genVoidLine = function () {\n var line = Array(width + 1).fill(0);\n line[-1] = line[width] = -1;\n return line;\n };\n for (let y of jst.util.range(height + 1)) {\n zone[y] = zone.genVoidLine();\n }\n zone[-1] = Array(width).fill(-1);\n zone[-2] = zone[-1];\n zone[height + 1] = zone[-1];\n return zone;\n };\n\n var height = 20;\n var width = 10;\n this.grid = jst.grid = jst.zone.NewZone(height, width) as any;\n} // End of jst.zone.js\n","export default function (jst: Jst) {\n var grid = jst.grid;\n grid.gameOver = new Hook() as any;\n grid.gameOver.symbol = `\no o\n o o\n o o\n o o\n\n\n o o\n o o\n o o\no o\n`\n .split(\"\\n\")\n .slice(1, -1);\n grid.gameOver.color = {\n g: 13,\n o: 2,\n b: 1,\n };\n grid.gameOver.core = function () {\n for (let y of range(10)) {\n for (let x of range(10)) {\n let letter = grid.gameOver.symbol[9 - y][x] || \" \";\n if (letter != \" \") {\n grid[y + 5][x] = grid.gameOver.color[letter];\n }\n }\n }\n };\n jst.gameOver.execution.push(grid.gameOver.run);\n} // End of jst.grid-gameOver.js\n","export default function (jst: Jst) {\n var trisBank: TrisBank = (this.trisBank = jst.trisBank = {\n shapes: {\n O: [0, 1, 0, 2, 1, 1, 1, 2],\n I: [1, 0, 1, 1, 1, 2, 1, 3],\n L: [0, 0, 0, 1, 0, 2, 1, 2],\n J: [1, 1, 0, 1, 0, 2, 0, 3],\n T: [0, 1, 0, 2, 0, 3, 1, 2],\n S: [0, 1, 0, 2, 1, 2, 1, 3],\n Z: [1, 0, 1, 1, 0, 1, 0, 2],\n },\n rotationCenter: {\n O: [0.5, 1.5],\n I: [0.5, 1.5],\n L: [0.5, 1.5],\n J: [0.5, 1.5],\n T: [0, 2],\n S: [0, 2],\n Z: [0, 1],\n },\n colors: {\n O: 6,\n I: 8,\n L: 5,\n J: 9,\n T: 3,\n S: 7,\n Z: 4,\n },\n } as any);\n trisBank.types = Object.keys(trisBank.shapes);\n\n trisBank.randomType = function () {\n var type =\n trisBank.types[Math.floor(trisBank.types.length * Math.random())];\n return type;\n };\n} // End of jst.trisBank.js\n","export default function (jst: Jst) {\n var tris: TrisModule = (jst.tris = {} as any);\n jst.tris.default = {\n type: \"\",\n shape: [0, 0, 0, 0, 0, 0, 0, 0],\n rot: 0,\n color: 2,\n pos: {\n y: 0,\n x: 0,\n },\n };\n (jst.tris.default as any).sav = {\n pos: {} as any,\n };\n jst.util.deepUpdate(tris, tris.default);\n tris.pos = {\n y: 18,\n x: 5,\n };\n\n jst.solid = [0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0];\n jst.solid[-1] = 1;\n\n jst.initTris = function (tris: any, zone) {\n tris.rend = new Hook();\n tris.rend.core = function () {\n for (let i of range(0, 8, 2)) {\n var y = tris.pos.y + tris.shape[i];\n var x = tris.pos.x + tris.shape[i + 1];\n zone[y][x] = tris.color;\n }\n };\n\n tris.erease = new Hook();\n tris.erease.core = function () {\n for (let i of range(0, 8, 2)) {\n var y = tris.pos.y + tris.shape[i];\n var x = tris.pos.x + tris.shape[i + 1];\n if (zone[y][x] == tris.color) {\n zone[y][x] = 0;\n }\n }\n };\n\n tris.collision = function () {\n for (let i of range(0, 8, 2)) {\n var y = tris.pos.y + tris.shape[i];\n var x = tris.pos.x + tris.shape[i + 1];\n if (jst.solid[zone[y][x]]) return true;\n }\n return false;\n };\n };\n\n jst.initTris(tris, jst.grid);\n\n tris.savetris = function () {\n var sav = tris.sav;\n sav.type = tris.type;\n sav.shape = tris.shape;\n sav.rot = tris.rot;\n sav.color = tris.color;\n sav.pos.x = tris.pos.x;\n sav.pos.y = tris.pos.y;\n };\n\n tris.restoretris = function () {\n var sav = tris.sav;\n tris.type = sav.type;\n tris.shape = sav.shape;\n tris.rot = sav.rot;\n tris.color = sav.color;\n tris.pos.x = sav.pos.x;\n tris.pos.y = sav.pos.y;\n };\n\n tris.move = new Hook() as any;\n tris.move.before.push(tris.erease.run);\n tris.move.after.push(tris.rend.run);\n tris.move.x = 0;\n tris.move.y = 0;\n tris.move.core = function () {\n tris.pos.x += tris.move.x;\n tris.pos.y += tris.move.y;\n if ((tris.move.collision = tris.collision())) {\n tris.pos.x -= tris.move.x;\n tris.pos.y -= tris.move.y;\n }\n tris.move.x = 0;\n tris.move.y = 0;\n };\n\n tris.rotate = new Hook() as any;\n tris.rotate.before.push(tris.erease.run);\n tris.rotate.after.push(tris.rend.run);\n tris.rotate.core = function () {\n var yrc, xrc;\n {\n let rotCenter = trisBank.rotationCenter[tris.type];\n yrc = rotCenter[0];\n xrc = rotCenter[1];\n }\n var oldShape = tris.shape;\n var sh = (tris.shape = Array(8));\n for (let i of range(0, 8, 2)) {\n let dy = oldShape[i] - yrc;\n let dx = oldShape[i + 1] - xrc;\n switch (tris.rotate.rot % 4) {\n case 0:\n sh[i] = yrc + dy;\n sh[i + 1] = xrc + dx;\n break;\n case 1:\n sh[i] = yrc - dx;\n sh[i + 1] = xrc + dy;\n break;\n case 2:\n sh[i] = yrc - dy;\n sh[i + 1] = xrc - dx;\n break;\n case 3:\n sh[i] = yrc + dx;\n sh[i + 1] = xrc - dy;\n break;\n }\n }\n tris.rot = (tris.rot + tris.rotate.rot) % 4;\n var collision = tris.collision();\n for (let x of [-2, -1, 1, 2]) {\n // Trying to avoid the collision\n if (collision) {\n tris.move.x = x;\n tris.move.core();\n collision = tris.move.collision;\n }\n }\n tris.rotate.collision = collision;\n if (collision) {\n // Cancel:\n tris.shape = oldShape;\n tris.rot = (tris.rot - tris.rotate.rot) % 4;\n }\n tris.rotate.rot = 0;\n };\n\n tris.fall = new Hook() as any;\n tris.fall.collision = new Hook();\n tris.fall.core = function () {\n tris.move.y = -1;\n tris.move.run();\n if (tris.move.collision) {\n tris.fall.collision.run();\n }\n };\n jst.time.tick.after.push(tris.fall.run);\n\n tris.down = new Hook();\n tris.down.execution.push(tris.fall.core);\n tris.down.execution.push(jst.time.tick.core);\n\n tris.quickfall = new Hook();\n tris.quickfall.before.push(tris.erease.run);\n tris.quickfall.after.push(tris.rend.run);\n tris.quickfall.after.push(jst.time.tick.run);\n tris.genQuickfallCore = function (tris) {\n return function () {\n do {\n tris.pos.y -= 1;\n } while (!tris.collision());\n tris.pos.y += 1;\n };\n };\n tris.quickfall.core = tris.genQuickfallCore(tris);\n\n tris.overground = new Hook() as any;\n tris.overground.float = 1;\n tris.overground.before.push(tris.erease.run);\n tris.overground.after.push(tris.rend.run);\n tris.overground.core = function () {\n var oldy = tris.pos.y;\n tris.pos.y -= 1;\n if (tris.collision()) {\n tris.pos.y += 1;\n return;\n }\n tris.quickfall.core();\n tris.pos.y += tris.overground.float;\n if (tris.pos.y < oldy) {\n time.tick.core();\n }\n return;\n };\n\n var trisBank = jst.trisBank;\n\n tris.enter = new Hook() as any;\n tris.enter.core = function () {\n tris.savetris();\n var type = (tris.type = tris.enter.trisType);\n tris.shape = trisBank.shapes[type].slice(0);\n tris.rot = 0;\n tris.color = trisBank.colors[type];\n tris.pos.y = 18;\n tris.pos.x = 3;\n if (tris.collision()) {\n tris.restoretris();\n jst.gameOver.run();\n }\n tris.enter.trisType = \"\";\n };\n\n tris.enter.execution.push(tris.rend.run);\n jst.init.after.push(tris.enter.run);\n tris.fall.collision.after.push(tris.enter.run);\n\n tris.getType = new Hook();\n tris.enter.before.push(tris.getType.run);\n tris.getType.core = function () {\n if (!tris.enter.trisType)\n tris.enter.trisType = jst.trisBank.randomType();\n };\n} // End of jst.tris.js\n","export default function (jst: Jst) {\n /// Canvas render crd\n var crd: Crd =\n (this.crd =\n jst.crd =\n {\n board: {\n width: jst.grid.width + 4.5 + 4.5,\n height: jst.grid.height,\n },\n tris: {},\n grid: {},\n color: {\n 0: \"grey\",\n 1: \"black\",\n 2: \"white\",\n 3: \"pink\",\n 4: \"red\",\n 5: \"orange\",\n 6: \"yellow\",\n 7: \"green\",\n 8: \"cyan\",\n 9: \"blue\",\n 10: \"purple\",\n 11: \"grey+\",\n 12: \"grey-\",\n 13: \"grey\",\n },\n hue: {\n grey: \"#808080\",\n \"grey+\": \"#2F2F2F\",\n \"grey-\": \"#262626\",\n black: \"#000000\",\n white: \"#FFFFFF\",\n pink: \"#C529A6\",\n red: \"#F72039\",\n orange: \"#FF7900\",\n yellow: \"#FFC729\",\n green: \"#7BCF13\",\n cyan: \"#59CCFD\",\n blue: \"#2159DE\",\n purple: \"#800080\",\n },\n } as any);\n\n window.resizeHook = new Hook();\n document.body.onresize = window.resizeHook.run;\n\n crd.init = new Hook();\n crd.init.core = function () {\n var style = document.createElement(\"style\");\n style.textContent = `\n * {\n margin: 0;\n padding: 0;\n }\n #tetrisCanvas {\n background-color: yellow;\n position: absolute;\n width: 100% ;\n height: 100%;\n }\n`;\n document.head.appendChild(style);\n crd.ctx = jst.canvas.getContext(\"2d\");\n window.resizeHook.after.push(crd.handelResize);\n };\n jst.init.after.push(window.resizeHook.run);\n jst.init.execution.push(crd.init.run);\n\n crd.handelResize = function () {\n var bo = crd.board;\n var wi = (jst.canvas.width = window.innerWidth);\n var he = (jst.canvas.height = window.innerHeight);\n\n // Compute pps (pixPerSquare)\n if (wi * bo.height > he * bo.width) {\n // We have more horizontal space than vertical\n // Size is decided according to the height.\n crd.pps = 2 * Math.floor(he / (2 * bo.height));\n } else {\n // Size is decided according to the width.\n crd.pps = 2 * Math.floor(wi / (2 * bo.width));\n }\n crd.outline = Math.ceil(crd.pps / 16);\n crd.wideline = Math.ceil((2 * crd.pps) / 7);\n bo.pwidth = crd.pps * bo.width;\n bo.pheight = crd.pps * bo.height;\n bo.pxoff = Math.ceil((wi - bo.pwidth) / 2);\n bo.pyoff = Math.ceil((he - bo.pheight) / 2);\n bo.rend.run();\n };\n\n crd.board.rend = new Hook();\n crd.board.rend.core = function () {\n // crd.ctx.fillStyle = crd.hue[\"black\"];\n crd.ctx.fillRect(0, 0, jst.canvas.width, jst.canvas.height);\n };\n\n // crdzone: zone object to initialize.\n // jstzone: object containing the parameters {width, height} (in square number)\n // bo: object containing the parameters {ppxoff, ppyoff, height}\n crd.initZone = function (crdzone: any, jstzone: any, bo: any) {\n crdzone.rend = function () {\n var ctx = crd.ctx;\n ctx.fillStyle = \"#000\";\n var l = crd.outline;\n ctx.fillRect(\n bo.pxoff + jstzone.xoff * crd.pps - l,\n bo.pyoff + jstzone.yoff * crd.pps - l,\n crd.pps * jstzone.width + 2 * l,\n crd.pps * jstzone.height + 2 * l\n );\n for (let y of range(jstzone.height)) {\n for (let x of range(jstzone.width)) {\n crdzone.rendSquare(y, x);\n }\n }\n };\n crd.board.rend.execution.push(crdzone.rend);\n\n crdzone.rendSquare = function (y, x) {\n if (y >= jstzone.height || y < 0 || x < 0 || x > jstzone.widht) {\n return;\n }\n var pps = crd.pps;\n var ctx = crd.ctx;\n var pyoff = bo.pyoff + (bo.height - 1 - y - jstzone.yoff) * pps;\n var pxoff = bo.pxoff + (x + jstzone.xoff) * pps;\n var colorNum = jstzone[y][x];\n // TODO rather cache each square type first, and use cached data for displaying them after\n var color = crd.hue[crd.color[colorNum || 11 + ((x + y) % 2)]];\n if (colorNum) {\n let darkColor = jst.util.Color.textFromTriplet(\n jst.util.Vector.scale(\n jst.util.Color.tripletFromText(color),\n 0.5\n ).map(Math.round) as any\n );\n ctx.fillStyle = darkColor;\n ctx.fillRect(pxoff, pyoff, pps, pps);\n ctx.fillStyle = color;\n ctx.fillRect(\n pxoff + crd.outline,\n pyoff + crd.outline,\n pps - 2 * crd.outline,\n pps - 2 * crd.outline\n );\n let semidarkcolor = jst.util.Color.textFromTriplet(\n jst.util.Vector.scale(\n jst.util.Color.tripletFromText(color),\n 0.8\n ).map(Math.round) as any\n );\n ctx.fillStyle = semidarkcolor;\n ctx.fillRect(\n pxoff + crd.wideline,\n pyoff + crd.wideline,\n pps - 2 * crd.wideline,\n pps - 2 * crd.wideline\n );\n } else {\n ctx.fillStyle = color;\n ctx.fillRect(pxoff, pyoff, pps, pps);\n }\n };\n };\n\n jst.grid.yoff = 0;\n jst.grid.xoff = 4.5;\n crd.initZone(crd.grid, jst.grid, crd.board);\n\n crd.initTris = function (crdtris: any, jsttris: any, crdzone: any) {\n crdtris.rend = function () {\n for (let i of jst.util.range(0, 8, 2)) {\n var y = jsttris.pos.y + jsttris.shape[i];\n var x = jsttris.pos.x + jsttris.shape[i + 1];\n crdzone.rendSquare(y, x);\n }\n };\n jsttris.rend.after.push(crdtris.rend);\n\n crdtris.oldPos = Array(8).fill(0);\n crdtris.savePos = function () {\n var oldp = crdtris.oldPos;\n for (let i of range(0, 8, 2)) {\n oldp[i] = jsttris.pos.y + jsttris.shape[i];\n oldp[i + 1] = jsttris.pos.x + jsttris.shape[i + 1];\n }\n };\n jsttris.erease.execution.push(crdtris.savePos);\n\n crdtris.clear = function () {\n var oldp = crdtris.oldPos;\n for (let i of range(0, 8, 2)) {\n crdzone.rendSquare(oldp[i], oldp[i + 1]);\n }\n };\n jsttris.rend.execution.push(crdtris.clear);\n };\n\n // var w: any = window;\n // w.crd = crd;\n\n crd.initTris(crd.tris, jst.tris, crd.grid);\n\n jst.grid.gameOver.after.push(crd.grid.rend);\n} // End of jst.crd.js\n","export default function (jst: Jst) {\n /// Acquisition\n var acq: Acq = (this.acq = jst.acq = {} as any);\n\n acq.init = new Hook();\n acq.init.core = function () {\n /// TODO /// The Hook watcher must be somewhere else than on body. maybe on cavas ? ... If it can be made to work.\n document.body.onkeydown = acq.handelkeydown;\n };\n jst.init.execution.push(acq.init.run);\n\n acq.keyDown = Array(256) as any;\n for (let i of jst.util.range(256)) {\n acq.keyDown[i] = new Hook();\n }\n acq.handelkeydown = function (ev) {\n acq.keyDown.ev = ev;\n var k = ev.keyCode;\n // acq.keyDown[k].ev = ev;\n if (acq.keyDown[k].used()) {\n acq.keyDown[k].run();\n } else if (jst.debug) {\n console.log(ev.keyCode);\n }\n };\n\n {\n let kd = acq.keyDown;\n kd.escape = kd[27];\n kd.spacebar = kd[32];\n kd.pgup = kd[33];\n kd.pgdown = kd[34];\n kd.end = kd[35];\n kd.beginning = kd[36];\n kd.left = kd[37];\n kd.up = kd[38];\n kd.right = kd[39];\n kd.down = kd[40];\n kd.p = kd[80];\n }\n} // End of jst.acq.js\n","import { horizontalFingerMoveManager } from \"./lib/horizontalFingerMoveManager\";\n\nexport default function (jst: Jst) {\n // User Action\n var uact: Uact = (this.uact = jst.uact = {} as any);\n\n horizontalFingerMoveManager({\n element: document.documentElement,\n callback: (kind) => {\n console.log(\"Kind\", kind);\n if (kind === \"left\") {\n uact.moveLeft.run();\n } else if (kind === \"right\") {\n uact.moveRight.run();\n } else if (kind === \"tap\") {\n uact.rotate.run();\n }\n },\n });\n\n uact.basicHookNames =\n \"moveLeft moveRight rotate moveDown quickfall overground\".split(\" \");\n for (let hookName of uact.basicHookNames) {\n uact[hookName] = new Hook();\n }\n uact.toogleSuspend = new Hook();\n\n uact.enable = function () {\n for (let hookName of uact.basicHookNames) {\n uact[hookName].enabled = true;\n }\n };\n time.resume.execution.push(uact.enable);\n\n uact.disable = function () {\n for (let hookName of uact.basicHookNames) {\n uact[hookName].enabled = false;\n }\n };\n time.pause.execution.push(uact.disable);\n\n // Settings\n {\n let kd = jst.acq.keyDown;\n\n kd.pgdown.execution.push(uact.overground.run);\n\n kd.left.execution.push(uact.moveLeft.run);\n kd.right.execution.push(uact.moveRight.run);\n kd.down.execution.push(uact.moveDown.run);\n\n kd.up.execution.push(uact.rotate.run);\n\n kd.spacebar.execution.push(uact.quickfall.run);\n\n kd.escape.execution.push(uact.toogleSuspend.run);\n kd.p.execution.push(uact.toogleSuspend.run);\n }\n //\n\n var tris = jst.tris;\n uact.moveDown.execution.push(tris.down.run);\n uact.moveLeft.core = function () {\n tris.move.x = -1;\n tris.move.run();\n };\n uact.moveRight.core = function () {\n tris.move.x = 1;\n tris.move.run();\n };\n uact.rotate.core = function () {\n tris.rotate.rot = 1; // Clockwise\n tris.rotate.run();\n };\n uact.quickfall.execution.push(tris.quickfall.run);\n uact.overground.execution.push(tris.overground.run);\n\n uact.toogleSuspend.execution.push(time.toogleSuspend.run);\n} // End of jst.acq.js\n","export interface HorizontalFingerMoveManagerProp {\n element: HTMLElement;\n callback: (kind: \"left\" | \"right\" | \"tap\") => void;\n}\n\nexport let horizontalFingerMoveManager = ({\n element,\n callback,\n}: HorizontalFingerMoveManagerProp) => {\n let getTouches = (event: any): MouseEvent => {\n return (\n // browser API ?? jQuery\n event.touches?.[0] ?? event.originalEvent?.touches?.[0] ?? event\n );\n };\n\n let hasMoved = false;\n let xDown = 0;\n\n let handleTouchStart = (evt) => {\n hasMoved = false;\n let touch = getTouches(evt);\n\n xDown = touch.clientX;\n };\n\n let handleTouchMove = (evt) => {\n hasMoved = true;\n if (!xDown) {\n return;\n }\n\n let touch = getTouches(evt);\n\n let currentX = touch.clientX;\n\n let dx = currentX - xDown;\n\n if (Math.abs(dx) < 80) {\n return;\n }\n\n xDown = currentX;\n\n if (dx < 0) {\n callback(\"left\");\n } else {\n callback(\"right\");\n }\n };\n let handleTouchEnd = () => {\n if (!hasMoved) {\n callback(\"tap\");\n hasMoved = true;\n }\n };\n\n let mouseIsDown = false;\n let handleMouseDown = (ev: Event) => {\n mouseIsDown = true;\n handleTouchStart(ev);\n };\n\n let handleMouseMove = (ev) => {\n if (mouseIsDown) {\n handleTouchMove(ev);\n }\n };\n\n let handleMouseUp = () => {\n mouseIsDown = false;\n handleTouchEnd();\n };\n\n element.addEventListener(\"touchstart\", handleTouchStart, false);\n element.addEventListener(\"touchmove\", handleTouchMove, false);\n element.addEventListener(\"touchend\", handleTouchEnd, false);\n element.addEventListener(\"mousedown\", handleMouseDown, false);\n element.addEventListener(\"mousemove\", handleMouseMove, false);\n element.addEventListener(\"mouseup\", handleMouseUp, false);\n\n let removeAll = () => {\n element.removeEventListener(\"touchstart\", handleTouchStart, false);\n element.removeEventListener(\"touchmove\", handleTouchMove, false);\n element.removeEventListener(\"mousedown\", handleMouseDown, false);\n element.removeEventListener(\"mousemove\", handleMouseMove, false);\n element.removeEventListener(\"mouseup\", handleMouseUp, false);\n };\n\n let me = {\n removeAll,\n };\n\n return me;\n};\n","export default function (jst: Jst) {\n var ld: LineDeletion = (this.ld = jst.linedeletion = {} as any);\n var tris = jst.tris;\n var grid = jst.grid;\n var range = jst.util.range;\n\n ld.deleteLine = new jst.util.Hook() as any;\n ld.deleteLine.core = function () {\n grid.splice(ld.deleteLine.y, 1);\n grid[grid.height] = grid.genVoidLine();\n grid[grid.height + 1] = grid[-1];\n };\n ld.deleteLine.after.push(jst.crd.grid.rend);\n\n ld.checkLines = function () {\n var deletableLines = [];\n for (let i of range(0, 8, 2)) {\n let y = tris.pos.y + tris.shape[i];\n if (jst.grid[y].every((e) => e)) {\n deletableLines.push(y);\n }\n }\n deletableLines.sort((a, b) => b - a);\n var last = -1;\n for (let y of deletableLines) {\n if (y !== last) {\n ld.deleteLine.y = y;\n ld.deleteLine.run();\n }\n last = y;\n }\n };\n tris.fall.collision.after.unshift(ld.checkLines);\n} // End of jst.linedeletion.js\n","export default function (jst: Jst) {\n var hold: Hold = (this.hold = jst.hold = {} as any);\n\n var held: Held = (this.held = jst.held = {\n type: \"\",\n shape: [0, 0, 0, 0, 0, 0, 0, 0],\n rot: 0,\n color: 2,\n pos: {\n x: 0,\n y: 0,\n },\n crd: {} as any,\n } as any);\n\n // zone\n var height = 2;\n var width = 4;\n hold.zone = jst.zone.NewZone(height, width) as any;\n\n // main\n jst.initTris(held, hold.zone);\n held.enter = new Hook() as any;\n held.enter.core = function () {\n var type = (held.type = held.enter.trisType);\n held.shape = jst.trisBank.shapes[type];\n held.color = jst.trisBank.colors[type];\n };\n held.enter.after.push(held.rend.run);\n\n hold.swap = new Hook();\n hold.swap.core = function () {\n var tristype = jst.tris.type;\n if (held.type) {\n let heldtype = held.type;\n jst.tris.enter.trisType = heldtype;\n }\n jst.tris.enter.run();\n held.enter.trisType = tristype;\n held.enter.run();\n };\n hold.swap.before.push(jst.tris.erease.run);\n hold.swap.before.push(held.erease.run);\n\n /// crd\n jst.crd.initTris(held.crd, held, hold.zone);\n // board\n var bo = (jst.hold.board = Object.create(jst.crd.board));\n bo.width = width;\n bo.height = height;\n\n hold.zone.yoff = 0;\n hold.zone.xoff = 0.25;\n jst.crd.initZone(hold.zone, hold.zone, bo);\n\n {\n // acq\n let kd = jst.acq.keyDown;\n kd.shift_ = kd[16];\n\n // uact\n jst.uact.hold = new Hook();\n kd.shift_.execution.push(jst.uact.hold.run);\n jst.uact.hold.execution.push(hold.swap.run);\n }\n} // End of jst.preview.js\n","export default function (jst: Jst) {\n var preview: Preview = (this.preview = jst.preview = {} as any);\n\n preview.length = 3;\n\n preview.boxlist = [];\n\n // zone\n var zoneHeight = 2;\n var zoneWidth = 4;\n\n function TBox(index: number) {\n var me: TBox = this;\n me.index = index;\n var tris: Tris = (me.tris = {} as any);\n var deepUpdate = jst.util.deepUpdate;\n deepUpdate(tris, jst.tris.default);\n tris.type = jst.trisBank.randomType();\n me.crdtris = {} as any;\n me.zone = jst.zone.NewZone(zoneHeight, zoneWidth) as any;\n var bo = (me.board = Object.create(jst.crd.board));\n bo.width = zoneWidth;\n bo.height = zoneHeight;\n me.zone.yoff = -2.25 * index;\n me.zone.xoff = jst.grid.xoff + jst.grid.width + 0.25;\n\n jst.initTris(tris, me.zone);\n jst.crd.initTris(me.crdtris, tris, me.zone);\n jst.crd.initZone(me.zone, me.zone, bo);\n\n me.enter = new Hook();\n me.enter.core = function () {\n var type = (tris.type = me.input());\n tris.shape = jst.trisBank.shapes[type];\n tris.color = jst.trisBank.colors[type];\n };\n me.enter.before.push((tris as any).erease.run);\n me.enter.after.push((tris as any).rend.run);\n\n me.input = undefined;\n me.output = function () {\n let trisTypeSav = me.tris.type;\n me.enter.run();\n return trisTypeSav;\n };\n }\n\n var range = jst.util.range;\n\n for (let i of range(preview.length)) {\n preview.boxlist.push(new TBox(i));\n }\n for (let i of range(preview.length - 1)) {\n preview.boxlist[i].input = preview.boxlist[i + 1].output;\n }\n\n preview.lastbox = preview.boxlist[preview.length - 1];\n preview.lastbox.input = jst.trisBank.randomType;\n\n preview.firstbox = preview.boxlist[0];\n jst.tris.getType.core = function () {\n if (!jst.tris.enter.trisType) {\n jst.tris.enter.trisType = preview.firstbox.output();\n }\n }; // FUNCTION OVERWRITE\n} // End of jst.preview.js\n","export default function (jst: Jst) {\n // Beware dirty code in this module\n var shadow: Shadow = (jst.shadow = Object.create(jst.tris));\n shadow.pos = jst.util.update({}, jst.tris.default.pos);\n shadow.color = 12;\n shadow.crd = {} as any;\n jst.initTris(shadow, jst.grid);\n jst.crd.initTris(shadow.crd, shadow, jst.crd.grid);\n\n var tris = jst.tris;\n\n shadow.update = new Hook();\n shadow.update.core = function () {\n shadow.pos.x = tris.pos.x;\n shadow.pos.y = tris.pos.y - 2;\n while (shadow.pos.y >= 0 && !shadow.collision()) {\n shadow.pos.y -= 1;\n }\n while (shadow.pos.y <= 18 && shadow.collision()) {\n shadow.pos.y += 1;\n }\n };\n shadow.update.after.push(shadow.rend.run);\n //shadow.update.after.push(crd.grid.rend);\n\n shadow.setWillUpdate = function () {\n shadow.willUpdate = jst.tris.move.x != 0;\n };\n tris.move.before.push(shadow.setWillUpdate);\n\n shadow.moveConditionalErease = () =>\n shadow.willUpdate ? shadow.erease.run() : null;\n\n tris.move.before.push(shadow.moveConditionalErease);\n tris.rotate.before.push(shadow.erease.run);\n tris.enter.before.push(shadow.erease.run);\n\n shadow.moveConditionalUpdate = () =>\n shadow.willUpdate ? shadow.update.run() : null;\n\n tris.move.execution.push(shadow.moveConditionalUpdate);\n tris.rotate.execution.push(shadow.update.run);\n tris.enter.execution.push(shadow.update.run);\n} // End of jst.shadow.js\n"],"names":["$7238a34a955809b2$var$runtime","exports","undefined","Op","Object","prototype","hasOwn","hasOwnProperty","$Symbol","Symbol","iteratorSymbol","iterator","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","toStringTag","define","obj","key","value","defineProperty","enumerable","configurable","writable","err1","wrap","innerFn","outerFn","self","tryLocsList","protoGenerator","Generator","generator","create","context","Context","_invoke","state","GenStateSuspendedStart","method","arg","GenStateExecuting","Error","GenStateCompleted","doneResult","delegate","delegateResult","maybeInvokeDelegate","ContinueSentinel","sent","_sent","dispatchException","abrupt","record","tryCatch","type","done","GenStateSuspendedYield","makeInvokeMethod","fn","call","err","GeneratorFunction","GeneratorFunctionPrototype","IteratorPrototype","this","getProto","getPrototypeOf","NativeIteratorPrototype","values","Gp","defineIteratorMethods","forEach","AsyncIterator","PromiseImpl","invoke","resolve","reject","result","value1","__await","then","unwrapped","error","previousPromise","callInvokeWithMethodAndArg","TypeError","info","resultName","next","nextLoc","pushTryEntry","locs","entry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","push","resetTryEntry","completion","reset","iterable","iteratorMethod","isNaN","length","i","next1","displayName","isGeneratorFunction","genFun","ctor","constructor","name","mark","setPrototypeOf","__proto__","awrap","async","Promise","iter","keys","object","key1","reverse","pop","skipTempReset","prev","charAt","slice","stop","rootRecord","rval","exception","handle","loc","caught","hasCatch","hasFinally","finallyEntry","complete","finish","catch","thrown","delegateYield","regeneratorRuntime","accidentalStrictMode","globalThis","Function","jst","time","supended","tick","Hook","period","core","suspended","resume","run","window","clearTimeout","schedule","setTimeout","pause","gameOver","execution","toogleSuspend","start","after","util","doNothing","args","range","step","Math","ceil","Matrix","filler_value","dimensionList","Array","fill","a","dim","square","x","Vector","scale","vect","factor","map","el","add","vectA","vectB","sum","max","addToSum","subtract","Color","black","white","textFromTriplet","triplet","text","toString","tripletFromText","parseInt","avg","col1","col2","sqrt","before","from","enabled","me","func","wholeExecution","console","log","stack","used","coreExecution","concat","update","oA","oB","deepUpdate","val","$38f6347f1c00ca2c$var$jstModuleArray","$9fd44832378de894$export$2e2bcd8739ae039","init","canvas","document","createElement","id","body","appendChild","$e2ea2444f22ff892$export$2e2bcd8739ae039","zone","NewZone","height","width","genVoidLine","line","y","grid","symbol","split","color","g","o","b","letter","trisBank","shapes","O","I","L","J","T","S","Z","rotationCenter","colors","types","randomType","floor","random","tris1","tris","default","shape","rot","pos","sav","solid","initTris","rend","erease","collision","savetris","restoretris","move","rotate","yrc","xrc","rotCenter","oldShape","sh","dy","dx","fall","down","quickfall","genQuickfallCore","overground","float","oldy","enter","trisType","getType","crd","board","hue","grey","pink","red","orange","yellow","green","cyan","blue","purple","resizeHook","onresize","style","textContent","head","ctx","getContext","handelResize","bo","wi","innerWidth","he","innerHeight","pps","outline","wideline","pwidth","pheight","pxoff","pyoff","fillRect","initZone","crdzone","jstzone","fillStyle","l","xoff","yoff","rendSquare","widht","colorNum","darkColor","round","semidarkcolor","crdtris","jsttris","oldPos","savePos","oldp","clear","acq","onkeydown","handelkeydown","keyDown","ev","k","keyCode","debug","kd","escape","spacebar","pgup","pgdown","end","beginning","left","up","right","p","uact","element","callback","getTouches","event","touches","originalEvent","hasMoved","xDown","handleTouchStart","evt","touch","clientX","handleTouchMove","currentX","abs","handleTouchEnd","mouseIsDown","handleMouseDown","handleMouseMove","handleMouseUp","addEventListener","$42d48269bafa88cc$export$b68a05118de801fb","documentElement","kind","moveLeft","moveRight","basicHookNames","hookName","enable","disable","moveDown","ld","linedeletion","deleteLine","splice","checkLines","deletableLines","every","e","sort","last","unshift","hold","held","swap","tristype","heldtype","shift_","preview","TBox","index","input","output","trisTypeSav","boxlist","i1","lastbox","firstbox","shadow","setWillUpdate","willUpdate","moveConditionalErease","moveConditionalUpdate","$38f6347f1c00ca2c$var$jst","modu","j","$38f6347f1c00ca2c$var$corner","innerHTML","append"],"version":3,"file":"tetris.8a4d7016.js.map"}