{"version":3,"file":"js/2511.5dabc1b9.js","mappings":"yIAEA,MAAMA,EAAOC,EAEbD,EAAKE,OAAS,EAAQ,OAEtBF,EAAKG,OAAS,gBACdH,EAAKI,KAAO,EAAQ,OACpBJ,EAAKK,UAAY,EAAQ,OACzBL,EAAKM,SAAW,EAAQ,OACxBN,EAAKO,SAAW,EAAQ,M,+BCRxB,MAAMA,EAAW,EAAQ,OACnBD,EAAW,EAAQ,OACnBE,EAAW,EAAQ,OAQzB,SAASC,EAAOC,EAAMC,GACpBC,KAAKF,KAAOA,EACZE,KAAKD,KAAOA,EAEZC,KAAKN,SAAW,CAAC,EACjBM,KAAKL,SAAW,CAAC,CACnB,CAZYN,EAERE,OAAS,SAAgBO,EAAMC,GACjC,OAAO,IAAIF,EAAOC,EAAMC,EAC1B,EAUAF,EAAOI,UAAUC,aAAe,SAAqBC,GACnD,MAAML,EAAOE,KAAKF,KAElB,SAASM,EAAUC,GACjBL,KAAKM,WAAWD,EAAQP,EAC1B,CAMA,OALAF,EAASQ,EAAWD,GACpBC,EAAUH,UAAUK,WAAa,SAAoBD,EAAQP,GAC3DK,EAAKI,KAAKP,KAAMK,EAAQP,EAC1B,EAEO,IAAIM,EAAUJ,KACvB,EAEAH,EAAOI,UAAUO,YAAc,SAAqBC,GAKlD,OAJAA,EAAMA,GAAO,MAERT,KAAKN,SAASgB,eAAeD,KAChCT,KAAKN,SAASe,GAAOT,KAAKE,aAAaR,EAASe,KAC3CT,KAAKN,SAASe,EACvB,EAEAZ,EAAOI,UAAUU,OAAS,SAAgBC,EAAMH,EAAKI,GACnD,OAAOb,KAAKQ,YAAYC,GAAKE,OAAOC,EAAMC,EAC5C,EAEAhB,EAAOI,UAAUa,YAAc,SAAqBL,GAKlD,OAJAA,EAAMA,GAAO,MAERT,KAAKL,SAASe,eAAeD,KAChCT,KAAKL,SAASc,GAAOT,KAAKE,aAAaP,EAASc,KAC3CT,KAAKL,SAASc,EACvB,EAEAZ,EAAOI,UAAUc,OAAS,SAAgBH,EAAMH,EAAoBO,GAClE,OAAOhB,KAAKc,YAAYL,GAAKM,OAAOH,EAAMI,EAC5C,C,+BCtDA,MAAMpB,EAAW,EAAQ,OACnBqB,EAAW,WACXC,EAAS,gBAEf,SAASC,EAAc3B,EAAMqB,GAC3BI,EAASV,KAAKP,KAAMa,GACfK,EAAOE,SAAS5B,IAKrBQ,KAAKR,KAAOA,EACZQ,KAAKqB,OAAS,EACdrB,KAAKsB,OAAS9B,EAAK8B,QANjBtB,KAAKuB,MAAM,mBAOf,CAuEA,SAASC,EAAcC,EAAOT,GAC5B,GAAIU,MAAMC,QAAQF,GAChBzB,KAAKsB,OAAS,EACdtB,KAAKyB,MAAQA,EAAMG,KAAI,SAASC,GAI9B,OAHKL,EAAcM,gBAAgBD,KACjCA,EAAO,IAAIL,EAAcK,EAAMb,IACjChB,KAAKsB,QAAUO,EAAKP,OACbO,CACT,GAAG7B,WACE,GAAqB,iBAAVyB,EAAoB,CACpC,KAAM,GAAKA,GAASA,GAAS,KAC3B,OAAOT,EAASO,MAAM,gCACxBvB,KAAKyB,MAAQA,EACbzB,KAAKsB,OAAS,CAChB,MAAO,GAAqB,iBAAVG,EAChBzB,KAAKyB,MAAQA,EACbzB,KAAKsB,OAASJ,EAAOa,WAAWN,OAC3B,KAAIP,EAAOE,SAASK,GAIzB,OAAOT,EAASO,MAAM,4BAA8BE,GAHpDzB,KAAKyB,MAAQA,EACbzB,KAAKsB,OAASG,EAAMH,MAGtB,CACF,CA7FA1B,EAASuB,EAAeF,GACxB5B,EAAQ,EAAgB8B,EAExBA,EAAca,gBAAkB,SAAyBpB,GACvD,OAAIA,aAAgBO,GAKiB,iBAATP,GAC1BM,EAAOE,SAASR,EAAKpB,OACK,kBAA1BoB,EAAKqB,YAAYnC,MACM,iBAAhBc,EAAKS,QACW,iBAAhBT,EAAKU,QACS,mBAAdV,EAAKsB,MACY,mBAAjBtB,EAAKuB,SACY,mBAAjBvB,EAAKwB,SACc,mBAAnBxB,EAAKyB,WACS,mBAAdzB,EAAK0B,MACQ,mBAAb1B,EAAK2B,GAGhB,EAEApB,EAAclB,UAAUiC,KAAO,WAC7B,MAAO,CAAEb,OAAQrB,KAAKqB,OAAQL,SAAUC,EAAShB,UAAUiC,KAAK3B,KAAKP,MACvE,EAEAmB,EAAclB,UAAUkC,QAAU,SAAiBD,GAEjD,MAAMM,EAAM,IAAIrB,EAAcnB,KAAKR,MAOnC,OANAgD,EAAInB,OAASa,EAAKb,OAClBmB,EAAIlB,OAAStB,KAAKqB,OAElBrB,KAAKqB,OAASa,EAAKb,OACnBJ,EAAShB,UAAUkC,QAAQ5B,KAAKP,KAAMkC,EAAKlB,UAEpCwB,CACT,EAEArB,EAAclB,UAAUmC,QAAU,WAChC,OAAOpC,KAAKqB,SAAWrB,KAAKsB,MAC9B,EAEAH,EAAclB,UAAUoC,UAAY,SAAmBI,GACrD,OAAIzC,KAAKqB,OAAS,GAAKrB,KAAKsB,OACnBtB,KAAKR,KAAK6C,UAAUrC,KAAKqB,UAAU,GAEnCrB,KAAKuB,MAAMkB,GAAQ,wBAC9B,EAEAtB,EAAclB,UAAUqC,KAAO,SAAcI,EAAOD,GAClD,KAAMzC,KAAKqB,OAASqB,GAAS1C,KAAKsB,QAChC,OAAOtB,KAAKuB,MAAMkB,GAAQ,yBAE5B,MAAMD,EAAM,IAAIrB,EAAcnB,KAAKR,MAQnC,OALAgD,EAAIG,eAAiB3C,KAAK2C,eAE1BH,EAAInB,OAASrB,KAAKqB,OAClBmB,EAAIlB,OAAStB,KAAKqB,OAASqB,EAC3B1C,KAAKqB,QAAUqB,EACRF,CACT,EAEArB,EAAclB,UAAUsC,IAAM,SAAaL,GACzC,OAAOlC,KAAKR,KAAKoD,MAAMV,EAAOA,EAAKb,OAASrB,KAAKqB,OAAQrB,KAAKsB,OAChE,EA0BAjC,EAAQ,EAAgBmC,EAExBA,EAAcM,gBAAkB,SAAyBlB,GACvD,OAAIA,aAAgBY,GAKiB,iBAATZ,GACA,kBAA1BA,EAAKqB,YAAYnC,MACM,iBAAhBc,EAAKU,QACS,mBAAdV,EAAKiC,IAGhB,EAEArB,EAAcvB,UAAU4C,KAAO,SAAcC,EAAKzB,GAMhD,OALKyB,IACHA,EAAM5B,EAAO6B,MAAM/C,KAAKsB,SACrBD,IACHA,EAAS,GAES,IAAhBrB,KAAKsB,SAGLI,MAAMC,QAAQ3B,KAAKyB,OACrBzB,KAAKyB,MAAMuB,SAAQ,SAASnB,GAC1BA,EAAKgB,KAAKC,EAAKzB,GACfA,GAAUQ,EAAKP,MACjB,KAE0B,iBAAftB,KAAKyB,MACdqB,EAAIzB,GAAUrB,KAAKyB,MACU,iBAAfzB,KAAKyB,MACnBqB,EAAIG,MAAMjD,KAAKyB,MAAOJ,GACfH,EAAOE,SAASpB,KAAKyB,QAC5BzB,KAAKyB,MAAMyB,KAAKJ,EAAKzB,GACvBA,GAAUrB,KAAKsB,SAdRwB,CAkBX,C,+BCtJA,MAAMtD,EAAOH,EAEbG,EAAKyB,SAAW,WAChBzB,EAAK2B,cAAgB,WACrB3B,EAAKgC,cAAgB,WACrBhC,EAAK2D,KAAO,EAAQ,M,+BCLpB,MAAMlC,EAAW,WACXO,EAAgB,WAChBL,EAAgB,WAChBiC,EAAS,EAAQ,OAGjBC,EAAO,CACX,MAAO,QAAS,MAAO,QAAS,QAAS,OACzC,UAAW,UAAW,QAAS,OAAQ,MAAO,UAC9C,SAAU,SAAU,UAAW,SAAU,WAAY,SAAU,YAC/D,SAAU,SAAU,WAAY,SAAU,SAAU,UAAW,YAI3DC,EAAU,CACd,MAAO,MAAO,MAAO,WAAY,WAAY,WAAY,MAAO,SAChE,MAAO,YACPC,OAAOF,GAYT,SAASF,EAAK1C,EAAK+C,EAAQ1D,GACzB,MAAM2D,EAAQ,CAAC,EACfzD,KAAK0D,WAAaD,EAElBA,EAAM3D,KAAOA,EACb2D,EAAMhD,IAAMA,EAEZgD,EAAMD,OAASA,GAAU,KACzBC,EAAME,SAAW,KAGjBF,EAAMG,IAAM,KACZH,EAAMI,KAAO,KACbJ,EAAMK,YAAc,KACpBL,EAAMM,OAAS,KACfN,EAAMO,UAAW,EACjBP,EAAMQ,KAAM,EACZR,EAAMS,KAAM,EACZT,EAAMU,IAAM,KACZV,EAAMW,WAAa,KACnBX,EAAMY,IAAM,KACZZ,EAAe,QAAI,KACnBA,EAAMa,SAAW,KACjBb,EAAMc,SAAW,KACjBd,EAAMe,SAAW,KAGZf,EAAMD,SACTC,EAAME,SAAW,GACjB3D,KAAKyE,QAET,CACAC,EAAOrF,QAAU8D,EAEjB,MAAMwB,EAAa,CACjB,MAAO,SAAU,WAAY,MAAO,OAAQ,cAAe,SAC3D,WAAY,MAAO,MAAO,MAAO,aAAc,MAAO,UAAW,WACjE,WAAY,YAGdxB,EAAKlD,UAAU2E,MAAQ,WACrB,MAAMnB,EAAQzD,KAAK0D,WACbmB,EAAS,CAAC,EAChBF,EAAW3B,SAAQ,SAAS8B,GAC1BD,EAAOC,GAAQrB,EAAMqB,EACvB,IACA,MAAMtC,EAAM,IAAIxC,KAAKiC,YAAY4C,EAAOrB,QAExC,OADAhB,EAAIkB,WAAamB,EACVrC,CACT,EAEAW,EAAKlD,UAAUwE,MAAQ,WACrB,MAAMhB,EAAQzD,KAAK0D,WACnBJ,EAAQN,SAAQ,SAAS+B,GACvB/E,KAAK+E,GAAU,WACb,MAAMH,EAAQ,IAAI5E,KAAKiC,YAAYjC,MAEnC,OADAyD,EAAME,SAASqB,KAAKJ,GACbA,EAAMG,GAAQE,MAAML,EAAOM,UACpC,CACF,GAAGlF,KACL,EAEAmD,EAAKlD,UAAUkF,MAAQ,SAAcpF,GACnC,MAAM0D,EAAQzD,KAAK0D,WAEnBN,EAAwB,OAAjBK,EAAMD,QACbzD,EAAKQ,KAAKP,MAGVyD,EAAME,SAAWF,EAAME,SAASyB,QAAO,SAASC,GAC9C,OAAOA,EAAM3B,WAAWF,SAAWxD,IACrC,GAAGA,MACHoD,EAAOkC,MAAM7B,EAAME,SAASrC,OAAQ,EAAG,oCACzC,EAEA6B,EAAKlD,UAAUsF,SAAW,SAAiB1B,GACzC,MAAMJ,EAAQzD,KAAK0D,WAGbC,EAAWE,EAAKuB,QAAO,SAASI,GACpC,OAAOA,aAAexF,KAAKiC,WAC7B,GAAGjC,MACH6D,EAAOA,EAAKuB,QAAO,SAASI,GAC1B,QAASA,aAAexF,KAAKiC,YAC/B,GAAGjC,MAEqB,IAApB2D,EAASrC,SACX8B,EAA0B,OAAnBK,EAAME,UACbF,EAAME,SAAWA,EAGjBA,EAASX,SAAQ,SAASqC,GACxBA,EAAM3B,WAAWF,OAASxD,IAC5B,GAAGA,OAEe,IAAhB6D,EAAKvC,SACP8B,EAAsB,OAAfK,EAAMI,MACbJ,EAAMI,KAAOA,EACbJ,EAAMK,YAAcD,EAAKjC,KAAI,SAAS4D,GACpC,GAAmB,iBAARA,GAAoBA,EAAIvD,cAAgBwD,OACjD,OAAOD,EAET,MAAMhD,EAAM,CAAC,EAOb,OANAiD,OAAOC,KAAKF,GAAKxC,SAAQ,SAASqB,GAC5BA,IAAc,EAANA,KACVA,GAAO,GACT,MAAM5C,EAAQ+D,EAAInB,GAClB7B,EAAIf,GAAS4C,CACf,IACO7B,CACT,IAEJ,EAzHkB,CAChB,WAAY,aAAc,OAC1B,aAAc,eAAgB,cAC9B,cAAe,aAAc,cAAe,cAE5C,mBAAoB,aAAc,eAAgB,cAClD,cAAe,aAAc,eAyHrBQ,SAAQ,SAAS+B,GACzB5B,EAAKlD,UAAU8E,GAAU,WACvB,MAAMtB,EAAQzD,KAAK0D,WACnB,MAAM,IAAIiC,MAAMZ,EAAS,kCAAoCtB,EAAMhD,IACrE,CACF,IAMA4C,EAAKL,SAAQ,SAASY,GACpBT,EAAKlD,UAAU2D,GAAO,WACpB,MAAMH,EAAQzD,KAAK0D,WACbG,EAAOnC,MAAMzB,UAAU2C,MAAMrC,KAAK2E,WAOxC,OALA9B,EAAqB,OAAdK,EAAMG,KACbH,EAAMG,IAAMA,EAEZ5D,KAAKuF,SAAS1B,GAEP7D,IACT,CACF,IAEAmD,EAAKlD,UAAUkE,IAAM,SAAatC,GAChCuB,EAAOvB,GACP,MAAM4B,EAAQzD,KAAK0D,WAKnB,OAHAN,EAAqB,OAAdK,EAAMU,KACbV,EAAMU,IAAMtC,EAEL7B,IACT,EAEAmD,EAAKlD,UAAU+D,SAAW,WAKxB,OAJchE,KAAK0D,WAEbM,UAAW,EAEVhE,IACT,EAEAmD,EAAKlD,UAAU2F,IAAM,SAAaC,GAChC,MAAMpC,EAAQzD,KAAK0D,WAMnB,OAJAN,EAA4B,OAArBK,EAAe,SACtBA,EAAe,QAAIoC,EACnBpC,EAAMO,UAAW,EAEVhE,IACT,EAEAmD,EAAKlD,UAAUqE,SAAW,SAAkBwB,GAC1C,MAAMrC,EAAQzD,KAAK0D,WAKnB,OAHAN,EAA0B,OAAnBK,EAAMa,UAAwC,OAAnBb,EAAMc,UACxCd,EAAMa,SAAWwB,EAEV9F,IACT,EAEAmD,EAAKlD,UAAUsE,SAAW,SAAkBuB,GAC1C,MAAMrC,EAAQzD,KAAK0D,WAKnB,OAHAN,EAA0B,OAAnBK,EAAMa,UAAwC,OAAnBb,EAAMc,UACxCd,EAAMc,SAAWuB,EAEV9F,IACT,EAEAmD,EAAKlD,UAAUiE,IAAM,WACnB,MAAMT,EAAQzD,KAAK0D,WACbG,EAAOnC,MAAMzB,UAAU2C,MAAMrC,KAAK2E,WAOxC,OALAzB,EAAMS,KAAM,EAEQ,IAAhBL,EAAKvC,QACPtB,KAAKuF,SAAS1B,GAET7D,IACT,EAEAmD,EAAKlD,UAAUoE,IAAM,SAAa0B,GAChC,MAAMtC,EAAQzD,KAAK0D,WAKnB,OAHAN,EAAqB,OAAdK,EAAMY,KACbZ,EAAMY,IAAM0B,EAEL/F,IACT,EAEAmD,EAAKlD,UAAUgE,IAAM,WAKnB,OAJcjE,KAAK0D,WAEbO,KAAM,EAELjE,IACT,EAEAmD,EAAKlD,UAAU8D,OAAS,SAAgBG,GACtC,MAAMT,EAAQzD,KAAK0D,WAQnB,OANAN,EAAwB,OAAjBK,EAAMM,QACbN,EAAMM,OAASG,EACflE,KAAKuF,SAASE,OAAOC,KAAKxB,GAAKtC,KAAI,SAASyC,GAC1C,OAAOH,EAAIG,EACb,KAEOrE,IACT,EAEAmD,EAAKlD,UAAUuE,SAAW,SAAkB3C,GAC1C,MAAM4B,EAAQzD,KAAK0D,WAKnB,OAHAN,EAAqB,OAAdK,EAAMU,KACbV,EAAMe,SAAW3C,EAEV7B,IACT,EAMAmD,EAAKlD,UAAU+F,QAAU,SAAgBC,EAAOpF,GAC9C,MAAM4C,EAAQzD,KAAK0D,WAGnB,GAAqB,OAAjBD,EAAMD,OACR,OAAOyC,EAAMC,WAAWzC,EAAME,SAAS,GAAGqC,QAAQC,EAAOpF,IAE3D,IAuCIsF,EAvCAC,EAAS3C,EAAe,QACxB4C,GAAU,EAEVC,EAAU,KAKd,GAJkB,OAAd7C,EAAMY,MACRiC,EAAUL,EAAMM,SAAS9C,EAAMY,MAG7BZ,EAAMO,SAAU,CAClB,IAAIJ,EAAM,KAQV,GAPuB,OAAnBH,EAAMa,SACRV,EAAMH,EAAMa,SACc,OAAnBb,EAAMc,SACbX,EAAMH,EAAMc,SACS,OAAdd,EAAMG,MACbA,EAAMH,EAAMG,KAEF,OAARA,GAAiBH,EAAMQ,KAgBzB,GAFAoC,EAAUrG,KAAKwG,SAASP,EAAOrC,EAAKH,EAAMQ,KAEtCgC,EAAMQ,QAAQJ,GAChB,OAAOA,MAjBqB,CAE9B,MAAMnE,EAAO+D,EAAM/D,OACnB,IACuB,OAAjBuB,EAAMM,OACR/D,KAAK0G,eAAejD,EAAMG,IAAKqC,EAAOpF,GAEtCb,KAAK2G,cAAcV,EAAOpF,GAC5BwF,GAAU,CACZ,CAAE,MAAOO,GACPP,GAAU,CACZ,CACAJ,EAAM9D,QAAQD,EAChB,CAMF,CAOA,GAHIuB,EAAMS,KAAOmC,IACfF,EAAUF,EAAMY,eAEdR,EAAS,CAEX,GAAuB,OAAnB5C,EAAMa,SAAmB,CAC3B,MAAMA,EAAWtE,KAAK8G,WAAWb,EAAOxC,EAAMa,UAC9C,GAAI2B,EAAMQ,QAAQnC,GAChB,OAAOA,EACT2B,EAAQ3B,CACV,CAEA,MAAMyC,EAAQd,EAAM5E,OAGpB,GAAkB,OAAdoC,EAAMU,KAAiC,OAAjBV,EAAMM,OAAiB,CAC/C,IAAI7B,EACAuB,EAAMQ,MACR/B,EAAO+D,EAAM/D,QACf,MAAMnC,EAAOC,KAAK8G,WAChBb,EACmB,OAAnBxC,EAAMc,SAAoBd,EAAMc,SAAWd,EAAMG,IACjDH,EAAMQ,KAER,GAAIgC,EAAMQ,QAAQ1G,GAChB,OAAOA,EAEL0D,EAAMQ,IACRmC,EAASH,EAAM1D,IAAIL,GAEnB+D,EAAQlG,CACZ,CAiBA,GAfIc,GAAWA,EAAQmG,OAAuB,OAAdvD,EAAMG,KACpC/C,EAAQmG,MAAMf,EAAMgB,OAAQF,EAAOd,EAAM3E,OAAQ,UAE/CT,GAAWA,EAAQmG,OAAuB,OAAdvD,EAAMG,KACpC/C,EAAQmG,MAAMf,EAAMgB,OAAQhB,EAAM5E,OAAQ4E,EAAM3E,OAAQ,WAGtDmC,EAAMQ,MAGRmC,EAD0B,OAAjB3C,EAAMM,OACN/D,KAAK0G,eAAejD,EAAMG,IAAKqC,EAAOpF,GAEtCb,KAAK2G,cAAcV,EAAOpF,IAGjCoF,EAAMQ,QAAQL,GAChB,OAAOA,EAYT,GATK3C,EAAMQ,KAAwB,OAAjBR,EAAMM,QAAsC,OAAnBN,EAAME,UAC/CF,EAAME,SAASX,SAAQ,SAAwBqC,GAG7CA,EAAMW,QAAQC,EAAOpF,EACvB,IAIE4C,EAAMe,WAA2B,WAAdf,EAAMG,KAAkC,WAAdH,EAAMG,KAAmB,CACxE,MAAMhD,EAAO,IAAIO,EAAciF,GAC/BA,EAASpG,KAAKkH,QAAQzD,EAAMe,SAAUyB,EAAMtD,eAAeuB,KACxD8B,QAAQpF,EAAMC,EACnB,CACF,CAYA,OATI4C,EAAMS,KAAOmC,IACfD,EAASH,EAAMkB,YAAYhB,IAGX,OAAd1C,EAAMY,KAA4B,OAAX+B,IAA+B,IAAZC,EAEzB,OAAZC,GACPL,EAAMmB,QAAQd,GAFdL,EAAMoB,SAASf,EAAS7C,EAAMY,IAAK+B,GAI9BA,CACT,EAEAjD,EAAKlD,UAAUyG,eAAiB,SAAuB9C,EAAKqC,EAAOpF,GACjE,MAAM4C,EAAQzD,KAAK0D,WAEnB,MAAY,QAARE,GAAyB,QAARA,EACZ,KACG,UAARA,GAA2B,UAARA,EACd5D,KAAKsH,YAAYrB,EAAOrC,EAAKH,EAAMI,KAAK,GAAIhD,GAC5C,OAAO0G,KAAK3D,GACZ5D,KAAKwH,WAAWvB,EAAOrC,EAAK/C,GACpB,UAAR+C,GAAmBH,EAAMI,KACzB7D,KAAKyH,aAAaxB,EAAOxC,EAAMI,KAAK,GAAIJ,EAAMI,KAAK,GAAIhD,GAC/C,UAAR+C,EACA5D,KAAKyH,aAAaxB,EAAO,KAAM,KAAMpF,GAC7B,YAAR+C,GAA6B,YAARA,EACrB5D,KAAK0H,YAAYzB,EAAOrC,EAAK/C,GACrB,UAAR+C,EACA5D,KAAK2H,YAAY1B,EAAOpF,GAChB,SAAR+C,EACA5D,KAAK4H,YAAY3B,EAAOpF,GAChB,YAAR+C,EACA5D,KAAKwH,WAAWvB,EAAOrC,EAAK/C,GACpB,QAAR+C,GAAyB,SAARA,EACjB5D,KAAK6H,WAAW5B,EAAOxC,EAAMI,MAAQJ,EAAMI,KAAK,GAAIhD,GAE3C,OAAd4C,EAAMU,IACDnE,KAAKkH,QAAQzD,EAAMU,IAAK8B,EAAMtD,eAAeuB,KACjD8B,QAAQC,EAAOpF,GAEXoF,EAAM1E,MAAM,gBAAkBqC,EAEzC,EAEAT,EAAKlD,UAAUiH,QAAU,SAAiB7G,EAAQ6D,GAEhD,MAAMT,EAAQzD,KAAK0D,WASnB,OAPAD,EAAMW,WAAapE,KAAK8H,KAAKzH,EAAQ6D,GACrCd,EAA8C,OAAvCK,EAAMW,WAAWV,WAAWF,QACnCC,EAAMW,WAAaX,EAAMW,WAAWV,WAAWC,SAAS,GACpDF,EAAMc,WAAad,EAAMW,WAAWV,WAAWa,WACjDd,EAAMW,WAAaX,EAAMW,WAAWQ,QACpCnB,EAAMW,WAAWV,WAAWa,SAAWd,EAAMc,UAExCd,EAAMW,UACf,EAEAjB,EAAKlD,UAAU0G,cAAgB,SAAsBV,EAAOpF,GAC1D,MAAM4C,EAAQzD,KAAK0D,WACnB,IAAI0C,EAAS,KACT2B,GAAQ,EAmBZ,OAjBAtC,OAAOC,KAAKjC,EAAMM,QAAQiE,MAAK,SAAS3D,GACtC,MAAMnC,EAAO+D,EAAM/D,OACb+F,EAAOxE,EAAMM,OAAOM,GAC1B,IACE,MAAM5C,EAAQwG,EAAKjC,QAAQC,EAAOpF,GAClC,GAAIoF,EAAMQ,QAAQhF,GAChB,OAAO,EAET2E,EAAS,CAAE8B,KAAM7D,EAAK5C,MAAOA,GAC7BsG,GAAQ,CACV,CAAE,MAAOnB,GAEP,OADAX,EAAM9D,QAAQD,IACP,CACT,CACA,OAAO,CACT,GAAGlC,MAEE+H,EAGE3B,EAFEH,EAAM1E,MAAM,qBAGvB,EAMA4B,EAAKlD,UAAUkI,qBAAuB,SAA6BvH,GACjE,OAAO,IAAIY,EAAcZ,EAAMZ,KAAKgB,SACtC,EAEAmC,EAAKlD,UAAUmI,QAAU,SAAgBxH,EAAMI,EAAUwC,GACvD,MAAMC,EAAQzD,KAAK0D,WACnB,GAAyB,OAArBD,EAAe,SAAcA,EAAe,UAAM7C,EACpD,OAEF,MAAMwF,EAASpG,KAAKqI,aAAazH,EAAMI,EAAUwC,GACjD,YAAe8E,IAAXlC,GAGApG,KAAKuI,aAAanC,EAAQpF,EAAUwC,QAHxC,EAMO4C,CACT,EAEAjD,EAAKlD,UAAUoI,aAAe,SAAgBzH,EAAMI,EAAUwC,GAC5D,MAAMC,EAAQzD,KAAK0D,WAGnB,GAAqB,OAAjBD,EAAMD,OACR,OAAOC,EAAME,SAAS,GAAGyE,QAAQxH,EAAMI,GAAY,IAAIC,GAEzD,IAAImF,EAAS,KAMb,GAHApG,KAAKgB,SAAWA,EAGZyC,EAAMO,eAAqBsE,IAAT1H,EAAoB,CACxC,GAAyB,OAArB6C,EAAe,QAGjB,OAFA7C,EAAO6C,EAAe,OAG1B,CAGA,IAAI+E,EAAU,KACVC,GAAY,EAChB,GAAIhF,EAAMQ,IAERmC,EAASpG,KAAKmI,qBAAqBvH,QAC9B,GAAI6C,EAAMM,OACfqC,EAASpG,KAAK0I,cAAc9H,EAAMI,QAC7B,GAAIyC,EAAMe,SACfgE,EAAUxI,KAAKkH,QAAQzD,EAAMe,SAAUhB,GAAQ4E,QAAQxH,EAAMI,GAC7DyH,GAAY,OACP,GAAIhF,EAAME,SACf6E,EAAU/E,EAAME,SAAS/B,KAAI,SAASyD,GACpC,GAA6B,UAAzBA,EAAM3B,WAAWE,IACnB,OAAOyB,EAAM+C,QAAQ,KAAMpH,EAAUJ,GAEvC,GAA6B,OAAzByE,EAAM3B,WAAWW,IACnB,OAAOrD,EAASO,MAAM,2BACxB,MAAM+E,EAAUtF,EAASuF,SAASlB,EAAM3B,WAAWW,KAEnD,GAAoB,iBAATzD,EACT,OAAOI,EAASO,MAAM,2CAExB,MAAMiB,EAAM6C,EAAM+C,QAAQxH,EAAKyE,EAAM3B,WAAWW,KAAMrD,EAAUJ,GAGhE,OAFAI,EAASqG,SAASf,GAEX9D,CACT,GAAGxC,MAAMoF,QAAO,SAASC,GACvB,OAAOA,CACT,IACAmD,EAAUxI,KAAKmI,qBAAqBK,QAEpC,GAAkB,UAAd/E,EAAMG,KAAiC,UAAdH,EAAMG,IAAiB,CAElD,IAAMH,EAAMI,MAA8B,IAAtBJ,EAAMI,KAAKvC,OAC7B,OAAON,EAASO,MAAM,uBAAyBkC,EAAMG,KAEvD,IAAKlC,MAAMC,QAAQf,GACjB,OAAOI,EAASO,MAAM,sCAExB,MAAM8D,EAAQrF,KAAK4E,QACnBS,EAAM3B,WAAWa,SAAW,KAC5BiE,EAAUxI,KAAKmI,qBAAqBvH,EAAKgB,KAAI,SAASC,GACpD,MAAM4B,EAAQzD,KAAK0D,WAEnB,OAAO1D,KAAKkH,QAAQzD,EAAMI,KAAK,GAAIjD,GAAMwH,QAAQvG,EAAMb,EACzD,GAAGqE,GACL,MAAyB,OAAd5B,EAAMU,IACfiC,EAASpG,KAAKkH,QAAQzD,EAAMU,IAAKX,GAAQ4E,QAAQxH,EAAMI,IAEvDwH,EAAUxI,KAAK2I,iBAAiBlF,EAAMG,IAAKhD,GAC3C6H,GAAY,GAKhB,IAAKhF,EAAMQ,KAAwB,OAAjBR,EAAMM,OAAiB,CACvC,MAAMH,EAAyB,OAAnBH,EAAMc,SAAoBd,EAAMc,SAAWd,EAAMG,IACvDgF,EAAyB,OAAnBnF,EAAMc,SAAoB,YAAc,UAExC,OAARX,EACgB,OAAdH,EAAMU,KACRnD,EAASO,MAAM,wCAEC,OAAdkC,EAAMU,MACRiC,EAASpG,KAAK6I,iBAAiBjF,EAAK6E,EAAWG,EAAKJ,GAE1D,CAMA,OAHuB,OAAnB/E,EAAMa,WACR8B,EAASpG,KAAK6I,iBAAiBpF,EAAMa,UAAU,EAAO,UAAW8B,IAE5DA,CACT,EAEAjD,EAAKlD,UAAUyI,cAAgB,SAAsB9H,EAAMI,GACzD,MAAMyC,EAAQzD,KAAK0D,WAEbuE,EAAOxE,EAAMM,OAAOnD,EAAKsH,MAO/B,OANKD,GACH7E,GACE,EACAxC,EAAKsH,KAAO,iBACNY,KAAKC,UAAUtD,OAAOC,KAAKjC,EAAMM,UAEpCkE,EAAKG,QAAQxH,EAAKa,MAAOT,EAClC,EAEAmC,EAAKlD,UAAU0I,iBAAmB,SAAyB/E,EAAKhD,GAC9D,MAAM6C,EAAQzD,KAAK0D,WAEnB,GAAI,OAAO6D,KAAK3D,GACd,OAAO5D,KAAKgJ,WAAWpI,EAAMgD,GAC1B,GAAY,UAARA,GAAmBH,EAAMI,KAChC,OAAO7D,KAAKiJ,aAAarI,EAAM6C,EAAMK,YAAY,GAAIL,EAAMI,KAAK,IAC7D,GAAY,UAARD,EACP,OAAO5D,KAAKiJ,aAAarI,EAAM,KAAM,MAClC,GAAY,YAARgD,GAA6B,YAARA,EAC5B,OAAO5D,KAAKkJ,YAAYtI,EAAMgD,GAC3B,GAAY,UAARA,EACP,OAAO5D,KAAKmJ,cACT,GAAY,QAARvF,GAAyB,SAARA,EACxB,OAAO5D,KAAKoJ,WAAWxI,EAAM6C,EAAMI,MAAQJ,EAAMK,YAAY,IAC1D,GAAY,SAARF,EACP,OAAO5D,KAAKqJ,YAAYzI,GACrB,GAAY,YAARgD,EACP,OAAO5D,KAAKgJ,WAAWpI,EAAMgD,GAE7B,MAAM,IAAI+B,MAAM,oBAAsB/B,EAC1C,EAEAT,EAAKlD,UAAUqJ,UAAY,SAAkBC,GAC3C,MAAO,YAAYhC,KAAKgC,EAC1B,EAEApG,EAAKlD,UAAUuJ,YAAc,SAAoBD,GAC/C,MAAO,6BAA6BhC,KAAKgC,EAC3C,C,+BC3nBA,MAAM3J,EAAW,EAAQ,OAEzB,SAASqB,EAASJ,GAChBb,KAAK2C,eAAiB,CACpBuB,IAAK,KACL+C,KAAM,GACNpG,QAASA,GAAW,CAAC,EACrB4I,OAAQ,GAEZ,CA2FA,SAASC,EAAczC,EAAM0C,GAC3B3J,KAAKiH,KAAOA,EACZjH,KAAK4J,QAAQD,EACf,CA7FAtK,EAAQ,EAAW4B,EAEnBA,EAAShB,UAAUwG,QAAU,SAAiBvC,GAC5C,OAAOA,aAAewF,CACxB,EAEAzI,EAAShB,UAAUiC,KAAO,WACxB,MAAMuB,EAAQzD,KAAK2C,eAEnB,MAAO,CAAEuB,IAAKT,EAAMS,IAAK2F,QAASpG,EAAMwD,KAAK3F,OAC/C,EAEAL,EAAShB,UAAUkC,QAAU,SAAiBvB,GAC5C,MAAM6C,EAAQzD,KAAK2C,eAEnBc,EAAMS,IAAMtD,EAAKsD,IACjBT,EAAMwD,KAAOxD,EAAMwD,KAAKrE,MAAM,EAAGhC,EAAKiJ,QACxC,EAEA5I,EAAShB,UAAUsG,SAAW,SAAkBlC,GAC9C,OAAOrE,KAAK2C,eAAesE,KAAKjC,KAAKX,EACvC,EAEApD,EAAShB,UAAUmH,QAAU,SAAiB0C,GAC5C,MAAMrG,EAAQzD,KAAK2C,eAEnBc,EAAMwD,KAAOxD,EAAMwD,KAAKrE,MAAM,EAAGkH,EAAQ,EAC3C,EAEA7I,EAAShB,UAAUoH,SAAW,SAAkByC,EAAOzF,EAAK5C,GAC1D,MAAMgC,EAAQzD,KAAK2C,eAEnB3C,KAAKoH,QAAQ0C,GACK,OAAdrG,EAAMS,MACRT,EAAMS,IAAIG,GAAO5C,EACrB,EAEAR,EAAShB,UAAUgH,KAAO,WACxB,OAAOjH,KAAK2C,eAAesE,KAAKpE,KAAK,IACvC,EAEA5B,EAAShB,UAAU4G,YAAc,WAC/B,MAAMpD,EAAQzD,KAAK2C,eAEboH,EAAOtG,EAAMS,IAEnB,OADAT,EAAMS,IAAM,CAAC,EACN6F,CACT,EAEA9I,EAAShB,UAAUkH,YAAc,SAAqB4C,GACpD,MAAMtG,EAAQzD,KAAK2C,eAEbqH,EAAMvG,EAAMS,IAElB,OADAT,EAAMS,IAAM6F,EACLC,CACT,EAEA/I,EAAShB,UAAUsB,MAAQ,SAAeoI,GACxC,IAAIM,EACJ,MAAMxG,EAAQzD,KAAK2C,eAEbuH,EAAYP,aAAeD,EASjC,GAPEO,EADEC,EACIP,EAEA,IAAID,EAAcjG,EAAMwD,KAAKrF,KAAI,SAASuI,GAC9C,MAAO,IAAMrB,KAAKC,UAAUoB,GAAQ,GACtC,IAAGtH,KAAK,IAAK8G,EAAIS,SAAWT,EAAKA,EAAIU,QAGlC5G,EAAM5C,QAAQyJ,QACjB,MAAML,EAKR,OAHKC,GACHzG,EAAMgG,OAAOzE,KAAKiF,GAEbA,CACT,EAEAhJ,EAAShB,UAAUiG,WAAa,SAAoBE,GAClD,MAAM3C,EAAQzD,KAAK2C,eACnB,OAAKc,EAAM5C,QAAQyJ,QAGZ,CACLlE,OAAQpG,KAAKyG,QAAQL,GAAU,KAAOA,EACtCqD,OAAQhG,EAAMgG,QAJPrD,CAMX,EAMAxG,EAAS8J,EAAe/D,OAExB+D,EAAczJ,UAAU2J,QAAU,SAAiBD,GAKjD,GAJA3J,KAAKoK,QAAUT,EAAM,SAAW3J,KAAKiH,MAAQ,aACzCtB,MAAM4E,mBACR5E,MAAM4E,kBAAkBvK,KAAM0J,IAE3B1J,KAAKqK,MACR,IAEE,MAAM,IAAI1E,MAAM3F,KAAKoK,QACvB,CAAE,MAAOxD,GACP5G,KAAKqK,MAAQzD,EAAEyD,KACjB,CAEF,OAAOrK,IACT,C,6BCvHA,SAASwK,EAAQ5I,GACf,MAAMY,EAAM,CAAC,EAWb,OATAiD,OAAOC,KAAK9D,GAAKoB,SAAQ,SAASqB,IAErB,EAANA,IAAYA,IACfA,GAAY,GAEd,MAAM5C,EAAQG,EAAIyC,GAClB7B,EAAIf,GAAS4C,CACf,IAEO7B,CACT,CAEAnD,EAAQoL,SAAW,CACjB,EAAG,YACH,EAAG,cACH,EAAG,UACH,EAAG,WAELpL,EAAQqL,eAAiBF,EAAQnL,EAAQoL,UAEzCpL,EAAQuE,IAAM,CACZ,EAAM,MACN,EAAM,OACN,EAAM,MACN,EAAM,SACN,EAAM,SACN,EAAM,QACN,EAAM,QACN,EAAM,UACN,EAAM,WACN,EAAM,OACN,GAAM,OACN,GAAM,QACN,GAAM,UACN,GAAM,cACN,GAAM,MACN,GAAM,MACN,GAAM,SACN,GAAM,WACN,GAAM,SACN,GAAM,WACN,GAAM,SACN,GAAM,UACN,GAAM,UACN,GAAM,WACN,GAAM,YACN,GAAM,SACN,GAAM,SACN,GAAM,UACN,GAAM,UAERvE,EAAQsL,UAAYH,EAAQnL,EAAQuE,I,+BCvDpC,MAAMnE,EAAYJ,EAGlBI,EAAUmL,SAAW,SAAiBhJ,GACpC,MAAMY,EAAM,CAAC,EAWb,OATAiD,OAAOC,KAAK9D,GAAKoB,SAAQ,SAASqB,IAErB,EAANA,IAAYA,IACfA,GAAY,GAEd,MAAM5C,EAAQG,EAAIyC,GAClB7B,EAAIf,GAAS4C,CACf,IAEO7B,CACT,EAEA/C,EAAUoL,IAAM,EAAQ,M,+BClBxB,MAAMjL,EAAW,EAAQ,OAEnBN,EAAS,EAAQ,OACjB6B,EAAgB,WAChBgC,EAAO,EAAQ,OAGf0H,EAAM,EAAQ,OAEpB,SAASC,EAAWzK,GAClBL,KAAKS,IAAM,MACXT,KAAKF,KAAOO,EAAOP,KACnBE,KAAKK,OAASA,EAGdL,KAAK+K,KAAO,IAAIC,EAChBhL,KAAK+K,KAAK5F,MAAM9E,EAAON,KACzB,CAaA,SAASiL,EAAQxH,GACfL,EAAK5C,KAAKP,KAAM,MAAOwD,EACzB,CA6OA,SAASyH,EAAaC,EAAKzI,GACzB,IAAImB,EAAMsH,EAAI7I,UAAUI,GACxB,GAAIyI,EAAIzE,QAAQ7C,GACd,OAAOA,EAET,MAAMgF,EAAMiC,EAAIJ,SAAS7G,GAAO,GAC1B6E,EAA6B,IAAV,GAAN7E,GAGnB,GAAqB,KAAV,GAANA,GAAsB,CACzB,IAAIuH,EAAMvH,EAEV,IADAA,EAAM,EACkB,MAAV,IAANuH,IAAsB,CAE5B,GADAA,EAAMD,EAAI7I,UAAUI,GAChByI,EAAIzE,QAAQ0E,GACd,OAAOA,EAETvH,IAAQ,EACRA,GAAa,IAANuH,CACT,CACF,MACEvH,GAAO,GAIT,MAAO,CACLgF,IAAKA,EACLH,UAAWA,EACX7E,IAAKA,EACLwH,OANaP,EAAIjH,IAAIA,GAQzB,CAEA,SAASyH,EAAaH,EAAKzC,EAAWhG,GACpC,IAAI6I,EAAMJ,EAAI7I,UAAUI,GACxB,GAAIyI,EAAIzE,QAAQ6E,GACd,OAAOA,EAGT,IAAK7C,GAAqB,MAAR6C,EAChB,OAAO,KAGT,GAAqB,IAAV,IAANA,GAEH,OAAOA,EAIT,MAAMxF,EAAY,IAANwF,EACZ,GAAIxF,EAAM,EACR,OAAOoF,EAAI3J,MAAM,6BAEnB+J,EAAM,EACN,IAAK,IAAIC,EAAI,EAAGA,EAAIzF,EAAKyF,IAAK,CAC5BD,IAAQ,EACR,MAAME,EAAIN,EAAI7I,UAAUI,GACxB,GAAIyI,EAAIzE,QAAQ+E,GACd,OAAOA,EACTF,GAAOE,CACT,CAEA,OAAOF,CACT,CA1TA5G,EAAOrF,QAAUyL,EAEjBA,EAAW7K,UAAUU,OAAS,SAAgBC,EAAMC,GAKlD,OAJKM,EAAca,gBAAgBpB,KACjCA,EAAO,IAAIO,EAAcP,EAAMC,IAG1Bb,KAAK+K,KAAK/E,QAAQpF,EAAMC,EACjC,EAOAjB,EAASoL,EAAS7H,GAElB6H,EAAQ/K,UAAUuG,SAAW,SAAiBiF,EAAQ7H,EAAKK,GACzD,GAAIwH,EAAOrJ,UACT,OAAO,EAET,MAAMqB,EAAQgI,EAAOvJ,OACfwJ,EAAaT,EAAaQ,EAAQ,wBAA0B7H,EAAM,KACxE,OAAI6H,EAAOhF,QAAQiF,GACVA,GAETD,EAAOtJ,QAAQsB,GAERiI,EAAW9H,MAAQA,GAAO8H,EAAWN,SAAWxH,GACpD8H,EAAWN,OAAS,OAAUxH,GAAOK,EAC1C,EAEA+G,EAAQ/K,UAAU6G,WAAa,SAAmB2E,EAAQ7H,EAAKK,GAC7D,MAAMyH,EAAaT,EAAaQ,EAC9B,4BAA8B7H,EAAM,KACtC,GAAI6H,EAAOhF,QAAQiF,GACjB,OAAOA,EAET,IAAIJ,EAAMD,EAAaI,EACrBC,EAAWjD,UACX,4BAA8B7E,EAAM,KAGtC,GAAI6H,EAAOhF,QAAQ6E,GACjB,OAAOA,EAET,IAAKrH,GACDyH,EAAW9H,MAAQA,GACnB8H,EAAWN,SAAWxH,GACtB8H,EAAWN,OAAS,OAASxH,EAC/B,OAAO6H,EAAOlK,MAAM,yBAA2BqC,EAAM,KAGvD,GAAI8H,EAAWjD,WAAqB,OAAR6C,EAC1B,OAAOG,EAAOnJ,KAAKgJ,EAAK,6BAA+B1H,EAAM,KAG/D,MAAMH,EAAQgI,EAAOvJ,OACfM,EAAMxC,KAAK2L,cACfF,EACA,2CAA6CzL,KAAK4D,IAAM,KAC1D,OAAI6H,EAAOhF,QAAQjE,GACVA,GAET8I,EAAMG,EAAOpK,OAASoC,EAAMpC,OAC5BoK,EAAOtJ,QAAQsB,GACRgI,EAAOnJ,KAAKgJ,EAAK,6BAA+B1H,EAAM,KAC/D,EAEAoH,EAAQ/K,UAAU0L,cAAgB,SAAsBF,EAAQhJ,GAC9D,OAAS,CACP,MAAMmB,EAAMqH,EAAaQ,EAAQhJ,GACjC,GAAIgJ,EAAOhF,QAAQ7C,GACjB,OAAOA,EACT,MAAM0H,EAAMD,EAAaI,EAAQ7H,EAAI6E,UAAWhG,GAChD,GAAIgJ,EAAOhF,QAAQ6E,GACjB,OAAOA,EAET,IAAI9I,EAOJ,GALEA,EADEoB,EAAI6E,WAAqB,OAAR6C,EACbG,EAAOnJ,KAAKgJ,GAEZtL,KAAK2L,cAAcF,EAAQhJ,GAG/BgJ,EAAOhF,QAAQjE,GACjB,OAAOA,EAET,GAAmB,QAAfoB,EAAIwH,OACN,KACJ,CACF,EAEAJ,EAAQ/K,UAAUqH,YAAc,SAAoBmE,EAAQ7H,EAAKgI,EAC/D/K,GACA,MAAMuF,EAAS,GACf,MAAQqF,EAAOrJ,WAAW,CACxB,MAAMyJ,EAAc7L,KAAKwG,SAASiF,EAAQ,OAC1C,GAAIA,EAAOhF,QAAQoF,GACjB,OAAOA,EAET,MAAMrJ,EAAMoJ,EAAQjL,OAAO8K,EAAQ,MAAO5K,GAC1C,GAAI4K,EAAOhF,QAAQjE,IAAQqJ,EACzB,MACFzF,EAAOpB,KAAKxC,EACd,CACA,OAAO4D,CACT,EAEA4E,EAAQ/K,UAAUuH,WAAa,SAAmBiE,EAAQ7H,GACxD,GAAY,WAARA,EAAkB,CACpB,MAAMkI,EAASL,EAAOpJ,YACtB,OAAIoJ,EAAOhF,QAAQqF,GACVA,EACF,CAAEA,OAAQA,EAAQlL,KAAM6K,EAAOlJ,MACxC,CAAO,GAAY,WAARqB,EAAkB,CAC3B,MAAMrB,EAAMkJ,EAAOlJ,MACnB,GAAIA,EAAIjB,OAAS,GAAM,EACrB,OAAOmK,EAAOlK,MAAM,mDAEtB,IAAIgI,EAAM,GACV,IAAK,IAAIgC,EAAI,EAAGA,EAAIhJ,EAAIjB,OAAS,EAAGiK,IAClChC,GAAOwC,OAAOC,aAAazJ,EAAI0J,aAAiB,EAAJV,IAE9C,OAAOhC,CACT,CAAO,GAAY,WAAR3F,EAAkB,CAC3B,MAAMsI,EAAST,EAAOlJ,MAAM4J,SAAS,SACrC,OAAKnM,KAAKsJ,UAAU4C,GAIbA,EAHET,EAAOlK,MAAM,yDAIxB,CAAO,GAAY,WAARqC,EACT,OAAO6H,EAAOlJ,MACT,GAAY,YAARqB,EACT,OAAO6H,EAAOlJ,MACT,GAAY,aAARqB,EAAoB,CAC7B,MAAMwI,EAAWX,EAAOlJ,MAAM4J,SAAS,SACvC,OAAKnM,KAAKwJ,YAAY4C,GAIfA,EAHEX,EAAOlK,MAAM,2DAIxB,CAAO,MAAI,OAAOgG,KAAK3D,GACd6H,EAAOlJ,MAAM4J,WAEbV,EAAOlK,MAAM,4BAA8BqC,EAAM,eAE5D,EAEAoH,EAAQ/K,UAAUwH,aAAe,SAAqBgE,EAAQY,EAAQC,GACpE,IAAIlG,EACJ,MAAMmG,EAAc,GACpB,IAAIC,EAAQ,EACRC,EAAW,EACf,MAAQhB,EAAOrJ,WACbqK,EAAWhB,EAAOpJ,YAClBmK,IAAU,EACVA,GAAoB,IAAXC,EACiB,IAAV,IAAXA,KACHF,EAAYvH,KAAKwH,GACjBA,EAAQ,GAGG,IAAXC,GACFF,EAAYvH,KAAKwH,GAEnB,MAAME,EAASH,EAAY,GAAK,GAAM,EAChCI,EAASJ,EAAY,GAAK,GAOhC,GAJEnG,EADEkG,EACOC,EAEA,CAACG,EAAOC,GAAQpJ,OAAOgJ,EAAY3J,MAAM,IAEhDyJ,EAAQ,CACV,IAAIO,EAAMP,EAAOjG,EAAOvD,KAAK,WACjByF,IAARsE,IACFA,EAAMP,EAAOjG,EAAOvD,KAAK,YACfyF,IAARsE,IACFxG,EAASwG,EACb,CAEA,OAAOxG,CACT,EAEA4E,EAAQ/K,UAAUyH,YAAc,SAAoB+D,EAAQ7H,GAC1D,MAAM2F,EAAMkC,EAAOlJ,MAAM4J,WAEzB,IAAIU,EACAC,EACAC,EACAC,EACAC,EACAC,EACJ,GAAY,YAARtJ,EACFiJ,EAAyB,EAAlBtD,EAAI3G,MAAM,EAAG,GACpBkK,EAAwB,EAAlBvD,EAAI3G,MAAM,EAAG,GACnBmK,EAAwB,EAAlBxD,EAAI3G,MAAM,EAAG,GACnBoK,EAA0B,EAAnBzD,EAAI3G,MAAM,EAAG,IACpBqK,EAA0B,EAApB1D,EAAI3G,MAAM,GAAI,IACpBsK,EAA0B,EAApB3D,EAAI3G,MAAM,GAAI,QACf,IAAY,YAARgB,EAYT,OAAO6H,EAAOlK,MAAM,YAAcqC,EAAM,8BAXxCiJ,EAAyB,EAAlBtD,EAAI3G,MAAM,EAAG,GACpBkK,EAAwB,EAAlBvD,EAAI3G,MAAM,EAAG,GACnBmK,EAAwB,EAAlBxD,EAAI3G,MAAM,EAAG,GACnBoK,EAAyB,EAAlBzD,EAAI3G,MAAM,EAAG,GACpBqK,EAAyB,EAAnB1D,EAAI3G,MAAM,EAAG,IACnBsK,EAA0B,EAApB3D,EAAI3G,MAAM,GAAI,IAElBiK,EADEA,EAAO,GACF,IAAOA,EAEP,KAAOA,CAGlB,CAEA,OAAOM,KAAKC,IAAIP,EAAMC,EAAM,EAAGC,EAAKC,EAAMC,EAAKC,EAAK,EACtD,EAEAlC,EAAQ/K,UAAU0H,YAAc,WAC9B,OAAO,IACT,EAEAqD,EAAQ/K,UAAU2H,YAAc,SAAoB6D,GAClD,MAAMjJ,EAAMiJ,EAAOpJ,YACnB,OAAIoJ,EAAOhF,QAAQjE,GACVA,EAEQ,IAARA,CACX,EAEAwI,EAAQ/K,UAAU4H,WAAa,SAAmB4D,EAAQY,GAExD,MAAM9J,EAAMkJ,EAAOlJ,MACnB,IAAIC,EAAM,IAAIlD,EAAOiD,GAKrB,OAHI8J,IACF7J,EAAM6J,EAAO7J,EAAI2J,SAAS,MAAQ3J,GAE7BA,CACT,EAEAwI,EAAQ/K,UAAU6H,KAAO,SAAazH,EAAQ6D,GAG5C,MAFsB,mBAAX7D,IACTA,EAASA,EAAO6D,IACX7D,EAAOG,YAAY,OAAOuK,IACnC,C,+BCzQA,MAAMrL,EAAWL,EAEjBK,EAASmL,IAAM,EAAQ,OACvBnL,EAAS2N,IAAM,EAAQ,M,+BCHvB,MAAMzN,EAAW,EAAQ,OACnBsB,EAAS,gBAET4J,EAAa,EAAQ,OAE3B,SAASwC,EAAWjN,GAClByK,EAAWvK,KAAKP,KAAMK,GACtBL,KAAKS,IAAM,KACb,CACAb,EAAS0N,EAAYxC,GACrBpG,EAAOrF,QAAUiO,EAEjBA,EAAWrN,UAAUU,OAAS,SAAgBC,EAAMC,GAClD,MAAM0M,EAAQ3M,EAAKuL,WAAWqB,MAAM,YAE9BC,EAAQ5M,EAAQ4M,MAAMC,cAEtBC,EAAK,kCACX,IAAI5G,GAAS,EACT6G,GAAO,EACX,IAAK,IAAIrC,EAAI,EAAGA,EAAIgC,EAAMjM,OAAQiK,IAAK,CACrC,MAAMxD,EAAQwF,EAAMhC,GAAGxD,MAAM4F,GAC7B,GAAc,OAAV5F,GAGAA,EAAM,KAAO0F,EAAjB,CAGA,IAAe,IAAX1G,EAIG,CACL,GAAiB,QAAbgB,EAAM,GACR,MACF6F,EAAMrC,EACN,KACF,CARE,GAAiB,UAAbxD,EAAM,GACR,MACFhB,EAAQwE,CALA,CAYZ,CACA,IAAe,IAAXxE,IAAyB,IAAT6G,EAClB,MAAM,IAAIjI,MAAM,8BAAgC8H,GAElD,MAAMI,EAASN,EAAM3K,MAAMmE,EAAQ,EAAG6G,GAAK/K,KAAK,IAEhDgL,EAAOC,QAAQ,kBAAmB,IAElC,MAAM7H,EAAQ/E,EAAO6M,KAAKF,EAAQ,UAClC,OAAO/C,EAAW7K,UAAUU,OAAOJ,KAAKP,KAAMiG,EAAOpF,EACvD,C,+BChDA,MAAMjB,EAAW,EAAQ,OACnBsB,EAAS,gBACTiC,EAAO,EAAQ,OAGf0H,EAAM,EAAQ,OAEpB,SAASmD,EAAW3N,GAClBL,KAAKS,IAAM,MACXT,KAAKF,KAAOO,EAAOP,KACnBE,KAAKK,OAASA,EAGdL,KAAK+K,KAAO,IAAIC,EAChBhL,KAAK+K,KAAK5F,MAAM9E,EAAON,KACzB,CASA,SAASiL,EAAQxH,GACfL,EAAK5C,KAAKP,KAAM,MAAOwD,EACzB,CAkHA,SAASyK,EAAInI,GACX,OAAIA,EAAM,GACD,IAAMA,EAENA,CACX,CAjIApB,EAAOrF,QAAU2O,EAEjBA,EAAW/N,UAAUc,OAAS,SAAgBH,EAAMI,GAClD,OAAOhB,KAAK+K,KAAK3C,QAAQxH,EAAMI,GAAU6B,MAC3C,EAOAjD,EAASoL,EAAS7H,GAElB6H,EAAQ/K,UAAU4I,iBAAmB,SAAyBjF,EAC5D6E,EACAG,EACAJ,GACA,MAAM0F,EA2OR,SAAmBtK,EAAK6E,EAAWG,EAAK5H,GACtC,IAAIwB,EAOJ,GALY,UAARoB,EACFA,EAAM,MACS,UAARA,IACPA,EAAM,OAEJiH,EAAIF,UAAUjK,eAAekD,GAC/BpB,EAAMqI,EAAIF,UAAU/G,OACjB,IAAmB,iBAARA,IAA2B,EAANA,KAAaA,EAGhD,OAAO5C,EAASO,MAAM,gBAAkBqC,GAFxCpB,EAAMoB,CAEsC,CAE9C,OAAIpB,GAAO,GACFxB,EAASO,MAAM,yCAEnBkH,IACHjG,GAAO,IAETA,GAAQqI,EAAIH,eAAe9B,GAAO,cAAgB,EAE3CpG,EACT,CAnQqB2L,CAAUvK,EAAK6E,EAAWG,EAAK5I,KAAKgB,UAGvD,GAAIwH,EAAQlH,OAAS,IAAM,CACzB,MAAM8M,EAASlN,EAAO6B,MAAM,GAG5B,OAFAqL,EAAO,GAAKF,EACZE,EAAO,GAAK5F,EAAQlH,OACbtB,KAAKmI,qBAAqB,CAAEiG,EAAQ5F,GAC7C,CAIA,IAAI6F,EAAY,EAChB,IAAK,IAAI9C,EAAI/C,EAAQlH,OAAQiK,GAAK,IAAOA,IAAM,EAC7C8C,IAEF,MAAMD,EAASlN,EAAO6B,MAAM,EAAQsL,GACpCD,EAAO,GAAKF,EACZE,EAAO,GAAK,IAAOC,EAEnB,IAAK,IAAI9C,EAAI,EAAI8C,EAAW7C,EAAIhD,EAAQlH,OAAQkK,EAAI,EAAGD,IAAKC,IAAM,EAChE4C,EAAO7C,GAAS,IAAJC,EAEd,OAAOxL,KAAKmI,qBAAqB,CAAEiG,EAAQ5F,GAC7C,EAEAwC,EAAQ/K,UAAU+I,WAAa,SAAmBO,EAAK3F,GACrD,GAAY,WAARA,EACF,OAAO5D,KAAKmI,qBAAqB,CAAe,EAAboB,EAAIuC,OAAYvC,EAAI3I,OAClD,GAAY,WAARgD,EAAkB,CAC3B,MAAMsH,EAAMhK,EAAO6B,MAAmB,EAAbwG,EAAIjI,QAC7B,IAAK,IAAIiK,EAAI,EAAGA,EAAIhC,EAAIjI,OAAQiK,IAC9BL,EAAIoD,cAAc/E,EAAIgF,WAAWhD,GAAQ,EAAJA,GAEvC,OAAOvL,KAAKmI,qBAAqB+C,EACnC,CAAO,MAAY,WAARtH,EACJ5D,KAAKsJ,UAAUC,GAIbvJ,KAAKmI,qBAAqBoB,GAHxBvJ,KAAKgB,SAASO,MAAM,kEAIZ,aAARqC,EACJ5D,KAAKwJ,YAAYD,GAQfvJ,KAAKmI,qBAAqBoB,GAPxBvJ,KAAKgB,SAASO,MAAM,qNAQpB,OAAOgG,KAAK3D,IAEJ,YAARA,EADF5D,KAAKmI,qBAAqBoB,GAI1BvJ,KAAKgB,SAASO,MAAM,4BAA8BqC,EAC9B,eAE/B,EAEAoH,EAAQ/K,UAAUgJ,aAAe,SAAqBuF,EAAInC,EAAQC,GAChE,GAAkB,iBAAPkC,EAAiB,CAC1B,IAAKnC,EACH,OAAOrM,KAAKgB,SAASO,MAAM,+CAC7B,IAAK8K,EAAO3L,eAAe8N,GACzB,OAAOxO,KAAKgB,SAASO,MAAM,iCAC7BiN,EAAKnC,EAAOmC,GAAIhB,MAAM,WACtB,IAAK,IAAIjC,EAAI,EAAGA,EAAIiD,EAAGlN,OAAQiK,IAC7BiD,EAAGjD,IAAM,CACb,MAAO,GAAI7J,MAAMC,QAAQ6M,GAAK,CAC5BA,EAAKA,EAAG5L,QACR,IAAK,IAAI2I,EAAI,EAAGA,EAAIiD,EAAGlN,OAAQiK,IAC7BiD,EAAGjD,IAAM,CACb,CAEA,IAAK7J,MAAMC,QAAQ6M,GACjB,OAAOxO,KAAKgB,SAASO,MAAM,kDACUuH,KAAKC,UAAUyF,IAGtD,IAAKlC,EAAU,CACb,GAAIkC,EAAG,IAAM,GACX,OAAOxO,KAAKgB,SAASO,MAAM,+BAC7BiN,EAAGC,OAAO,EAAG,EAAW,GAARD,EAAG,GAAUA,EAAG,GAClC,CAGA,IAAIE,EAAO,EACX,IAAK,IAAInD,EAAI,EAAGA,EAAIiD,EAAGlN,OAAQiK,IAAK,CAClC,IAAIiB,EAAQgC,EAAGjD,GACf,IAAKmD,IAAQlC,GAAS,IAAMA,IAAU,EACpCkC,GACJ,CAEA,MAAMC,EAAQzN,EAAO6B,MAAM2L,GAC3B,IAAIrN,EAASsN,EAAMrN,OAAS,EAC5B,IAAK,IAAIiK,EAAIiD,EAAGlN,OAAS,EAAGiK,GAAK,EAAGA,IAAK,CACvC,IAAIiB,EAAQgC,EAAGjD,GAEf,IADAoD,EAAMtN,KAAoB,IAARmL,GACVA,IAAU,GAAK,GACrBmC,EAAMtN,KAAY,IAAgB,IAARmL,CAC9B,CAEA,OAAOxM,KAAKmI,qBAAqBwG,EACnC,EASA3D,EAAQ/K,UAAUiJ,YAAc,SAAoB0F,EAAMhL,GACxD,IAAI2F,EACJ,MAAMsF,EAAO,IAAI1B,KAAKyB,GA0BtB,MAxBY,YAARhL,EACF2F,EAAM,CACJ0E,EAAIY,EAAKC,kBACTb,EAAIY,EAAKE,cAAgB,GACzBd,EAAIY,EAAKG,cACTf,EAAIY,EAAKI,eACThB,EAAIY,EAAKK,iBACTjB,EAAIY,EAAKM,iBACT,KACAtM,KAAK,IACU,YAARe,EACT2F,EAAM,CACJ0E,EAAIY,EAAKC,iBAAmB,KAC5Bb,EAAIY,EAAKE,cAAgB,GACzBd,EAAIY,EAAKG,cACTf,EAAIY,EAAKI,eACThB,EAAIY,EAAKK,iBACTjB,EAAIY,EAAKM,iBACT,KACAtM,KAAK,IAEP7C,KAAKgB,SAASO,MAAM,YAAcqC,EAAM,8BAGnC5D,KAAKgJ,WAAWO,EAAK,SAC9B,EAEAyB,EAAQ/K,UAAUkJ,YAAc,WAC9B,OAAOnJ,KAAKmI,qBAAqB,GACnC,EAEA6C,EAAQ/K,UAAUmJ,WAAa,SAAmBtD,EAAKuG,GACrD,GAAmB,iBAARvG,EAAkB,CAC3B,IAAKuG,EACH,OAAOrM,KAAKgB,SAASO,MAAM,+CAC7B,IAAK8K,EAAO3L,eAAeoF,GACzB,OAAO9F,KAAKgB,SAASO,MAAM,+BACAuH,KAAKC,UAAUjD,IAE5CA,EAAMuG,EAAOvG,EACf,CAGA,GAAmB,iBAARA,IAAqB5E,EAAOE,SAAS0E,GAAM,CACpD,MAAMsJ,EAAWtJ,EAAIuJ,WAChBvJ,EAAIwJ,MAAsB,IAAdF,EAAS,IACxBA,EAASG,QAAQ,GAEnBzJ,EAAM5E,EAAO6M,KAAKqB,EACpB,CAEA,GAAIlO,EAAOE,SAAS0E,GAAM,CACxB,IAAI4I,EAAO5I,EAAIxE,OACI,IAAfwE,EAAIxE,QACNoN,IAEF,MAAM5L,EAAM5B,EAAO6B,MAAM2L,GAIzB,OAHA5I,EAAI5C,KAAKJ,GACU,IAAfgD,EAAIxE,SACNwB,EAAI,GAAK,GACJ9C,KAAKmI,qBAAqBrF,EACnC,CAEA,GAAIgD,EAAM,IACR,OAAO9F,KAAKmI,qBAAqBrC,GAEnC,GAAIA,EAAM,IACR,OAAO9F,KAAKmI,qBAAqB,CAAC,EAAGrC,IAEvC,IAAI4I,EAAO,EACX,IAAK,IAAInD,EAAIzF,EAAKyF,GAAK,IAAOA,IAAM,EAClCmD,IAEF,MAAM5L,EAAM,IAAIpB,MAAMgN,GACtB,IAAK,IAAInD,EAAIzI,EAAIxB,OAAS,EAAGiK,GAAK,EAAGA,IACnCzI,EAAIyI,GAAW,IAANzF,EACTA,IAAQ,EAMV,OAJY,IAAThD,EAAI,IACLA,EAAIyM,QAAQ,GAGPvP,KAAKmI,qBAAqBjH,EAAO6M,KAAKjL,GAC/C,EAEAkI,EAAQ/K,UAAUoJ,YAAc,SAAoB5H,GAClD,OAAOzB,KAAKmI,qBAAqB1G,EAAQ,IAAO,EAClD,EAEAuJ,EAAQ/K,UAAU6H,KAAO,SAAazH,EAAQ6D,GAG5C,MAFsB,mBAAX7D,IACTA,EAASA,EAAO6D,IACX7D,EAAOS,YAAY,OAAOiK,IACnC,EAEAC,EAAQ/K,UAAUsI,aAAe,SAAqBiH,EAAYxO,EAAUwC,GAC1E,MAAMC,EAAQzD,KAAK0D,WACnB,IAAI6H,EACJ,GAAyB,OAArB9H,EAAe,QACjB,OAAO,EAET,MAAM7C,EAAO4O,EAAW3M,OAIxB,QAH4ByF,IAAxB7E,EAAMgM,gBACRhM,EAAMgM,cAAgBzP,KAAKqI,aAAa5E,EAAe,QAAGzC,EAAUwC,GAAQX,QAE1EjC,EAAKU,SAAWmC,EAAMgM,cAAcnO,OACtC,OAAO,EAET,IAAKiK,EAAE,EAAGA,EAAI3K,EAAKU,OAAQiK,IACzB,GAAI3K,EAAK2K,KAAO9H,EAAMgM,cAAclE,GAClC,OAAO,EAEX,OAAO,CACT,C,+BCxQA,MAAM5L,EAAWN,EAEjBM,EAASkL,IAAM,EAAQ,OACvBlL,EAAS0N,IAAM,EAAQ,M,+BCHvB,MAAMzN,EAAW,EAAQ,OAEnBoO,EAAa,EAAQ,OAE3B,SAAS0B,EAAWrP,GAClB2N,EAAWzN,KAAKP,KAAMK,GACtBL,KAAKS,IAAM,KACb,CACAb,EAAS8P,EAAY1B,GACrBtJ,EAAOrF,QAAUqQ,EAEjBA,EAAWzP,UAAUc,OAAS,SAAgBH,EAAMC,GAClD,MAEM8O,EAFM3B,EAAW/N,UAAUc,OAAOR,KAAKP,KAAMY,GAErCuL,SAAS,UACjBrJ,EAAM,CAAE,cAAgBjC,EAAQ4M,MAAQ,SAC9C,IAAK,IAAIlC,EAAI,EAAGA,EAAIoE,EAAErO,OAAQiK,GAAK,GACjCzI,EAAIkC,KAAK2K,EAAE/M,MAAM2I,EAAGA,EAAI,KAE1B,OADAzI,EAAIkC,KAAK,YAAcnE,EAAQ4M,MAAQ,SAChC3K,EAAID,KAAK,KAClB,C,6BCpBAxD,EAAQ0C,WAuCR,SAAqB6N,GACnB,IAAIC,EAAOC,EAAQF,GACfG,EAAWF,EAAK,GAChBG,EAAkBH,EAAK,GAC3B,OAAuC,GAA9BE,EAAWC,GAAuB,EAAKA,CAClD,EA3CA3Q,EAAQ4Q,YAiDR,SAAsBL,GACpB,IAAIhD,EAcArB,EAbAsE,EAAOC,EAAQF,GACfG,EAAWF,EAAK,GAChBG,EAAkBH,EAAK,GAEvBK,EAAM,IAAIC,EAVhB,SAAsBP,EAAKG,EAAUC,GACnC,OAAuC,GAA9BD,EAAWC,GAAuB,EAAKA,CAClD,CAQoBI,CAAYR,EAAKG,EAAUC,IAEzCK,EAAU,EAGV/E,EAAM0E,EAAkB,EACxBD,EAAW,EACXA,EAGJ,IAAKxE,EAAI,EAAGA,EAAID,EAAKC,GAAK,EACxBqB,EACG0D,EAAUV,EAAIrB,WAAWhD,KAAO,GAChC+E,EAAUV,EAAIrB,WAAWhD,EAAI,KAAO,GACpC+E,EAAUV,EAAIrB,WAAWhD,EAAI,KAAO,EACrC+E,EAAUV,EAAIrB,WAAWhD,EAAI,IAC/B2E,EAAIG,KAAczD,GAAO,GAAM,IAC/BsD,EAAIG,KAAczD,GAAO,EAAK,IAC9BsD,EAAIG,KAAmB,IAANzD,EAmBnB,OAhBwB,IAApBoD,IACFpD,EACG0D,EAAUV,EAAIrB,WAAWhD,KAAO,EAChC+E,EAAUV,EAAIrB,WAAWhD,EAAI,KAAO,EACvC2E,EAAIG,KAAmB,IAANzD,GAGK,IAApBoD,IACFpD,EACG0D,EAAUV,EAAIrB,WAAWhD,KAAO,GAChC+E,EAAUV,EAAIrB,WAAWhD,EAAI,KAAO,EACpC+E,EAAUV,EAAIrB,WAAWhD,EAAI,KAAO,EACvC2E,EAAIG,KAAczD,GAAO,EAAK,IAC9BsD,EAAIG,KAAmB,IAANzD,GAGZsD,CACT,EA5FA7Q,EAAQkR,cAkHR,SAAwBC,GAQtB,IAPA,IAAI5D,EACAtB,EAAMkF,EAAMlP,OACZmP,EAAanF,EAAM,EACnBoF,EAAQ,GACRC,EAAiB,MAGZpF,EAAI,EAAGqF,EAAOtF,EAAMmF,EAAYlF,EAAIqF,EAAMrF,GAAKoF,EACtDD,EAAM1L,KAAK6L,EAAYL,EAAOjF,EAAIA,EAAIoF,EAAkBC,EAAOA,EAAQrF,EAAIoF,IAqB7E,OAjBmB,IAAfF,GACF7D,EAAM4D,EAAMlF,EAAM,GAClBoF,EAAM1L,KACJ8L,EAAOlE,GAAO,GACdkE,EAAQlE,GAAO,EAAK,IACpB,OAEsB,IAAf6D,IACT7D,GAAO4D,EAAMlF,EAAM,IAAM,GAAKkF,EAAMlF,EAAM,GAC1CoF,EAAM1L,KACJ8L,EAAOlE,GAAO,IACdkE,EAAQlE,GAAO,EAAK,IACpBkE,EAAQlE,GAAO,EAAK,IACpB,MAIG8D,EAAM7N,KAAK,GACpB,EA1IA,IALA,IAAIiO,EAAS,GACTR,EAAY,GACZH,EAA4B,oBAAfY,WAA6BA,WAAarP,MAEvDsP,EAAO,mEACFzF,EAAI,EAAsBA,EAAbyF,KAAwBzF,EAC5CuF,EAAOvF,GAAKyF,EAAKzF,GACjB+E,EAAUU,EAAKzC,WAAWhD,IAAMA,EAQlC,SAASuE,EAASF,GAChB,IAAItE,EAAMsE,EAAItO,OAEd,GAAIgK,EAAM,EAAI,EACZ,MAAM,IAAI3F,MAAM,kDAKlB,IAAIoK,EAAWH,EAAIqB,QAAQ,KAO3B,OANkB,IAAdlB,IAAiBA,EAAWzE,GAMzB,CAACyE,EAJcA,IAAazE,EAC/B,EACA,EAAKyE,EAAW,EAGtB,CAmEA,SAASc,EAAaL,EAAOzJ,EAAO6G,GAGlC,IAFA,IAAIhB,EARoB9G,EASpBoL,EAAS,GACJ3F,EAAIxE,EAAOwE,EAAIqC,EAAKrC,GAAK,EAChCqB,GACI4D,EAAMjF,IAAM,GAAM,WAClBiF,EAAMjF,EAAI,IAAM,EAAK,QACP,IAAfiF,EAAMjF,EAAI,IACb2F,EAAOlM,KAdF8L,GADiBhL,EAeM8G,IAdT,GAAK,IACxBkE,EAAOhL,GAAO,GAAK,IACnBgL,EAAOhL,GAAO,EAAI,IAClBgL,EAAa,GAANhL,IAaT,OAAOoL,EAAOrO,KAAK,GACrB,CAlGAyN,EAAU,IAAI/B,WAAW,IAAM,GAC/B+B,EAAU,IAAI/B,WAAW,IAAM,E,yBCnB/B,SAAW7J,EAAQrF,GACjB,aAGA,SAAS+D,EAAQyC,EAAK8D,GACpB,IAAK9D,EAAK,MAAM,IAAIF,MAAMgE,GAAO,mBACnC,CAIA,SAAS/J,EAAUuR,EAAMC,GACvBD,EAAKE,OAASD,EACd,IAAIE,EAAW,WAAa,EAC5BA,EAASrR,UAAYmR,EAAUnR,UAC/BkR,EAAKlR,UAAY,IAAIqR,EACrBH,EAAKlR,UAAUgC,YAAckP,CAC/B,CAIA,SAASI,EAAIC,EAAQhS,EAAMiS,GACzB,GAAIF,EAAGG,KAAKF,GACV,OAAOA,EAGTxR,KAAK2R,SAAW,EAChB3R,KAAK4R,MAAQ,KACb5R,KAAKsB,OAAS,EAGdtB,KAAK6R,IAAM,KAEI,OAAXL,IACW,OAAThS,GAA0B,OAATA,IACnBiS,EAASjS,EACTA,EAAO,IAGTQ,KAAKmF,MAAMqM,GAAU,EAAGhS,GAAQ,GAAIiS,GAAU,MAElD,CAUA,IAAIvQ,EATkB,iBAAXwD,EACTA,EAAOrF,QAAUkS,EAEjBlS,EAAQkS,GAAKA,EAGfA,EAAGA,GAAKA,EACRA,EAAGO,SAAW,GAGd,IAEI5Q,EADoB,oBAAX6Q,aAAmD,IAAlBA,OAAO7Q,OACxC6Q,OAAO7Q,OAEP,eAEb,CAAE,MAAO0F,GACT,CA+HA,SAASoL,EAAeC,EAAQnI,GAC9B,IAAIoI,EAAID,EAAO1D,WAAWzE,GAE1B,OAAIoI,GAAK,IAAMA,GAAK,GACXA,EAAI,GAEFA,GAAK,IAAMA,GAAK,IAClBA,EAAI,GAGHA,EAAI,GAAM,EAEtB,CAEA,SAASC,EAAcF,EAAQG,EAAYtI,GACzC,IAAIuI,EAAIL,EAAcC,EAAQnI,GAI9B,OAHIA,EAAQ,GAAKsI,IACfC,GAAKL,EAAcC,EAAQnI,EAAQ,IAAM,GAEpCuI,CACT,CA6CA,SAASC,EAAW/I,EAAKxC,EAAO6G,EAAK2E,GAGnC,IAFA,IAAIF,EAAI,EACJ/G,EAAMkH,KAAKvF,IAAI1D,EAAIjI,OAAQsM,GACtBrC,EAAIxE,EAAOwE,EAAID,EAAKC,IAAK,CAChC,IAAI2G,EAAI3I,EAAIgF,WAAWhD,GAAK,GAE5B8G,GAAKE,EAIHF,GADEH,GAAK,GACFA,EAAI,GAAK,GAGLA,GAAK,GACTA,EAAI,GAAK,GAITA,CAET,CACA,OAAOG,CACT,CApNAd,EAAGG,KAAO,SAAe5L,GACvB,OAAIA,aAAeyL,GAIJ,OAARzL,GAA+B,iBAARA,GAC5BA,EAAI7D,YAAY6P,WAAaP,EAAGO,UAAYpQ,MAAMC,QAAQmE,EAAI8L,MAClE,EAEAL,EAAGkB,IAAM,SAAcC,EAAMC,GAC3B,OAAID,EAAKE,IAAID,GAAS,EAAUD,EACzBC,CACT,EAEApB,EAAGtE,IAAM,SAAcyF,EAAMC,GAC3B,OAAID,EAAKE,IAAID,GAAS,EAAUD,EACzBC,CACT,EAEApB,EAAGtR,UAAUkF,MAAQ,SAAeqM,EAAQhS,EAAMiS,GAChD,GAAsB,iBAAXD,EACT,OAAOxR,KAAK6S,YAAYrB,EAAQhS,EAAMiS,GAGxC,GAAsB,iBAAXD,EACT,OAAOxR,KAAK8S,WAAWtB,EAAQhS,EAAMiS,GAG1B,QAATjS,IACFA,EAAO,IAET4D,EAAO5D,KAAiB,EAAPA,IAAaA,GAAQ,GAAKA,GAAQ,IAGnD,IAAIuH,EAAQ,EACM,OAFlByK,EAASA,EAAOrF,WAAW2B,QAAQ,OAAQ,KAEhC,KACT/G,IACA/G,KAAK2R,SAAW,GAGd5K,EAAQyK,EAAOlQ,SACJ,KAAT9B,EACFQ,KAAK+S,UAAUvB,EAAQzK,EAAO0K,IAE9BzR,KAAKgT,WAAWxB,EAAQhS,EAAMuH,GACf,OAAX0K,GACFzR,KAAK8S,WAAW9S,KAAKqP,UAAW7P,EAAMiS,IAI9C,EAEAF,EAAGtR,UAAU4S,YAAc,SAAsBrB,EAAQhS,EAAMiS,GACzDD,EAAS,IACXxR,KAAK2R,SAAW,EAChBH,GAAUA,GAERA,EAAS,UACXxR,KAAK4R,MAAQ,CAAW,SAATJ,GACfxR,KAAKsB,OAAS,GACLkQ,EAAS,kBAClBxR,KAAK4R,MAAQ,CACF,SAATJ,EACCA,EAAS,SAAa,UAEzBxR,KAAKsB,OAAS,IAEd8B,EAAOoO,EAAS,kBAChBxR,KAAK4R,MAAQ,CACF,SAATJ,EACCA,EAAS,SAAa,SACvB,GAEFxR,KAAKsB,OAAS,GAGD,OAAXmQ,GAGJzR,KAAK8S,WAAW9S,KAAKqP,UAAW7P,EAAMiS,EACxC,EAEAF,EAAGtR,UAAU6S,WAAa,SAAqBtB,EAAQhS,EAAMiS,GAG3D,GADArO,EAAgC,iBAAlBoO,EAAOlQ,QACjBkQ,EAAOlQ,QAAU,EAGnB,OAFAtB,KAAK4R,MAAQ,CAAE,GACf5R,KAAKsB,OAAS,EACPtB,KAGTA,KAAKsB,OAASkR,KAAKS,KAAKzB,EAAOlQ,OAAS,GACxCtB,KAAK4R,MAAQ,IAAIlQ,MAAM1B,KAAKsB,QAC5B,IAAK,IAAIiK,EAAI,EAAGA,EAAIvL,KAAKsB,OAAQiK,IAC/BvL,KAAK4R,MAAMrG,GAAK,EAGlB,IAAIC,EAAG0H,EACHC,EAAM,EACV,GAAe,OAAX1B,EACF,IAAKlG,EAAIiG,EAAOlQ,OAAS,EAAGkK,EAAI,EAAGD,GAAK,EAAGA,GAAK,EAC9C2H,EAAI1B,EAAOjG,GAAMiG,EAAOjG,EAAI,IAAM,EAAMiG,EAAOjG,EAAI,IAAM,GACzDvL,KAAK4R,MAAMpG,IAAO0H,GAAKC,EAAO,SAC9BnT,KAAK4R,MAAMpG,EAAI,GAAM0H,IAAO,GAAKC,EAAQ,UACzCA,GAAO,KACI,KACTA,GAAO,GACP3H,UAGC,GAAe,OAAXiG,EACT,IAAKlG,EAAI,EAAGC,EAAI,EAAGD,EAAIiG,EAAOlQ,OAAQiK,GAAK,EACzC2H,EAAI1B,EAAOjG,GAAMiG,EAAOjG,EAAI,IAAM,EAAMiG,EAAOjG,EAAI,IAAM,GACzDvL,KAAK4R,MAAMpG,IAAO0H,GAAKC,EAAO,SAC9BnT,KAAK4R,MAAMpG,EAAI,GAAM0H,IAAO,GAAKC,EAAQ,UACzCA,GAAO,KACI,KACTA,GAAO,GACP3H,KAIN,OAAOxL,KAAKoT,OACd,EAwBA7B,EAAGtR,UAAU8S,UAAY,SAAoBvB,EAAQzK,EAAO0K,GAE1DzR,KAAKsB,OAASkR,KAAKS,MAAMzB,EAAOlQ,OAASyF,GAAS,GAClD/G,KAAK4R,MAAQ,IAAIlQ,MAAM1B,KAAKsB,QAC5B,IAAK,IAAIiK,EAAI,EAAGA,EAAIvL,KAAKsB,OAAQiK,IAC/BvL,KAAK4R,MAAMrG,GAAK,EAIlB,IAGI2H,EAHAC,EAAM,EACN3H,EAAI,EAGR,GAAe,OAAXiG,EACF,IAAKlG,EAAIiG,EAAOlQ,OAAS,EAAGiK,GAAKxE,EAAOwE,GAAK,EAC3C2H,EAAIf,EAAaX,EAAQzK,EAAOwE,IAAM4H,EACtCnT,KAAK4R,MAAMpG,IAAU,SAAJ0H,EACbC,GAAO,IACTA,GAAO,GACP3H,GAAK,EACLxL,KAAK4R,MAAMpG,IAAM0H,IAAM,IAEvBC,GAAO,OAKX,IAAK5H,GADaiG,EAAOlQ,OAASyF,GACX,GAAM,EAAIA,EAAQ,EAAIA,EAAOwE,EAAIiG,EAAOlQ,OAAQiK,GAAK,EAC1E2H,EAAIf,EAAaX,EAAQzK,EAAOwE,IAAM4H,EACtCnT,KAAK4R,MAAMpG,IAAU,SAAJ0H,EACbC,GAAO,IACTA,GAAO,GACP3H,GAAK,EACLxL,KAAK4R,MAAMpG,IAAM0H,IAAM,IAEvBC,GAAO,EAKbnT,KAAKoT,OACP,EA0BA7B,EAAGtR,UAAU+S,WAAa,SAAqBxB,EAAQhS,EAAMuH,GAE3D/G,KAAK4R,MAAQ,CAAE,GACf5R,KAAKsB,OAAS,EAGd,IAAK,IAAI+R,EAAU,EAAGC,EAAU,EAAGA,GAAW,SAAWA,GAAW9T,EAClE6T,IAEFA,IACAC,EAAWA,EAAU9T,EAAQ,EAO7B,IALA,IAAI+T,EAAQ/B,EAAOlQ,OAASyF,EACxByM,EAAMD,EAAQF,EACdzF,EAAM4E,KAAKvF,IAAIsG,EAAOA,EAAQC,GAAOzM,EAErC0M,EAAO,EACFlI,EAAIxE,EAAOwE,EAAIqC,EAAKrC,GAAK8H,EAChCI,EAAOnB,EAAUd,EAAQjG,EAAGA,EAAI8H,EAAS7T,GAEzCQ,KAAK0T,MAAMJ,GACPtT,KAAK4R,MAAM,GAAK6B,EAAO,SACzBzT,KAAK4R,MAAM,IAAM6B,EAEjBzT,KAAK2T,OAAOF,GAIhB,GAAY,IAARD,EAAW,CACb,IAAII,EAAM,EAGV,IAFAH,EAAOnB,EAAUd,EAAQjG,EAAGiG,EAAOlQ,OAAQ9B,GAEtC+L,EAAI,EAAGA,EAAIiI,EAAKjI,IACnBqI,GAAOpU,EAGTQ,KAAK0T,MAAME,GACP5T,KAAK4R,MAAM,GAAK6B,EAAO,SACzBzT,KAAK4R,MAAM,IAAM6B,EAEjBzT,KAAK2T,OAAOF,EAEhB,CAEAzT,KAAKoT,OACP,EAEA7B,EAAGtR,UAAUiD,KAAO,SAAe2Q,GACjCA,EAAKjC,MAAQ,IAAIlQ,MAAM1B,KAAKsB,QAC5B,IAAK,IAAIiK,EAAI,EAAGA,EAAIvL,KAAKsB,OAAQiK,IAC/BsI,EAAKjC,MAAMrG,GAAKvL,KAAK4R,MAAMrG,GAE7BsI,EAAKvS,OAAStB,KAAKsB,OACnBuS,EAAKlC,SAAW3R,KAAK2R,SACrBkC,EAAKhC,IAAM7R,KAAK6R,GAClB,EAEAN,EAAGtR,UAAU2E,MAAQ,WACnB,IAAIyN,EAAI,IAAId,EAAG,MAEf,OADAvR,KAAKkD,KAAKmP,GACHA,CACT,EAEAd,EAAGtR,UAAU6T,QAAU,SAAkBpF,GACvC,KAAO1O,KAAKsB,OAASoN,GACnB1O,KAAK4R,MAAM5R,KAAKsB,UAAY,EAE9B,OAAOtB,IACT,EAGAuR,EAAGtR,UAAUmT,MAAQ,WACnB,KAAOpT,KAAKsB,OAAS,GAAqC,IAAhCtB,KAAK4R,MAAM5R,KAAKsB,OAAS,IACjDtB,KAAKsB,SAEP,OAAOtB,KAAK+T,WACd,EAEAxC,EAAGtR,UAAU8T,UAAY,WAKvB,OAHoB,IAAhB/T,KAAKsB,QAAkC,IAAlBtB,KAAK4R,MAAM,KAClC5R,KAAK2R,SAAW,GAEX3R,IACT,EAEAuR,EAAGtR,UAAU+T,QAAU,WACrB,OAAQhU,KAAK6R,IAAM,UAAY,SAAW7R,KAAKmM,SAAS,IAAM,GAChE,EAgCA,IAAI8H,EAAQ,CACV,GACA,IACA,KACA,MACA,OACA,QACA,SACA,UACA,WACA,YACA,aACA,cACA,eACA,gBACA,iBACA,kBACA,mBACA,oBACA,qBACA,sBACA,uBACA,wBACA,yBACA,0BACA,2BACA,6BAGEC,EAAa,CACf,EAAG,EACH,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EACvB,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAClB,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAClB,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAClB,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAGhBC,EAAa,CACf,EAAG,EACH,SAAU,SAAU,SAAU,SAAU,SAAU,SAAU,SAC5D,SAAU,IAAU,SAAU,SAAU,SAAU,QAAS,SAC3D,SAAU,SAAU,SAAU,SAAU,KAAU,QAAS,QAC3D,QAAS,QAAS,QAAS,SAAU,SAAU,SAAU,SACzD,MAAU,SAAU,SAAU,SAAU,SAAU,SAAU,UAsjB9D,SAASC,EAAYC,EAAMvO,EAAKhD,GAC9BA,EAAI6O,SAAW7L,EAAI6L,SAAW0C,EAAK1C,SACnC,IAAIrG,EAAO+I,EAAK/S,OAASwE,EAAIxE,OAAU,EACvCwB,EAAIxB,OAASgK,EACbA,EAAOA,EAAM,EAAK,EAGlB,IAAIgJ,EAAoB,EAAhBD,EAAKzC,MAAM,GACf2C,EAAmB,EAAfzO,EAAI8L,MAAM,GACdS,EAAIiC,EAAIC,EAERC,EAAS,SAAJnC,EACLoC,EAASpC,EAAI,SAAa,EAC9BvP,EAAI8O,MAAM,GAAK4C,EAEf,IAAK,IAAIE,EAAI,EAAGA,EAAIpJ,EAAKoJ,IAAK,CAM5B,IAHA,IAAIC,EAASF,IAAU,GACnBG,EAAgB,SAARH,EACRI,EAAOrC,KAAKvF,IAAIyH,EAAG5O,EAAIxE,OAAS,GAC3BkK,EAAIgH,KAAKC,IAAI,EAAGiC,EAAIL,EAAK/S,OAAS,GAAIkK,GAAKqJ,EAAMrJ,IAAK,CAC7D,IAAID,EAAKmJ,EAAIlJ,EAAK,EAIlBmJ,IADAtC,GAFAiC,EAAoB,EAAhBD,EAAKzC,MAAMrG,KACfgJ,EAAmB,EAAfzO,EAAI8L,MAAMpG,IACFoJ,GACG,SAAa,EAC5BA,EAAY,SAAJvC,CACV,CACAvP,EAAI8O,MAAM8C,GAAa,EAARE,EACfH,EAAiB,EAATE,CACV,CAOA,OANc,IAAVF,EACF3R,EAAI8O,MAAM8C,GAAa,EAARD,EAEf3R,EAAIxB,SAGCwB,EAAIsQ,OACb,CA1lBA7B,EAAGtR,UAAUkM,SAAW,SAAmB3M,EAAMsV,GAI/C,IAAIhS,EACJ,GAHAgS,EAAoB,EAAVA,GAAe,EAGZ,MAJbtV,EAAOA,GAAQ,KAIa,QAATA,EAAgB,CACjCsD,EAAM,GAGN,IAFA,IAAIqQ,EAAM,EACNsB,EAAQ,EACHlJ,EAAI,EAAGA,EAAIvL,KAAKsB,OAAQiK,IAAK,CACpC,IAAI2H,EAAIlT,KAAK4R,MAAMrG,GACfkI,GAA+B,UAArBP,GAAKC,EAAOsB,IAAmBtI,SAAS,IAGpDrJ,EADY,IADd2R,EAASvB,IAAO,GAAKC,EAAQ,WACV5H,IAAMvL,KAAKsB,OAAS,EAC/B2S,EAAM,EAAIR,EAAKnS,QAAUmS,EAAO3Q,EAEhC2Q,EAAO3Q,GAEfqQ,GAAO,IACI,KACTA,GAAO,GACP5H,IAEJ,CAIA,IAHc,IAAVkJ,IACF3R,EAAM2R,EAAMtI,SAAS,IAAMrJ,GAEtBA,EAAIxB,OAASwT,GAAY,GAC9BhS,EAAM,IAAMA,EAKd,OAHsB,IAAlB9C,KAAK2R,WACP7O,EAAM,IAAMA,GAEPA,CACT,CAEA,GAAItD,KAAiB,EAAPA,IAAaA,GAAQ,GAAKA,GAAQ,GAAI,CAElD,IAAIuV,EAAYb,EAAW1U,GAEvBwV,EAAYb,EAAW3U,GAC3BsD,EAAM,GACN,IAAIoP,EAAIlS,KAAK4E,QAEb,IADAsN,EAAEP,SAAW,GACLO,EAAE+C,UAAU,CAClB,IAAI5C,EAAIH,EAAEgD,KAAKF,GAAW7I,SAAS3M,GAMjCsD,GALFoP,EAAIA,EAAEiD,MAAMH,IAELC,SAGC5C,EAAIvP,EAFJmR,EAAMc,EAAY1C,EAAE/Q,QAAU+Q,EAAIvP,CAI5C,CAIA,IAHI9C,KAAKiV,WACPnS,EAAM,IAAMA,GAEPA,EAAIxB,OAASwT,GAAY,GAC9BhS,EAAM,IAAMA,EAKd,OAHsB,IAAlB9C,KAAK2R,WACP7O,EAAM,IAAMA,GAEPA,CACT,CAEAM,GAAO,EAAO,kCAChB,EAEAmO,EAAGtR,UAAUmV,SAAW,WACtB,IAAIC,EAAMrV,KAAK4R,MAAM,GASrB,OARoB,IAAhB5R,KAAKsB,OACP+T,GAAuB,SAAhBrV,KAAK4R,MAAM,GACO,IAAhB5R,KAAKsB,QAAkC,IAAlBtB,KAAK4R,MAAM,GAEzCyD,GAAO,iBAAoC,SAAhBrV,KAAK4R,MAAM,GAC7B5R,KAAKsB,OAAS,GACvB8B,GAAO,EAAO,8CAEU,IAAlBpD,KAAK2R,UAAmB0D,EAAMA,CACxC,EAEA9D,EAAGtR,UAAUqV,OAAS,WACpB,OAAOtV,KAAKmM,SAAS,GACvB,EAEAoF,EAAGtR,UAAUsV,SAAW,SAAmB9D,EAAQnQ,GAEjD,OADA8B,OAAyB,IAAXlC,GACPlB,KAAKwV,YAAYtU,EAAQuQ,EAAQnQ,EAC1C,EAEAiQ,EAAGtR,UAAUoP,QAAU,SAAkBoC,EAAQnQ,GAC/C,OAAOtB,KAAKwV,YAAY9T,MAAO+P,EAAQnQ,EACzC,EAEAiQ,EAAGtR,UAAUuV,YAAc,SAAsBC,EAAWhE,EAAQnQ,GAClE,IAAIS,EAAa/B,KAAK+B,aAClB2T,EAAYpU,GAAUkR,KAAKC,IAAI,EAAG1Q,GACtCqB,EAAOrB,GAAc2T,EAAW,yCAChCtS,EAAOsS,EAAY,EAAG,+BAEtB1V,KAAKoT,QACL,IAGImB,EAAGhJ,EAHHoK,EAA0B,OAAXlE,EACfjP,EAAM,IAAIiT,EAAUC,GAGpBE,EAAI5V,KAAK4E,QACb,GAAK+Q,EAYE,CACL,IAAKpK,EAAI,GAAIqK,EAAEX,SAAU1J,IACvBgJ,EAAIqB,EAAEC,MAAM,KACZD,EAAEE,OAAO,GAETtT,EAAI+I,GAAKgJ,EAGX,KAAOhJ,EAAImK,EAAWnK,IACpB/I,EAAI+I,GAAK,CAEb,KAvBmB,CAEjB,IAAKA,EAAI,EAAGA,EAAImK,EAAY3T,EAAYwJ,IACtC/I,EAAI+I,GAAK,EAGX,IAAKA,EAAI,GAAIqK,EAAEX,SAAU1J,IACvBgJ,EAAIqB,EAAEC,MAAM,KACZD,EAAEE,OAAO,GAETtT,EAAIkT,EAAYnK,EAAI,GAAKgJ,CAE7B,CAaA,OAAO/R,CACT,EAEIgQ,KAAKuD,MACPxE,EAAGtR,UAAU+V,WAAa,SAAqB9C,GAC7C,OAAO,GAAKV,KAAKuD,MAAM7C,EACzB,EAEA3B,EAAGtR,UAAU+V,WAAa,SAAqB9C,GAC7C,IAAI+C,EAAI/C,EACJb,EAAI,EAiBR,OAhBI4D,GAAK,OACP5D,GAAK,GACL4D,KAAO,IAELA,GAAK,KACP5D,GAAK,EACL4D,KAAO,GAELA,GAAK,IACP5D,GAAK,EACL4D,KAAO,GAELA,GAAK,IACP5D,GAAK,EACL4D,KAAO,GAEF5D,EAAI4D,CACb,EAGF1E,EAAGtR,UAAUiW,UAAY,SAAoBhD,GAE3C,GAAU,IAANA,EAAS,OAAO,GAEpB,IAAI+C,EAAI/C,EACJb,EAAI,EAoBR,OAnBqB,IAAZ,KAAJ4D,KACH5D,GAAK,GACL4D,KAAO,IAEU,IAAV,IAAJA,KACH5D,GAAK,EACL4D,KAAO,GAES,IAAT,GAAJA,KACH5D,GAAK,EACL4D,KAAO,GAES,IAAT,EAAJA,KACH5D,GAAK,EACL4D,KAAO,GAES,IAAT,EAAJA,IACH5D,IAEKA,CACT,EAGAd,EAAGtR,UAAUkW,UAAY,WACvB,IAAIjD,EAAIlT,KAAK4R,MAAM5R,KAAKsB,OAAS,GAC7B8U,EAAKpW,KAAKgW,WAAW9C,GACzB,OAA2B,IAAnBlT,KAAKsB,OAAS,GAAU8U,CAClC,EAgBA7E,EAAGtR,UAAUoW,SAAW,WACtB,GAAIrW,KAAKiV,SAAU,OAAO,EAG1B,IADA,IAAI5C,EAAI,EACC9G,EAAI,EAAGA,EAAIvL,KAAKsB,OAAQiK,IAAK,CACpC,IAAIgJ,EAAIvU,KAAKkW,UAAUlW,KAAK4R,MAAMrG,IAElC,GADA8G,GAAKkC,EACK,KAANA,EAAU,KAChB,CACA,OAAOlC,CACT,EAEAd,EAAGtR,UAAU8B,WAAa,WACxB,OAAOyQ,KAAKS,KAAKjT,KAAKmW,YAAc,EACtC,EAEA5E,EAAGtR,UAAUqW,OAAS,SAAiBC,GACrC,OAAsB,IAAlBvW,KAAK2R,SACA3R,KAAKwW,MAAMC,MAAMF,GAAOG,MAAM,GAEhC1W,KAAK4E,OACd,EAEA2M,EAAGtR,UAAU0W,SAAW,SAAmBJ,GACzC,OAAIvW,KAAK4W,MAAML,EAAQ,GACdvW,KAAK6W,KAAKN,GAAOG,MAAM,GAAGI,OAE5B9W,KAAK4E,OACd,EAEA2M,EAAGtR,UAAU8W,MAAQ,WACnB,OAAyB,IAAlB/W,KAAK2R,QACd,EAGAJ,EAAGtR,UAAU+W,IAAM,WACjB,OAAOhX,KAAK4E,QAAQkS,MACtB,EAEAvF,EAAGtR,UAAU6W,KAAO,WAKlB,OAJK9W,KAAKiV,WACRjV,KAAK2R,UAAY,GAGZ3R,IACT,EAGAuR,EAAGtR,UAAUgX,KAAO,SAAenR,GACjC,KAAO9F,KAAKsB,OAASwE,EAAIxE,QACvBtB,KAAK4R,MAAM5R,KAAKsB,UAAY,EAG9B,IAAK,IAAIiK,EAAI,EAAGA,EAAIzF,EAAIxE,OAAQiK,IAC9BvL,KAAK4R,MAAMrG,GAAKvL,KAAK4R,MAAMrG,GAAKzF,EAAI8L,MAAMrG,GAG5C,OAAOvL,KAAKoT,OACd,EAEA7B,EAAGtR,UAAUiX,IAAM,SAAcpR,GAE/B,OADA1C,EAA0C,IAAlCpD,KAAK2R,SAAW7L,EAAI6L,WACrB3R,KAAKiX,KAAKnR,EACnB,EAGAyL,EAAGtR,UAAUkX,GAAK,SAAarR,GAC7B,OAAI9F,KAAKsB,OAASwE,EAAIxE,OAAetB,KAAK4E,QAAQsS,IAAIpR,GAC/CA,EAAIlB,QAAQsS,IAAIlX,KACzB,EAEAuR,EAAGtR,UAAUmX,IAAM,SAActR,GAC/B,OAAI9F,KAAKsB,OAASwE,EAAIxE,OAAetB,KAAK4E,QAAQqS,KAAKnR,GAChDA,EAAIlB,QAAQqS,KAAKjX,KAC1B,EAGAuR,EAAGtR,UAAUoX,MAAQ,SAAgBvR,GAEnC,IAAIyO,EAEFA,EADEvU,KAAKsB,OAASwE,EAAIxE,OAChBwE,EAEA9F,KAGN,IAAK,IAAIuL,EAAI,EAAGA,EAAIgJ,EAAEjT,OAAQiK,IAC5BvL,KAAK4R,MAAMrG,GAAKvL,KAAK4R,MAAMrG,GAAKzF,EAAI8L,MAAMrG,GAK5C,OAFAvL,KAAKsB,OAASiT,EAAEjT,OAETtB,KAAKoT,OACd,EAEA7B,EAAGtR,UAAUqX,KAAO,SAAexR,GAEjC,OADA1C,EAA0C,IAAlCpD,KAAK2R,SAAW7L,EAAI6L,WACrB3R,KAAKqX,MAAMvR,EACpB,EAGAyL,EAAGtR,UAAUsX,IAAM,SAAczR,GAC/B,OAAI9F,KAAKsB,OAASwE,EAAIxE,OAAetB,KAAK4E,QAAQ0S,KAAKxR,GAChDA,EAAIlB,QAAQ0S,KAAKtX,KAC1B,EAEAuR,EAAGtR,UAAUuX,KAAO,SAAe1R,GACjC,OAAI9F,KAAKsB,OAASwE,EAAIxE,OAAetB,KAAK4E,QAAQyS,MAAMvR,GACjDA,EAAIlB,QAAQyS,MAAMrX,KAC3B,EAGAuR,EAAGtR,UAAUwX,MAAQ,SAAgB3R,GAEnC,IAAIwO,EACAC,EACAvU,KAAKsB,OAASwE,EAAIxE,QACpBgT,EAAItU,KACJuU,EAAIzO,IAEJwO,EAAIxO,EACJyO,EAAIvU,MAGN,IAAK,IAAIuL,EAAI,EAAGA,EAAIgJ,EAAEjT,OAAQiK,IAC5BvL,KAAK4R,MAAMrG,GAAK+I,EAAE1C,MAAMrG,GAAKgJ,EAAE3C,MAAMrG,GAGvC,GAAIvL,OAASsU,EACX,KAAO/I,EAAI+I,EAAEhT,OAAQiK,IACnBvL,KAAK4R,MAAMrG,GAAK+I,EAAE1C,MAAMrG,GAM5B,OAFAvL,KAAKsB,OAASgT,EAAEhT,OAETtB,KAAKoT,OACd,EAEA7B,EAAGtR,UAAUyX,KAAO,SAAe5R,GAEjC,OADA1C,EAA0C,IAAlCpD,KAAK2R,SAAW7L,EAAI6L,WACrB3R,KAAKyX,MAAM3R,EACpB,EAGAyL,EAAGtR,UAAU0X,IAAM,SAAc7R,GAC/B,OAAI9F,KAAKsB,OAASwE,EAAIxE,OAAetB,KAAK4E,QAAQ8S,KAAK5R,GAChDA,EAAIlB,QAAQ8S,KAAK1X,KAC1B,EAEAuR,EAAGtR,UAAU2X,KAAO,SAAe9R,GACjC,OAAI9F,KAAKsB,OAASwE,EAAIxE,OAAetB,KAAK4E,QAAQ6S,MAAM3R,GACjDA,EAAIlB,QAAQ6S,MAAMzX,KAC3B,EAGAuR,EAAGtR,UAAUwW,MAAQ,SAAgBF,GACnCnT,EAAwB,iBAAVmT,GAAsBA,GAAS,GAE7C,IAAIsB,EAAsC,EAAxBrF,KAAKS,KAAKsD,EAAQ,IAChCuB,EAAWvB,EAAQ,GAGvBvW,KAAK8T,QAAQ+D,GAETC,EAAW,GACbD,IAIF,IAAK,IAAItM,EAAI,EAAGA,EAAIsM,EAAatM,IAC/BvL,KAAK4R,MAAMrG,GAAsB,UAAhBvL,KAAK4R,MAAMrG,GAS9B,OALIuM,EAAW,IACb9X,KAAK4R,MAAMrG,IAAMvL,KAAK4R,MAAMrG,GAAM,UAAc,GAAKuM,GAIhD9X,KAAKoT,OACd,EAEA7B,EAAGtR,UAAU4W,KAAO,SAAeN,GACjC,OAAOvW,KAAK4E,QAAQ6R,MAAMF,EAC5B,EAGAhF,EAAGtR,UAAU8X,KAAO,SAAeC,EAAKnS,GACtCzC,EAAsB,iBAAR4U,GAAoBA,GAAO,GAEzC,IAAI7E,EAAO6E,EAAM,GAAM,EACnBC,EAAOD,EAAM,GAUjB,OARAhY,KAAK8T,QAAQX,EAAM,GAGjBnT,KAAK4R,MAAMuB,GADTtN,EACgB7F,KAAK4R,MAAMuB,GAAQ,GAAK8E,EAExBjY,KAAK4R,MAAMuB,KAAS,GAAK8E,GAGtCjY,KAAKoT,OACd,EAGA7B,EAAGtR,UAAUiY,KAAO,SAAepS,GACjC,IAAIuM,EAkBAiC,EAAGC,EAfP,GAAsB,IAAlBvU,KAAK2R,UAAmC,IAAjB7L,EAAI6L,SAI7B,OAHA3R,KAAK2R,SAAW,EAChBU,EAAIrS,KAAKmY,KAAKrS,GACd9F,KAAK2R,UAAY,EACV3R,KAAK+T,YAGP,GAAsB,IAAlB/T,KAAK2R,UAAmC,IAAjB7L,EAAI6L,SAIpC,OAHA7L,EAAI6L,SAAW,EACfU,EAAIrS,KAAKmY,KAAKrS,GACdA,EAAI6L,SAAW,EACRU,EAAE0B,YAKP/T,KAAKsB,OAASwE,EAAIxE,QACpBgT,EAAItU,KACJuU,EAAIzO,IAEJwO,EAAIxO,EACJyO,EAAIvU,MAIN,IADA,IAAIyU,EAAQ,EACHlJ,EAAI,EAAGA,EAAIgJ,EAAEjT,OAAQiK,IAC5B8G,GAAkB,EAAbiC,EAAE1C,MAAMrG,KAAwB,EAAbgJ,EAAE3C,MAAMrG,IAAUkJ,EAC1CzU,KAAK4R,MAAMrG,GAAS,SAAJ8G,EAChBoC,EAAQpC,IAAM,GAEhB,KAAiB,IAAVoC,GAAelJ,EAAI+I,EAAEhT,OAAQiK,IAClC8G,GAAkB,EAAbiC,EAAE1C,MAAMrG,IAAUkJ,EACvBzU,KAAK4R,MAAMrG,GAAS,SAAJ8G,EAChBoC,EAAQpC,IAAM,GAIhB,GADArS,KAAKsB,OAASgT,EAAEhT,OACF,IAAVmT,EACFzU,KAAK4R,MAAM5R,KAAKsB,QAAUmT,EAC1BzU,KAAKsB,cAEA,GAAIgT,IAAMtU,KACf,KAAOuL,EAAI+I,EAAEhT,OAAQiK,IACnBvL,KAAK4R,MAAMrG,GAAK+I,EAAE1C,MAAMrG,GAI5B,OAAOvL,IACT,EAGAuR,EAAGtR,UAAUmY,IAAM,SAActS,GAC/B,IAAItD,EACJ,OAAqB,IAAjBsD,EAAI6L,UAAoC,IAAlB3R,KAAK2R,UAC7B7L,EAAI6L,SAAW,EACfnP,EAAMxC,KAAKqY,IAAIvS,GACfA,EAAI6L,UAAY,EACTnP,GACmB,IAAjBsD,EAAI6L,UAAoC,IAAlB3R,KAAK2R,UACpC3R,KAAK2R,SAAW,EAChBnP,EAAMsD,EAAIuS,IAAIrY,MACdA,KAAK2R,SAAW,EACTnP,GAGLxC,KAAKsB,OAASwE,EAAIxE,OAAetB,KAAK4E,QAAQsT,KAAKpS,GAEhDA,EAAIlB,QAAQsT,KAAKlY,KAC1B,EAGAuR,EAAGtR,UAAUkY,KAAO,SAAerS,GAEjC,GAAqB,IAAjBA,EAAI6L,SAAgB,CACtB7L,EAAI6L,SAAW,EACf,IAAIU,EAAIrS,KAAKkY,KAAKpS,GAElB,OADAA,EAAI6L,SAAW,EACRU,EAAE0B,WAGX,CAAO,GAAsB,IAAlB/T,KAAK2R,SAId,OAHA3R,KAAK2R,SAAW,EAChB3R,KAAKkY,KAAKpS,GACV9F,KAAK2R,SAAW,EACT3R,KAAK+T,YAId,IAWIO,EAAGC,EAXH3B,EAAM5S,KAAK4S,IAAI9M,GAGnB,GAAY,IAAR8M,EAIF,OAHA5S,KAAK2R,SAAW,EAChB3R,KAAKsB,OAAS,EACdtB,KAAK4R,MAAM,GAAK,EACT5R,KAKL4S,EAAM,GACR0B,EAAItU,KACJuU,EAAIzO,IAEJwO,EAAIxO,EACJyO,EAAIvU,MAIN,IADA,IAAIyU,EAAQ,EACHlJ,EAAI,EAAGA,EAAIgJ,EAAEjT,OAAQiK,IAE5BkJ,GADApC,GAAkB,EAAbiC,EAAE1C,MAAMrG,KAAwB,EAAbgJ,EAAE3C,MAAMrG,IAAUkJ,IAC7B,GACbzU,KAAK4R,MAAMrG,GAAS,SAAJ8G,EAElB,KAAiB,IAAVoC,GAAelJ,EAAI+I,EAAEhT,OAAQiK,IAElCkJ,GADApC,GAAkB,EAAbiC,EAAE1C,MAAMrG,IAAUkJ,IACV,GACbzU,KAAK4R,MAAMrG,GAAS,SAAJ8G,EAIlB,GAAc,IAAVoC,GAAelJ,EAAI+I,EAAEhT,QAAUgT,IAAMtU,KACvC,KAAOuL,EAAI+I,EAAEhT,OAAQiK,IACnBvL,KAAK4R,MAAMrG,GAAK+I,EAAE1C,MAAMrG,GAU5B,OANAvL,KAAKsB,OAASkR,KAAKC,IAAIzS,KAAKsB,OAAQiK,GAEhC+I,IAAMtU,OACRA,KAAK2R,SAAW,GAGX3R,KAAKoT,OACd,EAGA7B,EAAGtR,UAAUoY,IAAM,SAAcvS,GAC/B,OAAO9F,KAAK4E,QAAQuT,KAAKrS,EAC3B,EA8CA,IAAIwS,EAAc,SAAsBjE,EAAMvO,EAAKhD,GACjD,IAII0R,EACA+D,EACAnC,EANA9B,EAAID,EAAKzC,MACT2C,EAAIzO,EAAI8L,MACR4G,EAAI1V,EAAI8O,MACRM,EAAI,EAIJuG,EAAY,EAAPnE,EAAE,GACPoE,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAPtE,EAAE,GACPuE,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAPzE,EAAE,GACP0E,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAP5E,EAAE,GACP6E,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAP/E,EAAE,GACPgF,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAPlF,EAAE,GACPmF,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAPrF,EAAE,GACPsF,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAPxF,EAAE,GACPyF,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAP3F,EAAE,GACP4F,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAP9F,EAAE,GACP+F,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAPhG,EAAE,GACPiG,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAPnG,EAAE,GACPoG,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAPtG,EAAE,GACPuG,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAPzG,EAAE,GACP0G,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAP5G,EAAE,GACP6G,EAAW,KAALD,EACNE,GAAMF,IAAO,GACbG,GAAY,EAAP/G,EAAE,GACPgH,GAAW,KAALD,GACNE,GAAMF,KAAO,GACbG,GAAY,EAAPlH,EAAE,GACPmH,GAAW,KAALD,GACNE,GAAMF,KAAO,GACbG,GAAY,EAAPrH,EAAE,GACPsH,GAAW,KAALD,GACNE,GAAMF,KAAO,GACbG,GAAY,EAAPxH,EAAE,GACPyH,GAAW,KAALD,GACNE,GAAMF,KAAO,GACbG,GAAY,EAAP3H,EAAE,GACP4H,GAAW,KAALD,GACNE,GAAMF,KAAO,GAEjBpZ,EAAI6O,SAAW0C,EAAK1C,SAAW7L,EAAI6L,SACnC7O,EAAIxB,OAAS,GAMb,IAAI+a,IAAQnK,GAJZsC,EAAKhC,KAAK8J,KAAK5D,EAAK8B,IAIE,KAAa,MAFnCjC,GADAA,EAAM/F,KAAK8J,KAAK5D,EAAK+B,IACRjI,KAAK8J,KAAK3D,EAAK6B,GAAQ,KAEU,IAAO,EACrDtI,IAFAkE,EAAK5D,KAAK8J,KAAK3D,EAAK8B,KAEPlC,IAAQ,IAAO,IAAM8D,KAAO,IAAO,EAChDA,IAAM,SAEN7H,EAAKhC,KAAK8J,KAAKzD,EAAK2B,GAEpBjC,GADAA,EAAM/F,KAAK8J,KAAKzD,EAAK4B,IACRjI,KAAK8J,KAAKxD,EAAK0B,GAAQ,EACpCpE,EAAK5D,KAAK8J,KAAKxD,EAAK2B,GAKpB,IAAI8B,IAAQrK,GAJZsC,EAAMA,EAAKhC,KAAK8J,KAAK5D,EAAKiC,GAAQ,GAIZ,KAAa,MAFnCpC,GADAA,EAAOA,EAAM/F,KAAK8J,KAAK5D,EAAKkC,GAAQ,GACvBpI,KAAK8J,KAAK3D,EAAKgC,GAAQ,KAEU,IAAO,EACrDzI,IAFAkE,EAAMA,EAAK5D,KAAK8J,KAAK3D,EAAKiC,GAAQ,IAErBrC,IAAQ,IAAO,IAAMgE,KAAO,IAAO,EAChDA,IAAM,SAEN/H,EAAKhC,KAAK8J,KAAKtD,EAAKwB,GAEpBjC,GADAA,EAAM/F,KAAK8J,KAAKtD,EAAKyB,IACRjI,KAAK8J,KAAKrD,EAAKuB,GAAQ,EACpCpE,EAAK5D,KAAK8J,KAAKrD,EAAKwB,GACpBjG,EAAMA,EAAKhC,KAAK8J,KAAKzD,EAAK8B,GAAQ,EAElCpC,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKzD,EAAK+B,GAAQ,GACvBpI,KAAK8J,KAAKxD,EAAK6B,GAAQ,EACpCvE,EAAMA,EAAK5D,KAAK8J,KAAKxD,EAAK8B,GAAQ,EAKlC,IAAI4B,IAAQtK,GAJZsC,EAAMA,EAAKhC,KAAK8J,KAAK5D,EAAKoC,GAAQ,GAIZ,KAAa,MAFnCvC,GADAA,EAAOA,EAAM/F,KAAK8J,KAAK5D,EAAKqC,GAAQ,GACvBvI,KAAK8J,KAAK3D,EAAKmC,GAAQ,KAEU,IAAO,EACrD5I,IAFAkE,EAAMA,EAAK5D,KAAK8J,KAAK3D,EAAKoC,GAAQ,IAErBxC,IAAQ,IAAO,IAAMiE,KAAO,IAAO,EAChDA,IAAM,SAENhI,EAAKhC,KAAK8J,KAAKnD,EAAKqB,GAEpBjC,GADAA,EAAM/F,KAAK8J,KAAKnD,EAAKsB,IACRjI,KAAK8J,KAAKlD,EAAKoB,GAAQ,EACpCpE,EAAK5D,KAAK8J,KAAKlD,EAAKqB,GACpBjG,EAAMA,EAAKhC,KAAK8J,KAAKtD,EAAK2B,GAAQ,EAElCpC,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKtD,EAAK4B,GAAQ,GACvBpI,KAAK8J,KAAKrD,EAAK0B,GAAQ,EACpCvE,EAAMA,EAAK5D,KAAK8J,KAAKrD,EAAK2B,GAAQ,EAClCpG,EAAMA,EAAKhC,KAAK8J,KAAKzD,EAAKiC,GAAQ,EAElCvC,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKzD,EAAKkC,GAAQ,GACvBvI,KAAK8J,KAAKxD,EAAKgC,GAAQ,EACpC1E,EAAMA,EAAK5D,KAAK8J,KAAKxD,EAAKiC,GAAQ,EAKlC,IAAI0B,IAAQvK,GAJZsC,EAAMA,EAAKhC,KAAK8J,KAAK5D,EAAKuC,GAAQ,GAIZ,KAAa,MAFnC1C,GADAA,EAAOA,EAAM/F,KAAK8J,KAAK5D,EAAKwC,GAAQ,GACvB1I,KAAK8J,KAAK3D,EAAKsC,GAAQ,KAEU,IAAO,EACrD/I,IAFAkE,EAAMA,EAAK5D,KAAK8J,KAAK3D,EAAKuC,GAAQ,IAErB3C,IAAQ,IAAO,IAAMkE,KAAO,IAAO,EAChDA,IAAM,SAENjI,EAAKhC,KAAK8J,KAAKhD,EAAKkB,GAEpBjC,GADAA,EAAM/F,KAAK8J,KAAKhD,EAAKmB,IACRjI,KAAK8J,KAAK/C,EAAKiB,GAAQ,EACpCpE,EAAK5D,KAAK8J,KAAK/C,EAAKkB,GACpBjG,EAAMA,EAAKhC,KAAK8J,KAAKnD,EAAKwB,GAAQ,EAElCpC,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKnD,EAAKyB,GAAQ,GACvBpI,KAAK8J,KAAKlD,EAAKuB,GAAQ,EACpCvE,EAAMA,EAAK5D,KAAK8J,KAAKlD,EAAKwB,GAAQ,EAClCpG,EAAMA,EAAKhC,KAAK8J,KAAKtD,EAAK8B,GAAQ,EAElCvC,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKtD,EAAK+B,GAAQ,GACvBvI,KAAK8J,KAAKrD,EAAK6B,GAAQ,EACpC1E,EAAMA,EAAK5D,KAAK8J,KAAKrD,EAAK8B,GAAQ,EAClCvG,EAAMA,EAAKhC,KAAK8J,KAAKzD,EAAKoC,GAAQ,EAElC1C,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKzD,EAAKqC,GAAQ,GACvB1I,KAAK8J,KAAKxD,EAAKmC,GAAQ,EACpC7E,EAAMA,EAAK5D,KAAK8J,KAAKxD,EAAKoC,GAAQ,EAKlC,IAAIwB,IAAQxK,GAJZsC,EAAMA,EAAKhC,KAAK8J,KAAK5D,EAAK0C,GAAQ,GAIZ,KAAa,MAFnC7C,GADAA,EAAOA,EAAM/F,KAAK8J,KAAK5D,EAAK2C,IAAQ,GACvB7I,KAAK8J,KAAK3D,EAAKyC,GAAQ,KAEU,IAAO,EACrDlJ,IAFAkE,EAAMA,EAAK5D,KAAK8J,KAAK3D,EAAK0C,IAAQ,IAErB9C,IAAQ,IAAO,IAAMmE,KAAO,IAAO,EAChDA,IAAM,SAENlI,EAAKhC,KAAK8J,KAAK7C,EAAKe,GAEpBjC,GADAA,EAAM/F,KAAK8J,KAAK7C,EAAKgB,IACRjI,KAAK8J,KAAK5C,EAAKc,GAAQ,EACpCpE,EAAK5D,KAAK8J,KAAK5C,EAAKe,GACpBjG,EAAMA,EAAKhC,KAAK8J,KAAKhD,EAAKqB,GAAQ,EAElCpC,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKhD,EAAKsB,GAAQ,GACvBpI,KAAK8J,KAAK/C,EAAKoB,GAAQ,EACpCvE,EAAMA,EAAK5D,KAAK8J,KAAK/C,EAAKqB,GAAQ,EAClCpG,EAAMA,EAAKhC,KAAK8J,KAAKnD,EAAK2B,GAAQ,EAElCvC,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKnD,EAAK4B,GAAQ,GACvBvI,KAAK8J,KAAKlD,EAAK0B,GAAQ,EACpC1E,EAAMA,EAAK5D,KAAK8J,KAAKlD,EAAK2B,GAAQ,EAClCvG,EAAMA,EAAKhC,KAAK8J,KAAKtD,EAAKiC,GAAQ,EAElC1C,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKtD,EAAKkC,GAAQ,GACvB1I,KAAK8J,KAAKrD,EAAKgC,GAAQ,EACpC7E,EAAMA,EAAK5D,KAAK8J,KAAKrD,EAAKiC,GAAQ,EAClC1G,EAAMA,EAAKhC,KAAK8J,KAAKzD,EAAKuC,GAAQ,EAElC7C,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKzD,EAAKwC,IAAQ,GACvB7I,KAAK8J,KAAKxD,EAAKsC,GAAQ,EACpChF,EAAMA,EAAK5D,KAAK8J,KAAKxD,EAAKuC,IAAQ,EAKlC,IAAIsB,IAAQzK,GAJZsC,EAAMA,EAAKhC,KAAK8J,KAAK5D,EAAK6C,IAAQ,GAIZ,KAAa,MAFnChD,GADAA,EAAOA,EAAM/F,KAAK8J,KAAK5D,EAAK8C,IAAQ,GACvBhJ,KAAK8J,KAAK3D,EAAK4C,IAAQ,KAEU,IAAO,EACrDrJ,IAFAkE,EAAMA,EAAK5D,KAAK8J,KAAK3D,EAAK6C,IAAQ,IAErBjD,IAAQ,IAAO,IAAMoE,KAAO,IAAO,EAChDA,IAAM,SAENnI,EAAKhC,KAAK8J,KAAK1C,EAAKY,GAEpBjC,GADAA,EAAM/F,KAAK8J,KAAK1C,EAAKa,IACRjI,KAAK8J,KAAKzC,EAAKW,GAAQ,EACpCpE,EAAK5D,KAAK8J,KAAKzC,EAAKY,GACpBjG,EAAMA,EAAKhC,KAAK8J,KAAK7C,EAAKkB,GAAQ,EAElCpC,GADAA,EAAOA,EAAM/F,KAAK8J,KAAK7C,EAAKmB,GAAQ,GACvBpI,KAAK8J,KAAK5C,EAAKiB,GAAQ,EACpCvE,EAAMA,EAAK5D,KAAK8J,KAAK5C,EAAKkB,GAAQ,EAClCpG,EAAMA,EAAKhC,KAAK8J,KAAKhD,EAAKwB,GAAQ,EAElCvC,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKhD,EAAKyB,GAAQ,GACvBvI,KAAK8J,KAAK/C,EAAKuB,GAAQ,EACpC1E,EAAMA,EAAK5D,KAAK8J,KAAK/C,EAAKwB,GAAQ,EAClCvG,EAAMA,EAAKhC,KAAK8J,KAAKnD,EAAK8B,GAAQ,EAElC1C,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKnD,EAAK+B,GAAQ,GACvB1I,KAAK8J,KAAKlD,EAAK6B,GAAQ,EACpC7E,EAAMA,EAAK5D,KAAK8J,KAAKlD,EAAK8B,GAAQ,EAClC1G,EAAMA,EAAKhC,KAAK8J,KAAKtD,EAAKoC,GAAQ,EAElC7C,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKtD,EAAKqC,IAAQ,GACvB7I,KAAK8J,KAAKrD,EAAKmC,GAAQ,EACpChF,EAAMA,EAAK5D,KAAK8J,KAAKrD,EAAKoC,IAAQ,EAClC7G,EAAMA,EAAKhC,KAAK8J,KAAKzD,EAAK0C,IAAQ,EAElChD,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKzD,EAAK2C,IAAQ,GACvBhJ,KAAK8J,KAAKxD,EAAKyC,IAAQ,EACpCnF,EAAMA,EAAK5D,KAAK8J,KAAKxD,EAAK0C,IAAQ,EAKlC,IAAIoB,IAAQ1K,GAJZsC,EAAMA,EAAKhC,KAAK8J,KAAK5D,EAAKgD,IAAQ,GAIZ,KAAa,MAFnCnD,GADAA,EAAOA,EAAM/F,KAAK8J,KAAK5D,EAAKiD,IAAQ,GACvBnJ,KAAK8J,KAAK3D,EAAK+C,IAAQ,KAEU,IAAO,EACrDxJ,IAFAkE,EAAMA,EAAK5D,KAAK8J,KAAK3D,EAAKgD,IAAQ,IAErBpD,IAAQ,IAAO,IAAMqE,KAAO,IAAO,EAChDA,IAAM,SAENpI,EAAKhC,KAAK8J,KAAKvC,EAAKS,GAEpBjC,GADAA,EAAM/F,KAAK8J,KAAKvC,EAAKU,IACRjI,KAAK8J,KAAKtC,EAAKQ,GAAQ,EACpCpE,EAAK5D,KAAK8J,KAAKtC,EAAKS,GACpBjG,EAAMA,EAAKhC,KAAK8J,KAAK1C,EAAKe,GAAQ,EAElCpC,GADAA,EAAOA,EAAM/F,KAAK8J,KAAK1C,EAAKgB,GAAQ,GACvBpI,KAAK8J,KAAKzC,EAAKc,GAAQ,EACpCvE,EAAMA,EAAK5D,KAAK8J,KAAKzC,EAAKe,GAAQ,EAClCpG,EAAMA,EAAKhC,KAAK8J,KAAK7C,EAAKqB,GAAQ,EAElCvC,GADAA,EAAOA,EAAM/F,KAAK8J,KAAK7C,EAAKsB,GAAQ,GACvBvI,KAAK8J,KAAK5C,EAAKoB,GAAQ,EACpC1E,EAAMA,EAAK5D,KAAK8J,KAAK5C,EAAKqB,GAAQ,EAClCvG,EAAMA,EAAKhC,KAAK8J,KAAKhD,EAAK2B,GAAQ,EAElC1C,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKhD,EAAK4B,GAAQ,GACvB1I,KAAK8J,KAAK/C,EAAK0B,GAAQ,EACpC7E,EAAMA,EAAK5D,KAAK8J,KAAK/C,EAAK2B,GAAQ,EAClC1G,EAAMA,EAAKhC,KAAK8J,KAAKnD,EAAKiC,GAAQ,EAElC7C,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKnD,EAAKkC,IAAQ,GACvB7I,KAAK8J,KAAKlD,EAAKgC,GAAQ,EACpChF,EAAMA,EAAK5D,KAAK8J,KAAKlD,EAAKiC,IAAQ,EAClC7G,EAAMA,EAAKhC,KAAK8J,KAAKtD,EAAKuC,IAAQ,EAElChD,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKtD,EAAKwC,IAAQ,GACvBhJ,KAAK8J,KAAKrD,EAAKsC,IAAQ,EACpCnF,EAAMA,EAAK5D,KAAK8J,KAAKrD,EAAKuC,IAAQ,EAClChH,EAAMA,EAAKhC,KAAK8J,KAAKzD,EAAK6C,IAAQ,EAElCnD,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKzD,EAAK8C,IAAQ,GACvBnJ,KAAK8J,KAAKxD,EAAK4C,IAAQ,EACpCtF,EAAMA,EAAK5D,KAAK8J,KAAKxD,EAAK6C,IAAQ,EAKlC,IAAIkB,IAAQ3K,GAJZsC,EAAMA,EAAKhC,KAAK8J,KAAK5D,EAAKmD,IAAQ,GAIZ,KAAa,MAFnCtD,GADAA,EAAOA,EAAM/F,KAAK8J,KAAK5D,EAAKoD,IAAQ,GACvBtJ,KAAK8J,KAAK3D,EAAKkD,IAAQ,KAEU,IAAO,EACrD3J,IAFAkE,EAAMA,EAAK5D,KAAK8J,KAAK3D,EAAKmD,IAAQ,IAErBvD,IAAQ,IAAO,IAAMsE,KAAO,IAAO,EAChDA,IAAM,SAENrI,EAAKhC,KAAK8J,KAAKpC,EAAKM,GAEpBjC,GADAA,EAAM/F,KAAK8J,KAAKpC,EAAKO,IACRjI,KAAK8J,KAAKnC,EAAKK,GAAQ,EACpCpE,EAAK5D,KAAK8J,KAAKnC,EAAKM,GACpBjG,EAAMA,EAAKhC,KAAK8J,KAAKvC,EAAKY,GAAQ,EAElCpC,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKvC,EAAKa,GAAQ,GACvBpI,KAAK8J,KAAKtC,EAAKW,GAAQ,EACpCvE,EAAMA,EAAK5D,KAAK8J,KAAKtC,EAAKY,GAAQ,EAClCpG,EAAMA,EAAKhC,KAAK8J,KAAK1C,EAAKkB,GAAQ,EAElCvC,GADAA,EAAOA,EAAM/F,KAAK8J,KAAK1C,EAAKmB,GAAQ,GACvBvI,KAAK8J,KAAKzC,EAAKiB,GAAQ,EACpC1E,EAAMA,EAAK5D,KAAK8J,KAAKzC,EAAKkB,GAAQ,EAClCvG,EAAMA,EAAKhC,KAAK8J,KAAK7C,EAAKwB,GAAQ,EAElC1C,GADAA,EAAOA,EAAM/F,KAAK8J,KAAK7C,EAAKyB,GAAQ,GACvB1I,KAAK8J,KAAK5C,EAAKuB,GAAQ,EACpC7E,EAAMA,EAAK5D,KAAK8J,KAAK5C,EAAKwB,GAAQ,EAClC1G,EAAMA,EAAKhC,KAAK8J,KAAKhD,EAAK8B,GAAQ,EAElC7C,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKhD,EAAK+B,IAAQ,GACvB7I,KAAK8J,KAAK/C,EAAK6B,GAAQ,EACpChF,EAAMA,EAAK5D,KAAK8J,KAAK/C,EAAK8B,IAAQ,EAClC7G,EAAMA,EAAKhC,KAAK8J,KAAKnD,EAAKoC,IAAQ,EAElChD,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKnD,EAAKqC,IAAQ,GACvBhJ,KAAK8J,KAAKlD,EAAKmC,IAAQ,EACpCnF,EAAMA,EAAK5D,KAAK8J,KAAKlD,EAAKoC,IAAQ,EAClChH,EAAMA,EAAKhC,KAAK8J,KAAKtD,EAAK0C,IAAQ,EAElCnD,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKtD,EAAK2C,IAAQ,GACvBnJ,KAAK8J,KAAKrD,EAAKyC,IAAQ,EACpCtF,EAAMA,EAAK5D,KAAK8J,KAAKrD,EAAK0C,IAAQ,EAClCnH,EAAMA,EAAKhC,KAAK8J,KAAKzD,EAAKgD,IAAQ,EAElCtD,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKzD,EAAKiD,IAAQ,GACvBtJ,KAAK8J,KAAKxD,EAAK+C,IAAQ,EACpCzF,EAAMA,EAAK5D,KAAK8J,KAAKxD,EAAKgD,IAAQ,EAKlC,IAAIgB,IAAQ5K,GAJZsC,EAAMA,EAAKhC,KAAK8J,KAAK5D,EAAKsD,IAAQ,GAIZ,KAAa,MAFnCzD,GADAA,EAAOA,EAAM/F,KAAK8J,KAAK5D,EAAKuD,IAAQ,GACvBzJ,KAAK8J,KAAK3D,EAAKqD,IAAQ,KAEU,IAAO,EACrD9J,IAFAkE,EAAMA,EAAK5D,KAAK8J,KAAK3D,EAAKsD,IAAQ,IAErB1D,IAAQ,IAAO,IAAMuE,KAAO,IAAO,EAChDA,IAAM,SAENtI,EAAKhC,KAAK8J,KAAKjC,EAAKG,GAEpBjC,GADAA,EAAM/F,KAAK8J,KAAKjC,EAAKI,IACRjI,KAAK8J,KAAKhC,EAAKE,GAAQ,EACpCpE,EAAK5D,KAAK8J,KAAKhC,EAAKG,GACpBjG,EAAMA,EAAKhC,KAAK8J,KAAKpC,EAAKS,GAAQ,EAElCpC,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKpC,EAAKU,GAAQ,GACvBpI,KAAK8J,KAAKnC,EAAKQ,GAAQ,EACpCvE,EAAMA,EAAK5D,KAAK8J,KAAKnC,EAAKS,GAAQ,EAClCpG,EAAMA,EAAKhC,KAAK8J,KAAKvC,EAAKe,GAAQ,EAElCvC,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKvC,EAAKgB,GAAQ,GACvBvI,KAAK8J,KAAKtC,EAAKc,GAAQ,EACpC1E,EAAMA,EAAK5D,KAAK8J,KAAKtC,EAAKe,GAAQ,EAClCvG,EAAMA,EAAKhC,KAAK8J,KAAK1C,EAAKqB,GAAQ,EAElC1C,GADAA,EAAOA,EAAM/F,KAAK8J,KAAK1C,EAAKsB,GAAQ,GACvB1I,KAAK8J,KAAKzC,EAAKoB,GAAQ,EACpC7E,EAAMA,EAAK5D,KAAK8J,KAAKzC,EAAKqB,GAAQ,EAClC1G,EAAMA,EAAKhC,KAAK8J,KAAK7C,EAAK2B,GAAQ,EAElC7C,GADAA,EAAOA,EAAM/F,KAAK8J,KAAK7C,EAAK4B,IAAQ,GACvB7I,KAAK8J,KAAK5C,EAAK0B,GAAQ,EACpChF,EAAMA,EAAK5D,KAAK8J,KAAK5C,EAAK2B,IAAQ,EAClC7G,EAAMA,EAAKhC,KAAK8J,KAAKhD,EAAKiC,IAAQ,EAElChD,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKhD,EAAKkC,IAAQ,GACvBhJ,KAAK8J,KAAK/C,EAAKgC,IAAQ,EACpCnF,EAAMA,EAAK5D,KAAK8J,KAAK/C,EAAKiC,IAAQ,EAClChH,EAAMA,EAAKhC,KAAK8J,KAAKnD,EAAKuC,IAAQ,EAElCnD,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKnD,EAAKwC,IAAQ,GACvBnJ,KAAK8J,KAAKlD,EAAKsC,IAAQ,EACpCtF,EAAMA,EAAK5D,KAAK8J,KAAKlD,EAAKuC,IAAQ,EAClCnH,EAAMA,EAAKhC,KAAK8J,KAAKtD,EAAK6C,IAAQ,EAElCtD,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKtD,EAAK8C,IAAQ,GACvBtJ,KAAK8J,KAAKrD,EAAK4C,IAAQ,EACpCzF,EAAMA,EAAK5D,KAAK8J,KAAKrD,EAAK6C,IAAQ,EAClCtH,EAAMA,EAAKhC,KAAK8J,KAAKzD,EAAKmD,IAAQ,EAElCzD,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKzD,EAAKoD,IAAQ,GACvBzJ,KAAK8J,KAAKxD,EAAKkD,IAAQ,EACpC5F,EAAMA,EAAK5D,KAAK8J,KAAKxD,EAAKmD,IAAQ,EAKlC,IAAIc,IAAQ7K,GAJZsC,EAAMA,EAAKhC,KAAK8J,KAAK5D,EAAKyD,IAAQ,GAIZ,KAAa,MAFnC5D,GADAA,EAAOA,EAAM/F,KAAK8J,KAAK5D,EAAK0D,IAAQ,GACvB5J,KAAK8J,KAAK3D,EAAKwD,IAAQ,KAEU,IAAO,EACrDjK,IAFAkE,EAAMA,EAAK5D,KAAK8J,KAAK3D,EAAKyD,IAAQ,IAErB7D,IAAQ,IAAO,IAAMwE,KAAO,IAAO,EAChDA,IAAM,SAENvI,EAAKhC,KAAK8J,KAAKjC,EAAKM,GAEpBpC,GADAA,EAAM/F,KAAK8J,KAAKjC,EAAKO,IACRpI,KAAK8J,KAAKhC,EAAKK,GAAQ,EACpCvE,EAAK5D,KAAK8J,KAAKhC,EAAKM,GACpBpG,EAAMA,EAAKhC,KAAK8J,KAAKpC,EAAKY,GAAQ,EAElCvC,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKpC,EAAKa,GAAQ,GACvBvI,KAAK8J,KAAKnC,EAAKW,GAAQ,EACpC1E,EAAMA,EAAK5D,KAAK8J,KAAKnC,EAAKY,GAAQ,EAClCvG,EAAMA,EAAKhC,KAAK8J,KAAKvC,EAAKkB,GAAQ,EAElC1C,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKvC,EAAKmB,GAAQ,GACvB1I,KAAK8J,KAAKtC,EAAKiB,GAAQ,EACpC7E,EAAMA,EAAK5D,KAAK8J,KAAKtC,EAAKkB,GAAQ,EAClC1G,EAAMA,EAAKhC,KAAK8J,KAAK1C,EAAKwB,GAAQ,EAElC7C,GADAA,EAAOA,EAAM/F,KAAK8J,KAAK1C,EAAKyB,IAAQ,GACvB7I,KAAK8J,KAAKzC,EAAKuB,GAAQ,EACpChF,EAAMA,EAAK5D,KAAK8J,KAAKzC,EAAKwB,IAAQ,EAClC7G,EAAMA,EAAKhC,KAAK8J,KAAK7C,EAAK8B,IAAQ,EAElChD,GADAA,EAAOA,EAAM/F,KAAK8J,KAAK7C,EAAK+B,IAAQ,GACvBhJ,KAAK8J,KAAK5C,EAAK6B,IAAQ,EACpCnF,EAAMA,EAAK5D,KAAK8J,KAAK5C,EAAK8B,IAAQ,EAClChH,EAAMA,EAAKhC,KAAK8J,KAAKhD,EAAKoC,IAAQ,EAElCnD,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKhD,EAAKqC,IAAQ,GACvBnJ,KAAK8J,KAAK/C,EAAKmC,IAAQ,EACpCtF,EAAMA,EAAK5D,KAAK8J,KAAK/C,EAAKoC,IAAQ,EAClCnH,EAAMA,EAAKhC,KAAK8J,KAAKnD,EAAK0C,IAAQ,EAElCtD,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKnD,EAAK2C,IAAQ,GACvBtJ,KAAK8J,KAAKlD,EAAKyC,IAAQ,EACpCzF,EAAMA,EAAK5D,KAAK8J,KAAKlD,EAAK0C,IAAQ,EAClCtH,EAAMA,EAAKhC,KAAK8J,KAAKtD,EAAKgD,IAAQ,EAElCzD,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKtD,EAAKiD,IAAQ,GACvBzJ,KAAK8J,KAAKrD,EAAK+C,IAAQ,EACpC5F,EAAMA,EAAK5D,KAAK8J,KAAKrD,EAAKgD,IAAQ,EAKlC,IAAIe,IAAS9K,GAJbsC,EAAMA,EAAKhC,KAAK8J,KAAKzD,EAAKsD,IAAQ,GAIX,KAAa,MAFpC5D,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKzD,EAAKuD,IAAQ,GACvB5J,KAAK8J,KAAKxD,EAAKqD,IAAQ,KAEW,IAAO,EACtDjK,IAFAkE,EAAMA,EAAK5D,KAAK8J,KAAKxD,EAAKsD,IAAQ,IAErB7D,IAAQ,IAAO,IAAMyE,KAAQ,IAAO,EACjDA,IAAO,SAEPxI,EAAKhC,KAAK8J,KAAKjC,EAAKS,GAEpBvC,GADAA,EAAM/F,KAAK8J,KAAKjC,EAAKU,IACRvI,KAAK8J,KAAKhC,EAAKQ,GAAQ,EACpC1E,EAAK5D,KAAK8J,KAAKhC,EAAKS,GACpBvG,EAAMA,EAAKhC,KAAK8J,KAAKpC,EAAKe,GAAQ,EAElC1C,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKpC,EAAKgB,GAAQ,GACvB1I,KAAK8J,KAAKnC,EAAKc,GAAQ,EACpC7E,EAAMA,EAAK5D,KAAK8J,KAAKnC,EAAKe,GAAQ,EAClC1G,EAAMA,EAAKhC,KAAK8J,KAAKvC,EAAKqB,GAAQ,EAElC7C,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKvC,EAAKsB,IAAQ,GACvB7I,KAAK8J,KAAKtC,EAAKoB,GAAQ,EACpChF,EAAMA,EAAK5D,KAAK8J,KAAKtC,EAAKqB,IAAQ,EAClC7G,EAAMA,EAAKhC,KAAK8J,KAAK1C,EAAK2B,IAAQ,EAElChD,GADAA,EAAOA,EAAM/F,KAAK8J,KAAK1C,EAAK4B,IAAQ,GACvBhJ,KAAK8J,KAAKzC,EAAK0B,IAAQ,EACpCnF,EAAMA,EAAK5D,KAAK8J,KAAKzC,EAAK2B,IAAQ,EAClChH,EAAMA,EAAKhC,KAAK8J,KAAK7C,EAAKiC,IAAQ,EAElCnD,GADAA,EAAOA,EAAM/F,KAAK8J,KAAK7C,EAAKkC,IAAQ,GACvBnJ,KAAK8J,KAAK5C,EAAKgC,IAAQ,EACpCtF,EAAMA,EAAK5D,KAAK8J,KAAK5C,EAAKiC,IAAQ,EAClCnH,EAAMA,EAAKhC,KAAK8J,KAAKhD,EAAKuC,IAAQ,EAElCtD,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKhD,EAAKwC,IAAQ,GACvBtJ,KAAK8J,KAAK/C,EAAKsC,IAAQ,EACpCzF,EAAMA,EAAK5D,KAAK8J,KAAK/C,EAAKuC,IAAQ,EAClCtH,EAAMA,EAAKhC,KAAK8J,KAAKnD,EAAK6C,IAAQ,EAElCzD,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKnD,EAAK8C,IAAQ,GACvBzJ,KAAK8J,KAAKlD,EAAK4C,IAAQ,EACpC5F,EAAMA,EAAK5D,KAAK8J,KAAKlD,EAAK6C,IAAQ,EAKlC,IAAIgB,IAAS/K,GAJbsC,EAAMA,EAAKhC,KAAK8J,KAAKtD,EAAKmD,IAAQ,GAIX,KAAa,MAFpC5D,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKtD,EAAKoD,IAAQ,GACvB5J,KAAK8J,KAAKrD,EAAKkD,IAAQ,KAEW,IAAO,EACtDjK,IAFAkE,EAAMA,EAAK5D,KAAK8J,KAAKrD,EAAKmD,IAAQ,IAErB7D,IAAQ,IAAO,IAAM0E,KAAQ,IAAO,EACjDA,IAAO,SAEPzI,EAAKhC,KAAK8J,KAAKjC,EAAKY,GAEpB1C,GADAA,EAAM/F,KAAK8J,KAAKjC,EAAKa,IACR1I,KAAK8J,KAAKhC,EAAKW,GAAQ,EACpC7E,EAAK5D,KAAK8J,KAAKhC,EAAKY,GACpB1G,EAAMA,EAAKhC,KAAK8J,KAAKpC,EAAKkB,GAAQ,EAElC7C,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKpC,EAAKmB,IAAQ,GACvB7I,KAAK8J,KAAKnC,EAAKiB,GAAQ,EACpChF,EAAMA,EAAK5D,KAAK8J,KAAKnC,EAAKkB,IAAQ,EAClC7G,EAAMA,EAAKhC,KAAK8J,KAAKvC,EAAKwB,IAAQ,EAElChD,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKvC,EAAKyB,IAAQ,GACvBhJ,KAAK8J,KAAKtC,EAAKuB,IAAQ,EACpCnF,EAAMA,EAAK5D,KAAK8J,KAAKtC,EAAKwB,IAAQ,EAClChH,EAAMA,EAAKhC,KAAK8J,KAAK1C,EAAK8B,IAAQ,EAElCnD,GADAA,EAAOA,EAAM/F,KAAK8J,KAAK1C,EAAK+B,IAAQ,GACvBnJ,KAAK8J,KAAKzC,EAAK6B,IAAQ,EACpCtF,EAAMA,EAAK5D,KAAK8J,KAAKzC,EAAK8B,IAAQ,EAClCnH,EAAMA,EAAKhC,KAAK8J,KAAK7C,EAAKoC,IAAQ,EAElCtD,GADAA,EAAOA,EAAM/F,KAAK8J,KAAK7C,EAAKqC,IAAQ,GACvBtJ,KAAK8J,KAAK5C,EAAKmC,IAAQ,EACpCzF,EAAMA,EAAK5D,KAAK8J,KAAK5C,EAAKoC,IAAQ,EAClCtH,EAAMA,EAAKhC,KAAK8J,KAAKhD,EAAK0C,IAAQ,EAElCzD,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKhD,EAAK2C,IAAQ,GACvBzJ,KAAK8J,KAAK/C,EAAKyC,IAAQ,EACpC5F,EAAMA,EAAK5D,KAAK8J,KAAK/C,EAAK0C,IAAQ,EAKlC,IAAIiB,IAAShL,GAJbsC,EAAMA,EAAKhC,KAAK8J,KAAKnD,EAAKgD,IAAQ,GAIX,KAAa,MAFpC5D,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKnD,EAAKiD,IAAQ,GACvB5J,KAAK8J,KAAKlD,EAAK+C,IAAQ,KAEW,IAAO,EACtDjK,IAFAkE,EAAMA,EAAK5D,KAAK8J,KAAKlD,EAAKgD,IAAQ,IAErB7D,IAAQ,IAAO,IAAM2E,KAAQ,IAAO,EACjDA,IAAO,SAEP1I,EAAKhC,KAAK8J,KAAKjC,EAAKe,GAEpB7C,GADAA,EAAM/F,KAAK8J,KAAKjC,EAAKgB,KACR7I,KAAK8J,KAAKhC,EAAKc,GAAQ,EACpChF,EAAK5D,KAAK8J,KAAKhC,EAAKe,IACpB7G,EAAMA,EAAKhC,KAAK8J,KAAKpC,EAAKqB,IAAQ,EAElChD,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKpC,EAAKsB,IAAQ,GACvBhJ,KAAK8J,KAAKnC,EAAKoB,IAAQ,EACpCnF,EAAMA,EAAK5D,KAAK8J,KAAKnC,EAAKqB,IAAQ,EAClChH,EAAMA,EAAKhC,KAAK8J,KAAKvC,EAAK2B,IAAQ,EAElCnD,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKvC,EAAK4B,IAAQ,GACvBnJ,KAAK8J,KAAKtC,EAAK0B,IAAQ,EACpCtF,EAAMA,EAAK5D,KAAK8J,KAAKtC,EAAK2B,IAAQ,EAClCnH,EAAMA,EAAKhC,KAAK8J,KAAK1C,EAAKiC,IAAQ,EAElCtD,GADAA,EAAOA,EAAM/F,KAAK8J,KAAK1C,EAAKkC,IAAQ,GACvBtJ,KAAK8J,KAAKzC,EAAKgC,IAAQ,EACpCzF,EAAMA,EAAK5D,KAAK8J,KAAKzC,EAAKiC,IAAQ,EAClCtH,EAAMA,EAAKhC,KAAK8J,KAAK7C,EAAKuC,IAAQ,EAElCzD,GADAA,EAAOA,EAAM/F,KAAK8J,KAAK7C,EAAKwC,IAAQ,GACvBzJ,KAAK8J,KAAK5C,EAAKsC,IAAQ,EACpC5F,EAAMA,EAAK5D,KAAK8J,KAAK5C,EAAKuC,IAAQ,EAKlC,IAAIkB,IAASjL,GAJbsC,EAAMA,EAAKhC,KAAK8J,KAAKhD,EAAK6C,IAAQ,GAIX,KAAa,MAFpC5D,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKhD,EAAK8C,IAAQ,GACvB5J,KAAK8J,KAAK/C,EAAK4C,IAAQ,KAEW,IAAO,EACtDjK,IAFAkE,EAAMA,EAAK5D,KAAK8J,KAAK/C,EAAK6C,IAAQ,IAErB7D,IAAQ,IAAO,IAAM4E,KAAQ,IAAO,EACjDA,IAAO,SAEP3I,EAAKhC,KAAK8J,KAAKjC,EAAKkB,IAEpBhD,GADAA,EAAM/F,KAAK8J,KAAKjC,EAAKmB,KACRhJ,KAAK8J,KAAKhC,EAAKiB,IAAQ,EACpCnF,EAAK5D,KAAK8J,KAAKhC,EAAKkB,IACpBhH,EAAMA,EAAKhC,KAAK8J,KAAKpC,EAAKwB,IAAQ,EAElCnD,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKpC,EAAKyB,IAAQ,GACvBnJ,KAAK8J,KAAKnC,EAAKuB,IAAQ,EACpCtF,EAAMA,EAAK5D,KAAK8J,KAAKnC,EAAKwB,IAAQ,EAClCnH,EAAMA,EAAKhC,KAAK8J,KAAKvC,EAAK8B,IAAQ,EAElCtD,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKvC,EAAK+B,IAAQ,GACvBtJ,KAAK8J,KAAKtC,EAAK6B,IAAQ,EACpCzF,EAAMA,EAAK5D,KAAK8J,KAAKtC,EAAK8B,IAAQ,EAClCtH,EAAMA,EAAKhC,KAAK8J,KAAK1C,EAAKoC,IAAQ,EAElCzD,GADAA,EAAOA,EAAM/F,KAAK8J,KAAK1C,EAAKqC,IAAQ,GACvBzJ,KAAK8J,KAAKzC,EAAKmC,IAAQ,EACpC5F,EAAMA,EAAK5D,KAAK8J,KAAKzC,EAAKoC,IAAQ,EAKlC,IAAImB,IAASlL,GAJbsC,EAAMA,EAAKhC,KAAK8J,KAAK7C,EAAK0C,IAAQ,GAIX,KAAa,MAFpC5D,GADAA,EAAOA,EAAM/F,KAAK8J,KAAK7C,EAAK2C,IAAQ,GACvB5J,KAAK8J,KAAK5C,EAAKyC,IAAQ,KAEW,IAAO,EACtDjK,IAFAkE,EAAMA,EAAK5D,KAAK8J,KAAK5C,EAAK0C,IAAQ,IAErB7D,IAAQ,IAAO,IAAM6E,KAAQ,IAAO,EACjDA,IAAO,SAEP5I,EAAKhC,KAAK8J,KAAKjC,EAAKqB,IAEpBnD,GADAA,EAAM/F,KAAK8J,KAAKjC,EAAKsB,KACRnJ,KAAK8J,KAAKhC,EAAKoB,IAAQ,EACpCtF,EAAK5D,KAAK8J,KAAKhC,EAAKqB,IACpBnH,EAAMA,EAAKhC,KAAK8J,KAAKpC,EAAK2B,IAAQ,EAElCtD,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKpC,EAAK4B,IAAQ,GACvBtJ,KAAK8J,KAAKnC,EAAK0B,IAAQ,EACpCzF,EAAMA,EAAK5D,KAAK8J,KAAKnC,EAAK2B,IAAQ,EAClCtH,EAAMA,EAAKhC,KAAK8J,KAAKvC,EAAKiC,IAAQ,EAElCzD,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKvC,EAAKkC,IAAQ,GACvBzJ,KAAK8J,KAAKtC,EAAKgC,IAAQ,EACpC5F,EAAMA,EAAK5D,KAAK8J,KAAKtC,EAAKiC,IAAQ,EAKlC,IAAIoB,IAASnL,GAJbsC,EAAMA,EAAKhC,KAAK8J,KAAK1C,EAAKuC,IAAQ,GAIX,KAAa,MAFpC5D,GADAA,EAAOA,EAAM/F,KAAK8J,KAAK1C,EAAKwC,IAAQ,GACvB5J,KAAK8J,KAAKzC,EAAKsC,IAAQ,KAEW,IAAO,EACtDjK,IAFAkE,EAAMA,EAAK5D,KAAK8J,KAAKzC,EAAKuC,IAAQ,IAErB7D,IAAQ,IAAO,IAAM8E,KAAQ,IAAO,EACjDA,IAAO,SAEP7I,EAAKhC,KAAK8J,KAAKjC,EAAKwB,IAEpBtD,GADAA,EAAM/F,KAAK8J,KAAKjC,EAAKyB,KACRtJ,KAAK8J,KAAKhC,EAAKuB,IAAQ,EACpCzF,EAAK5D,KAAK8J,KAAKhC,EAAKwB,IACpBtH,EAAMA,EAAKhC,KAAK8J,KAAKpC,EAAK8B,IAAQ,EAElCzD,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKpC,EAAK+B,IAAQ,GACvBzJ,KAAK8J,KAAKnC,EAAK6B,IAAQ,EACpC5F,EAAMA,EAAK5D,KAAK8J,KAAKnC,EAAK8B,IAAQ,EAKlC,IAAIqB,IAASpL,GAJbsC,EAAMA,EAAKhC,KAAK8J,KAAKvC,EAAKoC,IAAQ,GAIX,KAAa,MAFpC5D,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKvC,EAAKqC,IAAQ,GACvB5J,KAAK8J,KAAKtC,EAAKmC,IAAQ,KAEW,IAAO,EACtDjK,IAFAkE,EAAMA,EAAK5D,KAAK8J,KAAKtC,EAAKoC,IAAQ,IAErB7D,IAAQ,IAAO,IAAM+E,KAAQ,IAAO,EACjDA,IAAO,SAEP9I,EAAKhC,KAAK8J,KAAKjC,EAAK2B,IAEpBzD,GADAA,EAAM/F,KAAK8J,KAAKjC,EAAK4B,KACRzJ,KAAK8J,KAAKhC,EAAK0B,IAAQ,EACpC5F,EAAK5D,KAAK8J,KAAKhC,EAAK2B,IAKpB,IAAIsB,IAASrL,GAJbsC,EAAMA,EAAKhC,KAAK8J,KAAKpC,EAAKiC,IAAQ,GAIX,KAAa,MAFpC5D,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKpC,EAAKkC,IAAQ,GACvB5J,KAAK8J,KAAKnC,EAAKgC,IAAQ,KAEW,IAAO,EACtDjK,IAFAkE,EAAMA,EAAK5D,KAAK8J,KAAKnC,EAAKiC,IAAQ,IAErB7D,IAAQ,IAAO,IAAMgF,KAAQ,IAAO,EACjDA,IAAO,SAMP,IAAIC,IAAStL,GAJbsC,EAAKhC,KAAK8J,KAAKjC,EAAK8B,KAIG,KAAa,MAFpC5D,GADAA,EAAM/F,KAAK8J,KAAKjC,EAAK+B,KACR5J,KAAK8J,KAAKhC,EAAK6B,IAAQ,KAEW,IAAO,EA0BtD,OAzBAjK,IAFAkE,EAAK5D,KAAK8J,KAAKhC,EAAK8B,MAEP7D,IAAQ,IAAO,IAAMiF,KAAQ,IAAO,EACjDA,IAAO,SACPhF,EAAE,GAAK6D,GACP7D,EAAE,GAAK+D,GACP/D,EAAE,GAAKgE,GACPhE,EAAE,GAAKiE,GACPjE,EAAE,GAAKkE,GACPlE,EAAE,GAAKmE,GACPnE,EAAE,GAAKoE,GACPpE,EAAE,GAAKqE,GACPrE,EAAE,GAAKsE,GACPtE,EAAE,GAAKuE,GACPvE,EAAE,IAAMwE,GACRxE,EAAE,IAAMyE,GACRzE,EAAE,IAAM0E,GACR1E,EAAE,IAAM2E,GACR3E,EAAE,IAAM4E,GACR5E,EAAE,IAAM6E,GACR7E,EAAE,IAAM8E,GACR9E,EAAE,IAAM+E,GACR/E,EAAE,IAAMgF,GACE,IAANtL,IACFsG,EAAE,IAAMtG,EACRpP,EAAIxB,UAECwB,CACT,EAgDA,SAAS2a,EAAYpJ,EAAMvO,EAAKhD,GAE9B,OADW,IAAI4a,GACHC,KAAKtJ,EAAMvO,EAAKhD,EAC9B,CAqBA,SAAS4a,EAAME,EAAGC,GAChB7d,KAAK4d,EAAIA,EACT5d,KAAK6d,EAAIA,CACX,CAxEKrL,KAAK8J,OACRhE,EAAclE,GAiDhB7C,EAAGtR,UAAU6d,MAAQ,SAAgBhY,EAAKhD,GACxC,IAAIN,EACA8I,EAAMtL,KAAKsB,OAASwE,EAAIxE,OAW5B,OATEkB,EADkB,KAAhBxC,KAAKsB,QAAgC,KAAfwE,EAAIxE,OACtBgX,EAAYtY,KAAM8F,EAAKhD,GACpBwI,EAAM,GACT8I,EAAWpU,KAAM8F,EAAKhD,GACnBwI,EAAM,KArDnB,SAAmB+I,EAAMvO,EAAKhD,GAC5BA,EAAI6O,SAAW7L,EAAI6L,SAAW0C,EAAK1C,SACnC7O,EAAIxB,OAAS+S,EAAK/S,OAASwE,EAAIxE,OAI/B,IAFA,IAAImT,EAAQ,EACRsJ,EAAU,EACLrJ,EAAI,EAAGA,EAAI5R,EAAIxB,OAAS,EAAGoT,IAAK,CAGvC,IAAIC,EAASoJ,EACbA,EAAU,EAGV,IAFA,IAAInJ,EAAgB,SAARH,EACRI,EAAOrC,KAAKvF,IAAIyH,EAAG5O,EAAIxE,OAAS,GAC3BkK,EAAIgH,KAAKC,IAAI,EAAGiC,EAAIL,EAAK/S,OAAS,GAAIkK,GAAKqJ,EAAMrJ,IAAK,CAC7D,IAAID,EAAImJ,EAAIlJ,EAGR6G,GAFoB,EAAhBgC,EAAKzC,MAAMrG,KACI,EAAfzF,EAAI8L,MAAMpG,IAGdgJ,EAAS,SAAJnC,EAGTuC,EAAa,UADbJ,EAAMA,EAAKI,EAAS,GAIpBmJ,IAFApJ,GAHAA,EAAUA,GAAWtC,EAAI,SAAa,GAAM,IAGxBmC,IAAO,IAAO,KAEZ,GACtBG,GAAU,QACZ,CACA7R,EAAI8O,MAAM8C,GAAKE,EACfH,EAAQE,EACRA,EAASoJ,CACX,CAOA,OANc,IAAVtJ,EACF3R,EAAI8O,MAAM8C,GAAKD,EAEf3R,EAAIxB,SAGCwB,EAAIsQ,OACb,CAeU4K,CAAShe,KAAM8F,EAAKhD,GAEpB2a,EAAWzd,KAAM8F,EAAKhD,GAGvBN,CACT,EAUAkb,EAAKzd,UAAUge,QAAU,SAAkBC,GAGzC,IAFA,IAAIjI,EAAI,IAAIvU,MAAMwc,GACdC,EAAI5M,EAAGtR,UAAU+V,WAAWkI,GAAK,EAC5B3S,EAAI,EAAGA,EAAI2S,EAAG3S,IACrB0K,EAAE1K,GAAKvL,KAAKoe,OAAO7S,EAAG4S,EAAGD,GAG3B,OAAOjI,CACT,EAGAyH,EAAKzd,UAAUme,OAAS,SAAiBR,EAAGO,EAAGD,GAC7C,GAAU,IAANN,GAAWA,IAAMM,EAAI,EAAG,OAAON,EAGnC,IADA,IAAIS,EAAK,EACA9S,EAAI,EAAGA,EAAI4S,EAAG5S,IACrB8S,IAAW,EAAJT,IAAWO,EAAI5S,EAAI,EAC1BqS,IAAM,EAGR,OAAOS,CACT,EAIAX,EAAKzd,UAAUqe,QAAU,SAAkBC,EAAKC,EAAKC,EAAKC,EAAMC,EAAMT,GACpE,IAAK,IAAI3S,EAAI,EAAGA,EAAI2S,EAAG3S,IACrBmT,EAAKnT,GAAKiT,EAAID,EAAIhT,IAClBoT,EAAKpT,GAAKkT,EAAIF,EAAIhT,GAEtB,EAEAmS,EAAKzd,UAAU2e,UAAY,SAAoBJ,EAAKC,EAAKC,EAAMC,EAAMT,EAAGK,GACtEve,KAAKse,QAAQC,EAAKC,EAAKC,EAAKC,EAAMC,EAAMT,GAExC,IAAK,IAAIW,EAAI,EAAGA,EAAIX,EAAGW,IAAM,EAM3B,IALA,IAAIV,EAAIU,GAAK,EAETC,EAAQtM,KAAKuM,IAAI,EAAIvM,KAAKwM,GAAKb,GAC/Bc,EAAQzM,KAAK0M,IAAI,EAAI1M,KAAKwM,GAAKb,GAE1BxO,EAAI,EAAGA,EAAIuO,EAAGvO,GAAKwO,EAI1B,IAHA,IAAIgB,EAASL,EACTM,EAASH,EAEJzT,EAAI,EAAGA,EAAIqT,EAAGrT,IAAK,CAC1B,IAAImC,EAAK+Q,EAAK/O,EAAInE,GACd6T,EAAKV,EAAKhP,EAAInE,GAEd8T,EAAKZ,EAAK/O,EAAInE,EAAIqT,GAClBU,EAAKZ,EAAKhP,EAAInE,EAAIqT,GAElBW,EAAKL,EAASG,EAAKF,EAASG,EAEhCA,EAAKJ,EAASI,EAAKH,EAASE,EAC5BA,EAAKE,EAELd,EAAK/O,EAAInE,GAAKmC,EAAK2R,EACnBX,EAAKhP,EAAInE,GAAK6T,EAAKE,EAEnBb,EAAK/O,EAAInE,EAAIqT,GAAKlR,EAAK2R,EACvBX,EAAKhP,EAAInE,EAAIqT,GAAKQ,EAAKE,EAGnB/T,IAAM2S,IACRqB,EAAKV,EAAQK,EAASF,EAAQG,EAE9BA,EAASN,EAAQM,EAASH,EAAQE,EAClCA,EAASK,EAEb,CAGN,EAEA9B,EAAKzd,UAAUwf,YAAc,SAAsBC,EAAGC,GACpD,IAAIzB,EAAqB,EAAjB1L,KAAKC,IAAIkN,EAAGD,GAChBE,EAAU,EAAJ1B,EACN3S,EAAI,EACR,IAAK2S,EAAIA,EAAI,EAAI,EAAGA,EAAGA,KAAU,EAC/B3S,IAGF,OAAO,GAAKA,EAAI,EAAIqU,CACtB,EAEAlC,EAAKzd,UAAU4f,UAAY,SAAoBrB,EAAKC,EAAKP,GACvD,KAAIA,GAAK,GAET,IAAK,IAAI3S,EAAI,EAAGA,EAAI2S,EAAI,EAAG3S,IAAK,CAC9B,IAAI0K,EAAIuI,EAAIjT,GAEZiT,EAAIjT,GAAKiT,EAAIN,EAAI3S,EAAI,GACrBiT,EAAIN,EAAI3S,EAAI,GAAK0K,EAEjBA,EAAIwI,EAAIlT,GAERkT,EAAIlT,IAAMkT,EAAIP,EAAI3S,EAAI,GACtBkT,EAAIP,EAAI3S,EAAI,IAAM0K,CACpB,CACF,EAEAyH,EAAKzd,UAAU6f,aAAe,SAAuBC,EAAI7B,GAEvD,IADA,IAAIzJ,EAAQ,EACHlJ,EAAI,EAAGA,EAAI2S,EAAI,EAAG3S,IAAK,CAC9B,IAAI2H,EAAoC,KAAhCV,KAAKwN,MAAMD,EAAG,EAAIxU,EAAI,GAAK2S,GACjC1L,KAAKwN,MAAMD,EAAG,EAAIxU,GAAK2S,GACvBzJ,EAEFsL,EAAGxU,GAAS,SAAJ2H,EAGNuB,EADEvB,EAAI,SACE,EAEAA,EAAI,SAAY,CAE5B,CAEA,OAAO6M,CACT,EAEArC,EAAKzd,UAAUggB,WAAa,SAAqBF,EAAIzU,EAAKkT,EAAKN,GAE7D,IADA,IAAIzJ,EAAQ,EACHlJ,EAAI,EAAGA,EAAID,EAAKC,IACvBkJ,GAAyB,EAARsL,EAAGxU,GAEpBiT,EAAI,EAAIjT,GAAa,KAARkJ,EAAgBA,KAAkB,GAC/C+J,EAAI,EAAIjT,EAAI,GAAa,KAARkJ,EAAgBA,KAAkB,GAIrD,IAAKlJ,EAAI,EAAID,EAAKC,EAAI2S,IAAK3S,EACzBiT,EAAIjT,GAAK,EAGXnI,EAAiB,IAAVqR,GACPrR,EAA6B,KAAb,KAARqR,GACV,EAEAiJ,EAAKzd,UAAUigB,KAAO,SAAehC,GAEnC,IADA,IAAIiC,EAAK,IAAIze,MAAMwc,GACV3S,EAAI,EAAGA,EAAI2S,EAAG3S,IACrB4U,EAAG5U,GAAK,EAGV,OAAO4U,CACT,EAEAzC,EAAKzd,UAAU0d,KAAO,SAAeC,EAAGC,EAAG/a,GACzC,IAAIob,EAAI,EAAIle,KAAKyf,YAAY7B,EAAEtc,OAAQuc,EAAEvc,QAErCid,EAAMve,KAAKie,QAAQC,GAEnBkC,EAAIpgB,KAAKkgB,KAAKhC,GAEdM,EAAM,IAAI9c,MAAMwc,GAChBmC,EAAO,IAAI3e,MAAMwc,GACjBoC,EAAO,IAAI5e,MAAMwc,GAEjBqC,EAAO,IAAI7e,MAAMwc,GACjBsC,EAAQ,IAAI9e,MAAMwc,GAClBuC,EAAQ,IAAI/e,MAAMwc,GAElBwC,EAAO5d,EAAI8O,MACf8O,EAAKpf,OAAS4c,EAEdle,KAAKigB,WAAWrC,EAAEhM,MAAOgM,EAAEtc,OAAQkd,EAAKN,GACxCle,KAAKigB,WAAWpC,EAAEjM,MAAOiM,EAAEvc,OAAQif,EAAMrC,GAEzCle,KAAK4e,UAAUJ,EAAK4B,EAAGC,EAAMC,EAAMpC,EAAGK,GACtCve,KAAK4e,UAAU2B,EAAMH,EAAGI,EAAOC,EAAOvC,EAAGK,GAEzC,IAAK,IAAIhT,EAAI,EAAGA,EAAI2S,EAAG3S,IAAK,CAC1B,IAAIiU,EAAKa,EAAK9U,GAAKiV,EAAMjV,GAAK+U,EAAK/U,GAAKkV,EAAMlV,GAC9C+U,EAAK/U,GAAK8U,EAAK9U,GAAKkV,EAAMlV,GAAK+U,EAAK/U,GAAKiV,EAAMjV,GAC/C8U,EAAK9U,GAAKiU,CACZ,CASA,OAPAxf,KAAK6f,UAAUQ,EAAMC,EAAMpC,GAC3Ble,KAAK4e,UAAUyB,EAAMC,EAAMI,EAAMN,EAAGlC,EAAGK,GACvCve,KAAK6f,UAAUa,EAAMN,EAAGlC,GACxBle,KAAK8f,aAAaY,EAAMxC,GAExBpb,EAAI6O,SAAWiM,EAAEjM,SAAWkM,EAAElM,SAC9B7O,EAAIxB,OAASsc,EAAEtc,OAASuc,EAAEvc,OACnBwB,EAAIsQ,OACb,EAGA7B,EAAGtR,UAAUsS,IAAM,SAAczM,GAC/B,IAAIhD,EAAM,IAAIyO,EAAG,MAEjB,OADAzO,EAAI8O,MAAQ,IAAIlQ,MAAM1B,KAAKsB,OAASwE,EAAIxE,QACjCtB,KAAK8d,MAAMhY,EAAKhD,EACzB,EAGAyO,EAAGtR,UAAU0gB,KAAO,SAAe7a,GACjC,IAAIhD,EAAM,IAAIyO,EAAG,MAEjB,OADAzO,EAAI8O,MAAQ,IAAIlQ,MAAM1B,KAAKsB,OAASwE,EAAIxE,QACjCmc,EAAWzd,KAAM8F,EAAKhD,EAC/B,EAGAyO,EAAGtR,UAAUqc,KAAO,SAAexW,GACjC,OAAO9F,KAAK4E,QAAQkZ,MAAMhY,EAAK9F,KACjC,EAEAuR,EAAGtR,UAAUyT,MAAQ,SAAgB5N,GACnC1C,EAAsB,iBAAR0C,GACd1C,EAAO0C,EAAM,UAIb,IADA,IAAI2O,EAAQ,EACHlJ,EAAI,EAAGA,EAAIvL,KAAKsB,OAAQiK,IAAK,CACpC,IAAI2H,GAAqB,EAAhBlT,KAAK4R,MAAMrG,IAAUzF,EAC1B0O,GAAU,SAAJtB,IAA0B,SAARuB,GAC5BA,IAAU,GACVA,GAAUvB,EAAI,SAAa,EAE3BuB,GAASD,IAAO,GAChBxU,KAAK4R,MAAMrG,GAAU,SAALiJ,CAClB,CAOA,OALc,IAAVC,IACFzU,KAAK4R,MAAMrG,GAAKkJ,EAChBzU,KAAKsB,UAGAtB,IACT,EAEAuR,EAAGtR,UAAU2gB,KAAO,SAAe9a,GACjC,OAAO9F,KAAK4E,QAAQ8O,MAAM5N,EAC5B,EAGAyL,EAAGtR,UAAU4gB,IAAM,WACjB,OAAO7gB,KAAKuS,IAAIvS,KAClB,EAGAuR,EAAGtR,UAAU6gB,KAAO,WAClB,OAAO9gB,KAAKsc,KAAKtc,KAAK4E,QACxB,EAGA2M,EAAGtR,UAAU2T,IAAM,SAAc9N,GAC/B,IAAIoN,EAxxCN,SAAqBpN,GAGnB,IAFA,IAAIoN,EAAI,IAAIxR,MAAMoE,EAAIqQ,aAEb6B,EAAM,EAAGA,EAAM9E,EAAE5R,OAAQ0W,IAAO,CACvC,IAAI7E,EAAO6E,EAAM,GAAM,EACnBC,EAAOD,EAAM,GAEjB9E,EAAE8E,IAAQlS,EAAI8L,MAAMuB,GAAQ,GAAK8E,KAAWA,CAC9C,CAEA,OAAO/E,CACT,CA6wCU6N,CAAWjb,GACnB,GAAiB,IAAboN,EAAE5R,OAAc,OAAO,IAAIiQ,EAAG,GAIlC,IADA,IAAI/O,EAAMxC,KACDuL,EAAI,EAAGA,EAAI2H,EAAE5R,QACP,IAAT4R,EAAE3H,GADsBA,IAAK/I,EAAMA,EAAIqe,OAI7C,KAAMtV,EAAI2H,EAAE5R,OACV,IAAK,IAAIsU,EAAIpT,EAAIqe,MAAOtV,EAAI2H,EAAE5R,OAAQiK,IAAKqK,EAAIA,EAAEiL,MAClC,IAAT3N,EAAE3H,KAEN/I,EAAMA,EAAI+P,IAAIqD,IAIlB,OAAOpT,CACT,EAGA+O,EAAGtR,UAAU+gB,OAAS,SAAiBC,GACrC7d,EAAuB,iBAAT6d,GAAqBA,GAAQ,GAC3C,IAGI1V,EAHA8G,EAAI4O,EAAO,GACXpC,GAAKoC,EAAO5O,GAAK,GACjB6O,EAAa,WAAe,GAAK7O,GAAQ,GAAKA,EAGlD,GAAU,IAANA,EAAS,CACX,IAAIoC,EAAQ,EAEZ,IAAKlJ,EAAI,EAAGA,EAAIvL,KAAKsB,OAAQiK,IAAK,CAChC,IAAI4V,EAAWnhB,KAAK4R,MAAMrG,GAAK2V,EAC3BhP,GAAsB,EAAhBlS,KAAK4R,MAAMrG,IAAU4V,GAAa9O,EAC5CrS,KAAK4R,MAAMrG,GAAK2G,EAAIuC,EACpBA,EAAQ0M,IAAc,GAAK9O,CAC7B,CAEIoC,IACFzU,KAAK4R,MAAMrG,GAAKkJ,EAChBzU,KAAKsB,SAET,CAEA,GAAU,IAANud,EAAS,CACX,IAAKtT,EAAIvL,KAAKsB,OAAS,EAAGiK,GAAK,EAAGA,IAChCvL,KAAK4R,MAAMrG,EAAIsT,GAAK7e,KAAK4R,MAAMrG,GAGjC,IAAKA,EAAI,EAAGA,EAAIsT,EAAGtT,IACjBvL,KAAK4R,MAAMrG,GAAK,EAGlBvL,KAAKsB,QAAUud,CACjB,CAEA,OAAO7e,KAAKoT,OACd,EAEA7B,EAAGtR,UAAUmhB,MAAQ,SAAgBH,GAGnC,OADA7d,EAAyB,IAAlBpD,KAAK2R,UACL3R,KAAKghB,OAAOC,EACrB,EAKA1P,EAAGtR,UAAU6V,OAAS,SAAiBmL,EAAMI,EAAMC,GAEjD,IAAIC,EADJne,EAAuB,iBAAT6d,GAAqBA,GAAQ,GAGzCM,EADEF,GACGA,EAAQA,EAAO,IAAO,GAEvB,EAGN,IAAIhP,EAAI4O,EAAO,GACXpC,EAAIrM,KAAKvF,KAAKgU,EAAO5O,GAAK,GAAIrS,KAAKsB,QACnCkgB,EAAO,SAAc,WAAcnP,GAAMA,EACzCoP,EAAcH,EAMlB,GAJAC,GAAK1C,EACL0C,EAAI/O,KAAKC,IAAI,EAAG8O,GAGZE,EAAa,CACf,IAAK,IAAIlW,EAAI,EAAGA,EAAIsT,EAAGtT,IACrBkW,EAAY7P,MAAMrG,GAAKvL,KAAK4R,MAAMrG,GAEpCkW,EAAYngB,OAASud,CACvB,CAEA,GAAU,IAANA,QAEG,GAAI7e,KAAKsB,OAASud,EAEvB,IADA7e,KAAKsB,QAAUud,EACVtT,EAAI,EAAGA,EAAIvL,KAAKsB,OAAQiK,IAC3BvL,KAAK4R,MAAMrG,GAAKvL,KAAK4R,MAAMrG,EAAIsT,QAGjC7e,KAAK4R,MAAM,GAAK,EAChB5R,KAAKsB,OAAS,EAGhB,IAAImT,EAAQ,EACZ,IAAKlJ,EAAIvL,KAAKsB,OAAS,EAAGiK,GAAK,IAAgB,IAAVkJ,GAAelJ,GAAKgW,GAAIhW,IAAK,CAChE,IAAIkI,EAAuB,EAAhBzT,KAAK4R,MAAMrG,GACtBvL,KAAK4R,MAAMrG,GAAMkJ,GAAU,GAAKpC,EAAOoB,IAASpB,EAChDoC,EAAQhB,EAAO+N,CACjB,CAYA,OATIC,GAAyB,IAAVhN,IACjBgN,EAAY7P,MAAM6P,EAAYngB,UAAYmT,GAGxB,IAAhBzU,KAAKsB,SACPtB,KAAK4R,MAAM,GAAK,EAChB5R,KAAKsB,OAAS,GAGTtB,KAAKoT,OACd,EAEA7B,EAAGtR,UAAUyhB,MAAQ,SAAgBT,EAAMI,EAAMC,GAG/C,OADAle,EAAyB,IAAlBpD,KAAK2R,UACL3R,KAAK8V,OAAOmL,EAAMI,EAAMC,EACjC,EAGA/P,EAAGtR,UAAU0hB,KAAO,SAAeV,GACjC,OAAOjhB,KAAK4E,QAAQwc,MAAMH,EAC5B,EAEA1P,EAAGtR,UAAU2hB,MAAQ,SAAgBX,GACnC,OAAOjhB,KAAK4E,QAAQoc,OAAOC,EAC7B,EAGA1P,EAAGtR,UAAU4hB,KAAO,SAAeZ,GACjC,OAAOjhB,KAAK4E,QAAQ8c,MAAMT,EAC5B,EAEA1P,EAAGtR,UAAU6hB,MAAQ,SAAgBb,GACnC,OAAOjhB,KAAK4E,QAAQkR,OAAOmL,EAC7B,EAGA1P,EAAGtR,UAAU2W,MAAQ,SAAgBoB,GACnC5U,EAAsB,iBAAR4U,GAAoBA,GAAO,GACzC,IAAI3F,EAAI2F,EAAM,GACV6G,GAAK7G,EAAM3F,GAAK,GAChBuD,EAAI,GAAKvD,EAGb,QAAIrS,KAAKsB,QAAUud,KAGX7e,KAAK4R,MAAMiN,GAELjJ,GAChB,EAGArE,EAAGtR,UAAU8hB,OAAS,SAAiBd,GACrC7d,EAAuB,iBAAT6d,GAAqBA,GAAQ,GAC3C,IAAI5O,EAAI4O,EAAO,GACXpC,GAAKoC,EAAO5O,GAAK,GAIrB,GAFAjP,EAAyB,IAAlBpD,KAAK2R,SAAgB,2CAExB3R,KAAKsB,QAAUud,EACjB,OAAO7e,KAQT,GALU,IAANqS,GACFwM,IAEF7e,KAAKsB,OAASkR,KAAKvF,IAAI4R,EAAG7e,KAAKsB,QAErB,IAAN+Q,EAAS,CACX,IAAImP,EAAO,SAAc,WAAcnP,GAAMA,EAC7CrS,KAAK4R,MAAM5R,KAAKsB,OAAS,IAAMkgB,CACjC,CAEA,OAAOxhB,KAAKoT,OACd,EAGA7B,EAAGtR,UAAU+hB,MAAQ,SAAgBf,GACnC,OAAOjhB,KAAK4E,QAAQmd,OAAOd,EAC7B,EAGA1P,EAAGtR,UAAUyW,MAAQ,SAAgB5Q,GAGnC,OAFA1C,EAAsB,iBAAR0C,GACd1C,EAAO0C,EAAM,UACTA,EAAM,EAAU9F,KAAKiiB,OAAOnc,GAGV,IAAlB9F,KAAK2R,SACa,IAAhB3R,KAAKsB,SAAiC,EAAhBtB,KAAK4R,MAAM,IAAU9L,GAC7C9F,KAAK4R,MAAM,GAAK9L,GAAuB,EAAhB9F,KAAK4R,MAAM,IAClC5R,KAAK2R,SAAW,EACT3R,OAGTA,KAAK2R,SAAW,EAChB3R,KAAKiiB,MAAMnc,GACX9F,KAAK2R,SAAW,EACT3R,MAIFA,KAAK2T,OAAO7N,EACrB,EAEAyL,EAAGtR,UAAU0T,OAAS,SAAiB7N,GACrC9F,KAAK4R,MAAM,IAAM9L,EAGjB,IAAK,IAAIyF,EAAI,EAAGA,EAAIvL,KAAKsB,QAAUtB,KAAK4R,MAAMrG,IAAM,SAAWA,IAC7DvL,KAAK4R,MAAMrG,IAAM,SACbA,IAAMvL,KAAKsB,OAAS,EACtBtB,KAAK4R,MAAMrG,EAAI,GAAK,EAEpBvL,KAAK4R,MAAMrG,EAAI,KAKnB,OAFAvL,KAAKsB,OAASkR,KAAKC,IAAIzS,KAAKsB,OAAQiK,EAAI,GAEjCvL,IACT,EAGAuR,EAAGtR,UAAUgiB,MAAQ,SAAgBnc,GAGnC,GAFA1C,EAAsB,iBAAR0C,GACd1C,EAAO0C,EAAM,UACTA,EAAM,EAAG,OAAO9F,KAAK0W,OAAO5Q,GAEhC,GAAsB,IAAlB9F,KAAK2R,SAIP,OAHA3R,KAAK2R,SAAW,EAChB3R,KAAK0W,MAAM5Q,GACX9F,KAAK2R,SAAW,EACT3R,KAKT,GAFAA,KAAK4R,MAAM,IAAM9L,EAEG,IAAhB9F,KAAKsB,QAAgBtB,KAAK4R,MAAM,GAAK,EACvC5R,KAAK4R,MAAM,IAAM5R,KAAK4R,MAAM,GAC5B5R,KAAK2R,SAAW,OAGhB,IAAK,IAAIpG,EAAI,EAAGA,EAAIvL,KAAKsB,QAAUtB,KAAK4R,MAAMrG,GAAK,EAAGA,IACpDvL,KAAK4R,MAAMrG,IAAM,SACjBvL,KAAK4R,MAAMrG,EAAI,IAAM,EAIzB,OAAOvL,KAAKoT,OACd,EAEA7B,EAAGtR,UAAUiiB,KAAO,SAAepc,GACjC,OAAO9F,KAAK4E,QAAQ8R,MAAM5Q,EAC5B,EAEAyL,EAAGtR,UAAUkiB,KAAO,SAAerc,GACjC,OAAO9F,KAAK4E,QAAQqd,MAAMnc,EAC5B,EAEAyL,EAAGtR,UAAUmiB,KAAO,WAGlB,OAFApiB,KAAK2R,SAAW,EAET3R,IACT,EAEAuR,EAAGtR,UAAUuW,IAAM,WACjB,OAAOxW,KAAK4E,QAAQwd,MACtB,EAEA7Q,EAAGtR,UAAUoiB,aAAe,SAAuBvc,EAAKyM,EAAK+P,GAC3D,IACI/W,EAIA2H,EALA5H,EAAMxF,EAAIxE,OAASghB,EAGvBtiB,KAAK8T,QAAQxI,GAGb,IAAImJ,EAAQ,EACZ,IAAKlJ,EAAI,EAAGA,EAAIzF,EAAIxE,OAAQiK,IAAK,CAC/B2H,GAA6B,EAAxBlT,KAAK4R,MAAMrG,EAAI+W,IAAc7N,EAClC,IAAI9B,GAAwB,EAAf7M,EAAI8L,MAAMrG,IAAUgH,EAEjCkC,IADAvB,GAAa,SAARP,IACS,KAAQA,EAAQ,SAAa,GAC3C3S,KAAK4R,MAAMrG,EAAI+W,GAAa,SAAJpP,CAC1B,CACA,KAAO3H,EAAIvL,KAAKsB,OAASghB,EAAO/W,IAE9BkJ,GADAvB,GAA6B,EAAxBlT,KAAK4R,MAAMrG,EAAI+W,IAAc7N,IACrB,GACbzU,KAAK4R,MAAMrG,EAAI+W,GAAa,SAAJpP,EAG1B,GAAc,IAAVuB,EAAa,OAAOzU,KAAKoT,QAK7B,IAFAhQ,GAAkB,IAAXqR,GACPA,EAAQ,EACHlJ,EAAI,EAAGA,EAAIvL,KAAKsB,OAAQiK,IAE3BkJ,GADAvB,IAAsB,EAAhBlT,KAAK4R,MAAMrG,IAAUkJ,IACd,GACbzU,KAAK4R,MAAMrG,GAAS,SAAJ2H,EAIlB,OAFAlT,KAAK2R,SAAW,EAET3R,KAAKoT,OACd,EAEA7B,EAAGtR,UAAUsiB,SAAW,SAAmBzc,EAAK0c,GAC9C,IAAIF,GAAQtiB,KAAKsB,OAASwE,EAAIxE,QAE1BgT,EAAItU,KAAK4E,QACT2P,EAAIzO,EAGJ2c,EAA8B,EAAxBlO,EAAE3C,MAAM2C,EAAEjT,OAAS,GAGf,IADdghB,EAAQ,GADMtiB,KAAKgW,WAAWyM,MAG5BlO,EAAIA,EAAEqN,MAAMU,GACZhO,EAAE0M,OAAOsB,GACTG,EAA8B,EAAxBlO,EAAE3C,MAAM2C,EAAEjT,OAAS,IAI3B,IACIsU,EADA+J,EAAIrL,EAAEhT,OAASiT,EAAEjT,OAGrB,GAAa,QAATkhB,EAAgB,EAClB5M,EAAI,IAAIrE,EAAG,OACTjQ,OAASqe,EAAI,EACf/J,EAAEhE,MAAQ,IAAIlQ,MAAMkU,EAAEtU,QACtB,IAAK,IAAIiK,EAAI,EAAGA,EAAIqK,EAAEtU,OAAQiK,IAC5BqK,EAAEhE,MAAMrG,GAAK,CAEjB,CAEA,IAAImX,EAAOpO,EAAE1P,QAAQyd,aAAa9N,EAAG,EAAGoL,GAClB,IAAlB+C,EAAK/Q,WACP2C,EAAIoO,EACA9M,IACFA,EAAEhE,MAAM+N,GAAK,IAIjB,IAAK,IAAInU,EAAImU,EAAI,EAAGnU,GAAK,EAAGA,IAAK,CAC/B,IAAImX,EAAmC,UAAL,EAAxBrO,EAAE1C,MAAM2C,EAAEjT,OAASkK,KACE,EAA5B8I,EAAE1C,MAAM2C,EAAEjT,OAASkK,EAAI,IAO1B,IAHAmX,EAAKnQ,KAAKvF,IAAK0V,EAAKF,EAAO,EAAG,UAE9BnO,EAAE+N,aAAa9N,EAAGoO,EAAInX,GACA,IAAf8I,EAAE3C,UACPgR,IACArO,EAAE3C,SAAW,EACb2C,EAAE+N,aAAa9N,EAAG,EAAG/I,GAChB8I,EAAEW,WACLX,EAAE3C,UAAY,GAGdiE,IACFA,EAAEhE,MAAMpG,GAAKmX,EAEjB,CAWA,OAVI/M,GACFA,EAAExC,QAEJkB,EAAElB,QAGW,QAAToP,GAA4B,IAAVF,GACpBhO,EAAEwB,OAAOwM,GAGJ,CACLM,IAAKhN,GAAK,KACVpC,IAAKc,EAET,EAMA/C,EAAGtR,UAAU4iB,OAAS,SAAiB/c,EAAK0c,EAAMM,GAGhD,OAFA1f,GAAQ0C,EAAImP,UAERjV,KAAKiV,SACA,CACL2N,IAAK,IAAIrR,EAAG,GACZiC,IAAK,IAAIjC,EAAG,IAKM,IAAlBvR,KAAK2R,UAAmC,IAAjB7L,EAAI6L,UAC7BnP,EAAMxC,KAAKgX,MAAM6L,OAAO/c,EAAK0c,GAEhB,QAATA,IACFI,EAAMpgB,EAAIogB,IAAI5L,OAGH,QAATwL,IACFhP,EAAMhR,EAAIgR,IAAIwD,MACV8L,GAA6B,IAAjBtP,EAAI7B,UAClB6B,EAAI0E,KAAKpS,IAIN,CACL8c,IAAKA,EACLpP,IAAKA,IAIa,IAAlBxT,KAAK2R,UAAmC,IAAjB7L,EAAI6L,UAC7BnP,EAAMxC,KAAK6iB,OAAO/c,EAAIkR,MAAOwL,GAEhB,QAATA,IACFI,EAAMpgB,EAAIogB,IAAI5L,OAGT,CACL4L,IAAKA,EACLpP,IAAKhR,EAAIgR,MAI0B,IAAlCxT,KAAK2R,SAAW7L,EAAI6L,WACvBnP,EAAMxC,KAAKgX,MAAM6L,OAAO/c,EAAIkR,MAAOwL,GAEtB,QAATA,IACFhP,EAAMhR,EAAIgR,IAAIwD,MACV8L,GAA6B,IAAjBtP,EAAI7B,UAClB6B,EAAI2E,KAAKrS,IAIN,CACL8c,IAAKpgB,EAAIogB,IACTpP,IAAKA,IAOL1N,EAAIxE,OAAStB,KAAKsB,QAAUtB,KAAK4S,IAAI9M,GAAO,EACvC,CACL8c,IAAK,IAAIrR,EAAG,GACZiC,IAAKxT,MAKU,IAAf8F,EAAIxE,OACO,QAATkhB,EACK,CACLI,IAAK5iB,KAAK+iB,KAAKjd,EAAI8L,MAAM,IACzB4B,IAAK,MAII,QAATgP,EACK,CACLI,IAAK,KACLpP,IAAK,IAAIjC,EAAGvR,KAAKkV,KAAKpP,EAAI8L,MAAM,MAI7B,CACLgR,IAAK5iB,KAAK+iB,KAAKjd,EAAI8L,MAAM,IACzB4B,IAAK,IAAIjC,EAAGvR,KAAKkV,KAAKpP,EAAI8L,MAAM,MAI7B5R,KAAKuiB,SAASzc,EAAK0c,GAlF1B,IAAII,EAAKpP,EAAKhR,CAmFhB,EAGA+O,EAAGtR,UAAU2iB,IAAM,SAAc9c,GAC/B,OAAO9F,KAAK6iB,OAAO/c,EAAK,OAAO,GAAO8c,GACxC,EAGArR,EAAGtR,UAAUuT,IAAM,SAAc1N,GAC/B,OAAO9F,KAAK6iB,OAAO/c,EAAK,OAAO,GAAO0N,GACxC,EAEAjC,EAAGtR,UAAU+iB,KAAO,SAAeld,GACjC,OAAO9F,KAAK6iB,OAAO/c,EAAK,OAAO,GAAM0N,GACvC,EAGAjC,EAAGtR,UAAUgjB,SAAW,SAAmBnd,GACzC,IAAIod,EAAKljB,KAAK6iB,OAAO/c,GAGrB,GAAIod,EAAG1P,IAAIyB,SAAU,OAAOiO,EAAGN,IAE/B,IAAIpP,EAA0B,IAApB0P,EAAGN,IAAIjR,SAAiBuR,EAAG1P,IAAI2E,KAAKrS,GAAOod,EAAG1P,IAEpD2P,EAAOrd,EAAIgc,MAAM,GACjBsB,EAAKtd,EAAI+P,MAAM,GACfjD,EAAMY,EAAIZ,IAAIuQ,GAGlB,OAAIvQ,EAAM,GAAY,IAAPwQ,GAAoB,IAARxQ,EAAkBsQ,EAAGN,IAGrB,IAApBM,EAAGN,IAAIjR,SAAiBuR,EAAGN,IAAIX,MAAM,GAAKiB,EAAGN,IAAIlM,MAAM,EAChE,EAEAnF,EAAGtR,UAAUiV,KAAO,SAAepP,GACjC1C,EAAO0C,GAAO,UAId,IAHA,IAAI6J,GAAK,GAAK,IAAM7J,EAEhBud,EAAM,EACD9X,EAAIvL,KAAKsB,OAAS,EAAGiK,GAAK,EAAGA,IACpC8X,GAAO1T,EAAI0T,GAAuB,EAAhBrjB,KAAK4R,MAAMrG,KAAWzF,EAG1C,OAAOud,CACT,EAGA9R,EAAGtR,UAAUkV,MAAQ,SAAgBrP,GACnC1C,EAAO0C,GAAO,UAGd,IADA,IAAI2O,EAAQ,EACHlJ,EAAIvL,KAAKsB,OAAS,EAAGiK,GAAK,EAAGA,IAAK,CACzC,IAAI2H,GAAqB,EAAhBlT,KAAK4R,MAAMrG,IAAkB,SAARkJ,EAC9BzU,KAAK4R,MAAMrG,GAAM2H,EAAIpN,EAAO,EAC5B2O,EAAQvB,EAAIpN,CACd,CAEA,OAAO9F,KAAKoT,OACd,EAEA7B,EAAGtR,UAAU8iB,KAAO,SAAejd,GACjC,OAAO9F,KAAK4E,QAAQuQ,MAAMrP,EAC5B,EAEAyL,EAAGtR,UAAUqjB,KAAO,SAAe3T,GACjCvM,EAAsB,IAAfuM,EAAEgC,UACTvO,GAAQuM,EAAEsF,UAEV,IAAI2I,EAAI5d,KACJ6d,EAAIlO,EAAE/K,QAGRgZ,EADiB,IAAfA,EAAEjM,SACAiM,EAAEoF,KAAKrT,GAEPiO,EAAEhZ,QAaR,IATA,IAAI2e,EAAI,IAAIhS,EAAG,GACXiS,EAAI,IAAIjS,EAAG,GAGXkS,EAAI,IAAIlS,EAAG,GACXmS,EAAI,IAAInS,EAAG,GAEXoS,EAAI,EAED/F,EAAEgG,UAAY/F,EAAE+F,UACrBhG,EAAE9H,OAAO,GACT+H,EAAE/H,OAAO,KACP6N,EAMJ,IAHA,IAAIE,EAAKhG,EAAEjZ,QACPkf,EAAKlG,EAAEhZ,SAEHgZ,EAAE3I,UAAU,CAClB,IAAK,IAAI1J,EAAI,EAAGwY,EAAK,EAAyB,IAArBnG,EAAEhM,MAAM,GAAKmS,IAAaxY,EAAI,KAAMA,EAAGwY,IAAO,GACvE,GAAIxY,EAAI,EAEN,IADAqS,EAAE9H,OAAOvK,GACFA,KAAM,IACPgY,EAAES,SAAWR,EAAEQ,WACjBT,EAAErL,KAAK2L,GACPL,EAAErL,KAAK2L,IAGTP,EAAEzN,OAAO,GACT0N,EAAE1N,OAAO,GAIb,IAAK,IAAItK,EAAI,EAAGyY,EAAK,EAAyB,IAArBpG,EAAEjM,MAAM,GAAKqS,IAAazY,EAAI,KAAMA,EAAGyY,IAAO,GACvE,GAAIzY,EAAI,EAEN,IADAqS,EAAE/H,OAAOtK,GACFA,KAAM,IACPiY,EAAEO,SAAWN,EAAEM,WACjBP,EAAEvL,KAAK2L,GACPH,EAAEvL,KAAK2L,IAGTL,EAAE3N,OAAO,GACT4N,EAAE5N,OAAO,GAIT8H,EAAEhL,IAAIiL,IAAM,GACdD,EAAEzF,KAAK0F,GACP0F,EAAEpL,KAAKsL,GACPD,EAAErL,KAAKuL,KAEP7F,EAAE1F,KAAKyF,GACP6F,EAAEtL,KAAKoL,GACPG,EAAEvL,KAAKqL,GAEX,CAEA,MAAO,CACLlP,EAAGmP,EACHlP,EAAGmP,EACHQ,IAAKrG,EAAEmD,OAAO2C,GAElB,EAKApS,EAAGtR,UAAUkkB,OAAS,SAAiBxU,GACrCvM,EAAsB,IAAfuM,EAAEgC,UACTvO,GAAQuM,EAAEsF,UAEV,IAAIX,EAAItU,KACJuU,EAAI5E,EAAE/K,QAGR0P,EADiB,IAAfA,EAAE3C,SACA2C,EAAE0O,KAAKrT,GAEP2E,EAAE1P,QAQR,IALA,IAuCIpC,EAvCA4hB,EAAK,IAAI7S,EAAG,GACZ8S,EAAK,IAAI9S,EAAG,GAEZ+S,EAAQ/P,EAAE3P,QAEP0P,EAAEiQ,KAAK,GAAK,GAAKhQ,EAAEgQ,KAAK,GAAK,GAAG,CACrC,IAAK,IAAIhZ,EAAI,EAAGwY,EAAK,EAAyB,IAArBzP,EAAE1C,MAAM,GAAKmS,IAAaxY,EAAI,KAAMA,EAAGwY,IAAO,GACvE,GAAIxY,EAAI,EAEN,IADA+I,EAAEwB,OAAOvK,GACFA,KAAM,GACP6Y,EAAGJ,SACLI,EAAGlM,KAAKoM,GAGVF,EAAGtO,OAAO,GAId,IAAK,IAAItK,EAAI,EAAGyY,EAAK,EAAyB,IAArB1P,EAAE3C,MAAM,GAAKqS,IAAazY,EAAI,KAAMA,EAAGyY,IAAO,GACvE,GAAIzY,EAAI,EAEN,IADA+I,EAAEuB,OAAOtK,GACFA,KAAM,GACP6Y,EAAGL,SACLK,EAAGnM,KAAKoM,GAGVD,EAAGvO,OAAO,GAIVxB,EAAE1B,IAAI2B,IAAM,GACdD,EAAE6D,KAAK5D,GACP6P,EAAGjM,KAAKkM,KAER9P,EAAE4D,KAAK7D,GACP+P,EAAGlM,KAAKiM,GAEZ,CAaA,OATE5hB,EADgB,IAAd8R,EAAEiQ,KAAK,GACHH,EAEAC,GAGAE,KAAK,GAAK,GAChB/hB,EAAI0V,KAAKvI,GAGJnN,CACT,EAEA+O,EAAGtR,UAAUikB,IAAM,SAAcpe,GAC/B,GAAI9F,KAAKiV,SAAU,OAAOnP,EAAI0Q,MAC9B,GAAI1Q,EAAImP,SAAU,OAAOjV,KAAKwW,MAE9B,IAAIlC,EAAItU,KAAK4E,QACT2P,EAAIzO,EAAIlB,QACZ0P,EAAE3C,SAAW,EACb4C,EAAE5C,SAAW,EAGb,IAAK,IAAI2Q,EAAQ,EAAGhO,EAAEsP,UAAYrP,EAAEqP,SAAUtB,IAC5ChO,EAAEwB,OAAO,GACTvB,EAAEuB,OAAO,GAGX,OAAG,CACD,KAAOxB,EAAEsP,UACPtP,EAAEwB,OAAO,GAEX,KAAOvB,EAAEqP,UACPrP,EAAEuB,OAAO,GAGX,IAAIzD,EAAIiC,EAAE1B,IAAI2B,GACd,GAAIlC,EAAI,EAAG,CAET,IAAI4D,EAAI3B,EACRA,EAAIC,EACJA,EAAI0B,CACN,MAAO,GAAU,IAAN5D,GAAyB,IAAdkC,EAAEgQ,KAAK,GAC3B,MAGFjQ,EAAE6D,KAAK5D,EACT,CAEA,OAAOA,EAAEyM,OAAOsB,EAClB,EAGA/Q,EAAGtR,UAAUukB,KAAO,SAAe1e,GACjC,OAAO9F,KAAKsjB,KAAKxd,GAAKwO,EAAE0O,KAAKld,EAC/B,EAEAyL,EAAGtR,UAAU2jB,OAAS,WACpB,OAA+B,IAAP,EAAhB5jB,KAAK4R,MAAM,GACrB,EAEAL,EAAGtR,UAAU+jB,MAAQ,WACnB,OAA+B,IAAP,EAAhBhkB,KAAK4R,MAAM,GACrB,EAGAL,EAAGtR,UAAU4V,MAAQ,SAAgB/P,GACnC,OAAO9F,KAAK4R,MAAM,GAAK9L,CACzB,EAGAyL,EAAGtR,UAAUwkB,MAAQ,SAAgBzM,GACnC5U,EAAsB,iBAAR4U,GACd,IAAI3F,EAAI2F,EAAM,GACV6G,GAAK7G,EAAM3F,GAAK,GAChBuD,EAAI,GAAKvD,EAGb,GAAIrS,KAAKsB,QAAUud,EAGjB,OAFA7e,KAAK8T,QAAQ+K,EAAI,GACjB7e,KAAK4R,MAAMiN,IAAMjJ,EACV5V,KAKT,IADA,IAAIyU,EAAQmB,EACHrK,EAAIsT,EAAa,IAAVpK,GAAelJ,EAAIvL,KAAKsB,OAAQiK,IAAK,CACnD,IAAI2H,EAAoB,EAAhBlT,KAAK4R,MAAMrG,GAEnBkJ,GADAvB,GAAKuB,KACS,GACdvB,GAAK,SACLlT,KAAK4R,MAAMrG,GAAK2H,CAClB,CAKA,OAJc,IAAVuB,IACFzU,KAAK4R,MAAMrG,GAAKkJ,EAChBzU,KAAKsB,UAEAtB,IACT,EAEAuR,EAAGtR,UAAUgV,OAAS,WACpB,OAAuB,IAAhBjV,KAAKsB,QAAkC,IAAlBtB,KAAK4R,MAAM,EACzC,EAEAL,EAAGtR,UAAUskB,KAAO,SAAeze,GACjC,IAOItD,EAPAmP,EAAW7L,EAAM,EAErB,GAAsB,IAAlB9F,KAAK2R,WAAmBA,EAAU,OAAQ,EAC9C,GAAsB,IAAlB3R,KAAK2R,UAAkBA,EAAU,OAAO,EAK5C,GAHA3R,KAAKoT,QAGDpT,KAAKsB,OAAS,EAChBkB,EAAM,MACD,CACDmP,IACF7L,GAAOA,GAGT1C,EAAO0C,GAAO,SAAW,qBAEzB,IAAIoN,EAAoB,EAAhBlT,KAAK4R,MAAM,GACnBpP,EAAM0Q,IAAMpN,EAAM,EAAIoN,EAAIpN,GAAO,EAAI,CACvC,CACA,OAAsB,IAAlB9F,KAAK2R,SAA8B,GAANnP,EAC1BA,CACT,EAMA+O,EAAGtR,UAAU2S,IAAM,SAAc9M,GAC/B,GAAsB,IAAlB9F,KAAK2R,UAAmC,IAAjB7L,EAAI6L,SAAgB,OAAQ,EACvD,GAAsB,IAAlB3R,KAAK2R,UAAmC,IAAjB7L,EAAI6L,SAAgB,OAAO,EAEtD,IAAInP,EAAMxC,KAAK0kB,KAAK5e,GACpB,OAAsB,IAAlB9F,KAAK2R,SAA8B,GAANnP,EAC1BA,CACT,EAGA+O,EAAGtR,UAAUykB,KAAO,SAAe5e,GAEjC,GAAI9F,KAAKsB,OAASwE,EAAIxE,OAAQ,OAAO,EACrC,GAAItB,KAAKsB,OAASwE,EAAIxE,OAAQ,OAAQ,EAGtC,IADA,IAAIkB,EAAM,EACD+I,EAAIvL,KAAKsB,OAAS,EAAGiK,GAAK,EAAGA,IAAK,CACzC,IAAI+I,EAAoB,EAAhBtU,KAAK4R,MAAMrG,GACfgJ,EAAmB,EAAfzO,EAAI8L,MAAMrG,GAElB,GAAI+I,IAAMC,EAAV,CACID,EAAIC,EACN/R,GAAO,EACE8R,EAAIC,IACb/R,EAAM,GAER,KANqB,CAOvB,CACA,OAAOA,CACT,EAEA+O,EAAGtR,UAAU0kB,IAAM,SAAc7e,GAC/B,OAA0B,IAAnB9F,KAAKukB,KAAKze,EACnB,EAEAyL,EAAGtR,UAAU2kB,GAAK,SAAa9e,GAC7B,OAAyB,IAAlB9F,KAAK4S,IAAI9M,EAClB,EAEAyL,EAAGtR,UAAU4kB,KAAO,SAAe/e,GACjC,OAAO9F,KAAKukB,KAAKze,IAAQ,CAC3B,EAEAyL,EAAGtR,UAAU6kB,IAAM,SAAchf,GAC/B,OAAO9F,KAAK4S,IAAI9M,IAAQ,CAC1B,EAEAyL,EAAGtR,UAAU8kB,IAAM,SAAcjf,GAC/B,OAA2B,IAApB9F,KAAKukB,KAAKze,EACnB,EAEAyL,EAAGtR,UAAU+kB,GAAK,SAAalf,GAC7B,OAA0B,IAAnB9F,KAAK4S,IAAI9M,EAClB,EAEAyL,EAAGtR,UAAUglB,KAAO,SAAenf,GACjC,OAAO9F,KAAKukB,KAAKze,IAAQ,CAC3B,EAEAyL,EAAGtR,UAAUilB,IAAM,SAAcpf,GAC/B,OAAO9F,KAAK4S,IAAI9M,IAAQ,CAC1B,EAEAyL,EAAGtR,UAAUklB,IAAM,SAAcrf,GAC/B,OAA0B,IAAnB9F,KAAKukB,KAAKze,EACnB,EAEAyL,EAAGtR,UAAUmlB,GAAK,SAAatf,GAC7B,OAAyB,IAAlB9F,KAAK4S,IAAI9M,EAClB,EAMAyL,EAAGM,IAAM,SAAc/L,GACrB,OAAO,IAAIuf,EAAIvf,EACjB,EAEAyL,EAAGtR,UAAUqlB,MAAQ,SAAgBC,GAGnC,OAFAniB,GAAQpD,KAAK6R,IAAK,yCAClBzO,EAAyB,IAAlBpD,KAAK2R,SAAgB,iCACrB4T,EAAIC,UAAUxlB,MAAMylB,UAAUF,EACvC,EAEAhU,EAAGtR,UAAUylB,QAAU,WAErB,OADAtiB,EAAOpD,KAAK6R,IAAK,wDACV7R,KAAK6R,IAAI8T,YAAY3lB,KAC9B,EAEAuR,EAAGtR,UAAUwlB,UAAY,SAAoBF,GAE3C,OADAvlB,KAAK6R,IAAM0T,EACJvlB,IACT,EAEAuR,EAAGtR,UAAU2lB,SAAW,SAAmBL,GAEzC,OADAniB,GAAQpD,KAAK6R,IAAK,yCACX7R,KAAKylB,UAAUF,EACxB,EAEAhU,EAAGtR,UAAU4lB,OAAS,SAAiB/f,GAErC,OADA1C,EAAOpD,KAAK6R,IAAK,sCACV7R,KAAK6R,IAAIuG,IAAIpY,KAAM8F,EAC5B,EAEAyL,EAAGtR,UAAU6lB,QAAU,SAAkBhgB,GAEvC,OADA1C,EAAOpD,KAAK6R,IAAK,uCACV7R,KAAK6R,IAAIqG,KAAKlY,KAAM8F,EAC7B,EAEAyL,EAAGtR,UAAU8lB,OAAS,SAAiBjgB,GAErC,OADA1C,EAAOpD,KAAK6R,IAAK,sCACV7R,KAAK6R,IAAIwG,IAAIrY,KAAM8F,EAC5B,EAEAyL,EAAGtR,UAAU+lB,QAAU,SAAkBlgB,GAEvC,OADA1C,EAAOpD,KAAK6R,IAAK,uCACV7R,KAAK6R,IAAIsG,KAAKnY,KAAM8F,EAC7B,EAEAyL,EAAGtR,UAAUgmB,OAAS,SAAiBngB,GAErC,OADA1C,EAAOpD,KAAK6R,IAAK,sCACV7R,KAAK6R,IAAIqU,IAAIlmB,KAAM8F,EAC5B,EAEAyL,EAAGtR,UAAUkmB,OAAS,SAAiBrgB,GAGrC,OAFA1C,EAAOpD,KAAK6R,IAAK,sCACjB7R,KAAK6R,IAAIuU,SAASpmB,KAAM8F,GACjB9F,KAAK6R,IAAIU,IAAIvS,KAAM8F,EAC5B,EAEAyL,EAAGtR,UAAUomB,QAAU,SAAkBvgB,GAGvC,OAFA1C,EAAOpD,KAAK6R,IAAK,sCACjB7R,KAAK6R,IAAIuU,SAASpmB,KAAM8F,GACjB9F,KAAK6R,IAAIyK,KAAKtc,KAAM8F,EAC7B,EAEAyL,EAAGtR,UAAUqmB,OAAS,WAGpB,OAFAljB,EAAOpD,KAAK6R,IAAK,sCACjB7R,KAAK6R,IAAI0U,SAASvmB,MACXA,KAAK6R,IAAIgP,IAAI7gB,KACtB,EAEAuR,EAAGtR,UAAUumB,QAAU,WAGrB,OAFApjB,EAAOpD,KAAK6R,IAAK,uCACjB7R,KAAK6R,IAAI0U,SAASvmB,MACXA,KAAK6R,IAAIiP,KAAK9gB,KACvB,EAGAuR,EAAGtR,UAAUwmB,QAAU,WAGrB,OAFArjB,EAAOpD,KAAK6R,IAAK,uCACjB7R,KAAK6R,IAAI0U,SAASvmB,MACXA,KAAK6R,IAAI6U,KAAK1mB,KACvB,EAEAuR,EAAGtR,UAAU0mB,QAAU,WAGrB,OAFAvjB,EAAOpD,KAAK6R,IAAK,uCACjB7R,KAAK6R,IAAI0U,SAASvmB,MACXA,KAAK6R,IAAI2S,KAAKxkB,KACvB,EAGAuR,EAAGtR,UAAU2mB,OAAS,WAGpB,OAFAxjB,EAAOpD,KAAK6R,IAAK,sCACjB7R,KAAK6R,IAAI0U,SAASvmB,MACXA,KAAK6R,IAAImF,IAAIhX,KACtB,EAEAuR,EAAGtR,UAAU4mB,OAAS,SAAiB/gB,GAGrC,OAFA1C,EAAOpD,KAAK6R,MAAQ/L,EAAI+L,IAAK,qBAC7B7R,KAAK6R,IAAI0U,SAASvmB,MACXA,KAAK6R,IAAI+B,IAAI5T,KAAM8F,EAC5B,EAGA,IAAIghB,EAAS,CACXC,KAAM,KACNC,KAAM,KACNC,KAAM,KACNC,OAAQ,MAIV,SAASC,EAAQrnB,EAAM6P,GAErB3P,KAAKF,KAAOA,EACZE,KAAK2P,EAAI,IAAI4B,EAAG5B,EAAG,IACnB3P,KAAK0f,EAAI1f,KAAK2P,EAAEwG,YAChBnW,KAAK0U,EAAI,IAAInD,EAAG,GAAGyP,OAAOhhB,KAAK0f,GAAGvH,KAAKnY,KAAK2P,GAE5C3P,KAAK4M,IAAM5M,KAAKonB,MAClB,CAgDA,SAASC,IACPF,EAAO5mB,KACLP,KACA,OACA,0EACJ,CA8DA,SAASsnB,IACPH,EAAO5mB,KACLP,KACA,OACA,iEACJ,CAGA,SAASunB,IACPJ,EAAO5mB,KACLP,KACA,OACA,wDACJ,CAGA,SAASwnB,IAEPL,EAAO5mB,KACLP,KACA,QACA,sEACJ,CA6CA,SAASqlB,EAAK1F,GACZ,GAAiB,iBAANA,EAAgB,CACzB,IAAI8H,EAAQlW,EAAGmW,OAAO/H,GACtB3f,KAAK2f,EAAI8H,EAAM9X,EACf3P,KAAKynB,MAAQA,CACf,MACErkB,EAAOuc,EAAEgF,IAAI,GAAI,kCACjB3kB,KAAK2f,EAAIA,EACT3f,KAAKynB,MAAQ,IAEjB,CAgOA,SAASE,EAAMhI,GACb0F,EAAI9kB,KAAKP,KAAM2f,GAEf3f,KAAKsiB,MAAQtiB,KAAK2f,EAAExJ,YAChBnW,KAAKsiB,MAAQ,IAAO,IACtBtiB,KAAKsiB,OAAS,GAAMtiB,KAAKsiB,MAAQ,IAGnCtiB,KAAKqS,EAAI,IAAId,EAAG,GAAGyP,OAAOhhB,KAAKsiB,OAC/BtiB,KAAKojB,GAAKpjB,KAAK4nB,KAAK5nB,KAAKqS,EAAEwO,OAC3B7gB,KAAK6nB,KAAO7nB,KAAKqS,EAAE8R,OAAOnkB,KAAK2f,GAE/B3f,KAAK8nB,KAAO9nB,KAAK6nB,KAAKtV,IAAIvS,KAAKqS,GAAG4P,MAAM,GAAGW,IAAI5iB,KAAK2f,GACpD3f,KAAK8nB,KAAO9nB,KAAK8nB,KAAK9E,KAAKhjB,KAAKqS,GAChCrS,KAAK8nB,KAAO9nB,KAAKqS,EAAEgG,IAAIrY,KAAK8nB,KAC9B,CA7aAX,EAAOlnB,UAAUmnB,KAAO,WACtB,IAAIxa,EAAM,IAAI2E,EAAG,MAEjB,OADA3E,EAAIgF,MAAQ,IAAIlQ,MAAM8Q,KAAKS,KAAKjT,KAAK0f,EAAI,KAClC9S,CACT,EAEAua,EAAOlnB,UAAU8nB,QAAU,SAAkBjiB,GAG3C,IACIkiB,EADA3V,EAAIvM,EAGR,GACE9F,KAAKwN,MAAM6E,EAAGrS,KAAK4M,KAGnBob,GADA3V,GADAA,EAAIrS,KAAKioB,MAAM5V,IACT6F,KAAKlY,KAAK4M,MACPuJ,kBACF6R,EAAOhoB,KAAK0f,GAErB,IAAI9M,EAAMoV,EAAOhoB,KAAK0f,GAAK,EAAIrN,EAAEqS,KAAK1kB,KAAK2P,GAgB3C,OAfY,IAARiD,GACFP,EAAET,MAAM,GAAK,EACbS,EAAE/Q,OAAS,GACFsR,EAAM,EACfP,EAAE8F,KAAKnY,KAAK2P,QAEIrH,IAAZ+J,EAAEe,MAEJf,EAAEe,QAGFf,EAAE6V,SAIC7V,CACT,EAEA8U,EAAOlnB,UAAUuN,MAAQ,SAAgBvH,EAAOnD,GAC9CmD,EAAM6P,OAAO9V,KAAK0f,EAAG,EAAG5c,EAC1B,EAEAqkB,EAAOlnB,UAAUgoB,MAAQ,SAAgBniB,GACvC,OAAOA,EAAIwW,KAAKtc,KAAK0U,EACvB,EAQA9U,EAASynB,EAAMF,GAEfE,EAAKpnB,UAAUuN,MAAQ,SAAgBvH,EAAOiL,GAK5C,IAHA,IAAIsQ,EAAO,QAEP2G,EAAS3V,KAAKvF,IAAIhH,EAAM3E,OAAQ,GAC3BiK,EAAI,EAAGA,EAAI4c,EAAQ5c,IAC1B2F,EAAOU,MAAMrG,GAAKtF,EAAM2L,MAAMrG,GAIhC,GAFA2F,EAAO5P,OAAS6mB,EAEZliB,EAAM3E,QAAU,EAGlB,OAFA2E,EAAM2L,MAAM,GAAK,OACjB3L,EAAM3E,OAAS,GAKjB,IAAIyI,EAAO9D,EAAM2L,MAAM,GAGvB,IAFAV,EAAOU,MAAMV,EAAO5P,UAAYyI,EAAOyX,EAElCjW,EAAI,GAAIA,EAAItF,EAAM3E,OAAQiK,IAAK,CAClC,IAAI6c,EAAwB,EAAjBniB,EAAM2L,MAAMrG,GACvBtF,EAAM2L,MAAMrG,EAAI,KAAQ6c,EAAO5G,IAAS,EAAMzX,IAAS,GACvDA,EAAOqe,CACT,CACAre,KAAU,GACV9D,EAAM2L,MAAMrG,EAAI,IAAMxB,EACT,IAATA,GAAc9D,EAAM3E,OAAS,GAC/B2E,EAAM3E,QAAU,GAEhB2E,EAAM3E,QAAU,CAEpB,EAEA+lB,EAAKpnB,UAAUgoB,MAAQ,SAAgBniB,GAErCA,EAAI8L,MAAM9L,EAAIxE,QAAU,EACxBwE,EAAI8L,MAAM9L,EAAIxE,OAAS,GAAK,EAC5BwE,EAAIxE,QAAU,EAId,IADA,IAAIkT,EAAK,EACAjJ,EAAI,EAAGA,EAAIzF,EAAIxE,OAAQiK,IAAK,CACnC,IAAI2H,EAAmB,EAAfpN,EAAI8L,MAAMrG,GAClBiJ,GAAU,IAAJtB,EACNpN,EAAI8L,MAAMrG,GAAU,SAALiJ,EACfA,EAAS,GAAJtB,GAAasB,EAAK,SAAa,EACtC,CASA,OANkC,IAA9B1O,EAAI8L,MAAM9L,EAAIxE,OAAS,KACzBwE,EAAIxE,SAC8B,IAA9BwE,EAAI8L,MAAM9L,EAAIxE,OAAS,IACzBwE,EAAIxE,UAGDwE,CACT,EAQAlG,EAAS0nB,EAAMH,GAQfvnB,EAAS2nB,EAAMJ,GASfvnB,EAAS4nB,EAAQL,GAEjBK,EAAOvnB,UAAUgoB,MAAQ,SAAgBniB,GAGvC,IADA,IAAI2O,EAAQ,EACHlJ,EAAI,EAAGA,EAAIzF,EAAIxE,OAAQiK,IAAK,CACnC,IAAI6K,EAA0B,IAAL,EAAftQ,EAAI8L,MAAMrG,IAAiBkJ,EACjCD,EAAU,SAAL4B,EACTA,KAAQ,GAERtQ,EAAI8L,MAAMrG,GAAKiJ,EACfC,EAAQ2B,CACV,CAIA,OAHc,IAAV3B,IACF3O,EAAI8L,MAAM9L,EAAIxE,UAAYmT,GAErB3O,CACT,EAGAyL,EAAGmW,OAAS,SAAgB5nB,GAE1B,GAAIgnB,EAAOhnB,GAAO,OAAOgnB,EAAOhnB,GAEhC,IAAI2nB,EACJ,GAAa,SAAT3nB,EACF2nB,EAAQ,IAAIJ,OACP,GAAa,SAATvnB,EACT2nB,EAAQ,IAAIH,OACP,GAAa,SAATxnB,EACT2nB,EAAQ,IAAIF,MACP,IAAa,WAATznB,EAGT,MAAM,IAAI6F,MAAM,iBAAmB7F,GAFnC2nB,EAAQ,IAAID,CAGd,CAGA,OAFAV,EAAOhnB,GAAQ2nB,EAERA,CACT,EAiBApC,EAAIplB,UAAUsmB,SAAW,SAAmBjS,GAC1ClR,EAAsB,IAAfkR,EAAE3C,SAAgB,iCACzBvO,EAAOkR,EAAEzC,IAAK,kCAChB,EAEAwT,EAAIplB,UAAUmmB,SAAW,SAAmB9R,EAAGC,GAC7CnR,EAAqC,IAA7BkR,EAAE3C,SAAW4C,EAAE5C,UAAiB,iCACxCvO,EAAOkR,EAAEzC,KAAOyC,EAAEzC,MAAQ0C,EAAE1C,IAC1B,kCACJ,EAEAwT,EAAIplB,UAAU2nB,KAAO,SAAetT,GAClC,OAAItU,KAAKynB,MAAcznB,KAAKynB,MAAMM,QAAQzT,GAAGmR,UAAUzlB,MAChDsU,EAAE0O,KAAKhjB,KAAK2f,GAAG8F,UAAUzlB,KAClC,EAEAqlB,EAAIplB,UAAU+W,IAAM,SAAc1C,GAChC,OAAIA,EAAEW,SACGX,EAAE1P,QAGJ5E,KAAK2f,EAAEtH,IAAI/D,GAAGmR,UAAUzlB,KACjC,EAEAqlB,EAAIplB,UAAUmY,IAAM,SAAc9D,EAAGC,GACnCvU,KAAKomB,SAAS9R,EAAGC,GAEjB,IAAI/R,EAAM8R,EAAE8D,IAAI7D,GAIhB,OAHI/R,EAAIoQ,IAAI5S,KAAK2f,IAAM,GACrBnd,EAAI2V,KAAKnY,KAAK2f,GAETnd,EAAIijB,UAAUzlB,KACvB,EAEAqlB,EAAIplB,UAAUiY,KAAO,SAAe5D,EAAGC,GACrCvU,KAAKomB,SAAS9R,EAAGC,GAEjB,IAAI/R,EAAM8R,EAAE4D,KAAK3D,GAIjB,OAHI/R,EAAIoQ,IAAI5S,KAAK2f,IAAM,GACrBnd,EAAI2V,KAAKnY,KAAK2f,GAETnd,CACT,EAEA6iB,EAAIplB,UAAUoY,IAAM,SAAc/D,EAAGC,GACnCvU,KAAKomB,SAAS9R,EAAGC,GAEjB,IAAI/R,EAAM8R,EAAE+D,IAAI9D,GAIhB,OAHI/R,EAAI+hB,KAAK,GAAK,GAChB/hB,EAAI0V,KAAKlY,KAAK2f,GAETnd,EAAIijB,UAAUzlB,KACvB,EAEAqlB,EAAIplB,UAAUkY,KAAO,SAAe7D,EAAGC,GACrCvU,KAAKomB,SAAS9R,EAAGC,GAEjB,IAAI/R,EAAM8R,EAAE6D,KAAK5D,GAIjB,OAHI/R,EAAI+hB,KAAK,GAAK,GAChB/hB,EAAI0V,KAAKlY,KAAK2f,GAETnd,CACT,EAEA6iB,EAAIplB,UAAUimB,IAAM,SAAc5R,EAAGxO,GAEnC,OADA9F,KAAKumB,SAASjS,GACPtU,KAAK4nB,KAAKtT,EAAEsN,MAAM9b,GAC3B,EAEAuf,EAAIplB,UAAUqc,KAAO,SAAehI,EAAGC,GAErC,OADAvU,KAAKomB,SAAS9R,EAAGC,GACVvU,KAAK4nB,KAAKtT,EAAEgI,KAAK/H,GAC1B,EAEA8Q,EAAIplB,UAAUsS,IAAM,SAAc+B,EAAGC,GAEnC,OADAvU,KAAKomB,SAAS9R,EAAGC,GACVvU,KAAK4nB,KAAKtT,EAAE/B,IAAIgC,GACzB,EAEA8Q,EAAIplB,UAAU6gB,KAAO,SAAexM,GAClC,OAAOtU,KAAKsc,KAAKhI,EAAGA,EAAE1P,QACxB,EAEAygB,EAAIplB,UAAU4gB,IAAM,SAAcvM,GAChC,OAAOtU,KAAKuS,IAAI+B,EAAGA,EACrB,EAEA+Q,EAAIplB,UAAUymB,KAAO,SAAepS,GAClC,GAAIA,EAAEW,SAAU,OAAOX,EAAE1P,QAEzB,IAAIyjB,EAAOroB,KAAK2f,EAAE9J,MAAM,GAIxB,GAHAzS,EAAOilB,EAAO,GAAM,GAGP,IAATA,EAAY,CACd,IAAIzU,EAAM5T,KAAK2f,EAAEvH,IAAI,IAAI7G,EAAG,IAAIuE,OAAO,GACvC,OAAO9V,KAAK4T,IAAIU,EAAGV,EACrB,CAOA,IAFA,IAAIgC,EAAI5V,KAAK2f,EAAEwC,KAAK,GAChBtD,EAAI,GACAjJ,EAAEX,UAA2B,IAAfW,EAAEC,MAAM,IAC5BgJ,IACAjJ,EAAEE,OAAO,GAEX1S,GAAQwS,EAAEX,UAEV,IAAIqT,EAAM,IAAI/W,EAAG,GAAG+T,MAAMtlB,MACtBuoB,EAAOD,EAAI1B,SAIX4B,EAAOxoB,KAAK2f,EAAEwC,KAAK,GAAGrM,OAAO,GAC7B2S,EAAIzoB,KAAK2f,EAAExJ,YAGf,IAFAsS,EAAI,IAAIlX,EAAG,EAAIkX,EAAIA,GAAGnD,MAAMtlB,MAEW,IAAhCA,KAAK4T,IAAI6U,EAAGD,GAAM5V,IAAI2V,IAC3BE,EAAE3C,QAAQyC,GAOZ,IAJA,IAAIrW,EAAIlS,KAAK4T,IAAI6U,EAAG7S,GAChBvD,EAAIrS,KAAK4T,IAAIU,EAAGsB,EAAEsM,KAAK,GAAGpM,OAAO,IACjCG,EAAIjW,KAAK4T,IAAIU,EAAGsB,GAChB+J,EAAId,EACc,IAAf5I,EAAErD,IAAI0V,IAAY,CAEvB,IADA,IAAI1b,EAAMqJ,EACD1K,EAAI,EAAoB,IAAjBqB,EAAIgG,IAAI0V,GAAY/c,IAClCqB,EAAMA,EAAI0Z,SAEZljB,EAAOmI,EAAIoU,GACX,IAAIpL,EAAIvU,KAAK4T,IAAI1B,EAAG,IAAIX,EAAG,GAAGyP,OAAOrB,EAAIpU,EAAI,IAE7C8G,EAAIA,EAAE8T,OAAO5R,GACbrC,EAAIqC,EAAE+R,SACNrQ,EAAIA,EAAEkQ,OAAOjU,GACbyN,EAAIpU,CACN,CAEA,OAAO8G,CACT,EAEAgT,EAAIplB,UAAUukB,KAAO,SAAelQ,GAClC,IAAIoU,EAAMpU,EAAE6P,OAAOnkB,KAAK2f,GACxB,OAAqB,IAAjB+I,EAAI/W,UACN+W,EAAI/W,SAAW,EACR3R,KAAK4nB,KAAKc,GAAK9B,UAEf5mB,KAAK4nB,KAAKc,EAErB,EAEArD,EAAIplB,UAAU2T,IAAM,SAAcU,EAAGxO,GACnC,GAAIA,EAAImP,SAAU,OAAO,IAAI1D,EAAG,GAAG+T,MAAMtlB,MACzC,GAAoB,IAAhB8F,EAAIye,KAAK,GAAU,OAAOjQ,EAAE1P,QAEhC,IACI+jB,EAAM,IAAIjnB,MAAM,IACpBinB,EAAI,GAAK,IAAIpX,EAAG,GAAG+T,MAAMtlB,MACzB2oB,EAAI,GAAKrU,EACT,IAAK,IAAI/I,EAAI,EAAGA,EAAIod,EAAIrnB,OAAQiK,IAC9Bod,EAAIpd,GAAKvL,KAAKuS,IAAIoW,EAAIpd,EAAI,GAAI+I,GAGhC,IAAI9R,EAAMmmB,EAAI,GACVC,EAAU,EACVC,EAAa,EACb9hB,EAAQjB,EAAIqQ,YAAc,GAK9B,IAJc,IAAVpP,IACFA,EAAQ,IAGLwE,EAAIzF,EAAIxE,OAAS,EAAGiK,GAAK,EAAGA,IAAK,CAEpC,IADA,IAAIkI,EAAO3N,EAAI8L,MAAMrG,GACZC,EAAIzE,EAAQ,EAAGyE,GAAK,EAAGA,IAAK,CACnC,IAAIwM,EAAOvE,GAAQjI,EAAK,EACpBhJ,IAAQmmB,EAAI,KACdnmB,EAAMxC,KAAK6gB,IAAIre,IAGL,IAARwV,GAAyB,IAAZ4Q,GAKjBA,IAAY,EACZA,GAAW5Q,GA9BE,KA+Bb6Q,GACwC,IAANtd,GAAiB,IAANC,KAE7ChJ,EAAMxC,KAAKuS,IAAI/P,EAAKmmB,EAAIC,IACxBC,EAAa,EACbD,EAAU,IAXRC,EAAa,CAYjB,CACA9hB,EAAQ,EACV,CAEA,OAAOvE,CACT,EAEA6iB,EAAIplB,UAAUulB,UAAY,SAAoB1f,GAC5C,IAAIuM,EAAIvM,EAAIkd,KAAKhjB,KAAK2f,GAEtB,OAAOtN,IAAMvM,EAAMuM,EAAEzN,QAAUyN,CACjC,EAEAgT,EAAIplB,UAAU0lB,YAAc,SAAsB7f,GAChD,IAAItD,EAAMsD,EAAIlB,QAEd,OADApC,EAAIqP,IAAM,KACHrP,CACT,EAMA+O,EAAGuX,KAAO,SAAehjB,GACvB,OAAO,IAAI6hB,EAAK7hB,EAClB,EAkBAlG,EAAS+nB,EAAMtC,GAEfsC,EAAK1nB,UAAUulB,UAAY,SAAoB1f,GAC7C,OAAO9F,KAAK4nB,KAAK9hB,EAAI8b,MAAM5hB,KAAKsiB,OAClC,EAEAqF,EAAK1nB,UAAU0lB,YAAc,SAAsB7f,GACjD,IAAIuM,EAAIrS,KAAK4nB,KAAK9hB,EAAIyM,IAAIvS,KAAK6nB,OAE/B,OADAxV,EAAER,IAAM,KACDQ,CACT,EAEAsV,EAAK1nB,UAAUqc,KAAO,SAAehI,EAAGC,GACtC,GAAID,EAAEW,UAAYV,EAAEU,SAGlB,OAFAX,EAAE1C,MAAM,GAAK,EACb0C,EAAEhT,OAAS,EACJgT,EAGT,IAAI2B,EAAI3B,EAAEgI,KAAK/H,GACXrC,EAAI+D,EAAE+L,MAAMhiB,KAAKsiB,OAAO/P,IAAIvS,KAAK8nB,MAAM/F,OAAO/hB,KAAKsiB,OAAO/P,IAAIvS,KAAK2f,GACnEoJ,EAAI9S,EAAEkC,KAAKjG,GAAG4D,OAAO9V,KAAKsiB,OAC1B9f,EAAMumB,EAQV,OANIA,EAAEnW,IAAI5S,KAAK2f,IAAM,EACnBnd,EAAMumB,EAAE5Q,KAAKnY,KAAK2f,GACToJ,EAAExE,KAAK,GAAK,IACrB/hB,EAAMumB,EAAE7Q,KAAKlY,KAAK2f,IAGbnd,EAAIijB,UAAUzlB,KACvB,EAEA2nB,EAAK1nB,UAAUsS,IAAM,SAAc+B,EAAGC,GACpC,GAAID,EAAEW,UAAYV,EAAEU,SAAU,OAAO,IAAI1D,EAAG,GAAGkU,UAAUzlB,MAEzD,IAAIiW,EAAI3B,EAAE/B,IAAIgC,GACVrC,EAAI+D,EAAE+L,MAAMhiB,KAAKsiB,OAAO/P,IAAIvS,KAAK8nB,MAAM/F,OAAO/hB,KAAKsiB,OAAO/P,IAAIvS,KAAK2f,GACnEoJ,EAAI9S,EAAEkC,KAAKjG,GAAG4D,OAAO9V,KAAKsiB,OAC1B9f,EAAMumB,EAOV,OANIA,EAAEnW,IAAI5S,KAAK2f,IAAM,EACnBnd,EAAMumB,EAAE5Q,KAAKnY,KAAK2f,GACToJ,EAAExE,KAAK,GAAK,IACrB/hB,EAAMumB,EAAE7Q,KAAKlY,KAAK2f,IAGbnd,EAAIijB,UAAUzlB,KACvB,EAEA2nB,EAAK1nB,UAAUukB,KAAO,SAAelQ,GAGnC,OADUtU,KAAK4nB,KAAKtT,EAAE6P,OAAOnkB,KAAK2f,GAAGpN,IAAIvS,KAAKojB,KACnCqC,UAAUzlB,KACvB,CACD,CAr3GD,C,WAq3G4CA,K,kBCr3G5C,IAAIqS,EASJ,SAAS2W,EAAKC,GACZjpB,KAAKipB,KAAOA,CACd,CAkBA,GA3BAvkB,EAAOrF,QAAU,SAAciM,GAI7B,OAHK+G,IACHA,EAAI,IAAI2W,EAAK,OAER3W,EAAE6W,SAAS5d,EACpB,EAKA5G,EAAOrF,QAAQ2pB,KAAOA,EAEtBA,EAAK/oB,UAAUipB,SAAW,SAAkB5d,GAC1C,OAAOtL,KAAKmpB,MAAM7d,EACpB,EAGA0d,EAAK/oB,UAAUkpB,MAAQ,SAAezJ,GACpC,GAAI1f,KAAKipB,KAAKG,SACZ,OAAOppB,KAAKipB,KAAKG,SAAS1J,GAG5B,IADA,IAAIld,EAAM,IAAIuO,WAAW2O,GAChBnU,EAAI,EAAGA,EAAI/I,EAAIlB,OAAQiK,IAC9B/I,EAAI+I,GAAKvL,KAAKipB,KAAKI,UACrB,OAAO7mB,CACT,EAEoB,iBAAT6R,KACLA,KAAKiV,QAAUjV,KAAKiV,OAAOC,gBAE7BP,EAAK/oB,UAAUkpB,MAAQ,SAAezJ,GACpC,IAAIxP,EAAM,IAAIa,WAAW2O,GAEzB,OADArL,KAAKiV,OAAOC,gBAAgBrZ,GACrBA,CACT,EACSmE,KAAKmV,UAAYnV,KAAKmV,SAASD,gBAExCP,EAAK/oB,UAAUkpB,MAAQ,SAAezJ,GACpC,IAAIxP,EAAM,IAAIa,WAAW2O,GAEzB,OADArL,KAAKmV,SAASD,gBAAgBrZ,GACvBA,CACT,EAG2B,iBAAX6B,SAEhBiX,EAAK/oB,UAAUkpB,MAAQ,WACrB,MAAM,IAAIxjB,MAAM,sBAClB,QAIF,IACE,IAAI2jB,EAAS,EAAQ,OACrB,GAAkC,mBAAvBA,EAAOG,YAChB,MAAM,IAAI9jB,MAAM,iBAElBqjB,EAAK/oB,UAAUkpB,MAAQ,SAAezJ,GACpC,OAAO4J,EAAOG,YAAY/J,EAC5B,CACF,CAAE,MAAO9Y,GACT,C,kBC1DF,IAAI1F,EAAS,gBAEb,SAASwoB,EAAexe,GACjBhK,EAAOE,SAAS8J,KAAMA,EAAMhK,EAAO6M,KAAK7C,IAK7C,IAHA,IAAII,EAAOJ,EAAI5J,OAAS,EAAK,EACzBwB,EAAM,IAAIpB,MAAM4J,GAEXC,EAAI,EAAGA,EAAID,EAAKC,IACvBzI,EAAIyI,GAAKL,EAAIye,aAAiB,EAAJpe,GAG5B,OAAOzI,CACT,CAEA,SAAS8mB,EAAUC,GACjB,KAAa,EAAOA,EAAEvoB,OAAQuoB,IAC5BA,EADW,GACJ,CAEX,CAEA,SAASC,EAAYC,EAAGC,EAAaC,EAASC,EAAMC,GAalD,IAZA,IASIC,EAAIC,EAAIC,EAAIC,EATZC,EAAWP,EAAQ,GACnBQ,EAAWR,EAAQ,GACnBS,EAAWT,EAAQ,GACnBU,EAAWV,EAAQ,GAEnBW,EAAKb,EAAE,GAAKC,EAAY,GACxBa,EAAKd,EAAE,GAAKC,EAAY,GACxBc,EAAKf,EAAE,GAAKC,EAAY,GACxBe,EAAKhB,EAAE,GAAKC,EAAY,GAExBgB,EAAQ,EAEHhL,EAAQ,EAAGA,EAAQmK,EAASnK,IACnCoK,EAAKI,EAASI,IAAO,IAAMH,EAAUI,IAAO,GAAM,KAAQH,EAAUI,IAAO,EAAK,KAAQH,EAAc,IAALI,GAAaf,EAAYgB,KAC1HX,EAAKG,EAASK,IAAO,IAAMJ,EAAUK,IAAO,GAAM,KAAQJ,EAAUK,IAAO,EAAK,KAAQJ,EAAc,IAALC,GAAaZ,EAAYgB,KAC1HV,EAAKE,EAASM,IAAO,IAAML,EAAUM,IAAO,GAAM,KAAQL,EAAUE,IAAO,EAAK,KAAQD,EAAc,IAALE,GAAab,EAAYgB,KAC1HT,EAAKC,EAASO,IAAO,IAAMN,EAAUG,IAAO,GAAM,KAAQF,EAAUG,IAAO,EAAK,KAAQF,EAAc,IAALG,GAAad,EAAYgB,KAC1HJ,EAAKR,EACLS,EAAKR,EACLS,EAAKR,EACLS,EAAKR,EAYP,OATAH,GAAOF,EAAKU,IAAO,KAAO,GAAOV,EAAMW,IAAO,GAAM,MAAS,GAAOX,EAAMY,IAAO,EAAK,MAAS,EAAKZ,EAAU,IAALa,IAAcf,EAAYgB,KACnIX,GAAOH,EAAKW,IAAO,KAAO,GAAOX,EAAMY,IAAO,GAAM,MAAS,GAAOZ,EAAMa,IAAO,EAAK,MAAS,EAAKb,EAAU,IAALU,IAAcZ,EAAYgB,KACnIV,GAAOJ,EAAKY,IAAO,KAAO,GAAOZ,EAAMa,IAAO,GAAM,MAAS,GAAOb,EAAMU,IAAO,EAAK,MAAS,EAAKV,EAAU,IAALW,IAAcb,EAAYgB,KACnIT,GAAOL,EAAKa,IAAO,KAAO,GAAOb,EAAMU,IAAO,GAAM,MAAS,GAAOV,EAAMW,IAAO,EAAK,MAAS,EAAKX,EAAU,IAALY,IAAcd,EAAYgB,KAM5H,CALPZ,KAAY,EACZC,KAAY,EACZC,KAAY,EACZC,KAAY,EAGd,CAGA,IAAIU,EAAO,CAAC,EAAM,EAAM,EAAM,EAAM,EAAM,GAAM,GAAM,GAAM,IAAM,GAAM,IACpEC,EAAI,WAGN,IADA,IAAIC,EAAI,IAAIzpB,MAAM,KACT8J,EAAI,EAAGA,EAAI,IAAKA,IAErB2f,EAAE3f,GADAA,EAAI,IACCA,GAAK,EAEJA,GAAK,EAAK,IAYtB,IARA,IAAI0e,EAAO,GACPkB,EAAW,GACXnB,EAAU,CAAC,GAAI,GAAI,GAAI,IACvBoB,EAAc,CAAC,GAAI,GAAI,GAAI,IAG3BzN,EAAI,EACJ0N,EAAK,EACA/f,EAAI,EAAGA,EAAI,MAAOA,EAAG,CAE5B,IAAIggB,EAAKD,EAAMA,GAAM,EAAMA,GAAM,EAAMA,GAAM,EAAMA,GAAM,EACzDC,EAAMA,IAAO,EAAW,IAALA,EAAa,GAChCrB,EAAKtM,GAAK2N,EACVH,EAASG,GAAM3N,EAGf,IAAIyG,EAAK8G,EAAEvN,GACP4N,EAAKL,EAAE9G,GACPoH,EAAKN,EAAEK,GAGPvV,EAAa,IAARkV,EAAEI,GAAqB,SAALA,EAC3BtB,EAAQ,GAAGrM,GAAM3H,GAAK,GAAOA,IAAM,EACnCgU,EAAQ,GAAGrM,GAAM3H,GAAK,GAAOA,IAAM,GACnCgU,EAAQ,GAAGrM,GAAM3H,GAAK,EAAMA,IAAM,GAClCgU,EAAQ,GAAGrM,GAAK3H,EAGhBA,EAAU,SAALwV,EAAwB,MAALD,EAAsB,IAALnH,EAAmB,SAAJzG,EACxDyN,EAAY,GAAGE,GAAOtV,GAAK,GAAOA,IAAM,EACxCoV,EAAY,GAAGE,GAAOtV,GAAK,GAAOA,IAAM,GACxCoV,EAAY,GAAGE,GAAOtV,GAAK,EAAMA,IAAM,GACvCoV,EAAY,GAAGE,GAAMtV,EAEX,IAAN2H,EACFA,EAAI0N,EAAK,GAET1N,EAAIyG,EAAK8G,EAAEA,EAAEA,EAAEM,EAAKpH,KACpBiH,GAAMH,EAAEA,EAAEG,IAEd,CAEA,MAAO,CACLpB,KAAMA,EACNkB,SAAUA,EACVnB,QAASA,EACToB,YAAaA,EAEhB,CA3DO,GA6DR,SAASK,EAAKrnB,GACZrE,KAAK2rB,KAAOjC,EAAcrlB,GAC1BrE,KAAK4rB,QACP,CAEAF,EAAIG,UAAY,GAChBH,EAAII,QAAU,GACdJ,EAAIzrB,UAAU4rB,UAAYH,EAAIG,UAC9BH,EAAIzrB,UAAU6rB,QAAUJ,EAAII,QAC5BJ,EAAIzrB,UAAU2rB,OAAS,WAOrB,IANA,IAAIG,EAAW/rB,KAAK2rB,KAChBG,EAAUC,EAASzqB,OACnB6oB,EAAU2B,EAAU,EACpBE,EAAyB,GAAf7B,EAAU,GAEpBH,EAAc,GACTtV,EAAI,EAAGA,EAAIoX,EAASpX,IAC3BsV,EAAYtV,GAAKqX,EAASrX,GAG5B,IAAKA,EAAIoX,EAASpX,EAAIsX,EAAQtX,IAAK,CACjC,IAAIuB,EAAI+T,EAAYtV,EAAI,GAEpBA,EAAIoX,GAAY,GAClB7V,EAAKA,GAAK,EAAMA,IAAM,GACtBA,EACGiV,EAAEhB,KAAKjU,IAAM,KAAO,GACpBiV,EAAEhB,KAAMjU,IAAM,GAAM,MAAS,GAC7BiV,EAAEhB,KAAMjU,IAAM,EAAK,MAAS,EAC5BiV,EAAEhB,KAAS,IAAJjU,GAEVA,GAAKgV,EAAMvW,EAAIoX,EAAW,IAAM,IACvBA,EAAU,GAAKpX,EAAIoX,GAAY,IACxC7V,EACGiV,EAAEhB,KAAKjU,IAAM,KAAO,GACpBiV,EAAEhB,KAAMjU,IAAM,GAAM,MAAS,GAC7BiV,EAAEhB,KAAMjU,IAAM,EAAK,MAAS,EAC5BiV,EAAEhB,KAAS,IAAJjU,IAGZ+T,EAAYtV,GAAKsV,EAAYtV,EAAIoX,GAAW7V,CAC9C,CAGA,IADA,IAAIgW,EAAiB,GACZC,EAAK,EAAGA,EAAKF,EAAQE,IAAM,CAClC,IAAIC,EAAMH,EAASE,EACfE,EAAKpC,EAAYmC,GAAOD,EAAK,EAAI,EAAI,IAGvCD,EAAeC,GADbA,EAAK,GAAKC,GAAO,EACEC,EAGnBlB,EAAEG,YAAY,GAAGH,EAAEhB,KAAKkC,IAAO,KAC/BlB,EAAEG,YAAY,GAAGH,EAAEhB,KAAMkC,IAAO,GAAM,MACtClB,EAAEG,YAAY,GAAGH,EAAEhB,KAAMkC,IAAO,EAAK,MACrClB,EAAEG,YAAY,GAAGH,EAAEhB,KAAU,IAALkC,GAE9B,CAEApsB,KAAKqsB,SAAWlC,EAChBnqB,KAAKssB,aAAetC,EACpBhqB,KAAKusB,gBAAkBN,CACzB,EAEAP,EAAIzrB,UAAUusB,gBAAkB,SAAUzC,GAExC,OAAOD,EADPC,EAAIL,EAAcK,GACG/pB,KAAKssB,aAAcpB,EAAEjB,QAASiB,EAAEhB,KAAMlqB,KAAKqsB,SAClE,EAEAX,EAAIzrB,UAAUwsB,aAAe,SAAU1C,GACrC,IAAIjnB,EAAM9C,KAAKwsB,gBAAgBzC,GAC3B7e,EAAMhK,EAAOwrB,YAAY,IAK7B,OAJAxhB,EAAIyhB,cAAc7pB,EAAI,GAAI,GAC1BoI,EAAIyhB,cAAc7pB,EAAI,GAAI,GAC1BoI,EAAIyhB,cAAc7pB,EAAI,GAAI,GAC1BoI,EAAIyhB,cAAc7pB,EAAI,GAAI,IACnBoI,CACT,EAEAwgB,EAAIzrB,UAAU2sB,aAAe,SAAU7C,GAIrC,IAAI8C,GAHJ9C,EAAIL,EAAcK,IAGP,GACXA,EAAE,GAAKA,EAAE,GACTA,EAAE,GAAK8C,EAEP,IAAI/pB,EAAMgnB,EAAWC,EAAG/pB,KAAKusB,gBAAiBrB,EAAEG,YAAaH,EAAEE,SAAUprB,KAAKqsB,UAC1EnhB,EAAMhK,EAAOwrB,YAAY,IAK7B,OAJAxhB,EAAIyhB,cAAc7pB,EAAI,GAAI,GAC1BoI,EAAIyhB,cAAc7pB,EAAI,GAAI,GAC1BoI,EAAIyhB,cAAc7pB,EAAI,GAAI,GAC1BoI,EAAIyhB,cAAc7pB,EAAI,GAAI,IACnBoI,CACT,EAEAwgB,EAAIzrB,UAAU6sB,MAAQ,WACpBlD,EAAS5pB,KAAKssB,cACd1C,EAAS5pB,KAAKusB,iBACd3C,EAAS5pB,KAAK2rB,KAChB,EAEAjnB,EAAOrF,QAAQqsB,IAAMA,C,kBCnOrB,IAAIqB,EAAM,EAAQ,OACd7rB,EAAS,gBACT8rB,EAAY,EAAQ,OACpBptB,EAAW,EAAQ,OACnBqtB,EAAQ,EAAQ,OAChBtV,EAAM,EAAQ,OACduV,EAAS,EAAQ,OAqCrB,SAASC,EAAc3K,EAAMne,EAAK+oB,EAAIC,GACpCL,EAAUzsB,KAAKP,MAEf,IAAIuhB,EAAIrgB,EAAO6B,MAAM,EAAG,GAExB/C,KAAKstB,QAAU,IAAIP,EAAIrB,IAAIrnB,GAC3B,IAAIkpB,EAAKvtB,KAAKstB,QAAQb,aAAalL,GACnCvhB,KAAKwtB,OAAS,IAAIP,EAAMM,GACxBH,EA/BF,SAAiB/Y,EAAM+Y,EAAIG,GACzB,GAAkB,KAAdH,EAAG9rB,OAEL,OADA+S,EAAKoZ,OAASvsB,EAAOqC,OAAO,CAAC6pB,EAAIlsB,EAAO6M,KAAK,CAAC,EAAG,EAAG,EAAG,MAChD7M,EAAOqC,OAAO,CAAC6pB,EAAIlsB,EAAO6M,KAAK,CAAC,EAAG,EAAG,EAAG,MAElD,IAAI2f,EAAQ,IAAIT,EAAMM,GAClBjiB,EAAM8hB,EAAG9rB,OACTqsB,EAAQriB,EAAM,GAClBoiB,EAAME,OAAOR,GACTO,IACFA,EAAQ,GAAKA,EACbD,EAAME,OAAO1sB,EAAO6B,MAAM4qB,EAAO,KAEnCD,EAAME,OAAO1sB,EAAO6B,MAAM,EAAG,IAC7B,IAAI8qB,EAAe,EAANviB,EACTwiB,EAAO5sB,EAAO6B,MAAM,GACxB+qB,EAAKC,YAAYF,EAAQ,EAAG,GAC5BH,EAAME,OAAOE,GACbzZ,EAAKoZ,OAASC,EAAMjqB,MACpB,IAAIX,EAAM5B,EAAO6M,KAAKsG,EAAKoZ,QAE3B,OADAP,EAAOpqB,GACAA,CACT,CASOkrB,CAAOhuB,KAAMotB,EAAIG,GAEtBvtB,KAAKiuB,MAAQ/sB,EAAO6M,KAAKqf,GACzBptB,KAAKkuB,OAAShtB,EAAOwrB,YAAY,GACjC1sB,KAAKmuB,UAAYjtB,EAAOwrB,YAAY,GACpC1sB,KAAKouB,SAAWf,EAChBrtB,KAAKquB,MAAQ,EACbruB,KAAKsuB,KAAO,EACZtuB,KAAKuuB,MAAQ/L,EAEbxiB,KAAKwuB,SAAW,KAChBxuB,KAAKyuB,SAAU,CACjB,CAEA7uB,EAASutB,EAAcH,GAEvBG,EAAaltB,UAAUyuB,QAAU,SAAUC,GACzC,IAAK3uB,KAAKyuB,SAAWzuB,KAAKquB,MAAO,CAC/B,IAAIO,EAAO,GAAM5uB,KAAKquB,MAAQ,GAC1BO,EAAO,KACTA,EAAO1tB,EAAO6B,MAAM6rB,EAAM,GAC1B5uB,KAAKwtB,OAAOI,OAAOgB,GAEvB,CAEA5uB,KAAKyuB,SAAU,EACf,IAAI3rB,EAAM9C,KAAKuuB,MAAMM,QAAQ7uB,KAAM2uB,GAOnC,OANI3uB,KAAKouB,SACPpuB,KAAKwtB,OAAOI,OAAOe,GAEnB3uB,KAAKwtB,OAAOI,OAAO9qB,GAErB9C,KAAKsuB,MAAQK,EAAMrtB,OACZwB,CACT,EAEAqqB,EAAaltB,UAAU6uB,OAAS,WAC9B,GAAI9uB,KAAKouB,WAAapuB,KAAKwuB,SAAU,MAAM,IAAI7oB,MAAM,oDAErD,IAAI/B,EAAM+T,EAAI3X,KAAKwtB,OAAOuB,MAAmB,EAAb/uB,KAAKquB,MAAuB,EAAZruB,KAAKsuB,MAAWtuB,KAAKstB,QAAQb,aAAazsB,KAAKytB,SAC/F,GAAIztB,KAAKouB,UAnFX,SAAkB9Z,EAAGC,GACnB,IAAIzR,EAAM,EACNwR,EAAEhT,SAAWiT,EAAEjT,QAAQwB,IAG3B,IADA,IAAIwI,EAAMkH,KAAKvF,IAAIqH,EAAEhT,OAAQiT,EAAEjT,QACtBiK,EAAI,EAAGA,EAAID,IAAOC,EACzBzI,GAAQwR,EAAE/I,GAAKgJ,EAAEhJ,GAGnB,OAAOzI,CACT,CAyEuBksB,CAAQprB,EAAK5D,KAAKwuB,UAAW,MAAM,IAAI7oB,MAAM,oDAElE3F,KAAKwuB,SAAW5qB,EAChB5D,KAAKstB,QAAQR,OACf,EAEAK,EAAaltB,UAAUgvB,WAAa,WAClC,GAAIjvB,KAAKouB,WAAaltB,EAAOE,SAASpB,KAAKwuB,UAAW,MAAM,IAAI7oB,MAAM,mDAEtE,OAAO3F,KAAKwuB,QACd,EAEArB,EAAaltB,UAAUivB,WAAa,SAAqBtrB,GACvD,IAAK5D,KAAKouB,SAAU,MAAM,IAAIzoB,MAAM,mDAEpC3F,KAAKwuB,SAAW5qB,CAClB,EAEAupB,EAAaltB,UAAUkvB,OAAS,SAAiBjkB,GAC/C,GAAIlL,KAAKyuB,QAAS,MAAM,IAAI9oB,MAAM,8CAElC3F,KAAKwtB,OAAOI,OAAO1iB,GACnBlL,KAAKquB,OAASnjB,EAAI5J,MACpB,EAEAoD,EAAOrF,QAAU8tB,C,kBCpHjB,IAAIiC,EAAU,EAAQ,OAClBC,EAAY,EAAQ,OACpBC,EAAQ,EAAQ,OAMpBjwB,EAAQkwB,aAAelwB,EAAQmwB,OAASJ,EAAQG,aAChDlwB,EAAQowB,eAAiBpwB,EAAQqwB,SAAWN,EAAQK,eACpDpwB,EAAQswB,eAAiBtwB,EAAQuwB,SAAWP,EAAUM,eACtDtwB,EAAQwwB,iBAAmBxwB,EAAQywB,WAAaT,EAAUQ,iBAC1DxwB,EAAQ0wB,YAAc1wB,EAAQ2wB,WAR9B,WACE,OAAOvqB,OAAOC,KAAK4pB,EACrB,C,kBCNA,IAAIW,EAAa,EAAQ,OACrB/uB,EAAS,gBACTgvB,EAAQ,EAAQ,OAChB/C,EAAe,EAAQ,OACvBH,EAAY,EAAQ,OACpBD,EAAM,EAAQ,OACdoD,EAAO,EAAQ,OAGnB,SAASP,EAAUpN,EAAMne,EAAK+oB,GAC5BJ,EAAUzsB,KAAKP,MAEfA,KAAKkuB,OAAS,IAAIkC,EAClBpwB,KAAKqwB,WAAQ,EACbrwB,KAAKstB,QAAU,IAAIP,EAAIrB,IAAIrnB,GAC3BrE,KAAKiuB,MAAQ/sB,EAAO6M,KAAKqf,GACzBptB,KAAKuuB,MAAQ/L,EACbxiB,KAAKswB,cAAe,CACtB,CA8BA,SAASF,IACPpwB,KAAKuwB,MAAQrvB,EAAOwrB,YAAY,EAClC,CA6CA,SAASmD,EAAkBW,EAAOC,EAAUrD,GAC1C,IAAIsD,EAASR,EAAMM,EAAMG,eACzB,IAAKD,EAAQ,MAAM,IAAIE,UAAU,sBAGjC,GADkB,iBAAPxD,IAAiBA,EAAKlsB,EAAO6M,KAAKqf,IACzB,QAAhBsD,EAAOlO,MAAkB4K,EAAG9rB,SAAWovB,EAAOtD,GAAI,MAAM,IAAIwD,UAAU,qBAAuBxD,EAAG9rB,QAGpG,GADwB,iBAAbmvB,IAAuBA,EAAWvvB,EAAO6M,KAAK0iB,IACrDA,EAASnvB,SAAWovB,EAAOrsB,IAAM,EAAG,MAAM,IAAIusB,UAAU,sBAAwBH,EAASnvB,QAE7F,MAAoB,WAAhBovB,EAAOxoB,KACF,IAAIilB,EAAauD,EAAOhsB,OAAQ+rB,EAAUrD,GAAI,GAC5B,SAAhBsD,EAAOxoB,KACT,IAAI+nB,EAAWS,EAAOhsB,OAAQ+rB,EAAUrD,GAAI,GAG9C,IAAIwC,EAASc,EAAOhsB,OAAQ+rB,EAAUrD,EAC/C,CAzGe,EAAQ,MAavBxtB,CAASgwB,EAAU5C,GAEnB4C,EAAS3vB,UAAUyuB,QAAU,SAAU9tB,GAErC,IAAI+tB,EACAkC,EAFJ7wB,KAAKkuB,OAAO9V,IAAIxX,GAIhB,IADA,IAAIkC,EAAM,GACF6rB,EAAQ3uB,KAAKkuB,OAAO4C,IAAI9wB,KAAKswB,eACnCO,EAAQ7wB,KAAKuuB,MAAMlB,QAAQrtB,KAAM2uB,GACjC7rB,EAAIkC,KAAK6rB,GAEX,OAAO3vB,EAAOqC,OAAOT,EACvB,EAEA8sB,EAAS3vB,UAAU6uB,OAAS,WAC1B,IAAIH,EAAQ3uB,KAAKkuB,OAAO6C,QACxB,GAAI/wB,KAAKswB,aACP,OA0CJ,SAAgBU,GACd,IAAIC,EAASD,EAAK,IAClB,GAAIC,EAAS,GAAKA,EAAS,GACzB,MAAM,IAAItrB,MAAM,0BAGlB,IADA,IAAI4F,GAAK,IACAA,EAAI0lB,GACX,GAAID,EAAMzlB,GAAK,GAAK0lB,MAAcA,EAChC,MAAM,IAAItrB,MAAM,0BAGpB,GAAe,KAAXsrB,EAEJ,OAAOD,EAAKpuB,MAAM,EAAG,GAAKquB,EAC5B,CAxDWC,CAAMlxB,KAAKuuB,MAAMlB,QAAQrtB,KAAM2uB,IACjC,GAAIA,EACT,MAAM,IAAIhpB,MAAM,oCAEpB,EAEAiqB,EAAS3vB,UAAUkxB,eAAiB,SAAUC,GAE5C,OADApxB,KAAKswB,eAAiBc,EACfpxB,IACT,EAMAowB,EAASnwB,UAAUmY,IAAM,SAAUxX,GACjCZ,KAAKuwB,MAAQrvB,EAAOqC,OAAO,CAACvD,KAAKuwB,MAAO3vB,GAC1C,EAEAwvB,EAASnwB,UAAU6wB,IAAM,SAAUO,GACjC,IAAIvuB,EACJ,GAAIuuB,GACF,GAAIrxB,KAAKuwB,MAAMjvB,OAAS,GAGtB,OAFAwB,EAAM9C,KAAKuwB,MAAM3tB,MAAM,EAAG,IAC1B5C,KAAKuwB,MAAQvwB,KAAKuwB,MAAM3tB,MAAM,IACvBE,OAGT,GAAI9C,KAAKuwB,MAAMjvB,QAAU,GAGvB,OAFAwB,EAAM9C,KAAKuwB,MAAM3tB,MAAM,EAAG,IAC1B5C,KAAKuwB,MAAQvwB,KAAKuwB,MAAM3tB,MAAM,IACvBE,EAIX,OAAO,IACT,EAEAstB,EAASnwB,UAAU8wB,MAAQ,WACzB,GAAI/wB,KAAKuwB,MAAMjvB,OAAQ,OAAOtB,KAAKuwB,KACrC,EA6CAlxB,EAAQswB,eARR,SAAyBa,EAAOC,GAC9B,IAAIC,EAASR,EAAMM,EAAMG,eACzB,IAAKD,EAAQ,MAAM,IAAIE,UAAU,sBAEjC,IAAIlrB,EAAOyqB,EAAKM,GAAU,EAAOC,EAAOrsB,IAAKqsB,EAAOtD,IACpD,OAAOyC,EAAiBW,EAAO9qB,EAAKrB,IAAKqB,EAAK0nB,GAChD,EAGA/tB,EAAQwwB,iBAAmBA,C,kBC3H3B,IAAIK,EAAQ,EAAQ,OAChBD,EAAa,EAAQ,OACrB/uB,EAAS,gBACTisB,EAAe,EAAQ,OACvBH,EAAY,EAAQ,OACpBD,EAAM,EAAQ,OACdoD,EAAO,EAAQ,OAGnB,SAASX,EAAQhN,EAAMne,EAAK+oB,GAC1BJ,EAAUzsB,KAAKP,MAEfA,KAAKkuB,OAAS,IAAIkC,EAClBpwB,KAAKstB,QAAU,IAAIP,EAAIrB,IAAIrnB,GAC3BrE,KAAKiuB,MAAQ/sB,EAAO6M,KAAKqf,GACzBptB,KAAKuuB,MAAQ/L,EACbxiB,KAAKswB,cAAe,CACtB,CAVe,EAAQ,MAYvB1wB,CAAS4vB,EAAQxC,GAEjBwC,EAAOvvB,UAAUyuB,QAAU,SAAU9tB,GAEnC,IAAI+tB,EACAkC,EAFJ7wB,KAAKkuB,OAAO9V,IAAIxX,GAKhB,IAFA,IAAIkC,EAAM,GAEF6rB,EAAQ3uB,KAAKkuB,OAAO4C,OAC1BD,EAAQ7wB,KAAKuuB,MAAMM,QAAQ7uB,KAAM2uB,GACjC7rB,EAAIkC,KAAK6rB,GAGX,OAAO3vB,EAAOqC,OAAOT,EACvB,EAEA,IAAIwuB,EAAUpwB,EAAO6B,MAAM,GAAI,IAqB/B,SAASqtB,IACPpwB,KAAKuwB,MAAQrvB,EAAOwrB,YAAY,EAClC,CA2BA,SAAS+C,EAAgBe,EAAOC,EAAUrD,GACxC,IAAIsD,EAASR,EAAMM,EAAMG,eACzB,IAAKD,EAAQ,MAAM,IAAIE,UAAU,sBAGjC,GADwB,iBAAbH,IAAuBA,EAAWvvB,EAAO6M,KAAK0iB,IACrDA,EAASnvB,SAAWovB,EAAOrsB,IAAM,EAAG,MAAM,IAAIusB,UAAU,sBAAwBH,EAASnvB,QAG7F,GADkB,iBAAP8rB,IAAiBA,EAAKlsB,EAAO6M,KAAKqf,IACzB,QAAhBsD,EAAOlO,MAAkB4K,EAAG9rB,SAAWovB,EAAOtD,GAAI,MAAM,IAAIwD,UAAU,qBAAuBxD,EAAG9rB,QAEpG,MAAoB,WAAhBovB,EAAOxoB,KACF,IAAIilB,EAAauD,EAAOhsB,OAAQ+rB,EAAUrD,GACxB,SAAhBsD,EAAOxoB,KACT,IAAI+nB,EAAWS,EAAOhsB,OAAQ+rB,EAAUrD,GAG1C,IAAIoC,EAAOkB,EAAOhsB,OAAQ+rB,EAAUrD,EAC7C,CAjEAoC,EAAOvvB,UAAU6uB,OAAS,WACxB,IAAIH,EAAQ3uB,KAAKkuB,OAAO6C,QACxB,GAAI/wB,KAAKswB,aAGP,OAFA3B,EAAQ3uB,KAAKuuB,MAAMM,QAAQ7uB,KAAM2uB,GACjC3uB,KAAKstB,QAAQR,QACN6B,EAGT,IAAKA,EAAM4C,OAAOD,GAEhB,MADAtxB,KAAKstB,QAAQR,QACP,IAAInnB,MAAM,oCAEpB,EAEA6pB,EAAOvvB,UAAUkxB,eAAiB,SAAUC,GAE1C,OADApxB,KAAKswB,eAAiBc,EACfpxB,IACT,EAMAowB,EAASnwB,UAAUmY,IAAM,SAAUxX,GACjCZ,KAAKuwB,MAAQrvB,EAAOqC,OAAO,CAACvD,KAAKuwB,MAAO3vB,GAC1C,EAEAwvB,EAASnwB,UAAU6wB,IAAM,WACvB,GAAI9wB,KAAKuwB,MAAMjvB,OAAS,GAAI,CAC1B,IAAIwB,EAAM9C,KAAKuwB,MAAM3tB,MAAM,EAAG,IAE9B,OADA5C,KAAKuwB,MAAQvwB,KAAKuwB,MAAM3tB,MAAM,IACvBE,CACT,CACA,OAAO,IACT,EAEAstB,EAASnwB,UAAU8wB,MAAQ,WAKzB,IAJA,IAAIzlB,EAAM,GAAKtL,KAAKuwB,MAAMjvB,OACtBkwB,EAAUtwB,EAAOwrB,YAAYphB,GAE7BC,GAAK,IACAA,EAAID,GACXkmB,EAAQC,WAAWnmB,EAAKC,GAG1B,OAAOrK,EAAOqC,OAAO,CAACvD,KAAKuwB,MAAOiB,GACpC,EA6BAnyB,EAAQowB,eAAiBA,EACzBpwB,EAAQkwB,aATR,SAAuBiB,EAAOC,GAC5B,IAAIC,EAASR,EAAMM,EAAMG,eACzB,IAAKD,EAAQ,MAAM,IAAIE,UAAU,sBAEjC,IAAIlrB,EAAOyqB,EAAKM,GAAU,EAAOC,EAAOrsB,IAAKqsB,EAAOtD,IACpD,OAAOqC,EAAee,EAAO9qB,EAAKrB,IAAKqB,EAAK0nB,GAC9C,C,kBC9GA,IAAIlsB,EAAS,gBACTwwB,EAASxwB,EAAO6B,MAAM,GAAI,GAW9B,SAAS4uB,EAAW7uB,GAClB,IAAIoI,EAAMhK,EAAOwrB,YAAY,IAK7B,OAJAxhB,EAAIyhB,cAAc7pB,EAAI,KAAO,EAAG,GAChCoI,EAAIyhB,cAAc7pB,EAAI,KAAO,EAAG,GAChCoI,EAAIyhB,cAAc7pB,EAAI,KAAO,EAAG,GAChCoI,EAAIyhB,cAAc7pB,EAAI,KAAO,EAAG,IACzBoI,CACT,CAEA,SAAS+hB,EAAO5oB,GACdrE,KAAKuhB,EAAIld,EACTrE,KAAKyD,MAAQvC,EAAO6B,MAAM,GAAI,GAC9B/C,KAAKuwB,MAAQrvB,EAAOwrB,YAAY,EAClC,CAIAO,EAAMhtB,UAAUytB,MAAQ,SAAUkE,GAEhC,IADA,IAAIrmB,GAAK,IACAA,EAAIqmB,EAAMtwB,QACjBtB,KAAKyD,MAAM8H,IAAMqmB,EAAMrmB,GAEzBvL,KAAK6xB,WACP,EAEA5E,EAAMhtB,UAAU4xB,UAAY,WAK1B,IAJA,IAnCgB3mB,EAqCZM,EAAOsmB,EAFPC,EAlCG,EADS7mB,EAmCClL,KAAKuhB,GAjChBoI,aAAa,GACjBze,EAAIye,aAAa,GACjBze,EAAIye,aAAa,GACjBze,EAAIye,aAAa,KA+BfqI,EAAK,CAAC,EAAG,EAAG,EAAG,GAEfzmB,GAAK,IACAA,EAAI,KAAK,CAchB,IAbwD,IAAlDvL,KAAKyD,SAAS8H,EAAI,IAAO,GAAM,EAAKA,EAAI,KAG5CymB,EAAG,IAAMD,EAAG,GACZC,EAAG,IAAMD,EAAG,GACZC,EAAG,IAAMD,EAAG,GACZC,EAAG,IAAMD,EAAG,IAIdD,EAAwB,IAAP,EAARC,EAAG,IAGPvmB,EAAI,EAAGA,EAAI,EAAGA,IACjBumB,EAAGvmB,GAAMumB,EAAGvmB,KAAO,GAAmB,EAAZumB,EAAGvmB,EAAI,KAAW,GAE9CumB,EAAG,GAAKA,EAAG,KAAO,EAGdD,IACFC,EAAG,GAAKA,EAAG,GAAM,KAAQ,GAE7B,CACA/xB,KAAKyD,MAAQkuB,EAAUK,EACzB,EAEA/E,EAAMhtB,UAAU2tB,OAAS,SAAU1iB,GAEjC,IAAIyjB,EACJ,IAFA3uB,KAAKuwB,MAAQrvB,EAAOqC,OAAO,CAACvD,KAAKuwB,MAAOrlB,IAEjClL,KAAKuwB,MAAMjvB,QAAU,IAC1BqtB,EAAQ3uB,KAAKuwB,MAAM3tB,MAAM,EAAG,IAC5B5C,KAAKuwB,MAAQvwB,KAAKuwB,MAAM3tB,MAAM,IAC9B5C,KAAK0tB,MAAMiB,EAEf,EAEA1B,EAAMhtB,UAAU8uB,MAAQ,SAAUkD,EAAKC,GAMrC,OALIlyB,KAAKuwB,MAAMjvB,QACbtB,KAAK0tB,MAAMxsB,EAAOqC,OAAO,CAACvD,KAAKuwB,MAAOmB,GAAS,KAGjD1xB,KAAK0tB,MAAMiE,EAAU,CAAC,EAAGM,EAAK,EAAGC,KAC1BlyB,KAAKyD,KACd,EAEAiB,EAAOrF,QAAU4tB,C,YC1EjBvoB,EAAOrF,QAdP,SAAiB+tB,GAGf,IAFA,IACIvrB,EADAyJ,EAAM8hB,EAAG9rB,OAENgK,KAAO,CAEZ,GAAa,OADbzJ,EAAOurB,EAAG/qB,UAAUiJ,IAGb,CACLzJ,IACAurB,EAAGqE,WAAW5vB,EAAMyJ,GACpB,KACF,CALE8hB,EAAGqE,WAAW,EAAGnmB,EAMrB,CACF,C,kBCbA,IAAIqM,EAAM,EAAQ,OAElBtY,EAAQwvB,QAAU,SAAUxa,EAAMud,GAChC,IAAIhxB,EAAO+W,EAAIia,EAAOvd,EAAK4Z,OAG3B,OADA5Z,EAAK4Z,MAAQ5Z,EAAKiZ,QAAQb,aAAa7rB,GAChCyT,EAAK4Z,KACd,EAEA5uB,EAAQguB,QAAU,SAAUhZ,EAAMud,GAChC,IAAIO,EAAM9d,EAAK4Z,MAEf5Z,EAAK4Z,MAAQ2D,EACb,IAAI9uB,EAAMuR,EAAKiZ,QAAQV,aAAagF,GAEpC,OAAOja,EAAI7U,EAAKqvB,EAClB,C,kBChBA,IAAIjxB,EAAS,gBACTyW,EAAM,EAAQ,OAElB,SAASya,EAAc/d,EAAMzT,EAAMysB,GACjC,IAAI/hB,EAAM1K,EAAKU,OACXwB,EAAM6U,EAAI/W,EAAMyT,EAAK6Z,QAGzB,OAFA7Z,EAAK6Z,OAAS7Z,EAAK6Z,OAAOtrB,MAAM0I,GAChC+I,EAAK4Z,MAAQ/sB,EAAOqC,OAAO,CAAC8Q,EAAK4Z,MAAOZ,EAAUzsB,EAAOkC,IAClDA,CACT,CAEAzD,EAAQwvB,QAAU,SAAUxa,EAAMzT,EAAMysB,GAItC,IAHA,IACI/hB,EADAxI,EAAM5B,EAAOwrB,YAAY,GAGtB9rB,EAAKU,QAAQ,CAMlB,GAL2B,IAAvB+S,EAAK6Z,OAAO5sB,SACd+S,EAAK6Z,OAAS7Z,EAAKiZ,QAAQb,aAAapY,EAAK4Z,OAC7C5Z,EAAK4Z,MAAQ/sB,EAAOwrB,YAAY,MAG9BrY,EAAK6Z,OAAO5sB,QAAUV,EAAKU,QAIxB,CACLwB,EAAM5B,EAAOqC,OAAO,CAACT,EAAKsvB,EAAa/d,EAAMzT,EAAMysB,KACnD,KACF,CANE/hB,EAAM+I,EAAK6Z,OAAO5sB,OAClBwB,EAAM5B,EAAOqC,OAAO,CAACT,EAAKsvB,EAAa/d,EAAMzT,EAAKgC,MAAM,EAAG0I,GAAM+hB,KACjEzsB,EAAOA,EAAKgC,MAAM0I,EAKtB,CAEA,OAAOxI,CACT,C,kBChCA,IAAI5B,EAAS,gBAEb,SAASmxB,EAAahe,EAAMie,EAAWjF,GAMrC,IALA,IAIIrV,EAAKvW,EAHL8J,GAAK,EAELzI,EAAM,IAEDyI,EAHC,GAKRyM,EAAOsa,EAAa,GAAM,EAAI/mB,EAAO,IAAO,EAE5CzI,IAAiB,KADjBrB,EAFM4S,EAAKiZ,QAAQb,aAAapY,EAAK4Z,OAEzB,GAAKjW,KACUzM,EAAI,EAC/B8I,EAAK4Z,MAAQsE,EAAQle,EAAK4Z,MAAOZ,EAAUrV,EAAMvW,GAEnD,OAAOqB,CACT,CAEA,SAASyvB,EAAS9mB,EAAQhK,GACxB,IAAI6J,EAAMG,EAAOnK,OACbiK,GAAK,EACLzI,EAAM5B,EAAOwrB,YAAYjhB,EAAOnK,QAGpC,IAFAmK,EAASvK,EAAOqC,OAAO,CAACkI,EAAQvK,EAAO6M,KAAK,CAACtM,QAEpC8J,EAAID,GACXxI,EAAIyI,GAAKE,EAAOF,IAAM,EAAIE,EAAOF,EAAI,IAAM,EAG7C,OAAOzI,CACT,CAEAzD,EAAQwvB,QAAU,SAAUxa,EAAMsa,EAAOtB,GAKvC,IAJA,IAAI/hB,EAAMqjB,EAAMrtB,OACZwB,EAAM5B,EAAOwrB,YAAYphB,GACzBC,GAAK,IAEAA,EAAID,GACXxI,EAAIyI,GAAK8mB,EAAYhe,EAAMsa,EAAMpjB,GAAI8hB,GAGvC,OAAOvqB,CACT,C,kBCzCA,IAAI5B,EAAS,gBAEb,SAASmxB,EAAahe,EAAMie,EAAWjF,GACrC,IACIvqB,EADMuR,EAAKiZ,QAAQb,aAAapY,EAAK4Z,OAC3B,GAAKqE,EAOnB,OALAje,EAAK4Z,MAAQ/sB,EAAOqC,OAAO,CACzB8Q,EAAK4Z,MAAMrrB,MAAM,GACjB1B,EAAO6M,KAAK,CAACsf,EAAUiF,EAAYxvB,MAG9BA,CACT,CAEAzD,EAAQwvB,QAAU,SAAUxa,EAAMsa,EAAOtB,GAKvC,IAJA,IAAI/hB,EAAMqjB,EAAMrtB,OACZwB,EAAM5B,EAAOwrB,YAAYphB,GACzBC,GAAK,IAEAA,EAAID,GACXxI,EAAIyI,GAAK8mB,EAAYhe,EAAMsa,EAAMpjB,GAAI8hB,GAGvC,OAAOvqB,CACT,C,kBCxBA,IAAI6U,EAAM,EAAQ,OACdzW,EAAS,gBACTgsB,EAAS,EAAQ,OAErB,SAASsF,EAAUne,GACjB,IAAIvR,EAAMuR,EAAKiZ,QAAQd,gBAAgBnY,EAAK4Z,OAE5C,OADAf,EAAO7Y,EAAK4Z,OACLnrB,CACT,CAGAzD,EAAQwvB,QAAU,SAAUxa,EAAMsa,GAChC,IAAI8D,EAAWjgB,KAAKS,KAAK0b,EAAMrtB,OAFjB,IAGVyF,EAAQsN,EAAK6Z,OAAO5sB,OACxB+S,EAAK6Z,OAAShtB,EAAOqC,OAAO,CAC1B8Q,EAAK6Z,OACLhtB,EAAOwrB,YANK,GAMO+F,KAErB,IAAK,IAAIlnB,EAAI,EAAGA,EAAIknB,EAAUlnB,IAAK,CACjC,IAAIzI,EAAM0vB,EAASne,GACfhT,EAAS0F,EAVD,GAUSwE,EACrB8I,EAAK6Z,OAAOvB,cAAc7pB,EAAI,GAAIzB,EAAS,GAC3CgT,EAAK6Z,OAAOvB,cAAc7pB,EAAI,GAAIzB,EAAS,GAC3CgT,EAAK6Z,OAAOvB,cAAc7pB,EAAI,GAAIzB,EAAS,GAC3CgT,EAAK6Z,OAAOvB,cAAc7pB,EAAI,GAAIzB,EAAS,GAC7C,CACA,IAAI8wB,EAAM9d,EAAK6Z,OAAOtrB,MAAM,EAAG+rB,EAAMrtB,QAErC,OADA+S,EAAK6Z,OAAS7Z,EAAK6Z,OAAOtrB,MAAM+rB,EAAMrtB,QAC/BqW,EAAIgX,EAAOwD,EACpB,C,gBC7BA9yB,EAAQwvB,QAAU,SAAUxa,EAAMud,GAChC,OAAOvd,EAAKiZ,QAAQb,aAAamF,EACnC,EAEAvyB,EAAQguB,QAAU,SAAUhZ,EAAMud,GAChC,OAAOvd,EAAKiZ,QAAQV,aAAagF,EACnC,C,kBCNA,IAAIc,EAAc,CAChBC,IAAK,EAAQ,OACbC,IAAK,EAAQ,OACbC,IAAK,EAAQ,OACbC,KAAM,EAAQ,OACdC,KAAM,EAAQ,OACdC,IAAK,EAAQ,OACbC,IAAK,EAAQ,OACbC,IAAK,EAAQ,QAGX5D,EAAQ,EAAQ,OAEpB,IAAK,IAAIjrB,KAAOirB,EACdA,EAAMjrB,GAAKK,OAASguB,EAAYpD,EAAMjrB,GAAKme,MAG7C9d,EAAOrF,QAAUiwB,C,wCCjBb3X,EAAM,EAAQ,OAElB,SAAS6a,EAAUne,GAEjB,OADAA,EAAK4Z,MAAQ5Z,EAAKiZ,QAAQb,aAAapY,EAAK4Z,OACrC5Z,EAAK4Z,KACd,CAEA5uB,EAAQwvB,QAAU,SAAUxa,EAAMsa,GAChC,KAAOta,EAAK6Z,OAAO5sB,OAASqtB,EAAMrtB,QAChC+S,EAAK6Z,OAAShtB,EAAOqC,OAAO,CAAC8Q,EAAK6Z,OAAQsE,EAASne,KAGrD,IAAI8d,EAAM9d,EAAK6Z,OAAOtrB,MAAM,EAAG+rB,EAAMrtB,QAErC,OADA+S,EAAK6Z,OAAS7Z,EAAK6Z,OAAOtrB,MAAM+rB,EAAMrtB,QAC/BqW,EAAIgX,EAAOwD,EACpB,C,kBCfA,IAAIpF,EAAM,EAAQ,OACd7rB,EAAS,gBACT8rB,EAAY,EAAQ,OAGxB,SAASG,EAAc3K,EAAMne,EAAK+oB,EAAIC,GACpCL,EAAUzsB,KAAKP,MAEfA,KAAKstB,QAAU,IAAIP,EAAIrB,IAAIrnB,GAC3BrE,KAAKiuB,MAAQ/sB,EAAO6M,KAAKqf,GACzBptB,KAAKkuB,OAAShtB,EAAOwrB,YAAY,GACjC1sB,KAAKmuB,UAAYjtB,EAAOwrB,YAAY,GACpC1sB,KAAKouB,SAAWf,EAChBrtB,KAAKuuB,MAAQ/L,CACf,CAXe,EAAQ,MAavB5iB,CAASutB,EAAcH,GAEvBG,EAAaltB,UAAUyuB,QAAU,SAAUC,GACzC,OAAO3uB,KAAKuuB,MAAMM,QAAQ7uB,KAAM2uB,EAAO3uB,KAAKouB,SAC9C,EAEAjB,EAAaltB,UAAU6uB,OAAS,WAC9B9uB,KAAKstB,QAAQR,OACf,EAEApoB,EAAOrF,QAAU8tB,C,kBC1BjB,IAAIgG,EAAM,EAAQ,OACdpG,EAAM,EAAQ,OACdqG,EAAW,EAAQ,OACnBC,EAAW,EAAQ,OACnBlD,EAAO,EAAQ,OAsCnB,SAASV,EAAgBe,EAAOnsB,EAAK+oB,GAEnC,GADAoD,EAAQA,EAAMG,cACVyC,EAAS5C,GAAQ,OAAOzD,EAAI0C,eAAee,EAAOnsB,EAAK+oB,GAC3D,GAAIiG,EAAS7C,GAAQ,OAAO,IAAI2C,EAAI,CAAE9uB,IAAKA,EAAK+oB,GAAIA,EAAI5K,KAAMgO,IAE9D,MAAM,IAAII,UAAU,qBACtB,CAEA,SAASf,EAAkBW,EAAOnsB,EAAK+oB,GAErC,GADAoD,EAAQA,EAAMG,cACVyC,EAAS5C,GAAQ,OAAOzD,EAAI8C,iBAAiBW,EAAOnsB,EAAK+oB,GAC7D,GAAIiG,EAAS7C,GAAQ,OAAO,IAAI2C,EAAI,CAAE9uB,IAAKA,EAAK+oB,GAAIA,EAAI5K,KAAMgO,EAAOnD,SAAS,IAE9E,MAAM,IAAIuD,UAAU,qBACtB,CAMAvxB,EAAQkwB,aAAelwB,EAAQmwB,OAxD/B,SAAuBgB,EAAOC,GAG5B,IAAI6C,EAAQC,EACZ,GAHA/C,EAAQA,EAAMG,cAGVyC,EAAS5C,GACX8C,EAASF,EAAS5C,GAAOnsB,IACzBkvB,EAAQH,EAAS5C,GAAOpD,OACnB,KAAIiG,EAAS7C,GAIlB,MAAM,IAAII,UAAU,sBAHpB0C,EAA+B,EAAtBD,EAAS7C,GAAOnsB,IACzBkvB,EAAQF,EAAS7C,GAAOpD,EAG1B,CAEA,IAAI1nB,EAAOyqB,EAAKM,GAAU,EAAO6C,EAAQC,GACzC,OAAO9D,EAAee,EAAO9qB,EAAKrB,IAAKqB,EAAK0nB,GAC9C,EAyCA/tB,EAAQowB,eAAiBpwB,EAAQqwB,SAAWD,EAC5CpwB,EAAQswB,eAAiBtwB,EAAQuwB,SAxCjC,SAAyBY,EAAOC,GAG9B,IAAI6C,EAAQC,EACZ,GAHA/C,EAAQA,EAAMG,cAGVyC,EAAS5C,GACX8C,EAASF,EAAS5C,GAAOnsB,IACzBkvB,EAAQH,EAAS5C,GAAOpD,OACnB,KAAIiG,EAAS7C,GAIlB,MAAM,IAAII,UAAU,sBAHpB0C,EAA+B,EAAtBD,EAAS7C,GAAOnsB,IACzBkvB,EAAQF,EAAS7C,GAAOpD,EAG1B,CAEA,IAAI1nB,EAAOyqB,EAAKM,GAAU,EAAO6C,EAAQC,GACzC,OAAO1D,EAAiBW,EAAO9qB,EAAKrB,IAAKqB,EAAK0nB,GAChD,EAyBA/tB,EAAQwwB,iBAAmBxwB,EAAQywB,WAAaD,EAChDxwB,EAAQ0wB,YAAc1wB,EAAQ2wB,WAR9B,WACE,OAAOvqB,OAAOC,KAAK2tB,GAAU9vB,OAAOwpB,EAAIiD,aAC1C,C,kBC5DA,IAAIwD,EAAa,EAAQ,OACrBC,EAAM,EAAQ,OACd7zB,EAAW,EAAQ,OACnBsB,EAAS,gBAETouB,EAAQ,CACV,eAAgBmE,EAAIb,IAAIc,YAAYD,EAAIE,KACxC,WAAYF,EAAIE,IAChB,cAAeF,EAAIb,IAAIc,YAAYD,EAAIE,KACvC,UAAWF,EAAIE,IACf,UAAWF,EAAIb,IAAIc,YAAYD,EAAIN,KACnC,UAAWM,EAAIN,KAMjB,SAASA,EAAKS,GACZJ,EAAWjzB,KAAKP,MAChB,IAEIkI,EAFA2rB,EAAWD,EAAKpR,KAAKmO,cACrBnO,EAAO8M,EAAMuE,GAGf3rB,EADE0rB,EAAKvG,QACA,UAEA,UAET,IAAIhpB,EAAMuvB,EAAKvvB,IACVnD,EAAOE,SAASiD,KACnBA,EAAMnD,EAAO6M,KAAK1J,IAEH,YAAbwvB,GAAuC,gBAAbA,IAC5BxvB,EAAMnD,EAAOqC,OAAO,CAACc,EAAKA,EAAIzB,MAAM,EAAG,MAEzC,IAAIwqB,EAAKwG,EAAKxG,GACTlsB,EAAOE,SAASgsB,KACnBA,EAAKlsB,EAAO6M,KAAKqf,IAEnBptB,KAAK8zB,KAAOtR,EAAKuR,OAAO,CACtB1vB,IAAKA,EACL+oB,GAAIA,EACJllB,KAAMA,GAEV,CA9BAonB,EAAMmE,IAAMnE,EAAM,WAClBA,EAAM0E,KAAO1E,EAAM,gBACnB5qB,EAAOrF,QAAU8zB,EACjBvzB,EAASuzB,EAAKK,GA4BdL,EAAIlzB,UAAUyuB,QAAU,SAAU9tB,GAChC,OAAOM,EAAO6M,KAAK/N,KAAK8zB,KAAKlG,OAAOhtB,GACtC,EACAuyB,EAAIlzB,UAAU6uB,OAAS,WACrB,OAAO5tB,EAAO6M,KAAK/N,KAAK8zB,KAAK/E,QAC/B,C,gBCjDA1vB,EAAQ,WAAa,CACnBgF,IAAK,EACL+oB,GAAI,GAEN/tB,EAAQ,WAAaA,EAAQo0B,IAAM,CACjCpvB,IAAK,EACL+oB,GAAI,GAEN/tB,EAAQ,gBAAkBA,EAAQ20B,KAAO,CACvC3vB,IAAK,GACL+oB,GAAI,GAEN/tB,EAAQ,YAAc,CACpBgF,IAAK,GACL+oB,GAAI,GAEN/tB,EAAQ,eAAiB,CACvBgF,IAAK,GACL+oB,GAAI,GAEN/tB,EAAQ,WAAa,CACnBgF,IAAK,GACL+oB,GAAI,E,wCCtBF7b,EAAK,EAAQ,OACbkY,EAAc,EAAQ,OAQ1B,SAASwK,EAAMC,GACb,IACI7hB,EADA/G,EAAM4oB,EAAKC,QAAQpyB,aAEvB,GACEsQ,EAAI,IAAId,EAAGkY,EAAYne,UAChB+G,EAAEO,IAAIshB,EAAKC,UAAY,IAAM9hB,EAAE2Q,KAAKkR,EAAKE,UAAY/hB,EAAE2Q,KAAKkR,EAAKG,SAC1E,OAAOhiB,CACT,CAEA,SAASiiB,EAAK3qB,EAAKuqB,GACjB,IAAIK,EAhBN,SAAgBL,GACd,IAAI7hB,EAAI4hB,EAAKC,GAEb,MAAO,CAAEM,QADKniB,EAAEiT,MAAM/T,EAAGuX,KAAKoL,EAAKC,UAAUtN,OAAO,IAAItV,EAAG2iB,EAAKO,iBAAiB/O,UACtDgP,UAAWriB,EAAEmS,KAAK0P,EAAKC,SACpD,CAYeQ,CAAMT,GACf5oB,EAAM4oB,EAAKC,QAAQpyB,aACnB6yB,EAAU,IAAIrjB,EAAG5H,GAAK4I,IAAIgiB,EAAOC,SAASxR,KAAKkR,EAAKC,SACpDU,EAAKD,EAAQtP,MAAM/T,EAAGuX,KAAKoL,EAAKE,SAChCU,EAAKF,EAAQtP,MAAM/T,EAAGuX,KAAKoL,EAAKG,SAChCU,EAAOb,EAAKc,YACZrlB,EAAIukB,EAAKE,OACTxe,EAAIse,EAAKG,OACTxH,EAAKgI,EAAGhO,OAAOqN,EAAKe,WAAWvP,UAC/BwP,EAAKJ,EAAGjO,OAAOqN,EAAKiB,WAAWzP,UAC/BnE,EAAIsL,EAAG1U,KAAK+c,GAAI5Y,KAAKyY,GAAM/R,KAAKrT,GAAG2M,KAAK1G,GAC5C,OAAOsf,EAAGhd,KAAKqJ,GAAGjF,KAAKiY,EAAOG,WAAW1R,KAAKkR,EAAKC,SAAS3e,YAAYtU,EAAQ,KAAMoK,EACxF,CACAgpB,EAAIL,KAAOA,EAEXvvB,EAAOrF,QAAUi1B,C,yBClCjB,SAAW5vB,EAAQrF,GACjB,aAGA,SAAS+D,EAAQyC,EAAK8D,GACpB,IAAK9D,EAAK,MAAM,IAAIF,MAAMgE,GAAO,mBACnC,CAIA,SAAS/J,EAAUuR,EAAMC,GACvBD,EAAKE,OAASD,EACd,IAAIE,EAAW,WAAa,EAC5BA,EAASrR,UAAYmR,EAAUnR,UAC/BkR,EAAKlR,UAAY,IAAIqR,EACrBH,EAAKlR,UAAUgC,YAAckP,CAC/B,CAIA,SAASI,EAAIC,EAAQhS,EAAMiS,GACzB,GAAIF,EAAGG,KAAKF,GACV,OAAOA,EAGTxR,KAAK2R,SAAW,EAChB3R,KAAK4R,MAAQ,KACb5R,KAAKsB,OAAS,EAGdtB,KAAK6R,IAAM,KAEI,OAAXL,IACW,OAAThS,GAA0B,OAATA,IACnBiS,EAASjS,EACTA,EAAO,IAGTQ,KAAKmF,MAAMqM,GAAU,EAAGhS,GAAQ,GAAIiS,GAAU,MAElD,CAUA,IAAIvQ,EATkB,iBAAXwD,EACTA,EAAOrF,QAAUkS,EAEjBlS,EAAQkS,GAAKA,EAGfA,EAAGA,GAAKA,EACRA,EAAGO,SAAW,GAGd,IAEI5Q,EADoB,oBAAX6Q,aAAmD,IAAlBA,OAAO7Q,OACxC6Q,OAAO7Q,OAEP,eAEb,CAAE,MAAO0F,GACT,CA+HA,SAASoL,EAAeC,EAAQnI,GAC9B,IAAIoI,EAAID,EAAO1D,WAAWzE,GAE1B,OAAIoI,GAAK,IAAMA,GAAK,GACXA,EAAI,GAEFA,GAAK,IAAMA,GAAK,GAClBA,EAAI,GAEFA,GAAK,IAAMA,GAAK,IAClBA,EAAI,QAEX9O,GAAO,EAAO,wBAA0B6O,EAE5C,CAEA,SAASE,EAAcF,EAAQG,EAAYtI,GACzC,IAAIuI,EAAIL,EAAcC,EAAQnI,GAI9B,OAHIA,EAAQ,GAAKsI,IACfC,GAAKL,EAAcC,EAAQnI,EAAQ,IAAM,GAEpCuI,CACT,CA6CA,SAASC,EAAW/I,EAAKxC,EAAO6G,EAAK2E,GAInC,IAHA,IAAIF,EAAI,EACJkC,EAAI,EACJjJ,EAAMkH,KAAKvF,IAAI1D,EAAIjI,OAAQsM,GACtBrC,EAAIxE,EAAOwE,EAAID,EAAKC,IAAK,CAChC,IAAI2G,EAAI3I,EAAIgF,WAAWhD,GAAK,GAE5B8G,GAAKE,EAIHgC,EADErC,GAAK,GACHA,EAAI,GAAK,GAGJA,GAAK,GACVA,EAAI,GAAK,GAITA,EAEN9O,EAAO8O,GAAK,GAAKqC,EAAIhC,EAAK,qBAC1BF,GAAKkC,CACP,CACA,OAAOlC,CACT,CA2DA,SAAS+iB,EAAMvhB,EAAMwhB,GACnBxhB,EAAKjC,MAAQyjB,EAAIzjB,MACjBiC,EAAKvS,OAAS+zB,EAAI/zB,OAClBuS,EAAKlC,SAAW0jB,EAAI1jB,SACpBkC,EAAKhC,IAAMwjB,EAAIxjB,GACjB,CAqCA,GA9TAN,EAAGG,KAAO,SAAe5L,GACvB,OAAIA,aAAeyL,GAIJ,OAARzL,GAA+B,iBAARA,GAC5BA,EAAI7D,YAAY6P,WAAaP,EAAGO,UAAYpQ,MAAMC,QAAQmE,EAAI8L,MAClE,EAEAL,EAAGkB,IAAM,SAAcC,EAAMC,GAC3B,OAAID,EAAKE,IAAID,GAAS,EAAUD,EACzBC,CACT,EAEApB,EAAGtE,IAAM,SAAcyF,EAAMC,GAC3B,OAAID,EAAKE,IAAID,GAAS,EAAUD,EACzBC,CACT,EAEApB,EAAGtR,UAAUkF,MAAQ,SAAeqM,EAAQhS,EAAMiS,GAChD,GAAsB,iBAAXD,EACT,OAAOxR,KAAK6S,YAAYrB,EAAQhS,EAAMiS,GAGxC,GAAsB,iBAAXD,EACT,OAAOxR,KAAK8S,WAAWtB,EAAQhS,EAAMiS,GAG1B,QAATjS,IACFA,EAAO,IAET4D,EAAO5D,KAAiB,EAAPA,IAAaA,GAAQ,GAAKA,GAAQ,IAGnD,IAAIuH,EAAQ,EACM,OAFlByK,EAASA,EAAOrF,WAAW2B,QAAQ,OAAQ,KAEhC,KACT/G,IACA/G,KAAK2R,SAAW,GAGd5K,EAAQyK,EAAOlQ,SACJ,KAAT9B,EACFQ,KAAK+S,UAAUvB,EAAQzK,EAAO0K,IAE9BzR,KAAKgT,WAAWxB,EAAQhS,EAAMuH,GACf,OAAX0K,GACFzR,KAAK8S,WAAW9S,KAAKqP,UAAW7P,EAAMiS,IAI9C,EAEAF,EAAGtR,UAAU4S,YAAc,SAAsBrB,EAAQhS,EAAMiS,GACzDD,EAAS,IACXxR,KAAK2R,SAAW,EAChBH,GAAUA,GAERA,EAAS,UACXxR,KAAK4R,MAAQ,CAAU,SAATJ,GACdxR,KAAKsB,OAAS,GACLkQ,EAAS,kBAClBxR,KAAK4R,MAAQ,CACF,SAATJ,EACCA,EAAS,SAAa,UAEzBxR,KAAKsB,OAAS,IAEd8B,EAAOoO,EAAS,kBAChBxR,KAAK4R,MAAQ,CACF,SAATJ,EACCA,EAAS,SAAa,SACvB,GAEFxR,KAAKsB,OAAS,GAGD,OAAXmQ,GAGJzR,KAAK8S,WAAW9S,KAAKqP,UAAW7P,EAAMiS,EACxC,EAEAF,EAAGtR,UAAU6S,WAAa,SAAqBtB,EAAQhS,EAAMiS,GAG3D,GADArO,EAAgC,iBAAlBoO,EAAOlQ,QACjBkQ,EAAOlQ,QAAU,EAGnB,OAFAtB,KAAK4R,MAAQ,CAAC,GACd5R,KAAKsB,OAAS,EACPtB,KAGTA,KAAKsB,OAASkR,KAAKS,KAAKzB,EAAOlQ,OAAS,GACxCtB,KAAK4R,MAAQ,IAAIlQ,MAAM1B,KAAKsB,QAC5B,IAAK,IAAIiK,EAAI,EAAGA,EAAIvL,KAAKsB,OAAQiK,IAC/BvL,KAAK4R,MAAMrG,GAAK,EAGlB,IAAIC,EAAG0H,EACHC,EAAM,EACV,GAAe,OAAX1B,EACF,IAAKlG,EAAIiG,EAAOlQ,OAAS,EAAGkK,EAAI,EAAGD,GAAK,EAAGA,GAAK,EAC9C2H,EAAI1B,EAAOjG,GAAMiG,EAAOjG,EAAI,IAAM,EAAMiG,EAAOjG,EAAI,IAAM,GACzDvL,KAAK4R,MAAMpG,IAAO0H,GAAKC,EAAO,SAC9BnT,KAAK4R,MAAMpG,EAAI,GAAM0H,IAAO,GAAKC,EAAQ,UACzCA,GAAO,KACI,KACTA,GAAO,GACP3H,UAGC,GAAe,OAAXiG,EACT,IAAKlG,EAAI,EAAGC,EAAI,EAAGD,EAAIiG,EAAOlQ,OAAQiK,GAAK,EACzC2H,EAAI1B,EAAOjG,GAAMiG,EAAOjG,EAAI,IAAM,EAAMiG,EAAOjG,EAAI,IAAM,GACzDvL,KAAK4R,MAAMpG,IAAO0H,GAAKC,EAAO,SAC9BnT,KAAK4R,MAAMpG,EAAI,GAAM0H,IAAO,GAAKC,EAAQ,UACzCA,GAAO,KACI,KACTA,GAAO,GACP3H,KAIN,OAAOxL,KAAKkoB,QACd,EA0BA3W,EAAGtR,UAAU8S,UAAY,SAAoBvB,EAAQzK,EAAO0K,GAE1DzR,KAAKsB,OAASkR,KAAKS,MAAMzB,EAAOlQ,OAASyF,GAAS,GAClD/G,KAAK4R,MAAQ,IAAIlQ,MAAM1B,KAAKsB,QAC5B,IAAK,IAAIiK,EAAI,EAAGA,EAAIvL,KAAKsB,OAAQiK,IAC/BvL,KAAK4R,MAAMrG,GAAK,EAIlB,IAGI2H,EAHAC,EAAM,EACN3H,EAAI,EAGR,GAAe,OAAXiG,EACF,IAAKlG,EAAIiG,EAAOlQ,OAAS,EAAGiK,GAAKxE,EAAOwE,GAAK,EAC3C2H,EAAIf,EAAaX,EAAQzK,EAAOwE,IAAM4H,EACtCnT,KAAK4R,MAAMpG,IAAU,SAAJ0H,EACbC,GAAO,IACTA,GAAO,GACP3H,GAAK,EACLxL,KAAK4R,MAAMpG,IAAM0H,IAAM,IAEvBC,GAAO,OAKX,IAAK5H,GADaiG,EAAOlQ,OAASyF,GACX,GAAM,EAAIA,EAAQ,EAAIA,EAAOwE,EAAIiG,EAAOlQ,OAAQiK,GAAK,EAC1E2H,EAAIf,EAAaX,EAAQzK,EAAOwE,IAAM4H,EACtCnT,KAAK4R,MAAMpG,IAAU,SAAJ0H,EACbC,GAAO,IACTA,GAAO,GACP3H,GAAK,EACLxL,KAAK4R,MAAMpG,IAAM0H,IAAM,IAEvBC,GAAO,EAKbnT,KAAKkoB,QACP,EA6BA3W,EAAGtR,UAAU+S,WAAa,SAAqBxB,EAAQhS,EAAMuH,GAE3D/G,KAAK4R,MAAQ,CAAC,GACd5R,KAAKsB,OAAS,EAGd,IAAK,IAAI+R,EAAU,EAAGC,EAAU,EAAGA,GAAW,SAAWA,GAAW9T,EAClE6T,IAEFA,IACAC,EAAWA,EAAU9T,EAAQ,EAO7B,IALA,IAAI+T,EAAQ/B,EAAOlQ,OAASyF,EACxByM,EAAMD,EAAQF,EACdzF,EAAM4E,KAAKvF,IAAIsG,EAAOA,EAAQC,GAAOzM,EAErC0M,EAAO,EACFlI,EAAIxE,EAAOwE,EAAIqC,EAAKrC,GAAK8H,EAChCI,EAAOnB,EAAUd,EAAQjG,EAAGA,EAAI8H,EAAS7T,GAEzCQ,KAAK0T,MAAMJ,GACPtT,KAAK4R,MAAM,GAAK6B,EAAO,SACzBzT,KAAK4R,MAAM,IAAM6B,EAEjBzT,KAAK2T,OAAOF,GAIhB,GAAY,IAARD,EAAW,CACb,IAAII,EAAM,EAGV,IAFAH,EAAOnB,EAAUd,EAAQjG,EAAGiG,EAAOlQ,OAAQ9B,GAEtC+L,EAAI,EAAGA,EAAIiI,EAAKjI,IACnBqI,GAAOpU,EAGTQ,KAAK0T,MAAME,GACP5T,KAAK4R,MAAM,GAAK6B,EAAO,SACzBzT,KAAK4R,MAAM,IAAM6B,EAEjBzT,KAAK2T,OAAOF,EAEhB,CAEAzT,KAAKkoB,QACP,EAEA3W,EAAGtR,UAAUiD,KAAO,SAAe2Q,GACjCA,EAAKjC,MAAQ,IAAIlQ,MAAM1B,KAAKsB,QAC5B,IAAK,IAAIiK,EAAI,EAAGA,EAAIvL,KAAKsB,OAAQiK,IAC/BsI,EAAKjC,MAAMrG,GAAKvL,KAAK4R,MAAMrG,GAE7BsI,EAAKvS,OAAStB,KAAKsB,OACnBuS,EAAKlC,SAAW3R,KAAK2R,SACrBkC,EAAKhC,IAAM7R,KAAK6R,GAClB,EASAN,EAAGtR,UAAUq1B,MAAQ,SAAgBzhB,GACnCuhB,EAAKvhB,EAAM7T,KACb,EAEAuR,EAAGtR,UAAU2E,MAAQ,WACnB,IAAIyN,EAAI,IAAId,EAAG,MAEf,OADAvR,KAAKkD,KAAKmP,GACHA,CACT,EAEAd,EAAGtR,UAAU6T,QAAU,SAAkBpF,GACvC,KAAO1O,KAAKsB,OAASoN,GACnB1O,KAAK4R,MAAM5R,KAAKsB,UAAY,EAE9B,OAAOtB,IACT,EAGAuR,EAAGtR,UAAUioB,OAAS,WACpB,KAAOloB,KAAKsB,OAAS,GAAqC,IAAhCtB,KAAK4R,MAAM5R,KAAKsB,OAAS,IACjDtB,KAAKsB,SAEP,OAAOtB,KAAK+T,WACd,EAEAxC,EAAGtR,UAAU8T,UAAY,WAKvB,OAHoB,IAAhB/T,KAAKsB,QAAkC,IAAlBtB,KAAK4R,MAAM,KAClC5R,KAAK2R,SAAW,GAEX3R,IACT,EAIsB,oBAAXu1B,QAAgD,mBAAfA,OAAOC,IACjD,IACEjkB,EAAGtR,UAAUs1B,OAAOC,IAAI,+BAAiCxhB,CAC3D,CAAE,MAAOpN,GACP2K,EAAGtR,UAAU+T,QAAUA,CACzB,MAEAzC,EAAGtR,UAAU+T,QAAUA,EAGzB,SAASA,IACP,OAAQhU,KAAK6R,IAAM,UAAY,SAAW7R,KAAKmM,SAAS,IAAM,GAChE,CAgCA,IAAI8H,EAAQ,CACV,GACA,IACA,KACA,MACA,OACA,QACA,SACA,UACA,WACA,YACA,aACA,cACA,eACA,gBACA,iBACA,kBACA,mBACA,oBACA,qBACA,sBACA,uBACA,wBACA,yBACA,0BACA,2BACA,6BAGEC,EAAa,CACf,EAAG,EACH,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EACvB,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAClB,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAClB,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAClB,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAGhBC,EAAa,CACf,EAAG,EACH,SAAU,SAAU,SAAU,SAAU,SAAU,SAAU,SAC5D,SAAU,IAAU,SAAU,SAAU,SAAU,QAAS,SAC3D,SAAU,SAAU,SAAU,SAAU,KAAU,QAAS,QAC3D,QAAS,QAAS,QAAS,SAAU,SAAU,SAAU,SACzD,MAAU,SAAU,SAAU,SAAU,SAAU,SAAU,UA4mB9D,SAASC,EAAYC,EAAMvO,EAAKhD,GAC9BA,EAAI6O,SAAW7L,EAAI6L,SAAW0C,EAAK1C,SACnC,IAAIrG,EAAO+I,EAAK/S,OAASwE,EAAIxE,OAAU,EACvCwB,EAAIxB,OAASgK,EACbA,EAAOA,EAAM,EAAK,EAGlB,IAAIgJ,EAAoB,EAAhBD,EAAKzC,MAAM,GACf2C,EAAmB,EAAfzO,EAAI8L,MAAM,GACdS,EAAIiC,EAAIC,EAERC,EAAS,SAAJnC,EACLoC,EAASpC,EAAI,SAAa,EAC9BvP,EAAI8O,MAAM,GAAK4C,EAEf,IAAK,IAAIE,EAAI,EAAGA,EAAIpJ,EAAKoJ,IAAK,CAM5B,IAHA,IAAIC,EAASF,IAAU,GACnBG,EAAgB,SAARH,EACRI,EAAOrC,KAAKvF,IAAIyH,EAAG5O,EAAIxE,OAAS,GAC3BkK,EAAIgH,KAAKC,IAAI,EAAGiC,EAAIL,EAAK/S,OAAS,GAAIkK,GAAKqJ,EAAMrJ,IAAK,CAC7D,IAAID,EAAKmJ,EAAIlJ,EAAK,EAIlBmJ,IADAtC,GAFAiC,EAAoB,EAAhBD,EAAKzC,MAAMrG,KACfgJ,EAAmB,EAAfzO,EAAI8L,MAAMpG,IACFoJ,GACG,SAAa,EAC5BA,EAAY,SAAJvC,CACV,CACAvP,EAAI8O,MAAM8C,GAAa,EAARE,EACfH,EAAiB,EAATE,CACV,CAOA,OANc,IAAVF,EACF3R,EAAI8O,MAAM8C,GAAa,EAARD,EAEf3R,EAAIxB,SAGCwB,EAAIolB,QACb,CAhpBA3W,EAAGtR,UAAUkM,SAAW,SAAmB3M,EAAMsV,GAI/C,IAAIhS,EACJ,GAHAgS,EAAoB,EAAVA,GAAe,EAGZ,MAJbtV,EAAOA,GAAQ,KAIa,QAATA,EAAgB,CACjCsD,EAAM,GAGN,IAFA,IAAIqQ,EAAM,EACNsB,EAAQ,EACHlJ,EAAI,EAAGA,EAAIvL,KAAKsB,OAAQiK,IAAK,CACpC,IAAI2H,EAAIlT,KAAK4R,MAAMrG,GACfkI,GAA+B,UAArBP,GAAKC,EAAOsB,IAAmBtI,SAAS,IACtDsI,EAASvB,IAAO,GAAKC,EAAQ,UAC7BA,GAAO,IACI,KACTA,GAAO,GACP5H,KAGAzI,EADY,IAAV2R,GAAelJ,IAAMvL,KAAKsB,OAAS,EAC/B2S,EAAM,EAAIR,EAAKnS,QAAUmS,EAAO3Q,EAEhC2Q,EAAO3Q,CAEjB,CAIA,IAHc,IAAV2R,IACF3R,EAAM2R,EAAMtI,SAAS,IAAMrJ,GAEtBA,EAAIxB,OAASwT,GAAY,GAC9BhS,EAAM,IAAMA,EAKd,OAHsB,IAAlB9C,KAAK2R,WACP7O,EAAM,IAAMA,GAEPA,CACT,CAEA,GAAItD,KAAiB,EAAPA,IAAaA,GAAQ,GAAKA,GAAQ,GAAI,CAElD,IAAIuV,EAAYb,EAAW1U,GAEvBwV,EAAYb,EAAW3U,GAC3BsD,EAAM,GACN,IAAIoP,EAAIlS,KAAK4E,QAEb,IADAsN,EAAEP,SAAW,GACLO,EAAE+C,UAAU,CAClB,IAAI5C,EAAIH,EAAEujB,MAAMzgB,GAAW7I,SAAS3M,GAMlCsD,GALFoP,EAAIA,EAAEiD,MAAMH,IAELC,SAGC5C,EAAIvP,EAFJmR,EAAMc,EAAY1C,EAAE/Q,QAAU+Q,EAAIvP,CAI5C,CAIA,IAHI9C,KAAKiV,WACPnS,EAAM,IAAMA,GAEPA,EAAIxB,OAASwT,GAAY,GAC9BhS,EAAM,IAAMA,EAKd,OAHsB,IAAlB9C,KAAK2R,WACP7O,EAAM,IAAMA,GAEPA,CACT,CAEAM,GAAO,EAAO,kCAChB,EAEAmO,EAAGtR,UAAUmV,SAAW,WACtB,IAAIC,EAAMrV,KAAK4R,MAAM,GASrB,OARoB,IAAhB5R,KAAKsB,OACP+T,GAAuB,SAAhBrV,KAAK4R,MAAM,GACO,IAAhB5R,KAAKsB,QAAkC,IAAlBtB,KAAK4R,MAAM,GAEzCyD,GAAO,iBAAoC,SAAhBrV,KAAK4R,MAAM,GAC7B5R,KAAKsB,OAAS,GACvB8B,GAAO,EAAO,8CAEU,IAAlBpD,KAAK2R,UAAmB0D,EAAMA,CACxC,EAEA9D,EAAGtR,UAAUqV,OAAS,WACpB,OAAOtV,KAAKmM,SAAS,GAAI,EAC3B,EAEIjL,IACFqQ,EAAGtR,UAAUsV,SAAW,SAAmB9D,EAAQnQ,GACjD,OAAOtB,KAAKwV,YAAYtU,EAAQuQ,EAAQnQ,EAC1C,GAGFiQ,EAAGtR,UAAUoP,QAAU,SAAkBoC,EAAQnQ,GAC/C,OAAOtB,KAAKwV,YAAY9T,MAAO+P,EAAQnQ,EACzC,EASAiQ,EAAGtR,UAAUuV,YAAc,SAAsBC,EAAWhE,EAAQnQ,GAClEtB,KAAKkoB,SAEL,IAAInmB,EAAa/B,KAAK+B,aAClB2T,EAAYpU,GAAUkR,KAAKC,IAAI,EAAG1Q,GACtCqB,EAAOrB,GAAc2T,EAAW,yCAChCtS,EAAOsS,EAAY,EAAG,+BAEtB,IAAIlT,EAfS,SAAmBiT,EAAW/G,GAC3C,OAAI+G,EAAUiX,YACLjX,EAAUiX,YAAYhe,GAExB,IAAI+G,EAAU/G,EACvB,CAUYgnB,CAASjgB,EAAWC,GAG9B,OADA1V,KAAK,gBADoB,OAAXyR,EAAkB,KAAO,OACRjP,EAAKT,GAC7BS,CACT,EAEA+O,EAAGtR,UAAU01B,eAAiB,SAAyBnzB,EAAKT,GAI1D,IAHA,IAAI6zB,EAAW,EACXnhB,EAAQ,EAEHlJ,EAAI,EAAG+W,EAAQ,EAAG/W,EAAIvL,KAAKsB,OAAQiK,IAAK,CAC/C,IAAIkI,EAAQzT,KAAK4R,MAAMrG,IAAM+W,EAAS7N,EAEtCjS,EAAIozB,KAAqB,IAAPniB,EACdmiB,EAAWpzB,EAAIlB,SACjBkB,EAAIozB,KAAeniB,GAAQ,EAAK,KAE9BmiB,EAAWpzB,EAAIlB,SACjBkB,EAAIozB,KAAeniB,GAAQ,GAAM,KAGrB,IAAV6O,GACEsT,EAAWpzB,EAAIlB,SACjBkB,EAAIozB,KAAeniB,GAAQ,GAAM,KAEnCgB,EAAQ,EACR6N,EAAQ,IAER7N,EAAQhB,IAAS,GACjB6O,GAAS,EAEb,CAEA,GAAIsT,EAAWpzB,EAAIlB,OAGjB,IAFAkB,EAAIozB,KAAcnhB,EAEXmhB,EAAWpzB,EAAIlB,QACpBkB,EAAIozB,KAAc,CAGxB,EAEArkB,EAAGtR,UAAU41B,eAAiB,SAAyBrzB,EAAKT,GAI1D,IAHA,IAAI6zB,EAAWpzB,EAAIlB,OAAS,EACxBmT,EAAQ,EAEHlJ,EAAI,EAAG+W,EAAQ,EAAG/W,EAAIvL,KAAKsB,OAAQiK,IAAK,CAC/C,IAAIkI,EAAQzT,KAAK4R,MAAMrG,IAAM+W,EAAS7N,EAEtCjS,EAAIozB,KAAqB,IAAPniB,EACdmiB,GAAY,IACdpzB,EAAIozB,KAAeniB,GAAQ,EAAK,KAE9BmiB,GAAY,IACdpzB,EAAIozB,KAAeniB,GAAQ,GAAM,KAGrB,IAAV6O,GACEsT,GAAY,IACdpzB,EAAIozB,KAAeniB,GAAQ,GAAM,KAEnCgB,EAAQ,EACR6N,EAAQ,IAER7N,EAAQhB,IAAS,GACjB6O,GAAS,EAEb,CAEA,GAAIsT,GAAY,EAGd,IAFApzB,EAAIozB,KAAcnhB,EAEXmhB,GAAY,GACjBpzB,EAAIozB,KAAc,CAGxB,EAEIpjB,KAAKuD,MACPxE,EAAGtR,UAAU+V,WAAa,SAAqB9C,GAC7C,OAAO,GAAKV,KAAKuD,MAAM7C,EACzB,EAEA3B,EAAGtR,UAAU+V,WAAa,SAAqB9C,GAC7C,IAAI+C,EAAI/C,EACJb,EAAI,EAiBR,OAhBI4D,GAAK,OACP5D,GAAK,GACL4D,KAAO,IAELA,GAAK,KACP5D,GAAK,EACL4D,KAAO,GAELA,GAAK,IACP5D,GAAK,EACL4D,KAAO,GAELA,GAAK,IACP5D,GAAK,EACL4D,KAAO,GAEF5D,EAAI4D,CACb,EAGF1E,EAAGtR,UAAUiW,UAAY,SAAoBhD,GAE3C,GAAU,IAANA,EAAS,OAAO,GAEpB,IAAI+C,EAAI/C,EACJb,EAAI,EAoBR,OAnBqB,IAAZ,KAAJ4D,KACH5D,GAAK,GACL4D,KAAO,IAEU,IAAV,IAAJA,KACH5D,GAAK,EACL4D,KAAO,GAES,IAAT,GAAJA,KACH5D,GAAK,EACL4D,KAAO,GAES,IAAT,EAAJA,KACH5D,GAAK,EACL4D,KAAO,GAES,IAAT,EAAJA,IACH5D,IAEKA,CACT,EAGAd,EAAGtR,UAAUkW,UAAY,WACvB,IAAIjD,EAAIlT,KAAK4R,MAAM5R,KAAKsB,OAAS,GAC7B8U,EAAKpW,KAAKgW,WAAW9C,GACzB,OAA2B,IAAnBlT,KAAKsB,OAAS,GAAU8U,CAClC,EAgBA7E,EAAGtR,UAAUoW,SAAW,WACtB,GAAIrW,KAAKiV,SAAU,OAAO,EAG1B,IADA,IAAI5C,EAAI,EACC9G,EAAI,EAAGA,EAAIvL,KAAKsB,OAAQiK,IAAK,CACpC,IAAIgJ,EAAIvU,KAAKkW,UAAUlW,KAAK4R,MAAMrG,IAElC,GADA8G,GAAKkC,EACK,KAANA,EAAU,KAChB,CACA,OAAOlC,CACT,EAEAd,EAAGtR,UAAU8B,WAAa,WACxB,OAAOyQ,KAAKS,KAAKjT,KAAKmW,YAAc,EACtC,EAEA5E,EAAGtR,UAAUqW,OAAS,SAAiBC,GACrC,OAAsB,IAAlBvW,KAAK2R,SACA3R,KAAKwW,MAAMC,MAAMF,GAAOG,MAAM,GAEhC1W,KAAK4E,OACd,EAEA2M,EAAGtR,UAAU0W,SAAW,SAAmBJ,GACzC,OAAIvW,KAAK4W,MAAML,EAAQ,GACdvW,KAAK6W,KAAKN,GAAOG,MAAM,GAAGI,OAE5B9W,KAAK4E,OACd,EAEA2M,EAAGtR,UAAU8W,MAAQ,WACnB,OAAyB,IAAlB/W,KAAK2R,QACd,EAGAJ,EAAGtR,UAAU+W,IAAM,WACjB,OAAOhX,KAAK4E,QAAQkS,MACtB,EAEAvF,EAAGtR,UAAU6W,KAAO,WAKlB,OAJK9W,KAAKiV,WACRjV,KAAK2R,UAAY,GAGZ3R,IACT,EAGAuR,EAAGtR,UAAUgX,KAAO,SAAenR,GACjC,KAAO9F,KAAKsB,OAASwE,EAAIxE,QACvBtB,KAAK4R,MAAM5R,KAAKsB,UAAY,EAG9B,IAAK,IAAIiK,EAAI,EAAGA,EAAIzF,EAAIxE,OAAQiK,IAC9BvL,KAAK4R,MAAMrG,GAAKvL,KAAK4R,MAAMrG,GAAKzF,EAAI8L,MAAMrG,GAG5C,OAAOvL,KAAKkoB,QACd,EAEA3W,EAAGtR,UAAUiX,IAAM,SAAcpR,GAE/B,OADA1C,EAA0C,IAAlCpD,KAAK2R,SAAW7L,EAAI6L,WACrB3R,KAAKiX,KAAKnR,EACnB,EAGAyL,EAAGtR,UAAUkX,GAAK,SAAarR,GAC7B,OAAI9F,KAAKsB,OAASwE,EAAIxE,OAAetB,KAAK4E,QAAQsS,IAAIpR,GAC/CA,EAAIlB,QAAQsS,IAAIlX,KACzB,EAEAuR,EAAGtR,UAAUmX,IAAM,SAActR,GAC/B,OAAI9F,KAAKsB,OAASwE,EAAIxE,OAAetB,KAAK4E,QAAQqS,KAAKnR,GAChDA,EAAIlB,QAAQqS,KAAKjX,KAC1B,EAGAuR,EAAGtR,UAAUoX,MAAQ,SAAgBvR,GAEnC,IAAIyO,EAEFA,EADEvU,KAAKsB,OAASwE,EAAIxE,OAChBwE,EAEA9F,KAGN,IAAK,IAAIuL,EAAI,EAAGA,EAAIgJ,EAAEjT,OAAQiK,IAC5BvL,KAAK4R,MAAMrG,GAAKvL,KAAK4R,MAAMrG,GAAKzF,EAAI8L,MAAMrG,GAK5C,OAFAvL,KAAKsB,OAASiT,EAAEjT,OAETtB,KAAKkoB,QACd,EAEA3W,EAAGtR,UAAUqX,KAAO,SAAexR,GAEjC,OADA1C,EAA0C,IAAlCpD,KAAK2R,SAAW7L,EAAI6L,WACrB3R,KAAKqX,MAAMvR,EACpB,EAGAyL,EAAGtR,UAAUsX,IAAM,SAAczR,GAC/B,OAAI9F,KAAKsB,OAASwE,EAAIxE,OAAetB,KAAK4E,QAAQ0S,KAAKxR,GAChDA,EAAIlB,QAAQ0S,KAAKtX,KAC1B,EAEAuR,EAAGtR,UAAUuX,KAAO,SAAe1R,GACjC,OAAI9F,KAAKsB,OAASwE,EAAIxE,OAAetB,KAAK4E,QAAQyS,MAAMvR,GACjDA,EAAIlB,QAAQyS,MAAMrX,KAC3B,EAGAuR,EAAGtR,UAAUwX,MAAQ,SAAgB3R,GAEnC,IAAIwO,EACAC,EACAvU,KAAKsB,OAASwE,EAAIxE,QACpBgT,EAAItU,KACJuU,EAAIzO,IAEJwO,EAAIxO,EACJyO,EAAIvU,MAGN,IAAK,IAAIuL,EAAI,EAAGA,EAAIgJ,EAAEjT,OAAQiK,IAC5BvL,KAAK4R,MAAMrG,GAAK+I,EAAE1C,MAAMrG,GAAKgJ,EAAE3C,MAAMrG,GAGvC,GAAIvL,OAASsU,EACX,KAAO/I,EAAI+I,EAAEhT,OAAQiK,IACnBvL,KAAK4R,MAAMrG,GAAK+I,EAAE1C,MAAMrG,GAM5B,OAFAvL,KAAKsB,OAASgT,EAAEhT,OAETtB,KAAKkoB,QACd,EAEA3W,EAAGtR,UAAUyX,KAAO,SAAe5R,GAEjC,OADA1C,EAA0C,IAAlCpD,KAAK2R,SAAW7L,EAAI6L,WACrB3R,KAAKyX,MAAM3R,EACpB,EAGAyL,EAAGtR,UAAU0X,IAAM,SAAc7R,GAC/B,OAAI9F,KAAKsB,OAASwE,EAAIxE,OAAetB,KAAK4E,QAAQ8S,KAAK5R,GAChDA,EAAIlB,QAAQ8S,KAAK1X,KAC1B,EAEAuR,EAAGtR,UAAU2X,KAAO,SAAe9R,GACjC,OAAI9F,KAAKsB,OAASwE,EAAIxE,OAAetB,KAAK4E,QAAQ6S,MAAM3R,GACjDA,EAAIlB,QAAQ6S,MAAMzX,KAC3B,EAGAuR,EAAGtR,UAAUwW,MAAQ,SAAgBF,GACnCnT,EAAwB,iBAAVmT,GAAsBA,GAAS,GAE7C,IAAIsB,EAAsC,EAAxBrF,KAAKS,KAAKsD,EAAQ,IAChCuB,EAAWvB,EAAQ,GAGvBvW,KAAK8T,QAAQ+D,GAETC,EAAW,GACbD,IAIF,IAAK,IAAItM,EAAI,EAAGA,EAAIsM,EAAatM,IAC/BvL,KAAK4R,MAAMrG,GAAsB,UAAhBvL,KAAK4R,MAAMrG,GAS9B,OALIuM,EAAW,IACb9X,KAAK4R,MAAMrG,IAAMvL,KAAK4R,MAAMrG,GAAM,UAAc,GAAKuM,GAIhD9X,KAAKkoB,QACd,EAEA3W,EAAGtR,UAAU4W,KAAO,SAAeN,GACjC,OAAOvW,KAAK4E,QAAQ6R,MAAMF,EAC5B,EAGAhF,EAAGtR,UAAU8X,KAAO,SAAeC,EAAKnS,GACtCzC,EAAsB,iBAAR4U,GAAoBA,GAAO,GAEzC,IAAI7E,EAAO6E,EAAM,GAAM,EACnBC,EAAOD,EAAM,GAUjB,OARAhY,KAAK8T,QAAQX,EAAM,GAGjBnT,KAAK4R,MAAMuB,GADTtN,EACgB7F,KAAK4R,MAAMuB,GAAQ,GAAK8E,EAExBjY,KAAK4R,MAAMuB,KAAS,GAAK8E,GAGtCjY,KAAKkoB,QACd,EAGA3W,EAAGtR,UAAUiY,KAAO,SAAepS,GACjC,IAAIuM,EAkBAiC,EAAGC,EAfP,GAAsB,IAAlBvU,KAAK2R,UAAmC,IAAjB7L,EAAI6L,SAI7B,OAHA3R,KAAK2R,SAAW,EAChBU,EAAIrS,KAAKmY,KAAKrS,GACd9F,KAAK2R,UAAY,EACV3R,KAAK+T,YAGP,GAAsB,IAAlB/T,KAAK2R,UAAmC,IAAjB7L,EAAI6L,SAIpC,OAHA7L,EAAI6L,SAAW,EACfU,EAAIrS,KAAKmY,KAAKrS,GACdA,EAAI6L,SAAW,EACRU,EAAE0B,YAKP/T,KAAKsB,OAASwE,EAAIxE,QACpBgT,EAAItU,KACJuU,EAAIzO,IAEJwO,EAAIxO,EACJyO,EAAIvU,MAIN,IADA,IAAIyU,EAAQ,EACHlJ,EAAI,EAAGA,EAAIgJ,EAAEjT,OAAQiK,IAC5B8G,GAAkB,EAAbiC,EAAE1C,MAAMrG,KAAwB,EAAbgJ,EAAE3C,MAAMrG,IAAUkJ,EAC1CzU,KAAK4R,MAAMrG,GAAS,SAAJ8G,EAChBoC,EAAQpC,IAAM,GAEhB,KAAiB,IAAVoC,GAAelJ,EAAI+I,EAAEhT,OAAQiK,IAClC8G,GAAkB,EAAbiC,EAAE1C,MAAMrG,IAAUkJ,EACvBzU,KAAK4R,MAAMrG,GAAS,SAAJ8G,EAChBoC,EAAQpC,IAAM,GAIhB,GADArS,KAAKsB,OAASgT,EAAEhT,OACF,IAAVmT,EACFzU,KAAK4R,MAAM5R,KAAKsB,QAAUmT,EAC1BzU,KAAKsB,cAEA,GAAIgT,IAAMtU,KACf,KAAOuL,EAAI+I,EAAEhT,OAAQiK,IACnBvL,KAAK4R,MAAMrG,GAAK+I,EAAE1C,MAAMrG,GAI5B,OAAOvL,IACT,EAGAuR,EAAGtR,UAAUmY,IAAM,SAActS,GAC/B,IAAItD,EACJ,OAAqB,IAAjBsD,EAAI6L,UAAoC,IAAlB3R,KAAK2R,UAC7B7L,EAAI6L,SAAW,EACfnP,EAAMxC,KAAKqY,IAAIvS,GACfA,EAAI6L,UAAY,EACTnP,GACmB,IAAjBsD,EAAI6L,UAAoC,IAAlB3R,KAAK2R,UACpC3R,KAAK2R,SAAW,EAChBnP,EAAMsD,EAAIuS,IAAIrY,MACdA,KAAK2R,SAAW,EACTnP,GAGLxC,KAAKsB,OAASwE,EAAIxE,OAAetB,KAAK4E,QAAQsT,KAAKpS,GAEhDA,EAAIlB,QAAQsT,KAAKlY,KAC1B,EAGAuR,EAAGtR,UAAUkY,KAAO,SAAerS,GAEjC,GAAqB,IAAjBA,EAAI6L,SAAgB,CACtB7L,EAAI6L,SAAW,EACf,IAAIU,EAAIrS,KAAKkY,KAAKpS,GAElB,OADAA,EAAI6L,SAAW,EACRU,EAAE0B,WAGX,CAAO,GAAsB,IAAlB/T,KAAK2R,SAId,OAHA3R,KAAK2R,SAAW,EAChB3R,KAAKkY,KAAKpS,GACV9F,KAAK2R,SAAW,EACT3R,KAAK+T,YAId,IAWIO,EAAGC,EAXH3B,EAAM5S,KAAK4S,IAAI9M,GAGnB,GAAY,IAAR8M,EAIF,OAHA5S,KAAK2R,SAAW,EAChB3R,KAAKsB,OAAS,EACdtB,KAAK4R,MAAM,GAAK,EACT5R,KAKL4S,EAAM,GACR0B,EAAItU,KACJuU,EAAIzO,IAEJwO,EAAIxO,EACJyO,EAAIvU,MAIN,IADA,IAAIyU,EAAQ,EACHlJ,EAAI,EAAGA,EAAIgJ,EAAEjT,OAAQiK,IAE5BkJ,GADApC,GAAkB,EAAbiC,EAAE1C,MAAMrG,KAAwB,EAAbgJ,EAAE3C,MAAMrG,IAAUkJ,IAC7B,GACbzU,KAAK4R,MAAMrG,GAAS,SAAJ8G,EAElB,KAAiB,IAAVoC,GAAelJ,EAAI+I,EAAEhT,OAAQiK,IAElCkJ,GADApC,GAAkB,EAAbiC,EAAE1C,MAAMrG,IAAUkJ,IACV,GACbzU,KAAK4R,MAAMrG,GAAS,SAAJ8G,EAIlB,GAAc,IAAVoC,GAAelJ,EAAI+I,EAAEhT,QAAUgT,IAAMtU,KACvC,KAAOuL,EAAI+I,EAAEhT,OAAQiK,IACnBvL,KAAK4R,MAAMrG,GAAK+I,EAAE1C,MAAMrG,GAU5B,OANAvL,KAAKsB,OAASkR,KAAKC,IAAIzS,KAAKsB,OAAQiK,GAEhC+I,IAAMtU,OACRA,KAAK2R,SAAW,GAGX3R,KAAKkoB,QACd,EAGA3W,EAAGtR,UAAUoY,IAAM,SAAcvS,GAC/B,OAAO9F,KAAK4E,QAAQuT,KAAKrS,EAC3B,EA8CA,IAAIwS,EAAc,SAAsBjE,EAAMvO,EAAKhD,GACjD,IAII0R,EACA+D,EACAnC,EANA9B,EAAID,EAAKzC,MACT2C,EAAIzO,EAAI8L,MACR4G,EAAI1V,EAAI8O,MACRM,EAAI,EAIJuG,EAAY,EAAPnE,EAAE,GACPoE,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAPtE,EAAE,GACPuE,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAPzE,EAAE,GACP0E,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAP5E,EAAE,GACP6E,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAP/E,EAAE,GACPgF,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAPlF,EAAE,GACPmF,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAPrF,EAAE,GACPsF,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAPxF,EAAE,GACPyF,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAP3F,EAAE,GACP4F,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAP9F,EAAE,GACP+F,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAPhG,EAAE,GACPiG,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAPnG,EAAE,GACPoG,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAPtG,EAAE,GACPuG,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAPzG,EAAE,GACP0G,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAP5G,EAAE,GACP6G,EAAW,KAALD,EACNE,GAAMF,IAAO,GACbG,GAAY,EAAP/G,EAAE,GACPgH,GAAW,KAALD,GACNE,GAAMF,KAAO,GACbG,GAAY,EAAPlH,EAAE,GACPmH,GAAW,KAALD,GACNE,GAAMF,KAAO,GACbG,GAAY,EAAPrH,EAAE,GACPsH,GAAW,KAALD,GACNE,GAAMF,KAAO,GACbG,GAAY,EAAPxH,EAAE,GACPyH,GAAW,KAALD,GACNE,GAAMF,KAAO,GACbG,GAAY,EAAP3H,EAAE,GACP4H,GAAW,KAALD,GACNE,GAAMF,KAAO,GAEjBpZ,EAAI6O,SAAW0C,EAAK1C,SAAW7L,EAAI6L,SACnC7O,EAAIxB,OAAS,GAMb,IAAI+a,IAAQnK,GAJZsC,EAAKhC,KAAK8J,KAAK5D,EAAK8B,IAIE,KAAa,MAFnCjC,GADAA,EAAM/F,KAAK8J,KAAK5D,EAAK+B,IACRjI,KAAK8J,KAAK3D,EAAK6B,GAAQ,KAEU,IAAO,EACrDtI,IAFAkE,EAAK5D,KAAK8J,KAAK3D,EAAK8B,KAEPlC,IAAQ,IAAO,IAAM8D,KAAO,IAAO,EAChDA,IAAM,SAEN7H,EAAKhC,KAAK8J,KAAKzD,EAAK2B,GAEpBjC,GADAA,EAAM/F,KAAK8J,KAAKzD,EAAK4B,IACRjI,KAAK8J,KAAKxD,EAAK0B,GAAQ,EACpCpE,EAAK5D,KAAK8J,KAAKxD,EAAK2B,GAKpB,IAAI8B,IAAQrK,GAJZsC,EAAMA,EAAKhC,KAAK8J,KAAK5D,EAAKiC,GAAQ,GAIZ,KAAa,MAFnCpC,GADAA,EAAOA,EAAM/F,KAAK8J,KAAK5D,EAAKkC,GAAQ,GACvBpI,KAAK8J,KAAK3D,EAAKgC,GAAQ,KAEU,IAAO,EACrDzI,IAFAkE,EAAMA,EAAK5D,KAAK8J,KAAK3D,EAAKiC,GAAQ,IAErBrC,IAAQ,IAAO,IAAMgE,KAAO,IAAO,EAChDA,IAAM,SAEN/H,EAAKhC,KAAK8J,KAAKtD,EAAKwB,GAEpBjC,GADAA,EAAM/F,KAAK8J,KAAKtD,EAAKyB,IACRjI,KAAK8J,KAAKrD,EAAKuB,GAAQ,EACpCpE,EAAK5D,KAAK8J,KAAKrD,EAAKwB,GACpBjG,EAAMA,EAAKhC,KAAK8J,KAAKzD,EAAK8B,GAAQ,EAElCpC,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKzD,EAAK+B,GAAQ,GACvBpI,KAAK8J,KAAKxD,EAAK6B,GAAQ,EACpCvE,EAAMA,EAAK5D,KAAK8J,KAAKxD,EAAK8B,GAAQ,EAKlC,IAAI4B,IAAQtK,GAJZsC,EAAMA,EAAKhC,KAAK8J,KAAK5D,EAAKoC,GAAQ,GAIZ,KAAa,MAFnCvC,GADAA,EAAOA,EAAM/F,KAAK8J,KAAK5D,EAAKqC,GAAQ,GACvBvI,KAAK8J,KAAK3D,EAAKmC,GAAQ,KAEU,IAAO,EACrD5I,IAFAkE,EAAMA,EAAK5D,KAAK8J,KAAK3D,EAAKoC,GAAQ,IAErBxC,IAAQ,IAAO,IAAMiE,KAAO,IAAO,EAChDA,IAAM,SAENhI,EAAKhC,KAAK8J,KAAKnD,EAAKqB,GAEpBjC,GADAA,EAAM/F,KAAK8J,KAAKnD,EAAKsB,IACRjI,KAAK8J,KAAKlD,EAAKoB,GAAQ,EACpCpE,EAAK5D,KAAK8J,KAAKlD,EAAKqB,GACpBjG,EAAMA,EAAKhC,KAAK8J,KAAKtD,EAAK2B,GAAQ,EAElCpC,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKtD,EAAK4B,GAAQ,GACvBpI,KAAK8J,KAAKrD,EAAK0B,GAAQ,EACpCvE,EAAMA,EAAK5D,KAAK8J,KAAKrD,EAAK2B,GAAQ,EAClCpG,EAAMA,EAAKhC,KAAK8J,KAAKzD,EAAKiC,GAAQ,EAElCvC,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKzD,EAAKkC,GAAQ,GACvBvI,KAAK8J,KAAKxD,EAAKgC,GAAQ,EACpC1E,EAAMA,EAAK5D,KAAK8J,KAAKxD,EAAKiC,GAAQ,EAKlC,IAAI0B,IAAQvK,GAJZsC,EAAMA,EAAKhC,KAAK8J,KAAK5D,EAAKuC,GAAQ,GAIZ,KAAa,MAFnC1C,GADAA,EAAOA,EAAM/F,KAAK8J,KAAK5D,EAAKwC,GAAQ,GACvB1I,KAAK8J,KAAK3D,EAAKsC,GAAQ,KAEU,IAAO,EACrD/I,IAFAkE,EAAMA,EAAK5D,KAAK8J,KAAK3D,EAAKuC,GAAQ,IAErB3C,IAAQ,IAAO,IAAMkE,KAAO,IAAO,EAChDA,IAAM,SAENjI,EAAKhC,KAAK8J,KAAKhD,EAAKkB,GAEpBjC,GADAA,EAAM/F,KAAK8J,KAAKhD,EAAKmB,IACRjI,KAAK8J,KAAK/C,EAAKiB,GAAQ,EACpCpE,EAAK5D,KAAK8J,KAAK/C,EAAKkB,GACpBjG,EAAMA,EAAKhC,KAAK8J,KAAKnD,EAAKwB,GAAQ,EAElCpC,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKnD,EAAKyB,GAAQ,GACvBpI,KAAK8J,KAAKlD,EAAKuB,GAAQ,EACpCvE,EAAMA,EAAK5D,KAAK8J,KAAKlD,EAAKwB,GAAQ,EAClCpG,EAAMA,EAAKhC,KAAK8J,KAAKtD,EAAK8B,GAAQ,EAElCvC,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKtD,EAAK+B,GAAQ,GACvBvI,KAAK8J,KAAKrD,EAAK6B,GAAQ,EACpC1E,EAAMA,EAAK5D,KAAK8J,KAAKrD,EAAK8B,GAAQ,EAClCvG,EAAMA,EAAKhC,KAAK8J,KAAKzD,EAAKoC,GAAQ,EAElC1C,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKzD,EAAKqC,GAAQ,GACvB1I,KAAK8J,KAAKxD,EAAKmC,GAAQ,EACpC7E,EAAMA,EAAK5D,KAAK8J,KAAKxD,EAAKoC,GAAQ,EAKlC,IAAIwB,IAAQxK,GAJZsC,EAAMA,EAAKhC,KAAK8J,KAAK5D,EAAK0C,GAAQ,GAIZ,KAAa,MAFnC7C,GADAA,EAAOA,EAAM/F,KAAK8J,KAAK5D,EAAK2C,IAAQ,GACvB7I,KAAK8J,KAAK3D,EAAKyC,GAAQ,KAEU,IAAO,EACrDlJ,IAFAkE,EAAMA,EAAK5D,KAAK8J,KAAK3D,EAAK0C,IAAQ,IAErB9C,IAAQ,IAAO,IAAMmE,KAAO,IAAO,EAChDA,IAAM,SAENlI,EAAKhC,KAAK8J,KAAK7C,EAAKe,GAEpBjC,GADAA,EAAM/F,KAAK8J,KAAK7C,EAAKgB,IACRjI,KAAK8J,KAAK5C,EAAKc,GAAQ,EACpCpE,EAAK5D,KAAK8J,KAAK5C,EAAKe,GACpBjG,EAAMA,EAAKhC,KAAK8J,KAAKhD,EAAKqB,GAAQ,EAElCpC,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKhD,EAAKsB,GAAQ,GACvBpI,KAAK8J,KAAK/C,EAAKoB,GAAQ,EACpCvE,EAAMA,EAAK5D,KAAK8J,KAAK/C,EAAKqB,GAAQ,EAClCpG,EAAMA,EAAKhC,KAAK8J,KAAKnD,EAAK2B,GAAQ,EAElCvC,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKnD,EAAK4B,GAAQ,GACvBvI,KAAK8J,KAAKlD,EAAK0B,GAAQ,EACpC1E,EAAMA,EAAK5D,KAAK8J,KAAKlD,EAAK2B,GAAQ,EAClCvG,EAAMA,EAAKhC,KAAK8J,KAAKtD,EAAKiC,GAAQ,EAElC1C,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKtD,EAAKkC,GAAQ,GACvB1I,KAAK8J,KAAKrD,EAAKgC,GAAQ,EACpC7E,EAAMA,EAAK5D,KAAK8J,KAAKrD,EAAKiC,GAAQ,EAClC1G,EAAMA,EAAKhC,KAAK8J,KAAKzD,EAAKuC,GAAQ,EAElC7C,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKzD,EAAKwC,IAAQ,GACvB7I,KAAK8J,KAAKxD,EAAKsC,GAAQ,EACpChF,EAAMA,EAAK5D,KAAK8J,KAAKxD,EAAKuC,IAAQ,EAKlC,IAAIsB,IAAQzK,GAJZsC,EAAMA,EAAKhC,KAAK8J,KAAK5D,EAAK6C,IAAQ,GAIZ,KAAa,MAFnChD,GADAA,EAAOA,EAAM/F,KAAK8J,KAAK5D,EAAK8C,IAAQ,GACvBhJ,KAAK8J,KAAK3D,EAAK4C,IAAQ,KAEU,IAAO,EACrDrJ,IAFAkE,EAAMA,EAAK5D,KAAK8J,KAAK3D,EAAK6C,IAAQ,IAErBjD,IAAQ,IAAO,IAAMoE,KAAO,IAAO,EAChDA,IAAM,SAENnI,EAAKhC,KAAK8J,KAAK1C,EAAKY,GAEpBjC,GADAA,EAAM/F,KAAK8J,KAAK1C,EAAKa,IACRjI,KAAK8J,KAAKzC,EAAKW,GAAQ,EACpCpE,EAAK5D,KAAK8J,KAAKzC,EAAKY,GACpBjG,EAAMA,EAAKhC,KAAK8J,KAAK7C,EAAKkB,GAAQ,EAElCpC,GADAA,EAAOA,EAAM/F,KAAK8J,KAAK7C,EAAKmB,GAAQ,GACvBpI,KAAK8J,KAAK5C,EAAKiB,GAAQ,EACpCvE,EAAMA,EAAK5D,KAAK8J,KAAK5C,EAAKkB,GAAQ,EAClCpG,EAAMA,EAAKhC,KAAK8J,KAAKhD,EAAKwB,GAAQ,EAElCvC,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKhD,EAAKyB,GAAQ,GACvBvI,KAAK8J,KAAK/C,EAAKuB,GAAQ,EACpC1E,EAAMA,EAAK5D,KAAK8J,KAAK/C,EAAKwB,GAAQ,EAClCvG,EAAMA,EAAKhC,KAAK8J,KAAKnD,EAAK8B,GAAQ,EAElC1C,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKnD,EAAK+B,GAAQ,GACvB1I,KAAK8J,KAAKlD,EAAK6B,GAAQ,EACpC7E,EAAMA,EAAK5D,KAAK8J,KAAKlD,EAAK8B,GAAQ,EAClC1G,EAAMA,EAAKhC,KAAK8J,KAAKtD,EAAKoC,GAAQ,EAElC7C,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKtD,EAAKqC,IAAQ,GACvB7I,KAAK8J,KAAKrD,EAAKmC,GAAQ,EACpChF,EAAMA,EAAK5D,KAAK8J,KAAKrD,EAAKoC,IAAQ,EAClC7G,EAAMA,EAAKhC,KAAK8J,KAAKzD,EAAK0C,IAAQ,EAElChD,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKzD,EAAK2C,IAAQ,GACvBhJ,KAAK8J,KAAKxD,EAAKyC,IAAQ,EACpCnF,EAAMA,EAAK5D,KAAK8J,KAAKxD,EAAK0C,IAAQ,EAKlC,IAAIoB,IAAQ1K,GAJZsC,EAAMA,EAAKhC,KAAK8J,KAAK5D,EAAKgD,IAAQ,GAIZ,KAAa,MAFnCnD,GADAA,EAAOA,EAAM/F,KAAK8J,KAAK5D,EAAKiD,IAAQ,GACvBnJ,KAAK8J,KAAK3D,EAAK+C,IAAQ,KAEU,IAAO,EACrDxJ,IAFAkE,EAAMA,EAAK5D,KAAK8J,KAAK3D,EAAKgD,IAAQ,IAErBpD,IAAQ,IAAO,IAAMqE,KAAO,IAAO,EAChDA,IAAM,SAENpI,EAAKhC,KAAK8J,KAAKvC,EAAKS,GAEpBjC,GADAA,EAAM/F,KAAK8J,KAAKvC,EAAKU,IACRjI,KAAK8J,KAAKtC,EAAKQ,GAAQ,EACpCpE,EAAK5D,KAAK8J,KAAKtC,EAAKS,GACpBjG,EAAMA,EAAKhC,KAAK8J,KAAK1C,EAAKe,GAAQ,EAElCpC,GADAA,EAAOA,EAAM/F,KAAK8J,KAAK1C,EAAKgB,GAAQ,GACvBpI,KAAK8J,KAAKzC,EAAKc,GAAQ,EACpCvE,EAAMA,EAAK5D,KAAK8J,KAAKzC,EAAKe,GAAQ,EAClCpG,EAAMA,EAAKhC,KAAK8J,KAAK7C,EAAKqB,GAAQ,EAElCvC,GADAA,EAAOA,EAAM/F,KAAK8J,KAAK7C,EAAKsB,GAAQ,GACvBvI,KAAK8J,KAAK5C,EAAKoB,GAAQ,EACpC1E,EAAMA,EAAK5D,KAAK8J,KAAK5C,EAAKqB,GAAQ,EAClCvG,EAAMA,EAAKhC,KAAK8J,KAAKhD,EAAK2B,GAAQ,EAElC1C,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKhD,EAAK4B,GAAQ,GACvB1I,KAAK8J,KAAK/C,EAAK0B,GAAQ,EACpC7E,EAAMA,EAAK5D,KAAK8J,KAAK/C,EAAK2B,GAAQ,EAClC1G,EAAMA,EAAKhC,KAAK8J,KAAKnD,EAAKiC,GAAQ,EAElC7C,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKnD,EAAKkC,IAAQ,GACvB7I,KAAK8J,KAAKlD,EAAKgC,GAAQ,EACpChF,EAAMA,EAAK5D,KAAK8J,KAAKlD,EAAKiC,IAAQ,EAClC7G,EAAMA,EAAKhC,KAAK8J,KAAKtD,EAAKuC,IAAQ,EAElChD,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKtD,EAAKwC,IAAQ,GACvBhJ,KAAK8J,KAAKrD,EAAKsC,IAAQ,EACpCnF,EAAMA,EAAK5D,KAAK8J,KAAKrD,EAAKuC,IAAQ,EAClChH,EAAMA,EAAKhC,KAAK8J,KAAKzD,EAAK6C,IAAQ,EAElCnD,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKzD,EAAK8C,IAAQ,GACvBnJ,KAAK8J,KAAKxD,EAAK4C,IAAQ,EACpCtF,EAAMA,EAAK5D,KAAK8J,KAAKxD,EAAK6C,IAAQ,EAKlC,IAAIkB,IAAQ3K,GAJZsC,EAAMA,EAAKhC,KAAK8J,KAAK5D,EAAKmD,IAAQ,GAIZ,KAAa,MAFnCtD,GADAA,EAAOA,EAAM/F,KAAK8J,KAAK5D,EAAKoD,IAAQ,GACvBtJ,KAAK8J,KAAK3D,EAAKkD,IAAQ,KAEU,IAAO,EACrD3J,IAFAkE,EAAMA,EAAK5D,KAAK8J,KAAK3D,EAAKmD,IAAQ,IAErBvD,IAAQ,IAAO,IAAMsE,KAAO,IAAO,EAChDA,IAAM,SAENrI,EAAKhC,KAAK8J,KAAKpC,EAAKM,GAEpBjC,GADAA,EAAM/F,KAAK8J,KAAKpC,EAAKO,IACRjI,KAAK8J,KAAKnC,EAAKK,GAAQ,EACpCpE,EAAK5D,KAAK8J,KAAKnC,EAAKM,GACpBjG,EAAMA,EAAKhC,KAAK8J,KAAKvC,EAAKY,GAAQ,EAElCpC,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKvC,EAAKa,GAAQ,GACvBpI,KAAK8J,KAAKtC,EAAKW,GAAQ,EACpCvE,EAAMA,EAAK5D,KAAK8J,KAAKtC,EAAKY,GAAQ,EAClCpG,EAAMA,EAAKhC,KAAK8J,KAAK1C,EAAKkB,GAAQ,EAElCvC,GADAA,EAAOA,EAAM/F,KAAK8J,KAAK1C,EAAKmB,GAAQ,GACvBvI,KAAK8J,KAAKzC,EAAKiB,GAAQ,EACpC1E,EAAMA,EAAK5D,KAAK8J,KAAKzC,EAAKkB,GAAQ,EAClCvG,EAAMA,EAAKhC,KAAK8J,KAAK7C,EAAKwB,GAAQ,EAElC1C,GADAA,EAAOA,EAAM/F,KAAK8J,KAAK7C,EAAKyB,GAAQ,GACvB1I,KAAK8J,KAAK5C,EAAKuB,GAAQ,EACpC7E,EAAMA,EAAK5D,KAAK8J,KAAK5C,EAAKwB,GAAQ,EAClC1G,EAAMA,EAAKhC,KAAK8J,KAAKhD,EAAK8B,GAAQ,EAElC7C,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKhD,EAAK+B,IAAQ,GACvB7I,KAAK8J,KAAK/C,EAAK6B,GAAQ,EACpChF,EAAMA,EAAK5D,KAAK8J,KAAK/C,EAAK8B,IAAQ,EAClC7G,EAAMA,EAAKhC,KAAK8J,KAAKnD,EAAKoC,IAAQ,EAElChD,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKnD,EAAKqC,IAAQ,GACvBhJ,KAAK8J,KAAKlD,EAAKmC,IAAQ,EACpCnF,EAAMA,EAAK5D,KAAK8J,KAAKlD,EAAKoC,IAAQ,EAClChH,EAAMA,EAAKhC,KAAK8J,KAAKtD,EAAK0C,IAAQ,EAElCnD,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKtD,EAAK2C,IAAQ,GACvBnJ,KAAK8J,KAAKrD,EAAKyC,IAAQ,EACpCtF,EAAMA,EAAK5D,KAAK8J,KAAKrD,EAAK0C,IAAQ,EAClCnH,EAAMA,EAAKhC,KAAK8J,KAAKzD,EAAKgD,IAAQ,EAElCtD,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKzD,EAAKiD,IAAQ,GACvBtJ,KAAK8J,KAAKxD,EAAK+C,IAAQ,EACpCzF,EAAMA,EAAK5D,KAAK8J,KAAKxD,EAAKgD,IAAQ,EAKlC,IAAIgB,IAAQ5K,GAJZsC,EAAMA,EAAKhC,KAAK8J,KAAK5D,EAAKsD,IAAQ,GAIZ,KAAa,MAFnCzD,GADAA,EAAOA,EAAM/F,KAAK8J,KAAK5D,EAAKuD,IAAQ,GACvBzJ,KAAK8J,KAAK3D,EAAKqD,IAAQ,KAEU,IAAO,EACrD9J,IAFAkE,EAAMA,EAAK5D,KAAK8J,KAAK3D,EAAKsD,IAAQ,IAErB1D,IAAQ,IAAO,IAAMuE,KAAO,IAAO,EAChDA,IAAM,SAENtI,EAAKhC,KAAK8J,KAAKjC,EAAKG,GAEpBjC,GADAA,EAAM/F,KAAK8J,KAAKjC,EAAKI,IACRjI,KAAK8J,KAAKhC,EAAKE,GAAQ,EACpCpE,EAAK5D,KAAK8J,KAAKhC,EAAKG,GACpBjG,EAAMA,EAAKhC,KAAK8J,KAAKpC,EAAKS,GAAQ,EAElCpC,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKpC,EAAKU,GAAQ,GACvBpI,KAAK8J,KAAKnC,EAAKQ,GAAQ,EACpCvE,EAAMA,EAAK5D,KAAK8J,KAAKnC,EAAKS,GAAQ,EAClCpG,EAAMA,EAAKhC,KAAK8J,KAAKvC,EAAKe,GAAQ,EAElCvC,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKvC,EAAKgB,GAAQ,GACvBvI,KAAK8J,KAAKtC,EAAKc,GAAQ,EACpC1E,EAAMA,EAAK5D,KAAK8J,KAAKtC,EAAKe,GAAQ,EAClCvG,EAAMA,EAAKhC,KAAK8J,KAAK1C,EAAKqB,GAAQ,EAElC1C,GADAA,EAAOA,EAAM/F,KAAK8J,KAAK1C,EAAKsB,GAAQ,GACvB1I,KAAK8J,KAAKzC,EAAKoB,GAAQ,EACpC7E,EAAMA,EAAK5D,KAAK8J,KAAKzC,EAAKqB,GAAQ,EAClC1G,EAAMA,EAAKhC,KAAK8J,KAAK7C,EAAK2B,GAAQ,EAElC7C,GADAA,EAAOA,EAAM/F,KAAK8J,KAAK7C,EAAK4B,IAAQ,GACvB7I,KAAK8J,KAAK5C,EAAK0B,GAAQ,EACpChF,EAAMA,EAAK5D,KAAK8J,KAAK5C,EAAK2B,IAAQ,EAClC7G,EAAMA,EAAKhC,KAAK8J,KAAKhD,EAAKiC,IAAQ,EAElChD,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKhD,EAAKkC,IAAQ,GACvBhJ,KAAK8J,KAAK/C,EAAKgC,IAAQ,EACpCnF,EAAMA,EAAK5D,KAAK8J,KAAK/C,EAAKiC,IAAQ,EAClChH,EAAMA,EAAKhC,KAAK8J,KAAKnD,EAAKuC,IAAQ,EAElCnD,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKnD,EAAKwC,IAAQ,GACvBnJ,KAAK8J,KAAKlD,EAAKsC,IAAQ,EACpCtF,EAAMA,EAAK5D,KAAK8J,KAAKlD,EAAKuC,IAAQ,EAClCnH,EAAMA,EAAKhC,KAAK8J,KAAKtD,EAAK6C,IAAQ,EAElCtD,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKtD,EAAK8C,IAAQ,GACvBtJ,KAAK8J,KAAKrD,EAAK4C,IAAQ,EACpCzF,EAAMA,EAAK5D,KAAK8J,KAAKrD,EAAK6C,IAAQ,EAClCtH,EAAMA,EAAKhC,KAAK8J,KAAKzD,EAAKmD,IAAQ,EAElCzD,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKzD,EAAKoD,IAAQ,GACvBzJ,KAAK8J,KAAKxD,EAAKkD,IAAQ,EACpC5F,EAAMA,EAAK5D,KAAK8J,KAAKxD,EAAKmD,IAAQ,EAKlC,IAAIc,IAAQ7K,GAJZsC,EAAMA,EAAKhC,KAAK8J,KAAK5D,EAAKyD,IAAQ,GAIZ,KAAa,MAFnC5D,GADAA,EAAOA,EAAM/F,KAAK8J,KAAK5D,EAAK0D,IAAQ,GACvB5J,KAAK8J,KAAK3D,EAAKwD,IAAQ,KAEU,IAAO,EACrDjK,IAFAkE,EAAMA,EAAK5D,KAAK8J,KAAK3D,EAAKyD,IAAQ,IAErB7D,IAAQ,IAAO,IAAMwE,KAAO,IAAO,EAChDA,IAAM,SAENvI,EAAKhC,KAAK8J,KAAKjC,EAAKM,GAEpBpC,GADAA,EAAM/F,KAAK8J,KAAKjC,EAAKO,IACRpI,KAAK8J,KAAKhC,EAAKK,GAAQ,EACpCvE,EAAK5D,KAAK8J,KAAKhC,EAAKM,GACpBpG,EAAMA,EAAKhC,KAAK8J,KAAKpC,EAAKY,GAAQ,EAElCvC,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKpC,EAAKa,GAAQ,GACvBvI,KAAK8J,KAAKnC,EAAKW,GAAQ,EACpC1E,EAAMA,EAAK5D,KAAK8J,KAAKnC,EAAKY,GAAQ,EAClCvG,EAAMA,EAAKhC,KAAK8J,KAAKvC,EAAKkB,GAAQ,EAElC1C,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKvC,EAAKmB,GAAQ,GACvB1I,KAAK8J,KAAKtC,EAAKiB,GAAQ,EACpC7E,EAAMA,EAAK5D,KAAK8J,KAAKtC,EAAKkB,GAAQ,EAClC1G,EAAMA,EAAKhC,KAAK8J,KAAK1C,EAAKwB,GAAQ,EAElC7C,GADAA,EAAOA,EAAM/F,KAAK8J,KAAK1C,EAAKyB,IAAQ,GACvB7I,KAAK8J,KAAKzC,EAAKuB,GAAQ,EACpChF,EAAMA,EAAK5D,KAAK8J,KAAKzC,EAAKwB,IAAQ,EAClC7G,EAAMA,EAAKhC,KAAK8J,KAAK7C,EAAK8B,IAAQ,EAElChD,GADAA,EAAOA,EAAM/F,KAAK8J,KAAK7C,EAAK+B,IAAQ,GACvBhJ,KAAK8J,KAAK5C,EAAK6B,IAAQ,EACpCnF,EAAMA,EAAK5D,KAAK8J,KAAK5C,EAAK8B,IAAQ,EAClChH,EAAMA,EAAKhC,KAAK8J,KAAKhD,EAAKoC,IAAQ,EAElCnD,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKhD,EAAKqC,IAAQ,GACvBnJ,KAAK8J,KAAK/C,EAAKmC,IAAQ,EACpCtF,EAAMA,EAAK5D,KAAK8J,KAAK/C,EAAKoC,IAAQ,EAClCnH,EAAMA,EAAKhC,KAAK8J,KAAKnD,EAAK0C,IAAQ,EAElCtD,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKnD,EAAK2C,IAAQ,GACvBtJ,KAAK8J,KAAKlD,EAAKyC,IAAQ,EACpCzF,EAAMA,EAAK5D,KAAK8J,KAAKlD,EAAK0C,IAAQ,EAClCtH,EAAMA,EAAKhC,KAAK8J,KAAKtD,EAAKgD,IAAQ,EAElCzD,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKtD,EAAKiD,IAAQ,GACvBzJ,KAAK8J,KAAKrD,EAAK+C,IAAQ,EACpC5F,EAAMA,EAAK5D,KAAK8J,KAAKrD,EAAKgD,IAAQ,EAKlC,IAAIe,IAAS9K,GAJbsC,EAAMA,EAAKhC,KAAK8J,KAAKzD,EAAKsD,IAAQ,GAIX,KAAa,MAFpC5D,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKzD,EAAKuD,IAAQ,GACvB5J,KAAK8J,KAAKxD,EAAKqD,IAAQ,KAEW,IAAO,EACtDjK,IAFAkE,EAAMA,EAAK5D,KAAK8J,KAAKxD,EAAKsD,IAAQ,IAErB7D,IAAQ,IAAO,IAAMyE,KAAQ,IAAO,EACjDA,IAAO,SAEPxI,EAAKhC,KAAK8J,KAAKjC,EAAKS,GAEpBvC,GADAA,EAAM/F,KAAK8J,KAAKjC,EAAKU,IACRvI,KAAK8J,KAAKhC,EAAKQ,GAAQ,EACpC1E,EAAK5D,KAAK8J,KAAKhC,EAAKS,GACpBvG,EAAMA,EAAKhC,KAAK8J,KAAKpC,EAAKe,GAAQ,EAElC1C,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKpC,EAAKgB,GAAQ,GACvB1I,KAAK8J,KAAKnC,EAAKc,GAAQ,EACpC7E,EAAMA,EAAK5D,KAAK8J,KAAKnC,EAAKe,GAAQ,EAClC1G,EAAMA,EAAKhC,KAAK8J,KAAKvC,EAAKqB,GAAQ,EAElC7C,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKvC,EAAKsB,IAAQ,GACvB7I,KAAK8J,KAAKtC,EAAKoB,GAAQ,EACpChF,EAAMA,EAAK5D,KAAK8J,KAAKtC,EAAKqB,IAAQ,EAClC7G,EAAMA,EAAKhC,KAAK8J,KAAK1C,EAAK2B,IAAQ,EAElChD,GADAA,EAAOA,EAAM/F,KAAK8J,KAAK1C,EAAK4B,IAAQ,GACvBhJ,KAAK8J,KAAKzC,EAAK0B,IAAQ,EACpCnF,EAAMA,EAAK5D,KAAK8J,KAAKzC,EAAK2B,IAAQ,EAClChH,EAAMA,EAAKhC,KAAK8J,KAAK7C,EAAKiC,IAAQ,EAElCnD,GADAA,EAAOA,EAAM/F,KAAK8J,KAAK7C,EAAKkC,IAAQ,GACvBnJ,KAAK8J,KAAK5C,EAAKgC,IAAQ,EACpCtF,EAAMA,EAAK5D,KAAK8J,KAAK5C,EAAKiC,IAAQ,EAClCnH,EAAMA,EAAKhC,KAAK8J,KAAKhD,EAAKuC,IAAQ,EAElCtD,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKhD,EAAKwC,IAAQ,GACvBtJ,KAAK8J,KAAK/C,EAAKsC,IAAQ,EACpCzF,EAAMA,EAAK5D,KAAK8J,KAAK/C,EAAKuC,IAAQ,EAClCtH,EAAMA,EAAKhC,KAAK8J,KAAKnD,EAAK6C,IAAQ,EAElCzD,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKnD,EAAK8C,IAAQ,GACvBzJ,KAAK8J,KAAKlD,EAAK4C,IAAQ,EACpC5F,EAAMA,EAAK5D,KAAK8J,KAAKlD,EAAK6C,IAAQ,EAKlC,IAAIgB,IAAS/K,GAJbsC,EAAMA,EAAKhC,KAAK8J,KAAKtD,EAAKmD,IAAQ,GAIX,KAAa,MAFpC5D,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKtD,EAAKoD,IAAQ,GACvB5J,KAAK8J,KAAKrD,EAAKkD,IAAQ,KAEW,IAAO,EACtDjK,IAFAkE,EAAMA,EAAK5D,KAAK8J,KAAKrD,EAAKmD,IAAQ,IAErB7D,IAAQ,IAAO,IAAM0E,KAAQ,IAAO,EACjDA,IAAO,SAEPzI,EAAKhC,KAAK8J,KAAKjC,EAAKY,GAEpB1C,GADAA,EAAM/F,KAAK8J,KAAKjC,EAAKa,IACR1I,KAAK8J,KAAKhC,EAAKW,GAAQ,EACpC7E,EAAK5D,KAAK8J,KAAKhC,EAAKY,GACpB1G,EAAMA,EAAKhC,KAAK8J,KAAKpC,EAAKkB,GAAQ,EAElC7C,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKpC,EAAKmB,IAAQ,GACvB7I,KAAK8J,KAAKnC,EAAKiB,GAAQ,EACpChF,EAAMA,EAAK5D,KAAK8J,KAAKnC,EAAKkB,IAAQ,EAClC7G,EAAMA,EAAKhC,KAAK8J,KAAKvC,EAAKwB,IAAQ,EAElChD,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKvC,EAAKyB,IAAQ,GACvBhJ,KAAK8J,KAAKtC,EAAKuB,IAAQ,EACpCnF,EAAMA,EAAK5D,KAAK8J,KAAKtC,EAAKwB,IAAQ,EAClChH,EAAMA,EAAKhC,KAAK8J,KAAK1C,EAAK8B,IAAQ,EAElCnD,GADAA,EAAOA,EAAM/F,KAAK8J,KAAK1C,EAAK+B,IAAQ,GACvBnJ,KAAK8J,KAAKzC,EAAK6B,IAAQ,EACpCtF,EAAMA,EAAK5D,KAAK8J,KAAKzC,EAAK8B,IAAQ,EAClCnH,EAAMA,EAAKhC,KAAK8J,KAAK7C,EAAKoC,IAAQ,EAElCtD,GADAA,EAAOA,EAAM/F,KAAK8J,KAAK7C,EAAKqC,IAAQ,GACvBtJ,KAAK8J,KAAK5C,EAAKmC,IAAQ,EACpCzF,EAAMA,EAAK5D,KAAK8J,KAAK5C,EAAKoC,IAAQ,EAClCtH,EAAMA,EAAKhC,KAAK8J,KAAKhD,EAAK0C,IAAQ,EAElCzD,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKhD,EAAK2C,IAAQ,GACvBzJ,KAAK8J,KAAK/C,EAAKyC,IAAQ,EACpC5F,EAAMA,EAAK5D,KAAK8J,KAAK/C,EAAK0C,IAAQ,EAKlC,IAAIiB,IAAShL,GAJbsC,EAAMA,EAAKhC,KAAK8J,KAAKnD,EAAKgD,IAAQ,GAIX,KAAa,MAFpC5D,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKnD,EAAKiD,IAAQ,GACvB5J,KAAK8J,KAAKlD,EAAK+C,IAAQ,KAEW,IAAO,EACtDjK,IAFAkE,EAAMA,EAAK5D,KAAK8J,KAAKlD,EAAKgD,IAAQ,IAErB7D,IAAQ,IAAO,IAAM2E,KAAQ,IAAO,EACjDA,IAAO,SAEP1I,EAAKhC,KAAK8J,KAAKjC,EAAKe,GAEpB7C,GADAA,EAAM/F,KAAK8J,KAAKjC,EAAKgB,KACR7I,KAAK8J,KAAKhC,EAAKc,GAAQ,EACpChF,EAAK5D,KAAK8J,KAAKhC,EAAKe,IACpB7G,EAAMA,EAAKhC,KAAK8J,KAAKpC,EAAKqB,IAAQ,EAElChD,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKpC,EAAKsB,IAAQ,GACvBhJ,KAAK8J,KAAKnC,EAAKoB,IAAQ,EACpCnF,EAAMA,EAAK5D,KAAK8J,KAAKnC,EAAKqB,IAAQ,EAClChH,EAAMA,EAAKhC,KAAK8J,KAAKvC,EAAK2B,IAAQ,EAElCnD,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKvC,EAAK4B,IAAQ,GACvBnJ,KAAK8J,KAAKtC,EAAK0B,IAAQ,EACpCtF,EAAMA,EAAK5D,KAAK8J,KAAKtC,EAAK2B,IAAQ,EAClCnH,EAAMA,EAAKhC,KAAK8J,KAAK1C,EAAKiC,IAAQ,EAElCtD,GADAA,EAAOA,EAAM/F,KAAK8J,KAAK1C,EAAKkC,IAAQ,GACvBtJ,KAAK8J,KAAKzC,EAAKgC,IAAQ,EACpCzF,EAAMA,EAAK5D,KAAK8J,KAAKzC,EAAKiC,IAAQ,EAClCtH,EAAMA,EAAKhC,KAAK8J,KAAK7C,EAAKuC,IAAQ,EAElCzD,GADAA,EAAOA,EAAM/F,KAAK8J,KAAK7C,EAAKwC,IAAQ,GACvBzJ,KAAK8J,KAAK5C,EAAKsC,IAAQ,EACpC5F,EAAMA,EAAK5D,KAAK8J,KAAK5C,EAAKuC,IAAQ,EAKlC,IAAIkB,IAASjL,GAJbsC,EAAMA,EAAKhC,KAAK8J,KAAKhD,EAAK6C,IAAQ,GAIX,KAAa,MAFpC5D,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKhD,EAAK8C,IAAQ,GACvB5J,KAAK8J,KAAK/C,EAAK4C,IAAQ,KAEW,IAAO,EACtDjK,IAFAkE,EAAMA,EAAK5D,KAAK8J,KAAK/C,EAAK6C,IAAQ,IAErB7D,IAAQ,IAAO,IAAM4E,KAAQ,IAAO,EACjDA,IAAO,SAEP3I,EAAKhC,KAAK8J,KAAKjC,EAAKkB,IAEpBhD,GADAA,EAAM/F,KAAK8J,KAAKjC,EAAKmB,KACRhJ,KAAK8J,KAAKhC,EAAKiB,IAAQ,EACpCnF,EAAK5D,KAAK8J,KAAKhC,EAAKkB,IACpBhH,EAAMA,EAAKhC,KAAK8J,KAAKpC,EAAKwB,IAAQ,EAElCnD,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKpC,EAAKyB,IAAQ,GACvBnJ,KAAK8J,KAAKnC,EAAKuB,IAAQ,EACpCtF,EAAMA,EAAK5D,KAAK8J,KAAKnC,EAAKwB,IAAQ,EAClCnH,EAAMA,EAAKhC,KAAK8J,KAAKvC,EAAK8B,IAAQ,EAElCtD,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKvC,EAAK+B,IAAQ,GACvBtJ,KAAK8J,KAAKtC,EAAK6B,IAAQ,EACpCzF,EAAMA,EAAK5D,KAAK8J,KAAKtC,EAAK8B,IAAQ,EAClCtH,EAAMA,EAAKhC,KAAK8J,KAAK1C,EAAKoC,IAAQ,EAElCzD,GADAA,EAAOA,EAAM/F,KAAK8J,KAAK1C,EAAKqC,IAAQ,GACvBzJ,KAAK8J,KAAKzC,EAAKmC,IAAQ,EACpC5F,EAAMA,EAAK5D,KAAK8J,KAAKzC,EAAKoC,IAAQ,EAKlC,IAAImB,IAASlL,GAJbsC,EAAMA,EAAKhC,KAAK8J,KAAK7C,EAAK0C,IAAQ,GAIX,KAAa,MAFpC5D,GADAA,EAAOA,EAAM/F,KAAK8J,KAAK7C,EAAK2C,IAAQ,GACvB5J,KAAK8J,KAAK5C,EAAKyC,IAAQ,KAEW,IAAO,EACtDjK,IAFAkE,EAAMA,EAAK5D,KAAK8J,KAAK5C,EAAK0C,IAAQ,IAErB7D,IAAQ,IAAO,IAAM6E,KAAQ,IAAO,EACjDA,IAAO,SAEP5I,EAAKhC,KAAK8J,KAAKjC,EAAKqB,IAEpBnD,GADAA,EAAM/F,KAAK8J,KAAKjC,EAAKsB,KACRnJ,KAAK8J,KAAKhC,EAAKoB,IAAQ,EACpCtF,EAAK5D,KAAK8J,KAAKhC,EAAKqB,IACpBnH,EAAMA,EAAKhC,KAAK8J,KAAKpC,EAAK2B,IAAQ,EAElCtD,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKpC,EAAK4B,IAAQ,GACvBtJ,KAAK8J,KAAKnC,EAAK0B,IAAQ,EACpCzF,EAAMA,EAAK5D,KAAK8J,KAAKnC,EAAK2B,IAAQ,EAClCtH,EAAMA,EAAKhC,KAAK8J,KAAKvC,EAAKiC,IAAQ,EAElCzD,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKvC,EAAKkC,IAAQ,GACvBzJ,KAAK8J,KAAKtC,EAAKgC,IAAQ,EACpC5F,EAAMA,EAAK5D,KAAK8J,KAAKtC,EAAKiC,IAAQ,EAKlC,IAAIoB,IAASnL,GAJbsC,EAAMA,EAAKhC,KAAK8J,KAAK1C,EAAKuC,IAAQ,GAIX,KAAa,MAFpC5D,GADAA,EAAOA,EAAM/F,KAAK8J,KAAK1C,EAAKwC,IAAQ,GACvB5J,KAAK8J,KAAKzC,EAAKsC,IAAQ,KAEW,IAAO,EACtDjK,IAFAkE,EAAMA,EAAK5D,KAAK8J,KAAKzC,EAAKuC,IAAQ,IAErB7D,IAAQ,IAAO,IAAM8E,KAAQ,IAAO,EACjDA,IAAO,SAEP7I,EAAKhC,KAAK8J,KAAKjC,EAAKwB,IAEpBtD,GADAA,EAAM/F,KAAK8J,KAAKjC,EAAKyB,KACRtJ,KAAK8J,KAAKhC,EAAKuB,IAAQ,EACpCzF,EAAK5D,KAAK8J,KAAKhC,EAAKwB,IACpBtH,EAAMA,EAAKhC,KAAK8J,KAAKpC,EAAK8B,IAAQ,EAElCzD,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKpC,EAAK+B,IAAQ,GACvBzJ,KAAK8J,KAAKnC,EAAK6B,IAAQ,EACpC5F,EAAMA,EAAK5D,KAAK8J,KAAKnC,EAAK8B,IAAQ,EAKlC,IAAIqB,IAASpL,GAJbsC,EAAMA,EAAKhC,KAAK8J,KAAKvC,EAAKoC,IAAQ,GAIX,KAAa,MAFpC5D,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKvC,EAAKqC,IAAQ,GACvB5J,KAAK8J,KAAKtC,EAAKmC,IAAQ,KAEW,IAAO,EACtDjK,IAFAkE,EAAMA,EAAK5D,KAAK8J,KAAKtC,EAAKoC,IAAQ,IAErB7D,IAAQ,IAAO,IAAM+E,KAAQ,IAAO,EACjDA,IAAO,SAEP9I,EAAKhC,KAAK8J,KAAKjC,EAAK2B,IAEpBzD,GADAA,EAAM/F,KAAK8J,KAAKjC,EAAK4B,KACRzJ,KAAK8J,KAAKhC,EAAK0B,IAAQ,EACpC5F,EAAK5D,KAAK8J,KAAKhC,EAAK2B,IAKpB,IAAIsB,IAASrL,GAJbsC,EAAMA,EAAKhC,KAAK8J,KAAKpC,EAAKiC,IAAQ,GAIX,KAAa,MAFpC5D,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKpC,EAAKkC,IAAQ,GACvB5J,KAAK8J,KAAKnC,EAAKgC,IAAQ,KAEW,IAAO,EACtDjK,IAFAkE,EAAMA,EAAK5D,KAAK8J,KAAKnC,EAAKiC,IAAQ,IAErB7D,IAAQ,IAAO,IAAMgF,KAAQ,IAAO,EACjDA,IAAO,SAMP,IAAIC,IAAStL,GAJbsC,EAAKhC,KAAK8J,KAAKjC,EAAK8B,KAIG,KAAa,MAFpC5D,GADAA,EAAM/F,KAAK8J,KAAKjC,EAAK+B,KACR5J,KAAK8J,KAAKhC,EAAK6B,IAAQ,KAEW,IAAO,EA0BtD,OAzBAjK,IAFAkE,EAAK5D,KAAK8J,KAAKhC,EAAK8B,MAEP7D,IAAQ,IAAO,IAAMiF,KAAQ,IAAO,EACjDA,IAAO,SACPhF,EAAE,GAAK6D,GACP7D,EAAE,GAAK+D,GACP/D,EAAE,GAAKgE,GACPhE,EAAE,GAAKiE,GACPjE,EAAE,GAAKkE,GACPlE,EAAE,GAAKmE,GACPnE,EAAE,GAAKoE,GACPpE,EAAE,GAAKqE,GACPrE,EAAE,GAAKsE,GACPtE,EAAE,GAAKuE,GACPvE,EAAE,IAAMwE,GACRxE,EAAE,IAAMyE,GACRzE,EAAE,IAAM0E,GACR1E,EAAE,IAAM2E,GACR3E,EAAE,IAAM4E,GACR5E,EAAE,IAAM6E,GACR7E,EAAE,IAAM8E,GACR9E,EAAE,IAAM+E,GACR/E,EAAE,IAAMgF,GACE,IAANtL,IACFsG,EAAE,IAAMtG,EACRpP,EAAIxB,UAECwB,CACT,EAOA,SAASkb,EAAU3J,EAAMvO,EAAKhD,GAC5BA,EAAI6O,SAAW7L,EAAI6L,SAAW0C,EAAK1C,SACnC7O,EAAIxB,OAAS+S,EAAK/S,OAASwE,EAAIxE,OAI/B,IAFA,IAAImT,EAAQ,EACRsJ,EAAU,EACLrJ,EAAI,EAAGA,EAAI5R,EAAIxB,OAAS,EAAGoT,IAAK,CAGvC,IAAIC,EAASoJ,EACbA,EAAU,EAGV,IAFA,IAAInJ,EAAgB,SAARH,EACRI,EAAOrC,KAAKvF,IAAIyH,EAAG5O,EAAIxE,OAAS,GAC3BkK,EAAIgH,KAAKC,IAAI,EAAGiC,EAAIL,EAAK/S,OAAS,GAAIkK,GAAKqJ,EAAMrJ,IAAK,CAC7D,IAAID,EAAImJ,EAAIlJ,EAGR6G,GAFoB,EAAhBgC,EAAKzC,MAAMrG,KACI,EAAfzF,EAAI8L,MAAMpG,IAGdgJ,EAAS,SAAJnC,EAGTuC,EAAa,UADbJ,EAAMA,EAAKI,EAAS,GAIpBmJ,IAFApJ,GAHAA,EAAUA,GAAWtC,EAAI,SAAa,GAAM,IAGxBmC,IAAO,IAAO,KAEZ,GACtBG,GAAU,QACZ,CACA7R,EAAI8O,MAAM8C,GAAKE,EACfH,EAAQE,EACRA,EAASoJ,CACX,CAOA,OANc,IAAVtJ,EACF3R,EAAI8O,MAAM8C,GAAKD,EAEf3R,EAAIxB,SAGCwB,EAAIolB,QACb,CAEA,SAASzK,EAAYpJ,EAAMvO,EAAKhD,GAI9B,OAAOkb,EAAS3J,EAAMvO,EAAKhD,EAC7B,CAqBA,SAAS4a,EAAME,EAAGC,GAChB7d,KAAK4d,EAAIA,EACT5d,KAAK6d,EAAIA,CACX,CA1EKrL,KAAK8J,OACRhE,EAAclE,GAmDhB7C,EAAGtR,UAAU6d,MAAQ,SAAgBhY,EAAKhD,GACxC,IACIwI,EAAMtL,KAAKsB,OAASwE,EAAIxE,OAW5B,OAVoB,KAAhBtB,KAAKsB,QAAgC,KAAfwE,EAAIxE,OACtBgX,EAAYtY,KAAM8F,EAAKhD,GACpBwI,EAAM,GACT8I,EAAWpU,KAAM8F,EAAKhD,GACnBwI,EAAM,KACT0S,EAAShe,KAAM8F,EAAKhD,GAEpB2a,EAAWzd,KAAM8F,EAAKhD,EAIhC,EAUA4a,EAAKzd,UAAUge,QAAU,SAAkBC,GAGzC,IAFA,IAAIjI,EAAI,IAAIvU,MAAMwc,GACdC,EAAI5M,EAAGtR,UAAU+V,WAAWkI,GAAK,EAC5B3S,EAAI,EAAGA,EAAI2S,EAAG3S,IACrB0K,EAAE1K,GAAKvL,KAAKoe,OAAO7S,EAAG4S,EAAGD,GAG3B,OAAOjI,CACT,EAGAyH,EAAKzd,UAAUme,OAAS,SAAiBR,EAAGO,EAAGD,GAC7C,GAAU,IAANN,GAAWA,IAAMM,EAAI,EAAG,OAAON,EAGnC,IADA,IAAIS,EAAK,EACA9S,EAAI,EAAGA,EAAI4S,EAAG5S,IACrB8S,IAAW,EAAJT,IAAWO,EAAI5S,EAAI,EAC1BqS,IAAM,EAGR,OAAOS,CACT,EAIAX,EAAKzd,UAAUqe,QAAU,SAAkBC,EAAKC,EAAKC,EAAKC,EAAMC,EAAMT,GACpE,IAAK,IAAI3S,EAAI,EAAGA,EAAI2S,EAAG3S,IACrBmT,EAAKnT,GAAKiT,EAAID,EAAIhT,IAClBoT,EAAKpT,GAAKkT,EAAIF,EAAIhT,GAEtB,EAEAmS,EAAKzd,UAAU2e,UAAY,SAAoBJ,EAAKC,EAAKC,EAAMC,EAAMT,EAAGK,GACtEve,KAAKse,QAAQC,EAAKC,EAAKC,EAAKC,EAAMC,EAAMT,GAExC,IAAK,IAAIW,EAAI,EAAGA,EAAIX,EAAGW,IAAM,EAM3B,IALA,IAAIV,EAAIU,GAAK,EAETC,EAAQtM,KAAKuM,IAAI,EAAIvM,KAAKwM,GAAKb,GAC/Bc,EAAQzM,KAAK0M,IAAI,EAAI1M,KAAKwM,GAAKb,GAE1BxO,EAAI,EAAGA,EAAIuO,EAAGvO,GAAKwO,EAI1B,IAHA,IAAIgB,EAASL,EACTM,EAASH,EAEJzT,EAAI,EAAGA,EAAIqT,EAAGrT,IAAK,CAC1B,IAAImC,EAAK+Q,EAAK/O,EAAInE,GACd6T,EAAKV,EAAKhP,EAAInE,GAEd8T,EAAKZ,EAAK/O,EAAInE,EAAIqT,GAClBU,EAAKZ,EAAKhP,EAAInE,EAAIqT,GAElBW,EAAKL,EAASG,EAAKF,EAASG,EAEhCA,EAAKJ,EAASI,EAAKH,EAASE,EAC5BA,EAAKE,EAELd,EAAK/O,EAAInE,GAAKmC,EAAK2R,EACnBX,EAAKhP,EAAInE,GAAK6T,EAAKE,EAEnBb,EAAK/O,EAAInE,EAAIqT,GAAKlR,EAAK2R,EACvBX,EAAKhP,EAAInE,EAAIqT,GAAKQ,EAAKE,EAGnB/T,IAAM2S,IACRqB,EAAKV,EAAQK,EAASF,EAAQG,EAE9BA,EAASN,EAAQM,EAASH,EAAQE,EAClCA,EAASK,EAEb,CAGN,EAEA9B,EAAKzd,UAAUwf,YAAc,SAAsBC,EAAGC,GACpD,IAAIzB,EAAqB,EAAjB1L,KAAKC,IAAIkN,EAAGD,GAChBE,EAAU,EAAJ1B,EACN3S,EAAI,EACR,IAAK2S,EAAIA,EAAI,EAAI,EAAGA,EAAGA,KAAU,EAC/B3S,IAGF,OAAO,GAAKA,EAAI,EAAIqU,CACtB,EAEAlC,EAAKzd,UAAU4f,UAAY,SAAoBrB,EAAKC,EAAKP,GACvD,KAAIA,GAAK,GAET,IAAK,IAAI3S,EAAI,EAAGA,EAAI2S,EAAI,EAAG3S,IAAK,CAC9B,IAAI0K,EAAIuI,EAAIjT,GAEZiT,EAAIjT,GAAKiT,EAAIN,EAAI3S,EAAI,GACrBiT,EAAIN,EAAI3S,EAAI,GAAK0K,EAEjBA,EAAIwI,EAAIlT,GAERkT,EAAIlT,IAAMkT,EAAIP,EAAI3S,EAAI,GACtBkT,EAAIP,EAAI3S,EAAI,IAAM0K,CACpB,CACF,EAEAyH,EAAKzd,UAAU6f,aAAe,SAAuBC,EAAI7B,GAEvD,IADA,IAAIzJ,EAAQ,EACHlJ,EAAI,EAAGA,EAAI2S,EAAI,EAAG3S,IAAK,CAC9B,IAAI2H,EAAoC,KAAhCV,KAAKwN,MAAMD,EAAG,EAAIxU,EAAI,GAAK2S,GACjC1L,KAAKwN,MAAMD,EAAG,EAAIxU,GAAK2S,GACvBzJ,EAEFsL,EAAGxU,GAAS,SAAJ2H,EAGNuB,EADEvB,EAAI,SACE,EAEAA,EAAI,SAAY,CAE5B,CAEA,OAAO6M,CACT,EAEArC,EAAKzd,UAAUggB,WAAa,SAAqBF,EAAIzU,EAAKkT,EAAKN,GAE7D,IADA,IAAIzJ,EAAQ,EACHlJ,EAAI,EAAGA,EAAID,EAAKC,IACvBkJ,GAAyB,EAARsL,EAAGxU,GAEpBiT,EAAI,EAAIjT,GAAa,KAARkJ,EAAgBA,KAAkB,GAC/C+J,EAAI,EAAIjT,EAAI,GAAa,KAARkJ,EAAgBA,KAAkB,GAIrD,IAAKlJ,EAAI,EAAID,EAAKC,EAAI2S,IAAK3S,EACzBiT,EAAIjT,GAAK,EAGXnI,EAAiB,IAAVqR,GACPrR,EAA6B,KAAb,KAARqR,GACV,EAEAiJ,EAAKzd,UAAUigB,KAAO,SAAehC,GAEnC,IADA,IAAIiC,EAAK,IAAIze,MAAMwc,GACV3S,EAAI,EAAGA,EAAI2S,EAAG3S,IACrB4U,EAAG5U,GAAK,EAGV,OAAO4U,CACT,EAEAzC,EAAKzd,UAAU0d,KAAO,SAAeC,EAAGC,EAAG/a,GACzC,IAAIob,EAAI,EAAIle,KAAKyf,YAAY7B,EAAEtc,OAAQuc,EAAEvc,QAErCid,EAAMve,KAAKie,QAAQC,GAEnBkC,EAAIpgB,KAAKkgB,KAAKhC,GAEdM,EAAM,IAAI9c,MAAMwc,GAChBmC,EAAO,IAAI3e,MAAMwc,GACjBoC,EAAO,IAAI5e,MAAMwc,GAEjBqC,EAAO,IAAI7e,MAAMwc,GACjBsC,EAAQ,IAAI9e,MAAMwc,GAClBuC,EAAQ,IAAI/e,MAAMwc,GAElBwC,EAAO5d,EAAI8O,MACf8O,EAAKpf,OAAS4c,EAEdle,KAAKigB,WAAWrC,EAAEhM,MAAOgM,EAAEtc,OAAQkd,EAAKN,GACxCle,KAAKigB,WAAWpC,EAAEjM,MAAOiM,EAAEvc,OAAQif,EAAMrC,GAEzCle,KAAK4e,UAAUJ,EAAK4B,EAAGC,EAAMC,EAAMpC,EAAGK,GACtCve,KAAK4e,UAAU2B,EAAMH,EAAGI,EAAOC,EAAOvC,EAAGK,GAEzC,IAAK,IAAIhT,EAAI,EAAGA,EAAI2S,EAAG3S,IAAK,CAC1B,IAAIiU,EAAKa,EAAK9U,GAAKiV,EAAMjV,GAAK+U,EAAK/U,GAAKkV,EAAMlV,GAC9C+U,EAAK/U,GAAK8U,EAAK9U,GAAKkV,EAAMlV,GAAK+U,EAAK/U,GAAKiV,EAAMjV,GAC/C8U,EAAK9U,GAAKiU,CACZ,CASA,OAPAxf,KAAK6f,UAAUQ,EAAMC,EAAMpC,GAC3Ble,KAAK4e,UAAUyB,EAAMC,EAAMI,EAAMN,EAAGlC,EAAGK,GACvCve,KAAK6f,UAAUa,EAAMN,EAAGlC,GACxBle,KAAK8f,aAAaY,EAAMxC,GAExBpb,EAAI6O,SAAWiM,EAAEjM,SAAWkM,EAAElM,SAC9B7O,EAAIxB,OAASsc,EAAEtc,OAASuc,EAAEvc,OACnBwB,EAAIolB,QACb,EAGA3W,EAAGtR,UAAUsS,IAAM,SAAczM,GAC/B,IAAIhD,EAAM,IAAIyO,EAAG,MAEjB,OADAzO,EAAI8O,MAAQ,IAAIlQ,MAAM1B,KAAKsB,OAASwE,EAAIxE,QACjCtB,KAAK8d,MAAMhY,EAAKhD,EACzB,EAGAyO,EAAGtR,UAAU0gB,KAAO,SAAe7a,GACjC,IAAIhD,EAAM,IAAIyO,EAAG,MAEjB,OADAzO,EAAI8O,MAAQ,IAAIlQ,MAAM1B,KAAKsB,OAASwE,EAAIxE,QACjCmc,EAAWzd,KAAM8F,EAAKhD,EAC/B,EAGAyO,EAAGtR,UAAUqc,KAAO,SAAexW,GACjC,OAAO9F,KAAK4E,QAAQkZ,MAAMhY,EAAK9F,KACjC,EAEAuR,EAAGtR,UAAUyT,MAAQ,SAAgB5N,GACnC,IAAIgwB,EAAWhwB,EAAM,EACjBgwB,IAAUhwB,GAAOA,GAErB1C,EAAsB,iBAAR0C,GACd1C,EAAO0C,EAAM,UAIb,IADA,IAAI2O,EAAQ,EACHlJ,EAAI,EAAGA,EAAIvL,KAAKsB,OAAQiK,IAAK,CACpC,IAAI2H,GAAqB,EAAhBlT,KAAK4R,MAAMrG,IAAUzF,EAC1B0O,GAAU,SAAJtB,IAA0B,SAARuB,GAC5BA,IAAU,GACVA,GAAUvB,EAAI,SAAa,EAE3BuB,GAASD,IAAO,GAChBxU,KAAK4R,MAAMrG,GAAU,SAALiJ,CAClB,CAOA,OALc,IAAVC,IACFzU,KAAK4R,MAAMrG,GAAKkJ,EAChBzU,KAAKsB,UAGAw0B,EAAW91B,KAAK8W,OAAS9W,IAClC,EAEAuR,EAAGtR,UAAU2gB,KAAO,SAAe9a,GACjC,OAAO9F,KAAK4E,QAAQ8O,MAAM5N,EAC5B,EAGAyL,EAAGtR,UAAU4gB,IAAM,WACjB,OAAO7gB,KAAKuS,IAAIvS,KAClB,EAGAuR,EAAGtR,UAAU6gB,KAAO,WAClB,OAAO9gB,KAAKsc,KAAKtc,KAAK4E,QACxB,EAGA2M,EAAGtR,UAAU2T,IAAM,SAAc9N,GAC/B,IAAIoN,EA7xCN,SAAqBpN,GAGnB,IAFA,IAAIoN,EAAI,IAAIxR,MAAMoE,EAAIqQ,aAEb6B,EAAM,EAAGA,EAAM9E,EAAE5R,OAAQ0W,IAAO,CACvC,IAAI7E,EAAO6E,EAAM,GAAM,EACnBC,EAAOD,EAAM,GAEjB9E,EAAE8E,GAAQlS,EAAI8L,MAAMuB,KAAS8E,EAAQ,CACvC,CAEA,OAAO/E,CACT,CAkxCU6N,CAAWjb,GACnB,GAAiB,IAAboN,EAAE5R,OAAc,OAAO,IAAIiQ,EAAG,GAIlC,IADA,IAAI/O,EAAMxC,KACDuL,EAAI,EAAGA,EAAI2H,EAAE5R,QACP,IAAT4R,EAAE3H,GADsBA,IAAK/I,EAAMA,EAAIqe,OAI7C,KAAMtV,EAAI2H,EAAE5R,OACV,IAAK,IAAIsU,EAAIpT,EAAIqe,MAAOtV,EAAI2H,EAAE5R,OAAQiK,IAAKqK,EAAIA,EAAEiL,MAClC,IAAT3N,EAAE3H,KAEN/I,EAAMA,EAAI+P,IAAIqD,IAIlB,OAAOpT,CACT,EAGA+O,EAAGtR,UAAU+gB,OAAS,SAAiBC,GACrC7d,EAAuB,iBAAT6d,GAAqBA,GAAQ,GAC3C,IAGI1V,EAHA8G,EAAI4O,EAAO,GACXpC,GAAKoC,EAAO5O,GAAK,GACjB6O,EAAa,WAAe,GAAK7O,GAAQ,GAAKA,EAGlD,GAAU,IAANA,EAAS,CACX,IAAIoC,EAAQ,EAEZ,IAAKlJ,EAAI,EAAGA,EAAIvL,KAAKsB,OAAQiK,IAAK,CAChC,IAAI4V,EAAWnhB,KAAK4R,MAAMrG,GAAK2V,EAC3BhP,GAAsB,EAAhBlS,KAAK4R,MAAMrG,IAAU4V,GAAa9O,EAC5CrS,KAAK4R,MAAMrG,GAAK2G,EAAIuC,EACpBA,EAAQ0M,IAAc,GAAK9O,CAC7B,CAEIoC,IACFzU,KAAK4R,MAAMrG,GAAKkJ,EAChBzU,KAAKsB,SAET,CAEA,GAAU,IAANud,EAAS,CACX,IAAKtT,EAAIvL,KAAKsB,OAAS,EAAGiK,GAAK,EAAGA,IAChCvL,KAAK4R,MAAMrG,EAAIsT,GAAK7e,KAAK4R,MAAMrG,GAGjC,IAAKA,EAAI,EAAGA,EAAIsT,EAAGtT,IACjBvL,KAAK4R,MAAMrG,GAAK,EAGlBvL,KAAKsB,QAAUud,CACjB,CAEA,OAAO7e,KAAKkoB,QACd,EAEA3W,EAAGtR,UAAUmhB,MAAQ,SAAgBH,GAGnC,OADA7d,EAAyB,IAAlBpD,KAAK2R,UACL3R,KAAKghB,OAAOC,EACrB,EAKA1P,EAAGtR,UAAU6V,OAAS,SAAiBmL,EAAMI,EAAMC,GAEjD,IAAIC,EADJne,EAAuB,iBAAT6d,GAAqBA,GAAQ,GAGzCM,EADEF,GACGA,EAAQA,EAAO,IAAO,GAEvB,EAGN,IAAIhP,EAAI4O,EAAO,GACXpC,EAAIrM,KAAKvF,KAAKgU,EAAO5O,GAAK,GAAIrS,KAAKsB,QACnCkgB,EAAO,SAAc,WAAcnP,GAAMA,EACzCoP,EAAcH,EAMlB,GAJAC,GAAK1C,EACL0C,EAAI/O,KAAKC,IAAI,EAAG8O,GAGZE,EAAa,CACf,IAAK,IAAIlW,EAAI,EAAGA,EAAIsT,EAAGtT,IACrBkW,EAAY7P,MAAMrG,GAAKvL,KAAK4R,MAAMrG,GAEpCkW,EAAYngB,OAASud,CACvB,CAEA,GAAU,IAANA,QAEG,GAAI7e,KAAKsB,OAASud,EAEvB,IADA7e,KAAKsB,QAAUud,EACVtT,EAAI,EAAGA,EAAIvL,KAAKsB,OAAQiK,IAC3BvL,KAAK4R,MAAMrG,GAAKvL,KAAK4R,MAAMrG,EAAIsT,QAGjC7e,KAAK4R,MAAM,GAAK,EAChB5R,KAAKsB,OAAS,EAGhB,IAAImT,EAAQ,EACZ,IAAKlJ,EAAIvL,KAAKsB,OAAS,EAAGiK,GAAK,IAAgB,IAAVkJ,GAAelJ,GAAKgW,GAAIhW,IAAK,CAChE,IAAIkI,EAAuB,EAAhBzT,KAAK4R,MAAMrG,GACtBvL,KAAK4R,MAAMrG,GAAMkJ,GAAU,GAAKpC,EAAOoB,IAASpB,EAChDoC,EAAQhB,EAAO+N,CACjB,CAYA,OATIC,GAAyB,IAAVhN,IACjBgN,EAAY7P,MAAM6P,EAAYngB,UAAYmT,GAGxB,IAAhBzU,KAAKsB,SACPtB,KAAK4R,MAAM,GAAK,EAChB5R,KAAKsB,OAAS,GAGTtB,KAAKkoB,QACd,EAEA3W,EAAGtR,UAAUyhB,MAAQ,SAAgBT,EAAMI,EAAMC,GAG/C,OADAle,EAAyB,IAAlBpD,KAAK2R,UACL3R,KAAK8V,OAAOmL,EAAMI,EAAMC,EACjC,EAGA/P,EAAGtR,UAAU0hB,KAAO,SAAeV,GACjC,OAAOjhB,KAAK4E,QAAQwc,MAAMH,EAC5B,EAEA1P,EAAGtR,UAAU2hB,MAAQ,SAAgBX,GACnC,OAAOjhB,KAAK4E,QAAQoc,OAAOC,EAC7B,EAGA1P,EAAGtR,UAAU4hB,KAAO,SAAeZ,GACjC,OAAOjhB,KAAK4E,QAAQ8c,MAAMT,EAC5B,EAEA1P,EAAGtR,UAAU6hB,MAAQ,SAAgBb,GACnC,OAAOjhB,KAAK4E,QAAQkR,OAAOmL,EAC7B,EAGA1P,EAAGtR,UAAU2W,MAAQ,SAAgBoB,GACnC5U,EAAsB,iBAAR4U,GAAoBA,GAAO,GACzC,IAAI3F,EAAI2F,EAAM,GACV6G,GAAK7G,EAAM3F,GAAK,GAChBuD,EAAI,GAAKvD,EAGb,QAAIrS,KAAKsB,QAAUud,KAGX7e,KAAK4R,MAAMiN,GAELjJ,GAChB,EAGArE,EAAGtR,UAAU8hB,OAAS,SAAiBd,GACrC7d,EAAuB,iBAAT6d,GAAqBA,GAAQ,GAC3C,IAAI5O,EAAI4O,EAAO,GACXpC,GAAKoC,EAAO5O,GAAK,GAIrB,GAFAjP,EAAyB,IAAlBpD,KAAK2R,SAAgB,2CAExB3R,KAAKsB,QAAUud,EACjB,OAAO7e,KAQT,GALU,IAANqS,GACFwM,IAEF7e,KAAKsB,OAASkR,KAAKvF,IAAI4R,EAAG7e,KAAKsB,QAErB,IAAN+Q,EAAS,CACX,IAAImP,EAAO,SAAc,WAAcnP,GAAMA,EAC7CrS,KAAK4R,MAAM5R,KAAKsB,OAAS,IAAMkgB,CACjC,CAEA,OAAOxhB,KAAKkoB,QACd,EAGA3W,EAAGtR,UAAU+hB,MAAQ,SAAgBf,GACnC,OAAOjhB,KAAK4E,QAAQmd,OAAOd,EAC7B,EAGA1P,EAAGtR,UAAUyW,MAAQ,SAAgB5Q,GAGnC,OAFA1C,EAAsB,iBAAR0C,GACd1C,EAAO0C,EAAM,UACTA,EAAM,EAAU9F,KAAKiiB,OAAOnc,GAGV,IAAlB9F,KAAK2R,SACa,IAAhB3R,KAAKsB,SAAiC,EAAhBtB,KAAK4R,MAAM,KAAW9L,GAC9C9F,KAAK4R,MAAM,GAAK9L,GAAuB,EAAhB9F,KAAK4R,MAAM,IAClC5R,KAAK2R,SAAW,EACT3R,OAGTA,KAAK2R,SAAW,EAChB3R,KAAKiiB,MAAMnc,GACX9F,KAAK2R,SAAW,EACT3R,MAIFA,KAAK2T,OAAO7N,EACrB,EAEAyL,EAAGtR,UAAU0T,OAAS,SAAiB7N,GACrC9F,KAAK4R,MAAM,IAAM9L,EAGjB,IAAK,IAAIyF,EAAI,EAAGA,EAAIvL,KAAKsB,QAAUtB,KAAK4R,MAAMrG,IAAM,SAAWA,IAC7DvL,KAAK4R,MAAMrG,IAAM,SACbA,IAAMvL,KAAKsB,OAAS,EACtBtB,KAAK4R,MAAMrG,EAAI,GAAK,EAEpBvL,KAAK4R,MAAMrG,EAAI,KAKnB,OAFAvL,KAAKsB,OAASkR,KAAKC,IAAIzS,KAAKsB,OAAQiK,EAAI,GAEjCvL,IACT,EAGAuR,EAAGtR,UAAUgiB,MAAQ,SAAgBnc,GAGnC,GAFA1C,EAAsB,iBAAR0C,GACd1C,EAAO0C,EAAM,UACTA,EAAM,EAAG,OAAO9F,KAAK0W,OAAO5Q,GAEhC,GAAsB,IAAlB9F,KAAK2R,SAIP,OAHA3R,KAAK2R,SAAW,EAChB3R,KAAK0W,MAAM5Q,GACX9F,KAAK2R,SAAW,EACT3R,KAKT,GAFAA,KAAK4R,MAAM,IAAM9L,EAEG,IAAhB9F,KAAKsB,QAAgBtB,KAAK4R,MAAM,GAAK,EACvC5R,KAAK4R,MAAM,IAAM5R,KAAK4R,MAAM,GAC5B5R,KAAK2R,SAAW,OAGhB,IAAK,IAAIpG,EAAI,EAAGA,EAAIvL,KAAKsB,QAAUtB,KAAK4R,MAAMrG,GAAK,EAAGA,IACpDvL,KAAK4R,MAAMrG,IAAM,SACjBvL,KAAK4R,MAAMrG,EAAI,IAAM,EAIzB,OAAOvL,KAAKkoB,QACd,EAEA3W,EAAGtR,UAAUiiB,KAAO,SAAepc,GACjC,OAAO9F,KAAK4E,QAAQ8R,MAAM5Q,EAC5B,EAEAyL,EAAGtR,UAAUkiB,KAAO,SAAerc,GACjC,OAAO9F,KAAK4E,QAAQqd,MAAMnc,EAC5B,EAEAyL,EAAGtR,UAAUmiB,KAAO,WAGlB,OAFApiB,KAAK2R,SAAW,EAET3R,IACT,EAEAuR,EAAGtR,UAAUuW,IAAM,WACjB,OAAOxW,KAAK4E,QAAQwd,MACtB,EAEA7Q,EAAGtR,UAAUoiB,aAAe,SAAuBvc,EAAKyM,EAAK+P,GAC3D,IACI/W,EAIA2H,EALA5H,EAAMxF,EAAIxE,OAASghB,EAGvBtiB,KAAK8T,QAAQxI,GAGb,IAAImJ,EAAQ,EACZ,IAAKlJ,EAAI,EAAGA,EAAIzF,EAAIxE,OAAQiK,IAAK,CAC/B2H,GAA6B,EAAxBlT,KAAK4R,MAAMrG,EAAI+W,IAAc7N,EAClC,IAAI9B,GAAwB,EAAf7M,EAAI8L,MAAMrG,IAAUgH,EAEjCkC,IADAvB,GAAa,SAARP,IACS,KAAQA,EAAQ,SAAa,GAC3C3S,KAAK4R,MAAMrG,EAAI+W,GAAa,SAAJpP,CAC1B,CACA,KAAO3H,EAAIvL,KAAKsB,OAASghB,EAAO/W,IAE9BkJ,GADAvB,GAA6B,EAAxBlT,KAAK4R,MAAMrG,EAAI+W,IAAc7N,IACrB,GACbzU,KAAK4R,MAAMrG,EAAI+W,GAAa,SAAJpP,EAG1B,GAAc,IAAVuB,EAAa,OAAOzU,KAAKkoB,SAK7B,IAFA9kB,GAAkB,IAAXqR,GACPA,EAAQ,EACHlJ,EAAI,EAAGA,EAAIvL,KAAKsB,OAAQiK,IAE3BkJ,GADAvB,IAAsB,EAAhBlT,KAAK4R,MAAMrG,IAAUkJ,IACd,GACbzU,KAAK4R,MAAMrG,GAAS,SAAJ2H,EAIlB,OAFAlT,KAAK2R,SAAW,EAET3R,KAAKkoB,QACd,EAEA3W,EAAGtR,UAAUsiB,SAAW,SAAmBzc,EAAK0c,GAC9C,IAAIF,GAAQtiB,KAAKsB,OAASwE,EAAIxE,QAE1BgT,EAAItU,KAAK4E,QACT2P,EAAIzO,EAGJ2c,EAA8B,EAAxBlO,EAAE3C,MAAM2C,EAAEjT,OAAS,GAGf,IADdghB,EAAQ,GADMtiB,KAAKgW,WAAWyM,MAG5BlO,EAAIA,EAAEqN,MAAMU,GACZhO,EAAE0M,OAAOsB,GACTG,EAA8B,EAAxBlO,EAAE3C,MAAM2C,EAAEjT,OAAS,IAI3B,IACIsU,EADA+J,EAAIrL,EAAEhT,OAASiT,EAAEjT,OAGrB,GAAa,QAATkhB,EAAgB,EAClB5M,EAAI,IAAIrE,EAAG,OACTjQ,OAASqe,EAAI,EACf/J,EAAEhE,MAAQ,IAAIlQ,MAAMkU,EAAEtU,QACtB,IAAK,IAAIiK,EAAI,EAAGA,EAAIqK,EAAEtU,OAAQiK,IAC5BqK,EAAEhE,MAAMrG,GAAK,CAEjB,CAEA,IAAImX,EAAOpO,EAAE1P,QAAQyd,aAAa9N,EAAG,EAAGoL,GAClB,IAAlB+C,EAAK/Q,WACP2C,EAAIoO,EACA9M,IACFA,EAAEhE,MAAM+N,GAAK,IAIjB,IAAK,IAAInU,EAAImU,EAAI,EAAGnU,GAAK,EAAGA,IAAK,CAC/B,IAAImX,EAAmC,UAAL,EAAxBrO,EAAE1C,MAAM2C,EAAEjT,OAASkK,KACE,EAA5B8I,EAAE1C,MAAM2C,EAAEjT,OAASkK,EAAI,IAO1B,IAHAmX,EAAKnQ,KAAKvF,IAAK0V,EAAKF,EAAO,EAAG,UAE9BnO,EAAE+N,aAAa9N,EAAGoO,EAAInX,GACA,IAAf8I,EAAE3C,UACPgR,IACArO,EAAE3C,SAAW,EACb2C,EAAE+N,aAAa9N,EAAG,EAAG/I,GAChB8I,EAAEW,WACLX,EAAE3C,UAAY,GAGdiE,IACFA,EAAEhE,MAAMpG,GAAKmX,EAEjB,CAWA,OAVI/M,GACFA,EAAEsS,SAEJ5T,EAAE4T,SAGW,QAAT1F,GAA4B,IAAVF,GACpBhO,EAAEwB,OAAOwM,GAGJ,CACLM,IAAKhN,GAAK,KACVpC,IAAKc,EAET,EAMA/C,EAAGtR,UAAU4iB,OAAS,SAAiB/c,EAAK0c,EAAMM,GAGhD,OAFA1f,GAAQ0C,EAAImP,UAERjV,KAAKiV,SACA,CACL2N,IAAK,IAAIrR,EAAG,GACZiC,IAAK,IAAIjC,EAAG,IAKM,IAAlBvR,KAAK2R,UAAmC,IAAjB7L,EAAI6L,UAC7BnP,EAAMxC,KAAKgX,MAAM6L,OAAO/c,EAAK0c,GAEhB,QAATA,IACFI,EAAMpgB,EAAIogB,IAAI5L,OAGH,QAATwL,IACFhP,EAAMhR,EAAIgR,IAAIwD,MACV8L,GAA6B,IAAjBtP,EAAI7B,UAClB6B,EAAI0E,KAAKpS,IAIN,CACL8c,IAAKA,EACLpP,IAAKA,IAIa,IAAlBxT,KAAK2R,UAAmC,IAAjB7L,EAAI6L,UAC7BnP,EAAMxC,KAAK6iB,OAAO/c,EAAIkR,MAAOwL,GAEhB,QAATA,IACFI,EAAMpgB,EAAIogB,IAAI5L,OAGT,CACL4L,IAAKA,EACLpP,IAAKhR,EAAIgR,MAI0B,IAAlCxT,KAAK2R,SAAW7L,EAAI6L,WACvBnP,EAAMxC,KAAKgX,MAAM6L,OAAO/c,EAAIkR,MAAOwL,GAEtB,QAATA,IACFhP,EAAMhR,EAAIgR,IAAIwD,MACV8L,GAA6B,IAAjBtP,EAAI7B,UAClB6B,EAAI2E,KAAKrS,IAIN,CACL8c,IAAKpgB,EAAIogB,IACTpP,IAAKA,IAOL1N,EAAIxE,OAAStB,KAAKsB,QAAUtB,KAAK4S,IAAI9M,GAAO,EACvC,CACL8c,IAAK,IAAIrR,EAAG,GACZiC,IAAKxT,MAKU,IAAf8F,EAAIxE,OACO,QAATkhB,EACK,CACLI,IAAK5iB,KAAK+iB,KAAKjd,EAAI8L,MAAM,IACzB4B,IAAK,MAII,QAATgP,EACK,CACLI,IAAK,KACLpP,IAAK,IAAIjC,EAAGvR,KAAKy1B,MAAM3vB,EAAI8L,MAAM,MAI9B,CACLgR,IAAK5iB,KAAK+iB,KAAKjd,EAAI8L,MAAM,IACzB4B,IAAK,IAAIjC,EAAGvR,KAAKy1B,MAAM3vB,EAAI8L,MAAM,MAI9B5R,KAAKuiB,SAASzc,EAAK0c,GAlF1B,IAAII,EAAKpP,EAAKhR,CAmFhB,EAGA+O,EAAGtR,UAAU2iB,IAAM,SAAc9c,GAC/B,OAAO9F,KAAK6iB,OAAO/c,EAAK,OAAO,GAAO8c,GACxC,EAGArR,EAAGtR,UAAUuT,IAAM,SAAc1N,GAC/B,OAAO9F,KAAK6iB,OAAO/c,EAAK,OAAO,GAAO0N,GACxC,EAEAjC,EAAGtR,UAAU+iB,KAAO,SAAeld,GACjC,OAAO9F,KAAK6iB,OAAO/c,EAAK,OAAO,GAAM0N,GACvC,EAGAjC,EAAGtR,UAAUgjB,SAAW,SAAmBnd,GACzC,IAAIod,EAAKljB,KAAK6iB,OAAO/c,GAGrB,GAAIod,EAAG1P,IAAIyB,SAAU,OAAOiO,EAAGN,IAE/B,IAAIpP,EAA0B,IAApB0P,EAAGN,IAAIjR,SAAiBuR,EAAG1P,IAAI2E,KAAKrS,GAAOod,EAAG1P,IAEpD2P,EAAOrd,EAAIgc,MAAM,GACjBsB,EAAKtd,EAAI+P,MAAM,GACfjD,EAAMY,EAAIZ,IAAIuQ,GAGlB,OAAIvQ,EAAM,GAAa,IAAPwQ,GAAoB,IAARxQ,EAAmBsQ,EAAGN,IAGvB,IAApBM,EAAGN,IAAIjR,SAAiBuR,EAAGN,IAAIX,MAAM,GAAKiB,EAAGN,IAAIlM,MAAM,EAChE,EAEAnF,EAAGtR,UAAUw1B,MAAQ,SAAgB3vB,GACnC,IAAIgwB,EAAWhwB,EAAM,EACjBgwB,IAAUhwB,GAAOA,GAErB1C,EAAO0C,GAAO,UAId,IAHA,IAAI6J,GAAK,GAAK,IAAM7J,EAEhBud,EAAM,EACD9X,EAAIvL,KAAKsB,OAAS,EAAGiK,GAAK,EAAGA,IACpC8X,GAAO1T,EAAI0T,GAAuB,EAAhBrjB,KAAK4R,MAAMrG,KAAWzF,EAG1C,OAAOgwB,GAAYzS,EAAMA,CAC3B,EAGA9R,EAAGtR,UAAUiV,KAAO,SAAepP,GACjC,OAAO9F,KAAKy1B,MAAM3vB,EACpB,EAGAyL,EAAGtR,UAAUkV,MAAQ,SAAgBrP,GACnC,IAAIgwB,EAAWhwB,EAAM,EACjBgwB,IAAUhwB,GAAOA,GAErB1C,EAAO0C,GAAO,UAGd,IADA,IAAI2O,EAAQ,EACHlJ,EAAIvL,KAAKsB,OAAS,EAAGiK,GAAK,EAAGA,IAAK,CACzC,IAAI2H,GAAqB,EAAhBlT,KAAK4R,MAAMrG,IAAkB,SAARkJ,EAC9BzU,KAAK4R,MAAMrG,GAAM2H,EAAIpN,EAAO,EAC5B2O,EAAQvB,EAAIpN,CACd,CAGA,OADA9F,KAAKkoB,SACE4N,EAAW91B,KAAK8W,OAAS9W,IAClC,EAEAuR,EAAGtR,UAAU8iB,KAAO,SAAejd,GACjC,OAAO9F,KAAK4E,QAAQuQ,MAAMrP,EAC5B,EAEAyL,EAAGtR,UAAUqjB,KAAO,SAAe3T,GACjCvM,EAAsB,IAAfuM,EAAEgC,UACTvO,GAAQuM,EAAEsF,UAEV,IAAI2I,EAAI5d,KACJ6d,EAAIlO,EAAE/K,QAGRgZ,EADiB,IAAfA,EAAEjM,SACAiM,EAAEoF,KAAKrT,GAEPiO,EAAEhZ,QAaR,IATA,IAAI2e,EAAI,IAAIhS,EAAG,GACXiS,EAAI,IAAIjS,EAAG,GAGXkS,EAAI,IAAIlS,EAAG,GACXmS,EAAI,IAAInS,EAAG,GAEXoS,EAAI,EAED/F,EAAEgG,UAAY/F,EAAE+F,UACrBhG,EAAE9H,OAAO,GACT+H,EAAE/H,OAAO,KACP6N,EAMJ,IAHA,IAAIE,EAAKhG,EAAEjZ,QACPkf,EAAKlG,EAAEhZ,SAEHgZ,EAAE3I,UAAU,CAClB,IAAK,IAAI1J,EAAI,EAAGwY,EAAK,EAAyB,IAArBnG,EAAEhM,MAAM,GAAKmS,IAAaxY,EAAI,KAAMA,EAAGwY,IAAO,GACvE,GAAIxY,EAAI,EAEN,IADAqS,EAAE9H,OAAOvK,GACFA,KAAM,IACPgY,EAAES,SAAWR,EAAEQ,WACjBT,EAAErL,KAAK2L,GACPL,EAAErL,KAAK2L,IAGTP,EAAEzN,OAAO,GACT0N,EAAE1N,OAAO,GAIb,IAAK,IAAItK,EAAI,EAAGyY,EAAK,EAAyB,IAArBpG,EAAEjM,MAAM,GAAKqS,IAAazY,EAAI,KAAMA,EAAGyY,IAAO,GACvE,GAAIzY,EAAI,EAEN,IADAqS,EAAE/H,OAAOtK,GACFA,KAAM,IACPiY,EAAEO,SAAWN,EAAEM,WACjBP,EAAEvL,KAAK2L,GACPH,EAAEvL,KAAK2L,IAGTL,EAAE3N,OAAO,GACT4N,EAAE5N,OAAO,GAIT8H,EAAEhL,IAAIiL,IAAM,GACdD,EAAEzF,KAAK0F,GACP0F,EAAEpL,KAAKsL,GACPD,EAAErL,KAAKuL,KAEP7F,EAAE1F,KAAKyF,GACP6F,EAAEtL,KAAKoL,GACPG,EAAEvL,KAAKqL,GAEX,CAEA,MAAO,CACLlP,EAAGmP,EACHlP,EAAGmP,EACHQ,IAAKrG,EAAEmD,OAAO2C,GAElB,EAKApS,EAAGtR,UAAUkkB,OAAS,SAAiBxU,GACrCvM,EAAsB,IAAfuM,EAAEgC,UACTvO,GAAQuM,EAAEsF,UAEV,IAAIX,EAAItU,KACJuU,EAAI5E,EAAE/K,QAGR0P,EADiB,IAAfA,EAAE3C,SACA2C,EAAE0O,KAAKrT,GAEP2E,EAAE1P,QAQR,IALA,IAuCIpC,EAvCA4hB,EAAK,IAAI7S,EAAG,GACZ8S,EAAK,IAAI9S,EAAG,GAEZ+S,EAAQ/P,EAAE3P,QAEP0P,EAAEiQ,KAAK,GAAK,GAAKhQ,EAAEgQ,KAAK,GAAK,GAAG,CACrC,IAAK,IAAIhZ,EAAI,EAAGwY,EAAK,EAAyB,IAArBzP,EAAE1C,MAAM,GAAKmS,IAAaxY,EAAI,KAAMA,EAAGwY,IAAO,GACvE,GAAIxY,EAAI,EAEN,IADA+I,EAAEwB,OAAOvK,GACFA,KAAM,GACP6Y,EAAGJ,SACLI,EAAGlM,KAAKoM,GAGVF,EAAGtO,OAAO,GAId,IAAK,IAAItK,EAAI,EAAGyY,EAAK,EAAyB,IAArB1P,EAAE3C,MAAM,GAAKqS,IAAazY,EAAI,KAAMA,EAAGyY,IAAO,GACvE,GAAIzY,EAAI,EAEN,IADA+I,EAAEuB,OAAOtK,GACFA,KAAM,GACP6Y,EAAGL,SACLK,EAAGnM,KAAKoM,GAGVD,EAAGvO,OAAO,GAIVxB,EAAE1B,IAAI2B,IAAM,GACdD,EAAE6D,KAAK5D,GACP6P,EAAGjM,KAAKkM,KAER9P,EAAE4D,KAAK7D,GACP+P,EAAGlM,KAAKiM,GAEZ,CAaA,OATE5hB,EADgB,IAAd8R,EAAEiQ,KAAK,GACHH,EAEAC,GAGAE,KAAK,GAAK,GAChB/hB,EAAI0V,KAAKvI,GAGJnN,CACT,EAEA+O,EAAGtR,UAAUikB,IAAM,SAAcpe,GAC/B,GAAI9F,KAAKiV,SAAU,OAAOnP,EAAI0Q,MAC9B,GAAI1Q,EAAImP,SAAU,OAAOjV,KAAKwW,MAE9B,IAAIlC,EAAItU,KAAK4E,QACT2P,EAAIzO,EAAIlB,QACZ0P,EAAE3C,SAAW,EACb4C,EAAE5C,SAAW,EAGb,IAAK,IAAI2Q,EAAQ,EAAGhO,EAAEsP,UAAYrP,EAAEqP,SAAUtB,IAC5ChO,EAAEwB,OAAO,GACTvB,EAAEuB,OAAO,GAGX,OAAG,CACD,KAAOxB,EAAEsP,UACPtP,EAAEwB,OAAO,GAEX,KAAOvB,EAAEqP,UACPrP,EAAEuB,OAAO,GAGX,IAAIzD,EAAIiC,EAAE1B,IAAI2B,GACd,GAAIlC,EAAI,EAAG,CAET,IAAI4D,EAAI3B,EACRA,EAAIC,EACJA,EAAI0B,CACN,MAAO,GAAU,IAAN5D,GAAyB,IAAdkC,EAAEgQ,KAAK,GAC3B,MAGFjQ,EAAE6D,KAAK5D,EACT,CAEA,OAAOA,EAAEyM,OAAOsB,EAClB,EAGA/Q,EAAGtR,UAAUukB,KAAO,SAAe1e,GACjC,OAAO9F,KAAKsjB,KAAKxd,GAAKwO,EAAE0O,KAAKld,EAC/B,EAEAyL,EAAGtR,UAAU2jB,OAAS,WACpB,OAA+B,IAAP,EAAhB5jB,KAAK4R,MAAM,GACrB,EAEAL,EAAGtR,UAAU+jB,MAAQ,WACnB,OAA+B,IAAP,EAAhBhkB,KAAK4R,MAAM,GACrB,EAGAL,EAAGtR,UAAU4V,MAAQ,SAAgB/P,GACnC,OAAO9F,KAAK4R,MAAM,GAAK9L,CACzB,EAGAyL,EAAGtR,UAAUwkB,MAAQ,SAAgBzM,GACnC5U,EAAsB,iBAAR4U,GACd,IAAI3F,EAAI2F,EAAM,GACV6G,GAAK7G,EAAM3F,GAAK,GAChBuD,EAAI,GAAKvD,EAGb,GAAIrS,KAAKsB,QAAUud,EAGjB,OAFA7e,KAAK8T,QAAQ+K,EAAI,GACjB7e,KAAK4R,MAAMiN,IAAMjJ,EACV5V,KAKT,IADA,IAAIyU,EAAQmB,EACHrK,EAAIsT,EAAa,IAAVpK,GAAelJ,EAAIvL,KAAKsB,OAAQiK,IAAK,CACnD,IAAI2H,EAAoB,EAAhBlT,KAAK4R,MAAMrG,GAEnBkJ,GADAvB,GAAKuB,KACS,GACdvB,GAAK,SACLlT,KAAK4R,MAAMrG,GAAK2H,CAClB,CAKA,OAJc,IAAVuB,IACFzU,KAAK4R,MAAMrG,GAAKkJ,EAChBzU,KAAKsB,UAEAtB,IACT,EAEAuR,EAAGtR,UAAUgV,OAAS,WACpB,OAAuB,IAAhBjV,KAAKsB,QAAkC,IAAlBtB,KAAK4R,MAAM,EACzC,EAEAL,EAAGtR,UAAUskB,KAAO,SAAeze,GACjC,IAOItD,EAPAmP,EAAW7L,EAAM,EAErB,GAAsB,IAAlB9F,KAAK2R,WAAmBA,EAAU,OAAQ,EAC9C,GAAsB,IAAlB3R,KAAK2R,UAAkBA,EAAU,OAAO,EAK5C,GAHA3R,KAAKkoB,SAGDloB,KAAKsB,OAAS,EAChBkB,EAAM,MACD,CACDmP,IACF7L,GAAOA,GAGT1C,EAAO0C,GAAO,SAAW,qBAEzB,IAAIoN,EAAoB,EAAhBlT,KAAK4R,MAAM,GACnBpP,EAAM0Q,IAAMpN,EAAM,EAAIoN,EAAIpN,GAAO,EAAI,CACvC,CACA,OAAsB,IAAlB9F,KAAK2R,SAA8B,GAANnP,EAC1BA,CACT,EAMA+O,EAAGtR,UAAU2S,IAAM,SAAc9M,GAC/B,GAAsB,IAAlB9F,KAAK2R,UAAmC,IAAjB7L,EAAI6L,SAAgB,OAAQ,EACvD,GAAsB,IAAlB3R,KAAK2R,UAAmC,IAAjB7L,EAAI6L,SAAgB,OAAO,EAEtD,IAAInP,EAAMxC,KAAK0kB,KAAK5e,GACpB,OAAsB,IAAlB9F,KAAK2R,SAA8B,GAANnP,EAC1BA,CACT,EAGA+O,EAAGtR,UAAUykB,KAAO,SAAe5e,GAEjC,GAAI9F,KAAKsB,OAASwE,EAAIxE,OAAQ,OAAO,EACrC,GAAItB,KAAKsB,OAASwE,EAAIxE,OAAQ,OAAQ,EAGtC,IADA,IAAIkB,EAAM,EACD+I,EAAIvL,KAAKsB,OAAS,EAAGiK,GAAK,EAAGA,IAAK,CACzC,IAAI+I,EAAoB,EAAhBtU,KAAK4R,MAAMrG,GACfgJ,EAAmB,EAAfzO,EAAI8L,MAAMrG,GAElB,GAAI+I,IAAMC,EAAV,CACID,EAAIC,EACN/R,GAAO,EACE8R,EAAIC,IACb/R,EAAM,GAER,KANqB,CAOvB,CACA,OAAOA,CACT,EAEA+O,EAAGtR,UAAU0kB,IAAM,SAAc7e,GAC/B,OAA0B,IAAnB9F,KAAKukB,KAAKze,EACnB,EAEAyL,EAAGtR,UAAU2kB,GAAK,SAAa9e,GAC7B,OAAyB,IAAlB9F,KAAK4S,IAAI9M,EAClB,EAEAyL,EAAGtR,UAAU4kB,KAAO,SAAe/e,GACjC,OAAO9F,KAAKukB,KAAKze,IAAQ,CAC3B,EAEAyL,EAAGtR,UAAU6kB,IAAM,SAAchf,GAC/B,OAAO9F,KAAK4S,IAAI9M,IAAQ,CAC1B,EAEAyL,EAAGtR,UAAU8kB,IAAM,SAAcjf,GAC/B,OAA2B,IAApB9F,KAAKukB,KAAKze,EACnB,EAEAyL,EAAGtR,UAAU+kB,GAAK,SAAalf,GAC7B,OAA0B,IAAnB9F,KAAK4S,IAAI9M,EAClB,EAEAyL,EAAGtR,UAAUglB,KAAO,SAAenf,GACjC,OAAO9F,KAAKukB,KAAKze,IAAQ,CAC3B,EAEAyL,EAAGtR,UAAUilB,IAAM,SAAcpf,GAC/B,OAAO9F,KAAK4S,IAAI9M,IAAQ,CAC1B,EAEAyL,EAAGtR,UAAUklB,IAAM,SAAcrf,GAC/B,OAA0B,IAAnB9F,KAAKukB,KAAKze,EACnB,EAEAyL,EAAGtR,UAAUmlB,GAAK,SAAatf,GAC7B,OAAyB,IAAlB9F,KAAK4S,IAAI9M,EAClB,EAMAyL,EAAGM,IAAM,SAAc/L,GACrB,OAAO,IAAIuf,EAAIvf,EACjB,EAEAyL,EAAGtR,UAAUqlB,MAAQ,SAAgBC,GAGnC,OAFAniB,GAAQpD,KAAK6R,IAAK,yCAClBzO,EAAyB,IAAlBpD,KAAK2R,SAAgB,iCACrB4T,EAAIC,UAAUxlB,MAAMylB,UAAUF,EACvC,EAEAhU,EAAGtR,UAAUylB,QAAU,WAErB,OADAtiB,EAAOpD,KAAK6R,IAAK,wDACV7R,KAAK6R,IAAI8T,YAAY3lB,KAC9B,EAEAuR,EAAGtR,UAAUwlB,UAAY,SAAoBF,GAE3C,OADAvlB,KAAK6R,IAAM0T,EACJvlB,IACT,EAEAuR,EAAGtR,UAAU2lB,SAAW,SAAmBL,GAEzC,OADAniB,GAAQpD,KAAK6R,IAAK,yCACX7R,KAAKylB,UAAUF,EACxB,EAEAhU,EAAGtR,UAAU4lB,OAAS,SAAiB/f,GAErC,OADA1C,EAAOpD,KAAK6R,IAAK,sCACV7R,KAAK6R,IAAIuG,IAAIpY,KAAM8F,EAC5B,EAEAyL,EAAGtR,UAAU6lB,QAAU,SAAkBhgB,GAEvC,OADA1C,EAAOpD,KAAK6R,IAAK,uCACV7R,KAAK6R,IAAIqG,KAAKlY,KAAM8F,EAC7B,EAEAyL,EAAGtR,UAAU8lB,OAAS,SAAiBjgB,GAErC,OADA1C,EAAOpD,KAAK6R,IAAK,sCACV7R,KAAK6R,IAAIwG,IAAIrY,KAAM8F,EAC5B,EAEAyL,EAAGtR,UAAU+lB,QAAU,SAAkBlgB,GAEvC,OADA1C,EAAOpD,KAAK6R,IAAK,uCACV7R,KAAK6R,IAAIsG,KAAKnY,KAAM8F,EAC7B,EAEAyL,EAAGtR,UAAUgmB,OAAS,SAAiBngB,GAErC,OADA1C,EAAOpD,KAAK6R,IAAK,sCACV7R,KAAK6R,IAAIqU,IAAIlmB,KAAM8F,EAC5B,EAEAyL,EAAGtR,UAAUkmB,OAAS,SAAiBrgB,GAGrC,OAFA1C,EAAOpD,KAAK6R,IAAK,sCACjB7R,KAAK6R,IAAIuU,SAASpmB,KAAM8F,GACjB9F,KAAK6R,IAAIU,IAAIvS,KAAM8F,EAC5B,EAEAyL,EAAGtR,UAAUomB,QAAU,SAAkBvgB,GAGvC,OAFA1C,EAAOpD,KAAK6R,IAAK,sCACjB7R,KAAK6R,IAAIuU,SAASpmB,KAAM8F,GACjB9F,KAAK6R,IAAIyK,KAAKtc,KAAM8F,EAC7B,EAEAyL,EAAGtR,UAAUqmB,OAAS,WAGpB,OAFAljB,EAAOpD,KAAK6R,IAAK,sCACjB7R,KAAK6R,IAAI0U,SAASvmB,MACXA,KAAK6R,IAAIgP,IAAI7gB,KACtB,EAEAuR,EAAGtR,UAAUumB,QAAU,WAGrB,OAFApjB,EAAOpD,KAAK6R,IAAK,uCACjB7R,KAAK6R,IAAI0U,SAASvmB,MACXA,KAAK6R,IAAIiP,KAAK9gB,KACvB,EAGAuR,EAAGtR,UAAUwmB,QAAU,WAGrB,OAFArjB,EAAOpD,KAAK6R,IAAK,uCACjB7R,KAAK6R,IAAI0U,SAASvmB,MACXA,KAAK6R,IAAI6U,KAAK1mB,KACvB,EAEAuR,EAAGtR,UAAU0mB,QAAU,WAGrB,OAFAvjB,EAAOpD,KAAK6R,IAAK,uCACjB7R,KAAK6R,IAAI0U,SAASvmB,MACXA,KAAK6R,IAAI2S,KAAKxkB,KACvB,EAGAuR,EAAGtR,UAAU2mB,OAAS,WAGpB,OAFAxjB,EAAOpD,KAAK6R,IAAK,sCACjB7R,KAAK6R,IAAI0U,SAASvmB,MACXA,KAAK6R,IAAImF,IAAIhX,KACtB,EAEAuR,EAAGtR,UAAU4mB,OAAS,SAAiB/gB,GAGrC,OAFA1C,EAAOpD,KAAK6R,MAAQ/L,EAAI+L,IAAK,qBAC7B7R,KAAK6R,IAAI0U,SAASvmB,MACXA,KAAK6R,IAAI+B,IAAI5T,KAAM8F,EAC5B,EAGA,IAAIghB,EAAS,CACXC,KAAM,KACNC,KAAM,KACNC,KAAM,KACNC,OAAQ,MAIV,SAASC,EAAQrnB,EAAM6P,GAErB3P,KAAKF,KAAOA,EACZE,KAAK2P,EAAI,IAAI4B,EAAG5B,EAAG,IACnB3P,KAAK0f,EAAI1f,KAAK2P,EAAEwG,YAChBnW,KAAK0U,EAAI,IAAInD,EAAG,GAAGyP,OAAOhhB,KAAK0f,GAAGvH,KAAKnY,KAAK2P,GAE5C3P,KAAK4M,IAAM5M,KAAKonB,MAClB,CAgDA,SAASC,IACPF,EAAO5mB,KACLP,KACA,OACA,0EACJ,CA8DA,SAASsnB,IACPH,EAAO5mB,KACLP,KACA,OACA,iEACJ,CAGA,SAASunB,IACPJ,EAAO5mB,KACLP,KACA,OACA,wDACJ,CAGA,SAASwnB,IAEPL,EAAO5mB,KACLP,KACA,QACA,sEACJ,CA6CA,SAASqlB,EAAK1F,GACZ,GAAiB,iBAANA,EAAgB,CACzB,IAAI8H,EAAQlW,EAAGmW,OAAO/H,GACtB3f,KAAK2f,EAAI8H,EAAM9X,EACf3P,KAAKynB,MAAQA,CACf,MACErkB,EAAOuc,EAAEgF,IAAI,GAAI,kCACjB3kB,KAAK2f,EAAIA,EACT3f,KAAKynB,MAAQ,IAEjB,CAkOA,SAASE,EAAMhI,GACb0F,EAAI9kB,KAAKP,KAAM2f,GAEf3f,KAAKsiB,MAAQtiB,KAAK2f,EAAExJ,YAChBnW,KAAKsiB,MAAQ,IAAO,IACtBtiB,KAAKsiB,OAAS,GAAMtiB,KAAKsiB,MAAQ,IAGnCtiB,KAAKqS,EAAI,IAAId,EAAG,GAAGyP,OAAOhhB,KAAKsiB,OAC/BtiB,KAAKojB,GAAKpjB,KAAK4nB,KAAK5nB,KAAKqS,EAAEwO,OAC3B7gB,KAAK6nB,KAAO7nB,KAAKqS,EAAE8R,OAAOnkB,KAAK2f,GAE/B3f,KAAK8nB,KAAO9nB,KAAK6nB,KAAKtV,IAAIvS,KAAKqS,GAAG4P,MAAM,GAAGW,IAAI5iB,KAAK2f,GACpD3f,KAAK8nB,KAAO9nB,KAAK8nB,KAAK9E,KAAKhjB,KAAKqS,GAChCrS,KAAK8nB,KAAO9nB,KAAKqS,EAAEgG,IAAIrY,KAAK8nB,KAC9B,CA/aAX,EAAOlnB,UAAUmnB,KAAO,WACtB,IAAIxa,EAAM,IAAI2E,EAAG,MAEjB,OADA3E,EAAIgF,MAAQ,IAAIlQ,MAAM8Q,KAAKS,KAAKjT,KAAK0f,EAAI,KAClC9S,CACT,EAEAua,EAAOlnB,UAAU8nB,QAAU,SAAkBjiB,GAG3C,IACIkiB,EADA3V,EAAIvM,EAGR,GACE9F,KAAKwN,MAAM6E,EAAGrS,KAAK4M,KAGnBob,GADA3V,GADAA,EAAIrS,KAAKioB,MAAM5V,IACT6F,KAAKlY,KAAK4M,MACPuJ,kBACF6R,EAAOhoB,KAAK0f,GAErB,IAAI9M,EAAMoV,EAAOhoB,KAAK0f,GAAK,EAAIrN,EAAEqS,KAAK1kB,KAAK2P,GAgB3C,OAfY,IAARiD,GACFP,EAAET,MAAM,GAAK,EACbS,EAAE/Q,OAAS,GACFsR,EAAM,EACfP,EAAE8F,KAAKnY,KAAK2P,QAEIrH,IAAZ+J,EAAEe,MAEJf,EAAEe,QAGFf,EAAE6V,SAIC7V,CACT,EAEA8U,EAAOlnB,UAAUuN,MAAQ,SAAgBvH,EAAOnD,GAC9CmD,EAAM6P,OAAO9V,KAAK0f,EAAG,EAAG5c,EAC1B,EAEAqkB,EAAOlnB,UAAUgoB,MAAQ,SAAgBniB,GACvC,OAAOA,EAAIwW,KAAKtc,KAAK0U,EACvB,EAQA9U,EAASynB,EAAMF,GAEfE,EAAKpnB,UAAUuN,MAAQ,SAAgBvH,EAAOiL,GAK5C,IAHA,IAAIsQ,EAAO,QAEP2G,EAAS3V,KAAKvF,IAAIhH,EAAM3E,OAAQ,GAC3BiK,EAAI,EAAGA,EAAI4c,EAAQ5c,IAC1B2F,EAAOU,MAAMrG,GAAKtF,EAAM2L,MAAMrG,GAIhC,GAFA2F,EAAO5P,OAAS6mB,EAEZliB,EAAM3E,QAAU,EAGlB,OAFA2E,EAAM2L,MAAM,GAAK,OACjB3L,EAAM3E,OAAS,GAKjB,IAAIyI,EAAO9D,EAAM2L,MAAM,GAGvB,IAFAV,EAAOU,MAAMV,EAAO5P,UAAYyI,EAAOyX,EAElCjW,EAAI,GAAIA,EAAItF,EAAM3E,OAAQiK,IAAK,CAClC,IAAI6c,EAAwB,EAAjBniB,EAAM2L,MAAMrG,GACvBtF,EAAM2L,MAAMrG,EAAI,KAAQ6c,EAAO5G,IAAS,EAAMzX,IAAS,GACvDA,EAAOqe,CACT,CACAre,KAAU,GACV9D,EAAM2L,MAAMrG,EAAI,IAAMxB,EACT,IAATA,GAAc9D,EAAM3E,OAAS,GAC/B2E,EAAM3E,QAAU,GAEhB2E,EAAM3E,QAAU,CAEpB,EAEA+lB,EAAKpnB,UAAUgoB,MAAQ,SAAgBniB,GAErCA,EAAI8L,MAAM9L,EAAIxE,QAAU,EACxBwE,EAAI8L,MAAM9L,EAAIxE,OAAS,GAAK,EAC5BwE,EAAIxE,QAAU,EAId,IADA,IAAIkT,EAAK,EACAjJ,EAAI,EAAGA,EAAIzF,EAAIxE,OAAQiK,IAAK,CACnC,IAAI2H,EAAmB,EAAfpN,EAAI8L,MAAMrG,GAClBiJ,GAAU,IAAJtB,EACNpN,EAAI8L,MAAMrG,GAAU,SAALiJ,EACfA,EAAS,GAAJtB,GAAasB,EAAK,SAAa,EACtC,CASA,OANkC,IAA9B1O,EAAI8L,MAAM9L,EAAIxE,OAAS,KACzBwE,EAAIxE,SAC8B,IAA9BwE,EAAI8L,MAAM9L,EAAIxE,OAAS,IACzBwE,EAAIxE,UAGDwE,CACT,EAQAlG,EAAS0nB,EAAMH,GAQfvnB,EAAS2nB,EAAMJ,GASfvnB,EAAS4nB,EAAQL,GAEjBK,EAAOvnB,UAAUgoB,MAAQ,SAAgBniB,GAGvC,IADA,IAAI2O,EAAQ,EACHlJ,EAAI,EAAGA,EAAIzF,EAAIxE,OAAQiK,IAAK,CACnC,IAAI6K,EAA0B,IAAL,EAAftQ,EAAI8L,MAAMrG,IAAiBkJ,EACjCD,EAAU,SAAL4B,EACTA,KAAQ,GAERtQ,EAAI8L,MAAMrG,GAAKiJ,EACfC,EAAQ2B,CACV,CAIA,OAHc,IAAV3B,IACF3O,EAAI8L,MAAM9L,EAAIxE,UAAYmT,GAErB3O,CACT,EAGAyL,EAAGmW,OAAS,SAAgB5nB,GAE1B,GAAIgnB,EAAOhnB,GAAO,OAAOgnB,EAAOhnB,GAEhC,IAAI2nB,EACJ,GAAa,SAAT3nB,EACF2nB,EAAQ,IAAIJ,OACP,GAAa,SAATvnB,EACT2nB,EAAQ,IAAIH,OACP,GAAa,SAATxnB,EACT2nB,EAAQ,IAAIF,MACP,IAAa,WAATznB,EAGT,MAAM,IAAI6F,MAAM,iBAAmB7F,GAFnC2nB,EAAQ,IAAID,CAGd,CAGA,OAFAV,EAAOhnB,GAAQ2nB,EAERA,CACT,EAiBApC,EAAIplB,UAAUsmB,SAAW,SAAmBjS,GAC1ClR,EAAsB,IAAfkR,EAAE3C,SAAgB,iCACzBvO,EAAOkR,EAAEzC,IAAK,kCAChB,EAEAwT,EAAIplB,UAAUmmB,SAAW,SAAmB9R,EAAGC,GAC7CnR,EAAqC,IAA7BkR,EAAE3C,SAAW4C,EAAE5C,UAAiB,iCACxCvO,EAAOkR,EAAEzC,KAAOyC,EAAEzC,MAAQ0C,EAAE1C,IAC1B,kCACJ,EAEAwT,EAAIplB,UAAU2nB,KAAO,SAAetT,GAClC,OAAItU,KAAKynB,MAAcznB,KAAKynB,MAAMM,QAAQzT,GAAGmR,UAAUzlB,OAEvDo1B,EAAK9gB,EAAGA,EAAE0O,KAAKhjB,KAAK2f,GAAG8F,UAAUzlB,OAC1BsU,EACT,EAEA+Q,EAAIplB,UAAU+W,IAAM,SAAc1C,GAChC,OAAIA,EAAEW,SACGX,EAAE1P,QAGJ5E,KAAK2f,EAAEtH,IAAI/D,GAAGmR,UAAUzlB,KACjC,EAEAqlB,EAAIplB,UAAUmY,IAAM,SAAc9D,EAAGC,GACnCvU,KAAKomB,SAAS9R,EAAGC,GAEjB,IAAI/R,EAAM8R,EAAE8D,IAAI7D,GAIhB,OAHI/R,EAAIoQ,IAAI5S,KAAK2f,IAAM,GACrBnd,EAAI2V,KAAKnY,KAAK2f,GAETnd,EAAIijB,UAAUzlB,KACvB,EAEAqlB,EAAIplB,UAAUiY,KAAO,SAAe5D,EAAGC,GACrCvU,KAAKomB,SAAS9R,EAAGC,GAEjB,IAAI/R,EAAM8R,EAAE4D,KAAK3D,GAIjB,OAHI/R,EAAIoQ,IAAI5S,KAAK2f,IAAM,GACrBnd,EAAI2V,KAAKnY,KAAK2f,GAETnd,CACT,EAEA6iB,EAAIplB,UAAUoY,IAAM,SAAc/D,EAAGC,GACnCvU,KAAKomB,SAAS9R,EAAGC,GAEjB,IAAI/R,EAAM8R,EAAE+D,IAAI9D,GAIhB,OAHI/R,EAAI+hB,KAAK,GAAK,GAChB/hB,EAAI0V,KAAKlY,KAAK2f,GAETnd,EAAIijB,UAAUzlB,KACvB,EAEAqlB,EAAIplB,UAAUkY,KAAO,SAAe7D,EAAGC,GACrCvU,KAAKomB,SAAS9R,EAAGC,GAEjB,IAAI/R,EAAM8R,EAAE6D,KAAK5D,GAIjB,OAHI/R,EAAI+hB,KAAK,GAAK,GAChB/hB,EAAI0V,KAAKlY,KAAK2f,GAETnd,CACT,EAEA6iB,EAAIplB,UAAUimB,IAAM,SAAc5R,EAAGxO,GAEnC,OADA9F,KAAKumB,SAASjS,GACPtU,KAAK4nB,KAAKtT,EAAEsN,MAAM9b,GAC3B,EAEAuf,EAAIplB,UAAUqc,KAAO,SAAehI,EAAGC,GAErC,OADAvU,KAAKomB,SAAS9R,EAAGC,GACVvU,KAAK4nB,KAAKtT,EAAEgI,KAAK/H,GAC1B,EAEA8Q,EAAIplB,UAAUsS,IAAM,SAAc+B,EAAGC,GAEnC,OADAvU,KAAKomB,SAAS9R,EAAGC,GACVvU,KAAK4nB,KAAKtT,EAAE/B,IAAIgC,GACzB,EAEA8Q,EAAIplB,UAAU6gB,KAAO,SAAexM,GAClC,OAAOtU,KAAKsc,KAAKhI,EAAGA,EAAE1P,QACxB,EAEAygB,EAAIplB,UAAU4gB,IAAM,SAAcvM,GAChC,OAAOtU,KAAKuS,IAAI+B,EAAGA,EACrB,EAEA+Q,EAAIplB,UAAUymB,KAAO,SAAepS,GAClC,GAAIA,EAAEW,SAAU,OAAOX,EAAE1P,QAEzB,IAAIyjB,EAAOroB,KAAK2f,EAAE9J,MAAM,GAIxB,GAHAzS,EAAOilB,EAAO,GAAM,GAGP,IAATA,EAAY,CACd,IAAIzU,EAAM5T,KAAK2f,EAAEvH,IAAI,IAAI7G,EAAG,IAAIuE,OAAO,GACvC,OAAO9V,KAAK4T,IAAIU,EAAGV,EACrB,CAOA,IAFA,IAAIgC,EAAI5V,KAAK2f,EAAEwC,KAAK,GAChBtD,EAAI,GACAjJ,EAAEX,UAA2B,IAAfW,EAAEC,MAAM,IAC5BgJ,IACAjJ,EAAEE,OAAO,GAEX1S,GAAQwS,EAAEX,UAEV,IAAIqT,EAAM,IAAI/W,EAAG,GAAG+T,MAAMtlB,MACtBuoB,EAAOD,EAAI1B,SAIX4B,EAAOxoB,KAAK2f,EAAEwC,KAAK,GAAGrM,OAAO,GAC7B2S,EAAIzoB,KAAK2f,EAAExJ,YAGf,IAFAsS,EAAI,IAAIlX,EAAG,EAAIkX,EAAIA,GAAGnD,MAAMtlB,MAEW,IAAhCA,KAAK4T,IAAI6U,EAAGD,GAAM5V,IAAI2V,IAC3BE,EAAE3C,QAAQyC,GAOZ,IAJA,IAAIrW,EAAIlS,KAAK4T,IAAI6U,EAAG7S,GAChBvD,EAAIrS,KAAK4T,IAAIU,EAAGsB,EAAEsM,KAAK,GAAGpM,OAAO,IACjCG,EAAIjW,KAAK4T,IAAIU,EAAGsB,GAChB+J,EAAId,EACc,IAAf5I,EAAErD,IAAI0V,IAAY,CAEvB,IADA,IAAI1b,EAAMqJ,EACD1K,EAAI,EAAoB,IAAjBqB,EAAIgG,IAAI0V,GAAY/c,IAClCqB,EAAMA,EAAI0Z,SAEZljB,EAAOmI,EAAIoU,GACX,IAAIpL,EAAIvU,KAAK4T,IAAI1B,EAAG,IAAIX,EAAG,GAAGyP,OAAOrB,EAAIpU,EAAI,IAE7C8G,EAAIA,EAAE8T,OAAO5R,GACbrC,EAAIqC,EAAE+R,SACNrQ,EAAIA,EAAEkQ,OAAOjU,GACbyN,EAAIpU,CACN,CAEA,OAAO8G,CACT,EAEAgT,EAAIplB,UAAUukB,KAAO,SAAelQ,GAClC,IAAIoU,EAAMpU,EAAE6P,OAAOnkB,KAAK2f,GACxB,OAAqB,IAAjB+I,EAAI/W,UACN+W,EAAI/W,SAAW,EACR3R,KAAK4nB,KAAKc,GAAK9B,UAEf5mB,KAAK4nB,KAAKc,EAErB,EAEArD,EAAIplB,UAAU2T,IAAM,SAAcU,EAAGxO,GACnC,GAAIA,EAAImP,SAAU,OAAO,IAAI1D,EAAG,GAAG+T,MAAMtlB,MACzC,GAAoB,IAAhB8F,EAAIye,KAAK,GAAU,OAAOjQ,EAAE1P,QAEhC,IACI+jB,EAAM,IAAIjnB,MAAM,IACpBinB,EAAI,GAAK,IAAIpX,EAAG,GAAG+T,MAAMtlB,MACzB2oB,EAAI,GAAKrU,EACT,IAAK,IAAI/I,EAAI,EAAGA,EAAIod,EAAIrnB,OAAQiK,IAC9Bod,EAAIpd,GAAKvL,KAAKuS,IAAIoW,EAAIpd,EAAI,GAAI+I,GAGhC,IAAI9R,EAAMmmB,EAAI,GACVC,EAAU,EACVC,EAAa,EACb9hB,EAAQjB,EAAIqQ,YAAc,GAK9B,IAJc,IAAVpP,IACFA,EAAQ,IAGLwE,EAAIzF,EAAIxE,OAAS,EAAGiK,GAAK,EAAGA,IAAK,CAEpC,IADA,IAAIkI,EAAO3N,EAAI8L,MAAMrG,GACZC,EAAIzE,EAAQ,EAAGyE,GAAK,EAAGA,IAAK,CACnC,IAAIwM,EAAOvE,GAAQjI,EAAK,EACpBhJ,IAAQmmB,EAAI,KACdnmB,EAAMxC,KAAK6gB,IAAIre,IAGL,IAARwV,GAAyB,IAAZ4Q,GAKjBA,IAAY,EACZA,GAAW5Q,GA9BE,KA+Bb6Q,GACwC,IAANtd,GAAiB,IAANC,KAE7ChJ,EAAMxC,KAAKuS,IAAI/P,EAAKmmB,EAAIC,IACxBC,EAAa,EACbD,EAAU,IAXRC,EAAa,CAYjB,CACA9hB,EAAQ,EACV,CAEA,OAAOvE,CACT,EAEA6iB,EAAIplB,UAAUulB,UAAY,SAAoB1f,GAC5C,IAAIuM,EAAIvM,EAAIkd,KAAKhjB,KAAK2f,GAEtB,OAAOtN,IAAMvM,EAAMuM,EAAEzN,QAAUyN,CACjC,EAEAgT,EAAIplB,UAAU0lB,YAAc,SAAsB7f,GAChD,IAAItD,EAAMsD,EAAIlB,QAEd,OADApC,EAAIqP,IAAM,KACHrP,CACT,EAMA+O,EAAGuX,KAAO,SAAehjB,GACvB,OAAO,IAAI6hB,EAAK7hB,EAClB,EAkBAlG,EAAS+nB,EAAMtC,GAEfsC,EAAK1nB,UAAUulB,UAAY,SAAoB1f,GAC7C,OAAO9F,KAAK4nB,KAAK9hB,EAAI8b,MAAM5hB,KAAKsiB,OAClC,EAEAqF,EAAK1nB,UAAU0lB,YAAc,SAAsB7f,GACjD,IAAIuM,EAAIrS,KAAK4nB,KAAK9hB,EAAIyM,IAAIvS,KAAK6nB,OAE/B,OADAxV,EAAER,IAAM,KACDQ,CACT,EAEAsV,EAAK1nB,UAAUqc,KAAO,SAAehI,EAAGC,GACtC,GAAID,EAAEW,UAAYV,EAAEU,SAGlB,OAFAX,EAAE1C,MAAM,GAAK,EACb0C,EAAEhT,OAAS,EACJgT,EAGT,IAAI2B,EAAI3B,EAAEgI,KAAK/H,GACXrC,EAAI+D,EAAE+L,MAAMhiB,KAAKsiB,OAAO/P,IAAIvS,KAAK8nB,MAAM/F,OAAO/hB,KAAKsiB,OAAO/P,IAAIvS,KAAK2f,GACnEoJ,EAAI9S,EAAEkC,KAAKjG,GAAG4D,OAAO9V,KAAKsiB,OAC1B9f,EAAMumB,EAQV,OANIA,EAAEnW,IAAI5S,KAAK2f,IAAM,EACnBnd,EAAMumB,EAAE5Q,KAAKnY,KAAK2f,GACToJ,EAAExE,KAAK,GAAK,IACrB/hB,EAAMumB,EAAE7Q,KAAKlY,KAAK2f,IAGbnd,EAAIijB,UAAUzlB,KACvB,EAEA2nB,EAAK1nB,UAAUsS,IAAM,SAAc+B,EAAGC,GACpC,GAAID,EAAEW,UAAYV,EAAEU,SAAU,OAAO,IAAI1D,EAAG,GAAGkU,UAAUzlB,MAEzD,IAAIiW,EAAI3B,EAAE/B,IAAIgC,GACVrC,EAAI+D,EAAE+L,MAAMhiB,KAAKsiB,OAAO/P,IAAIvS,KAAK8nB,MAAM/F,OAAO/hB,KAAKsiB,OAAO/P,IAAIvS,KAAK2f,GACnEoJ,EAAI9S,EAAEkC,KAAKjG,GAAG4D,OAAO9V,KAAKsiB,OAC1B9f,EAAMumB,EAOV,OANIA,EAAEnW,IAAI5S,KAAK2f,IAAM,EACnBnd,EAAMumB,EAAE5Q,KAAKnY,KAAK2f,GACToJ,EAAExE,KAAK,GAAK,IACrB/hB,EAAMumB,EAAE7Q,KAAKlY,KAAK2f,IAGbnd,EAAIijB,UAAUzlB,KACvB,EAEA2nB,EAAK1nB,UAAUukB,KAAO,SAAelQ,GAGnC,OADUtU,KAAK4nB,KAAKtT,EAAE6P,OAAOnkB,KAAK2f,GAAGpN,IAAIvS,KAAKojB,KACnCqC,UAAUzlB,KACvB,CACD,CA19GD,C,WA09G4CA,K,kBC19G5C0E,EAAOrF,QAAU,EAAjB,M,iBCAA,IAAI6B,EAAS,gBACT60B,EAAa,EAAQ,OACrBC,EAAS,EAAQ,OACjBp2B,EAAW,EAAQ,OACnB0P,EAAO,EAAQ,OACf2mB,EAAS,EAAQ,OAEjBC,EAAa,EAAQ,OAMzB,SAASC,EAAMC,GACbJ,EAAOK,SAAS91B,KAAKP,MAErB,IAAIY,EAAOs1B,EAAWE,GACtB,IAAKx1B,EAAM,MAAM,IAAI+E,MAAM,0BAE3B3F,KAAKs2B,UAAY11B,EAAK21B,KACtBv2B,KAAKw2B,MAAQT,EAAWn1B,EAAK21B,MAC7Bv2B,KAAKy2B,KAAO71B,EAAK4N,GACjBxO,KAAK02B,UAAY91B,EAAK0O,IACxB,CAuBA,SAASqnB,EAAQP,GACfJ,EAAOK,SAAS91B,KAAKP,MAErB,IAAIY,EAAOs1B,EAAWE,GACtB,IAAKx1B,EAAM,MAAM,IAAI+E,MAAM,0BAE3B3F,KAAKw2B,MAAQT,EAAWn1B,EAAK21B,MAC7Bv2B,KAAKy2B,KAAO71B,EAAK4N,GACjBxO,KAAK02B,UAAY91B,EAAK0O,IACxB,CAuBA,SAASsnB,EAAYR,GACnB,OAAO,IAAID,EAAKC,EAClB,CAEA,SAASS,EAAcT,GACrB,OAAO,IAAIO,EAAOP,EACpB,CA5EA3wB,OAAOC,KAAKwwB,GAAYlzB,SAAQ,SAAUqB,GACxC6xB,EAAW7xB,GAAKmK,GAAKtN,EAAO6M,KAAKmoB,EAAW7xB,GAAKmK,GAAI,OACrD0nB,EAAW7xB,EAAIssB,eAAiBuF,EAAW7xB,EAC7C,IAaAzE,EAASu2B,EAAMH,EAAOK,UAEtBF,EAAKl2B,UAAU62B,OAAS,SAAiBl2B,EAAMwf,EAAG2W,GAChD/2B,KAAKw2B,MAAM5I,OAAOhtB,GAClBm2B,GACF,EAEAZ,EAAKl2B,UAAU2tB,OAAS,SAAiBhtB,EAAMH,GAI7C,MAHoB,iBAATG,IAAmBA,EAAOM,EAAO6M,KAAKnN,EAAMH,IAEvDT,KAAKw2B,MAAM5I,OAAOhtB,GACXZ,IACT,EAEAm2B,EAAKl2B,UAAUqP,KAAO,SAAqBjL,EAAK5D,GAC9CT,KAAK4N,MACL,IAAI2oB,EAAOv2B,KAAKw2B,MAAMQ,SAClBC,EAAM3nB,EAAKinB,EAAMlyB,EAAKrE,KAAKs2B,UAAWt2B,KAAK02B,UAAW12B,KAAKy2B,MAE/D,OAAOh2B,EAAMw2B,EAAI9qB,SAAS1L,GAAOw2B,CACnC,EAYAr3B,EAAS+2B,EAAQX,EAAOK,UAExBM,EAAO12B,UAAU62B,OAAS,SAAiBl2B,EAAMwf,EAAG2W,GAClD/2B,KAAKw2B,MAAM5I,OAAOhtB,GAClBm2B,GACF,EAEAJ,EAAO12B,UAAU2tB,OAAS,SAAiBhtB,EAAMH,GAI/C,MAHoB,iBAATG,IAAmBA,EAAOM,EAAO6M,KAAKnN,EAAMH,IAEvDT,KAAKw2B,MAAM5I,OAAOhtB,GACXZ,IACT,EAEA22B,EAAO12B,UAAUg2B,OAAS,SAAuB5xB,EAAK4yB,EAAKx2B,GACtC,iBAARw2B,IAAkBA,EAAM/1B,EAAO6M,KAAKkpB,EAAKx2B,IAEpDT,KAAK4N,MACL,IAAI2oB,EAAOv2B,KAAKw2B,MAAMQ,SACtB,OAAOf,EAAOgB,EAAKV,EAAMlyB,EAAKrE,KAAK02B,UAAW12B,KAAKy2B,KACrD,EAUA/xB,EAAOrF,QAAU,CACf82B,KAAMS,EACND,OAAQE,EACRD,WAAYA,EACZC,aAAcA,E,kBCzFhB,IAAI31B,EAAS,gBACTg2B,EAAa,EAAQ,OACrB5C,EAAM,EAAQ,OACd6C,EAAK,YACL5lB,EAAK,EAAQ,OACb6lB,EAAY,EAAQ,OACpBC,EAAS,EAAQ,OAyErB,SAASC,EAAQ1Z,EAAGhI,EAAG2gB,EAAMgB,GAE3B,IADA3Z,EAAI1c,EAAO6M,KAAK6P,EAAEvO,YACZ/N,OAASsU,EAAE7T,aAAc,CAC7B,IAAIkS,EAAQ/S,EAAO6B,MAAM6S,EAAE7T,aAAe6b,EAAEtc,QAC5Csc,EAAI1c,EAAOqC,OAAO,CAAC0Q,EAAO2J,GAC5B,CACA,IAAI4Z,EAAOjB,EAAKj1B,OACZm2B,EAkBN,SAAsBxW,EAAMrL,GAE1BqL,GADAA,EAAOyW,EAASzW,EAAMrL,IACVpC,IAAIoC,GAChB,IAAI9S,EAAM5B,EAAO6M,KAAKkT,EAAK5R,WAC3B,GAAIvM,EAAIxB,OAASsU,EAAE7T,aAAc,CAC/B,IAAIkS,EAAQ/S,EAAO6B,MAAM6S,EAAE7T,aAAee,EAAIxB,QAC9CwB,EAAM5B,EAAOqC,OAAO,CAAC0Q,EAAOnR,GAC9B,CACA,OAAOA,CACT,CA3Bc60B,CAAYpB,EAAM3gB,GAC1BiU,EAAI3oB,EAAO6B,MAAMy0B,GACrB3N,EAAE+N,KAAK,GACP,IAAIljB,EAAIxT,EAAO6B,MAAMy0B,GAKrB,OAJA9iB,EAAIwiB,EAAWK,EAAM7iB,GAAGkZ,OAAO/D,GAAG+D,OAAO1sB,EAAO6M,KAAK,CAAC,KAAK6f,OAAOhQ,GAAGgQ,OAAO6J,GAAOT,SACnFnN,EAAIqN,EAAWK,EAAM7iB,GAAGkZ,OAAO/D,GAAGmN,SAG3B,CAAEtiB,EAFTA,EAAIwiB,EAAWK,EAAM7iB,GAAGkZ,OAAO/D,GAAG+D,OAAO1sB,EAAO6M,KAAK,CAAC,KAAK6f,OAAOhQ,GAAGgQ,OAAO6J,GAAOT,SAEpEnN,EADfA,EAAIqN,EAAWK,EAAM7iB,GAAGkZ,OAAO/D,GAAGmN,SAEpC,CAEA,SAASU,EAAUG,EAAOjiB,GACxB,IAAIqL,EAAO,IAAI1P,EAAGsmB,GACdvV,GAASuV,EAAMv2B,QAAU,GAAKsU,EAAEO,YAEpC,OADImM,EAAQ,GAAGrB,EAAKS,MAAMY,GACnBrB,CACT,CAaA,SAAS6W,EAASliB,EAAGmiB,EAAIR,GACvB,IAAIthB,EACAvB,EAEJ,EAAG,CAGD,IAFAuB,EAAI/U,EAAO6B,MAAM,GAEC,EAAXkT,EAAE3U,OAAasU,EAAEO,aACtB4hB,EAAGlO,EAAIqN,EAAWK,EAAMQ,EAAGrjB,GAAGkZ,OAAOmK,EAAGlO,GAAGmN,SAC3C/gB,EAAI/U,EAAOqC,OAAO,CAAC0S,EAAG8hB,EAAGlO,IAG3BnV,EAAIgjB,EAASzhB,EAAGL,GAChBmiB,EAAGrjB,EAAIwiB,EAAWK,EAAMQ,EAAGrjB,GAAGkZ,OAAOmK,EAAGlO,GAAG+D,OAAO1sB,EAAO6M,KAAK,CAAC,KAAKipB,SACpEe,EAAGlO,EAAIqN,EAAWK,EAAMQ,EAAGrjB,GAAGkZ,OAAOmK,EAAGlO,GAAGmN,QAC7C,QAAuB,IAAdtiB,EAAE9B,IAAIgD,IAEf,OAAOlB,CACT,CAEA,SAASsjB,EAAOrU,EAAGjP,EAAG/E,EAAGiG,GACvB,OAAO+N,EAAE2B,MAAM/T,EAAGuX,KAAKnZ,IAAIkX,OAAOnS,GAAGgR,UAAUlS,IAAIoC,EACrD,CAEAlR,EAAOrF,QAnIP,SAAek3B,EAAMlyB,EAAK4zB,EAAUC,EAAUt0B,GAC5C,IAAIswB,EAAOkD,EAAU/yB,GACrB,GAAI6vB,EAAKiE,MAAO,CAEd,GAAiB,UAAbD,GAAqC,cAAbA,EAA0B,MAAM,IAAIvyB,MAAM,0BACtE,OAmBJ,SAAiB4wB,EAAMrC,GACrB,IAAIkE,EAAUf,EAAOnD,EAAKiE,MAAMt1B,KAAK,MACrC,IAAKu1B,EAAS,MAAM,IAAIzyB,MAAM,iBAAmBuuB,EAAKiE,MAAMt1B,KAAK,MAEjE,IAEIC,EAFQ,IAAIq0B,EAAGiB,GACHC,eAAenE,EAAKoE,YACtBhpB,KAAKinB,GAEnB,OAAOr1B,EAAO6M,KAAKjL,EAAIy1B,QACzB,CA5BWC,CAAOjC,EAAMrC,EACtB,CAAO,GAAkB,QAAdA,EAAKhsB,KAAgB,CAC9B,GAAiB,QAAbgwB,EAAoB,MAAM,IAAIvyB,MAAM,0BACxC,OA2BJ,SAAkB4wB,EAAMrC,EAAMqD,GAU5B,IATA,IAKI7iB,EALAkJ,EAAIsW,EAAKuE,OAAOC,SAChB/oB,EAAIukB,EAAKuE,OAAO9oB,EAChBiG,EAAIse,EAAKuE,OAAO7iB,EAChB+N,EAAIuQ,EAAKuE,OAAO9U,EAChBtR,EAAI,IAAId,EAAG,GAEXonB,EAAIjB,EAASnB,EAAM3gB,GAAGpC,IAAIoC,GAC1BiJ,GAAI,EACJkZ,EAAKT,EAAO1Z,EAAGhI,EAAG2gB,EAAMgB,IACf,IAAN1Y,GAELxM,EAAI2lB,EAAMrU,EADVjP,EAAIojB,EAAQliB,EAAGmiB,EAAIR,GACH5nB,EAAGiG,GAED,KADlBiJ,EAAInK,EAAE8P,KAAK5O,GAAG0G,KAAKqc,EAAEvgB,IAAIwF,EAAErL,IAAIF,KAAKmB,IAAIoC,IAClC2O,KAAK,KACT1F,GAAI,EACJxM,EAAI,IAAId,EAAG,IAGf,OAGF,SAAgBc,EAAGwM,GACjBxM,EAAIA,EAAEhD,UACNwP,EAAIA,EAAExP,UAGK,IAAPgD,EAAE,KAAWA,EAAI,CAAC,GAAG9O,OAAO8O,IACrB,IAAPwM,EAAE,KAAWA,EAAI,CAAC,GAAGtb,OAAOsb,IAEhC,IACIrc,EAAM,CAAC,GADC6P,EAAE/Q,OAASud,EAAEvd,OAAS,EACV,EAAM+Q,EAAE/Q,QAEhC,OADAkB,EAAMA,EAAIe,OAAO8O,EAAG,CAAC,EAAMwM,EAAEvd,QAASud,GAC/B3d,EAAO6M,KAAKvL,EACrB,CAfS+1B,CAAMlmB,EAAGwM,EAClB,CA/CW+Z,CAAQrC,EAAMrC,EAAM+D,EAC7B,CACE,GAAiB,QAAbC,GAAmC,cAAbA,EAA0B,MAAM,IAAIvyB,MAAM,0BAEtE4wB,EAAOr1B,EAAOqC,OAAO,CAACK,EAAK2yB,IAG3B,IAFA,IAAIjrB,EAAM4oB,EAAKC,QAAQpyB,aACnBowB,EAAM,CAAC,EAAG,GACPoE,EAAKj1B,OAAS6wB,EAAI7wB,OAAS,EAAIgK,GAAK6mB,EAAIntB,KAAK,KACpDmtB,EAAIntB,KAAK,GAET,IADA,IAAIuG,GAAK,IACAA,EAAIgrB,EAAKj1B,QAAQ6wB,EAAIntB,KAAKuxB,EAAKhrB,IAGxC,OADU+oB,EAAInC,EAAK+B,EAErB,EA8GAxvB,EAAOrF,QAAQi4B,OAASA,EACxB5yB,EAAOrF,QAAQy4B,QAAUA,C,kBC7IzB,IAAI52B,EAAS,gBACTqQ,EAAK,EAAQ,OACb4lB,EAAK,YACLC,EAAY,EAAQ,OACpBC,EAAS,EAAQ,OAyErB,SAASwB,EAAYtkB,EAAGqB,GACtB,GAAIrB,EAAEgQ,KAAK,IAAM,EAAG,MAAM,IAAI5e,MAAM,eACpC,GAAI4O,EAAE3B,IAAIgD,IAAMA,EAAG,MAAM,IAAIjQ,MAAM,cACrC,CAEAjB,EAAOrF,QA5EP,SAAiB43B,EAAKV,EAAMlyB,EAAK6zB,EAAUt0B,GACzC,IAAIk1B,EAAM1B,EAAU/yB,GACpB,GAAiB,OAAby0B,EAAI5wB,KAAe,CAErB,GAAiB,UAAbgwB,GAAqC,cAAbA,EAA0B,MAAM,IAAIvyB,MAAM,yBACtE,OAmCJ,SAAmBsxB,EAAKV,EAAMuC,GAC5B,IAAIV,EAAUf,EAAOyB,EAAIl4B,KAAKw1B,UAAU+B,MAAMt1B,KAAK,MACnD,IAAKu1B,EAAS,MAAM,IAAIzyB,MAAM,iBAAmBmzB,EAAIl4B,KAAKw1B,UAAU+B,MAAMt1B,KAAK,MAE/E,IAAIs1B,EAAQ,IAAIhB,EAAGiB,GACfW,EAASD,EAAIl4B,KAAKo4B,kBAAkBp4B,KAExC,OAAOu3B,EAAMlC,OAAOM,EAAMU,EAAK8B,EACjC,CA3CWE,CAAShC,EAAKV,EAAMuC,EAC7B,CAAO,GAAiB,QAAbA,EAAI5wB,KAAgB,CAC7B,GAAiB,QAAbgwB,EAAoB,MAAM,IAAIvyB,MAAM,yBACxC,OA0CJ,SAAoBsxB,EAAKV,EAAMuC,GAC7B,IAAInpB,EAAImpB,EAAIl4B,KAAK+O,EACbiG,EAAIkjB,EAAIl4B,KAAKgV,EACb+N,EAAImV,EAAIl4B,KAAK+iB,EACb9F,EAAIib,EAAIl4B,KAAKs4B,QACbC,EAAW/B,EAAUgC,UAAUz4B,OAAOs2B,EAAK,OAC3CpY,EAAIsa,EAASta,EACbxM,EAAI8mB,EAAS9mB,EACjBwmB,EAAWha,EAAGjJ,GACdijB,EAAWxmB,EAAGuD,GACd,IAAIyjB,EAAQ9nB,EAAGuX,KAAKnZ,GAChBuD,EAAI2L,EAAE2F,KAAK5O,GAOf,OAAoB,IANZ+N,EAAE2B,MAAM+T,GACbxS,OAAO,IAAItV,EAAGglB,GAAMhkB,IAAIW,GAAGM,IAAIoC,IAC/B8P,UACAnT,IAAIsL,EAAEyH,MAAM+T,GAAOxS,OAAOxU,EAAEE,IAAIW,GAAGM,IAAIoC,IAAI8P,WAC3ClS,IAAI7D,GACJ6D,IAAIoC,GACEhD,IAAIP,EACf,CA7DWinB,CAAUrC,EAAKV,EAAMuC,EAC9B,CACE,GAAiB,QAAbZ,GAAmC,cAAbA,EAA0B,MAAM,IAAIvyB,MAAM,yBAEtE4wB,EAAOr1B,EAAOqC,OAAO,CAACK,EAAK2yB,IAI3B,IAHA,IAAIjrB,EAAMwtB,EAAI3E,QAAQpyB,aAClBowB,EAAM,CAAC,GACPoH,EAAS,EACNhD,EAAKj1B,OAAS6wB,EAAI7wB,OAAS,EAAIgK,GACpC6mB,EAAIntB,KAAK,KACTu0B,IAEFpH,EAAIntB,KAAK,GAET,IADA,IAAIuG,GAAK,IACAA,EAAIgrB,EAAKj1B,QAChB6wB,EAAIntB,KAAKuxB,EAAKhrB,IAEhB4mB,EAAMjxB,EAAO6M,KAAKokB,GAClB,IAAItgB,EAAMN,EAAGuX,KAAKgQ,EAAI3E,SAGtB8C,GAFAA,EAAM,IAAI1lB,EAAG0lB,GAAK3R,MAAMzT,IAEdgV,OAAO,IAAItV,EAAGunB,EAAIrE,iBAC5BwC,EAAM/1B,EAAO6M,KAAKkpB,EAAIvR,UAAUrW,WAChC,IAAIvM,EAAMy2B,EAAS,EAAI,EAAI,EAK3B,IAJAjuB,EAAMkH,KAAKvF,IAAIgqB,EAAI31B,OAAQ6wB,EAAI7wB,QAC3B21B,EAAI31B,SAAW6wB,EAAI7wB,SAAQwB,EAAM,GAErCyI,GAAK,IACIA,EAAID,GAAKxI,GAAOm0B,EAAI1rB,GAAK4mB,EAAI5mB,GACtC,OAAe,IAARzI,CACT,C,yBC7CA,SAAW4B,EAAQrF,GACjB,aAGA,SAAS+D,EAAQyC,EAAK8D,GACpB,IAAK9D,EAAK,MAAM,IAAIF,MAAMgE,GAAO,mBACnC,CAIA,SAAS/J,EAAUuR,EAAMC,GACvBD,EAAKE,OAASD,EACd,IAAIE,EAAW,WAAa,EAC5BA,EAASrR,UAAYmR,EAAUnR,UAC/BkR,EAAKlR,UAAY,IAAIqR,EACrBH,EAAKlR,UAAUgC,YAAckP,CAC/B,CAIA,SAASI,EAAIC,EAAQhS,EAAMiS,GACzB,GAAIF,EAAGG,KAAKF,GACV,OAAOA,EAGTxR,KAAK2R,SAAW,EAChB3R,KAAK4R,MAAQ,KACb5R,KAAKsB,OAAS,EAGdtB,KAAK6R,IAAM,KAEI,OAAXL,IACW,OAAThS,GAA0B,OAATA,IACnBiS,EAASjS,EACTA,EAAO,IAGTQ,KAAKmF,MAAMqM,GAAU,EAAGhS,GAAQ,GAAIiS,GAAU,MAElD,CAUA,IAAIvQ,EATkB,iBAAXwD,EACTA,EAAOrF,QAAUkS,EAEjBlS,EAAQkS,GAAKA,EAGfA,EAAGA,GAAKA,EACRA,EAAGO,SAAW,GAGd,IAEI5Q,EADoB,oBAAX6Q,aAAmD,IAAlBA,OAAO7Q,OACxC6Q,OAAO7Q,OAEP,eAEb,CAAE,MAAO0F,GACT,CA+HA,SAASoL,EAAeC,EAAQnI,GAC9B,IAAIoI,EAAID,EAAO1D,WAAWzE,GAE1B,OAAIoI,GAAK,IAAMA,GAAK,GACXA,EAAI,GAEFA,GAAK,IAAMA,GAAK,GAClBA,EAAI,GAEFA,GAAK,IAAMA,GAAK,IAClBA,EAAI,QAEX9O,GAAO,EAAO,wBAA0B6O,EAE5C,CAEA,SAASE,EAAcF,EAAQG,EAAYtI,GACzC,IAAIuI,EAAIL,EAAcC,EAAQnI,GAI9B,OAHIA,EAAQ,GAAKsI,IACfC,GAAKL,EAAcC,EAAQnI,EAAQ,IAAM,GAEpCuI,CACT,CA6CA,SAASC,EAAW/I,EAAKxC,EAAO6G,EAAK2E,GAInC,IAHA,IAAIF,EAAI,EACJkC,EAAI,EACJjJ,EAAMkH,KAAKvF,IAAI1D,EAAIjI,OAAQsM,GACtBrC,EAAIxE,EAAOwE,EAAID,EAAKC,IAAK,CAChC,IAAI2G,EAAI3I,EAAIgF,WAAWhD,GAAK,GAE5B8G,GAAKE,EAIHgC,EADErC,GAAK,GACHA,EAAI,GAAK,GAGJA,GAAK,GACVA,EAAI,GAAK,GAITA,EAEN9O,EAAO8O,GAAK,GAAKqC,EAAIhC,EAAK,qBAC1BF,GAAKkC,CACP,CACA,OAAOlC,CACT,CA2DA,SAAS+iB,EAAMvhB,EAAMwhB,GACnBxhB,EAAKjC,MAAQyjB,EAAIzjB,MACjBiC,EAAKvS,OAAS+zB,EAAI/zB,OAClBuS,EAAKlC,SAAW0jB,EAAI1jB,SACpBkC,EAAKhC,IAAMwjB,EAAIxjB,GACjB,CAqCA,GA9TAN,EAAGG,KAAO,SAAe5L,GACvB,OAAIA,aAAeyL,GAIJ,OAARzL,GAA+B,iBAARA,GAC5BA,EAAI7D,YAAY6P,WAAaP,EAAGO,UAAYpQ,MAAMC,QAAQmE,EAAI8L,MAClE,EAEAL,EAAGkB,IAAM,SAAcC,EAAMC,GAC3B,OAAID,EAAKE,IAAID,GAAS,EAAUD,EACzBC,CACT,EAEApB,EAAGtE,IAAM,SAAcyF,EAAMC,GAC3B,OAAID,EAAKE,IAAID,GAAS,EAAUD,EACzBC,CACT,EAEApB,EAAGtR,UAAUkF,MAAQ,SAAeqM,EAAQhS,EAAMiS,GAChD,GAAsB,iBAAXD,EACT,OAAOxR,KAAK6S,YAAYrB,EAAQhS,EAAMiS,GAGxC,GAAsB,iBAAXD,EACT,OAAOxR,KAAK8S,WAAWtB,EAAQhS,EAAMiS,GAG1B,QAATjS,IACFA,EAAO,IAET4D,EAAO5D,KAAiB,EAAPA,IAAaA,GAAQ,GAAKA,GAAQ,IAGnD,IAAIuH,EAAQ,EACM,OAFlByK,EAASA,EAAOrF,WAAW2B,QAAQ,OAAQ,KAEhC,KACT/G,IACA/G,KAAK2R,SAAW,GAGd5K,EAAQyK,EAAOlQ,SACJ,KAAT9B,EACFQ,KAAK+S,UAAUvB,EAAQzK,EAAO0K,IAE9BzR,KAAKgT,WAAWxB,EAAQhS,EAAMuH,GACf,OAAX0K,GACFzR,KAAK8S,WAAW9S,KAAKqP,UAAW7P,EAAMiS,IAI9C,EAEAF,EAAGtR,UAAU4S,YAAc,SAAsBrB,EAAQhS,EAAMiS,GACzDD,EAAS,IACXxR,KAAK2R,SAAW,EAChBH,GAAUA,GAERA,EAAS,UACXxR,KAAK4R,MAAQ,CAAU,SAATJ,GACdxR,KAAKsB,OAAS,GACLkQ,EAAS,kBAClBxR,KAAK4R,MAAQ,CACF,SAATJ,EACCA,EAAS,SAAa,UAEzBxR,KAAKsB,OAAS,IAEd8B,EAAOoO,EAAS,kBAChBxR,KAAK4R,MAAQ,CACF,SAATJ,EACCA,EAAS,SAAa,SACvB,GAEFxR,KAAKsB,OAAS,GAGD,OAAXmQ,GAGJzR,KAAK8S,WAAW9S,KAAKqP,UAAW7P,EAAMiS,EACxC,EAEAF,EAAGtR,UAAU6S,WAAa,SAAqBtB,EAAQhS,EAAMiS,GAG3D,GADArO,EAAgC,iBAAlBoO,EAAOlQ,QACjBkQ,EAAOlQ,QAAU,EAGnB,OAFAtB,KAAK4R,MAAQ,CAAC,GACd5R,KAAKsB,OAAS,EACPtB,KAGTA,KAAKsB,OAASkR,KAAKS,KAAKzB,EAAOlQ,OAAS,GACxCtB,KAAK4R,MAAQ,IAAIlQ,MAAM1B,KAAKsB,QAC5B,IAAK,IAAIiK,EAAI,EAAGA,EAAIvL,KAAKsB,OAAQiK,IAC/BvL,KAAK4R,MAAMrG,GAAK,EAGlB,IAAIC,EAAG0H,EACHC,EAAM,EACV,GAAe,OAAX1B,EACF,IAAKlG,EAAIiG,EAAOlQ,OAAS,EAAGkK,EAAI,EAAGD,GAAK,EAAGA,GAAK,EAC9C2H,EAAI1B,EAAOjG,GAAMiG,EAAOjG,EAAI,IAAM,EAAMiG,EAAOjG,EAAI,IAAM,GACzDvL,KAAK4R,MAAMpG,IAAO0H,GAAKC,EAAO,SAC9BnT,KAAK4R,MAAMpG,EAAI,GAAM0H,IAAO,GAAKC,EAAQ,UACzCA,GAAO,KACI,KACTA,GAAO,GACP3H,UAGC,GAAe,OAAXiG,EACT,IAAKlG,EAAI,EAAGC,EAAI,EAAGD,EAAIiG,EAAOlQ,OAAQiK,GAAK,EACzC2H,EAAI1B,EAAOjG,GAAMiG,EAAOjG,EAAI,IAAM,EAAMiG,EAAOjG,EAAI,IAAM,GACzDvL,KAAK4R,MAAMpG,IAAO0H,GAAKC,EAAO,SAC9BnT,KAAK4R,MAAMpG,EAAI,GAAM0H,IAAO,GAAKC,EAAQ,UACzCA,GAAO,KACI,KACTA,GAAO,GACP3H,KAIN,OAAOxL,KAAKkoB,QACd,EA0BA3W,EAAGtR,UAAU8S,UAAY,SAAoBvB,EAAQzK,EAAO0K,GAE1DzR,KAAKsB,OAASkR,KAAKS,MAAMzB,EAAOlQ,OAASyF,GAAS,GAClD/G,KAAK4R,MAAQ,IAAIlQ,MAAM1B,KAAKsB,QAC5B,IAAK,IAAIiK,EAAI,EAAGA,EAAIvL,KAAKsB,OAAQiK,IAC/BvL,KAAK4R,MAAMrG,GAAK,EAIlB,IAGI2H,EAHAC,EAAM,EACN3H,EAAI,EAGR,GAAe,OAAXiG,EACF,IAAKlG,EAAIiG,EAAOlQ,OAAS,EAAGiK,GAAKxE,EAAOwE,GAAK,EAC3C2H,EAAIf,EAAaX,EAAQzK,EAAOwE,IAAM4H,EACtCnT,KAAK4R,MAAMpG,IAAU,SAAJ0H,EACbC,GAAO,IACTA,GAAO,GACP3H,GAAK,EACLxL,KAAK4R,MAAMpG,IAAM0H,IAAM,IAEvBC,GAAO,OAKX,IAAK5H,GADaiG,EAAOlQ,OAASyF,GACX,GAAM,EAAIA,EAAQ,EAAIA,EAAOwE,EAAIiG,EAAOlQ,OAAQiK,GAAK,EAC1E2H,EAAIf,EAAaX,EAAQzK,EAAOwE,IAAM4H,EACtCnT,KAAK4R,MAAMpG,IAAU,SAAJ0H,EACbC,GAAO,IACTA,GAAO,GACP3H,GAAK,EACLxL,KAAK4R,MAAMpG,IAAM0H,IAAM,IAEvBC,GAAO,EAKbnT,KAAKkoB,QACP,EA6BA3W,EAAGtR,UAAU+S,WAAa,SAAqBxB,EAAQhS,EAAMuH,GAE3D/G,KAAK4R,MAAQ,CAAC,GACd5R,KAAKsB,OAAS,EAGd,IAAK,IAAI+R,EAAU,EAAGC,EAAU,EAAGA,GAAW,SAAWA,GAAW9T,EAClE6T,IAEFA,IACAC,EAAWA,EAAU9T,EAAQ,EAO7B,IALA,IAAI+T,EAAQ/B,EAAOlQ,OAASyF,EACxByM,EAAMD,EAAQF,EACdzF,EAAM4E,KAAKvF,IAAIsG,EAAOA,EAAQC,GAAOzM,EAErC0M,EAAO,EACFlI,EAAIxE,EAAOwE,EAAIqC,EAAKrC,GAAK8H,EAChCI,EAAOnB,EAAUd,EAAQjG,EAAGA,EAAI8H,EAAS7T,GAEzCQ,KAAK0T,MAAMJ,GACPtT,KAAK4R,MAAM,GAAK6B,EAAO,SACzBzT,KAAK4R,MAAM,IAAM6B,EAEjBzT,KAAK2T,OAAOF,GAIhB,GAAY,IAARD,EAAW,CACb,IAAII,EAAM,EAGV,IAFAH,EAAOnB,EAAUd,EAAQjG,EAAGiG,EAAOlQ,OAAQ9B,GAEtC+L,EAAI,EAAGA,EAAIiI,EAAKjI,IACnBqI,GAAOpU,EAGTQ,KAAK0T,MAAME,GACP5T,KAAK4R,MAAM,GAAK6B,EAAO,SACzBzT,KAAK4R,MAAM,IAAM6B,EAEjBzT,KAAK2T,OAAOF,EAEhB,CAEAzT,KAAKkoB,QACP,EAEA3W,EAAGtR,UAAUiD,KAAO,SAAe2Q,GACjCA,EAAKjC,MAAQ,IAAIlQ,MAAM1B,KAAKsB,QAC5B,IAAK,IAAIiK,EAAI,EAAGA,EAAIvL,KAAKsB,OAAQiK,IAC/BsI,EAAKjC,MAAMrG,GAAKvL,KAAK4R,MAAMrG,GAE7BsI,EAAKvS,OAAStB,KAAKsB,OACnBuS,EAAKlC,SAAW3R,KAAK2R,SACrBkC,EAAKhC,IAAM7R,KAAK6R,GAClB,EASAN,EAAGtR,UAAUq1B,MAAQ,SAAgBzhB,GACnCuhB,EAAKvhB,EAAM7T,KACb,EAEAuR,EAAGtR,UAAU2E,MAAQ,WACnB,IAAIyN,EAAI,IAAId,EAAG,MAEf,OADAvR,KAAKkD,KAAKmP,GACHA,CACT,EAEAd,EAAGtR,UAAU6T,QAAU,SAAkBpF,GACvC,KAAO1O,KAAKsB,OAASoN,GACnB1O,KAAK4R,MAAM5R,KAAKsB,UAAY,EAE9B,OAAOtB,IACT,EAGAuR,EAAGtR,UAAUioB,OAAS,WACpB,KAAOloB,KAAKsB,OAAS,GAAqC,IAAhCtB,KAAK4R,MAAM5R,KAAKsB,OAAS,IACjDtB,KAAKsB,SAEP,OAAOtB,KAAK+T,WACd,EAEAxC,EAAGtR,UAAU8T,UAAY,WAKvB,OAHoB,IAAhB/T,KAAKsB,QAAkC,IAAlBtB,KAAK4R,MAAM,KAClC5R,KAAK2R,SAAW,GAEX3R,IACT,EAIsB,oBAAXu1B,QAAgD,mBAAfA,OAAOC,IACjD,IACEjkB,EAAGtR,UAAUs1B,OAAOC,IAAI,+BAAiCxhB,CAC3D,CAAE,MAAOpN,GACP2K,EAAGtR,UAAU+T,QAAUA,CACzB,MAEAzC,EAAGtR,UAAU+T,QAAUA,EAGzB,SAASA,IACP,OAAQhU,KAAK6R,IAAM,UAAY,SAAW7R,KAAKmM,SAAS,IAAM,GAChE,CAgCA,IAAI8H,EAAQ,CACV,GACA,IACA,KACA,MACA,OACA,QACA,SACA,UACA,WACA,YACA,aACA,cACA,eACA,gBACA,iBACA,kBACA,mBACA,oBACA,qBACA,sBACA,uBACA,wBACA,yBACA,0BACA,2BACA,6BAGEC,EAAa,CACf,EAAG,EACH,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EACvB,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAClB,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAClB,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAClB,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAGhBC,EAAa,CACf,EAAG,EACH,SAAU,SAAU,SAAU,SAAU,SAAU,SAAU,SAC5D,SAAU,IAAU,SAAU,SAAU,SAAU,QAAS,SAC3D,SAAU,SAAU,SAAU,SAAU,KAAU,QAAS,QAC3D,QAAS,QAAS,QAAS,SAAU,SAAU,SAAU,SACzD,MAAU,SAAU,SAAU,SAAU,SAAU,SAAU,UA4mB9D,SAASC,EAAYC,EAAMvO,EAAKhD,GAC9BA,EAAI6O,SAAW7L,EAAI6L,SAAW0C,EAAK1C,SACnC,IAAIrG,EAAO+I,EAAK/S,OAASwE,EAAIxE,OAAU,EACvCwB,EAAIxB,OAASgK,EACbA,EAAOA,EAAM,EAAK,EAGlB,IAAIgJ,EAAoB,EAAhBD,EAAKzC,MAAM,GACf2C,EAAmB,EAAfzO,EAAI8L,MAAM,GACdS,EAAIiC,EAAIC,EAERC,EAAS,SAAJnC,EACLoC,EAASpC,EAAI,SAAa,EAC9BvP,EAAI8O,MAAM,GAAK4C,EAEf,IAAK,IAAIE,EAAI,EAAGA,EAAIpJ,EAAKoJ,IAAK,CAM5B,IAHA,IAAIC,EAASF,IAAU,GACnBG,EAAgB,SAARH,EACRI,EAAOrC,KAAKvF,IAAIyH,EAAG5O,EAAIxE,OAAS,GAC3BkK,EAAIgH,KAAKC,IAAI,EAAGiC,EAAIL,EAAK/S,OAAS,GAAIkK,GAAKqJ,EAAMrJ,IAAK,CAC7D,IAAID,EAAKmJ,EAAIlJ,EAAK,EAIlBmJ,IADAtC,GAFAiC,EAAoB,EAAhBD,EAAKzC,MAAMrG,KACfgJ,EAAmB,EAAfzO,EAAI8L,MAAMpG,IACFoJ,GACG,SAAa,EAC5BA,EAAY,SAAJvC,CACV,CACAvP,EAAI8O,MAAM8C,GAAa,EAARE,EACfH,EAAiB,EAATE,CACV,CAOA,OANc,IAAVF,EACF3R,EAAI8O,MAAM8C,GAAa,EAARD,EAEf3R,EAAIxB,SAGCwB,EAAIolB,QACb,CAhpBA3W,EAAGtR,UAAUkM,SAAW,SAAmB3M,EAAMsV,GAI/C,IAAIhS,EACJ,GAHAgS,EAAoB,EAAVA,GAAe,EAGZ,MAJbtV,EAAOA,GAAQ,KAIa,QAATA,EAAgB,CACjCsD,EAAM,GAGN,IAFA,IAAIqQ,EAAM,EACNsB,EAAQ,EACHlJ,EAAI,EAAGA,EAAIvL,KAAKsB,OAAQiK,IAAK,CACpC,IAAI2H,EAAIlT,KAAK4R,MAAMrG,GACfkI,GAA+B,UAArBP,GAAKC,EAAOsB,IAAmBtI,SAAS,IACtDsI,EAASvB,IAAO,GAAKC,EAAQ,UAC7BA,GAAO,IACI,KACTA,GAAO,GACP5H,KAGAzI,EADY,IAAV2R,GAAelJ,IAAMvL,KAAKsB,OAAS,EAC/B2S,EAAM,EAAIR,EAAKnS,QAAUmS,EAAO3Q,EAEhC2Q,EAAO3Q,CAEjB,CAIA,IAHc,IAAV2R,IACF3R,EAAM2R,EAAMtI,SAAS,IAAMrJ,GAEtBA,EAAIxB,OAASwT,GAAY,GAC9BhS,EAAM,IAAMA,EAKd,OAHsB,IAAlB9C,KAAK2R,WACP7O,EAAM,IAAMA,GAEPA,CACT,CAEA,GAAItD,KAAiB,EAAPA,IAAaA,GAAQ,GAAKA,GAAQ,GAAI,CAElD,IAAIuV,EAAYb,EAAW1U,GAEvBwV,EAAYb,EAAW3U,GAC3BsD,EAAM,GACN,IAAIoP,EAAIlS,KAAK4E,QAEb,IADAsN,EAAEP,SAAW,GACLO,EAAE+C,UAAU,CAClB,IAAI5C,EAAIH,EAAEujB,MAAMzgB,GAAW7I,SAAS3M,GAMlCsD,GALFoP,EAAIA,EAAEiD,MAAMH,IAELC,SAGC5C,EAAIvP,EAFJmR,EAAMc,EAAY1C,EAAE/Q,QAAU+Q,EAAIvP,CAI5C,CAIA,IAHI9C,KAAKiV,WACPnS,EAAM,IAAMA,GAEPA,EAAIxB,OAASwT,GAAY,GAC9BhS,EAAM,IAAMA,EAKd,OAHsB,IAAlB9C,KAAK2R,WACP7O,EAAM,IAAMA,GAEPA,CACT,CAEAM,GAAO,EAAO,kCAChB,EAEAmO,EAAGtR,UAAUmV,SAAW,WACtB,IAAIC,EAAMrV,KAAK4R,MAAM,GASrB,OARoB,IAAhB5R,KAAKsB,OACP+T,GAAuB,SAAhBrV,KAAK4R,MAAM,GACO,IAAhB5R,KAAKsB,QAAkC,IAAlBtB,KAAK4R,MAAM,GAEzCyD,GAAO,iBAAoC,SAAhBrV,KAAK4R,MAAM,GAC7B5R,KAAKsB,OAAS,GACvB8B,GAAO,EAAO,8CAEU,IAAlBpD,KAAK2R,UAAmB0D,EAAMA,CACxC,EAEA9D,EAAGtR,UAAUqV,OAAS,WACpB,OAAOtV,KAAKmM,SAAS,GAAI,EAC3B,EAEIjL,IACFqQ,EAAGtR,UAAUsV,SAAW,SAAmB9D,EAAQnQ,GACjD,OAAOtB,KAAKwV,YAAYtU,EAAQuQ,EAAQnQ,EAC1C,GAGFiQ,EAAGtR,UAAUoP,QAAU,SAAkBoC,EAAQnQ,GAC/C,OAAOtB,KAAKwV,YAAY9T,MAAO+P,EAAQnQ,EACzC,EASAiQ,EAAGtR,UAAUuV,YAAc,SAAsBC,EAAWhE,EAAQnQ,GAClEtB,KAAKkoB,SAEL,IAAInmB,EAAa/B,KAAK+B,aAClB2T,EAAYpU,GAAUkR,KAAKC,IAAI,EAAG1Q,GACtCqB,EAAOrB,GAAc2T,EAAW,yCAChCtS,EAAOsS,EAAY,EAAG,+BAEtB,IAAIlT,EAfS,SAAmBiT,EAAW/G,GAC3C,OAAI+G,EAAUiX,YACLjX,EAAUiX,YAAYhe,GAExB,IAAI+G,EAAU/G,EACvB,CAUYgnB,CAASjgB,EAAWC,GAG9B,OADA1V,KAAK,gBADoB,OAAXyR,EAAkB,KAAO,OACRjP,EAAKT,GAC7BS,CACT,EAEA+O,EAAGtR,UAAU01B,eAAiB,SAAyBnzB,EAAKT,GAI1D,IAHA,IAAI6zB,EAAW,EACXnhB,EAAQ,EAEHlJ,EAAI,EAAG+W,EAAQ,EAAG/W,EAAIvL,KAAKsB,OAAQiK,IAAK,CAC/C,IAAIkI,EAAQzT,KAAK4R,MAAMrG,IAAM+W,EAAS7N,EAEtCjS,EAAIozB,KAAqB,IAAPniB,EACdmiB,EAAWpzB,EAAIlB,SACjBkB,EAAIozB,KAAeniB,GAAQ,EAAK,KAE9BmiB,EAAWpzB,EAAIlB,SACjBkB,EAAIozB,KAAeniB,GAAQ,GAAM,KAGrB,IAAV6O,GACEsT,EAAWpzB,EAAIlB,SACjBkB,EAAIozB,KAAeniB,GAAQ,GAAM,KAEnCgB,EAAQ,EACR6N,EAAQ,IAER7N,EAAQhB,IAAS,GACjB6O,GAAS,EAEb,CAEA,GAAIsT,EAAWpzB,EAAIlB,OAGjB,IAFAkB,EAAIozB,KAAcnhB,EAEXmhB,EAAWpzB,EAAIlB,QACpBkB,EAAIozB,KAAc,CAGxB,EAEArkB,EAAGtR,UAAU41B,eAAiB,SAAyBrzB,EAAKT,GAI1D,IAHA,IAAI6zB,EAAWpzB,EAAIlB,OAAS,EACxBmT,EAAQ,EAEHlJ,EAAI,EAAG+W,EAAQ,EAAG/W,EAAIvL,KAAKsB,OAAQiK,IAAK,CAC/C,IAAIkI,EAAQzT,KAAK4R,MAAMrG,IAAM+W,EAAS7N,EAEtCjS,EAAIozB,KAAqB,IAAPniB,EACdmiB,GAAY,IACdpzB,EAAIozB,KAAeniB,GAAQ,EAAK,KAE9BmiB,GAAY,IACdpzB,EAAIozB,KAAeniB,GAAQ,GAAM,KAGrB,IAAV6O,GACEsT,GAAY,IACdpzB,EAAIozB,KAAeniB,GAAQ,GAAM,KAEnCgB,EAAQ,EACR6N,EAAQ,IAER7N,EAAQhB,IAAS,GACjB6O,GAAS,EAEb,CAEA,GAAIsT,GAAY,EAGd,IAFApzB,EAAIozB,KAAcnhB,EAEXmhB,GAAY,GACjBpzB,EAAIozB,KAAc,CAGxB,EAEIpjB,KAAKuD,MACPxE,EAAGtR,UAAU+V,WAAa,SAAqB9C,GAC7C,OAAO,GAAKV,KAAKuD,MAAM7C,EACzB,EAEA3B,EAAGtR,UAAU+V,WAAa,SAAqB9C,GAC7C,IAAI+C,EAAI/C,EACJb,EAAI,EAiBR,OAhBI4D,GAAK,OACP5D,GAAK,GACL4D,KAAO,IAELA,GAAK,KACP5D,GAAK,EACL4D,KAAO,GAELA,GAAK,IACP5D,GAAK,EACL4D,KAAO,GAELA,GAAK,IACP5D,GAAK,EACL4D,KAAO,GAEF5D,EAAI4D,CACb,EAGF1E,EAAGtR,UAAUiW,UAAY,SAAoBhD,GAE3C,GAAU,IAANA,EAAS,OAAO,GAEpB,IAAI+C,EAAI/C,EACJb,EAAI,EAoBR,OAnBqB,IAAZ,KAAJ4D,KACH5D,GAAK,GACL4D,KAAO,IAEU,IAAV,IAAJA,KACH5D,GAAK,EACL4D,KAAO,GAES,IAAT,GAAJA,KACH5D,GAAK,EACL4D,KAAO,GAES,IAAT,EAAJA,KACH5D,GAAK,EACL4D,KAAO,GAES,IAAT,EAAJA,IACH5D,IAEKA,CACT,EAGAd,EAAGtR,UAAUkW,UAAY,WACvB,IAAIjD,EAAIlT,KAAK4R,MAAM5R,KAAKsB,OAAS,GAC7B8U,EAAKpW,KAAKgW,WAAW9C,GACzB,OAA2B,IAAnBlT,KAAKsB,OAAS,GAAU8U,CAClC,EAgBA7E,EAAGtR,UAAUoW,SAAW,WACtB,GAAIrW,KAAKiV,SAAU,OAAO,EAG1B,IADA,IAAI5C,EAAI,EACC9G,EAAI,EAAGA,EAAIvL,KAAKsB,OAAQiK,IAAK,CACpC,IAAIgJ,EAAIvU,KAAKkW,UAAUlW,KAAK4R,MAAMrG,IAElC,GADA8G,GAAKkC,EACK,KAANA,EAAU,KAChB,CACA,OAAOlC,CACT,EAEAd,EAAGtR,UAAU8B,WAAa,WACxB,OAAOyQ,KAAKS,KAAKjT,KAAKmW,YAAc,EACtC,EAEA5E,EAAGtR,UAAUqW,OAAS,SAAiBC,GACrC,OAAsB,IAAlBvW,KAAK2R,SACA3R,KAAKwW,MAAMC,MAAMF,GAAOG,MAAM,GAEhC1W,KAAK4E,OACd,EAEA2M,EAAGtR,UAAU0W,SAAW,SAAmBJ,GACzC,OAAIvW,KAAK4W,MAAML,EAAQ,GACdvW,KAAK6W,KAAKN,GAAOG,MAAM,GAAGI,OAE5B9W,KAAK4E,OACd,EAEA2M,EAAGtR,UAAU8W,MAAQ,WACnB,OAAyB,IAAlB/W,KAAK2R,QACd,EAGAJ,EAAGtR,UAAU+W,IAAM,WACjB,OAAOhX,KAAK4E,QAAQkS,MACtB,EAEAvF,EAAGtR,UAAU6W,KAAO,WAKlB,OAJK9W,KAAKiV,WACRjV,KAAK2R,UAAY,GAGZ3R,IACT,EAGAuR,EAAGtR,UAAUgX,KAAO,SAAenR,GACjC,KAAO9F,KAAKsB,OAASwE,EAAIxE,QACvBtB,KAAK4R,MAAM5R,KAAKsB,UAAY,EAG9B,IAAK,IAAIiK,EAAI,EAAGA,EAAIzF,EAAIxE,OAAQiK,IAC9BvL,KAAK4R,MAAMrG,GAAKvL,KAAK4R,MAAMrG,GAAKzF,EAAI8L,MAAMrG,GAG5C,OAAOvL,KAAKkoB,QACd,EAEA3W,EAAGtR,UAAUiX,IAAM,SAAcpR,GAE/B,OADA1C,EAA0C,IAAlCpD,KAAK2R,SAAW7L,EAAI6L,WACrB3R,KAAKiX,KAAKnR,EACnB,EAGAyL,EAAGtR,UAAUkX,GAAK,SAAarR,GAC7B,OAAI9F,KAAKsB,OAASwE,EAAIxE,OAAetB,KAAK4E,QAAQsS,IAAIpR,GAC/CA,EAAIlB,QAAQsS,IAAIlX,KACzB,EAEAuR,EAAGtR,UAAUmX,IAAM,SAActR,GAC/B,OAAI9F,KAAKsB,OAASwE,EAAIxE,OAAetB,KAAK4E,QAAQqS,KAAKnR,GAChDA,EAAIlB,QAAQqS,KAAKjX,KAC1B,EAGAuR,EAAGtR,UAAUoX,MAAQ,SAAgBvR,GAEnC,IAAIyO,EAEFA,EADEvU,KAAKsB,OAASwE,EAAIxE,OAChBwE,EAEA9F,KAGN,IAAK,IAAIuL,EAAI,EAAGA,EAAIgJ,EAAEjT,OAAQiK,IAC5BvL,KAAK4R,MAAMrG,GAAKvL,KAAK4R,MAAMrG,GAAKzF,EAAI8L,MAAMrG,GAK5C,OAFAvL,KAAKsB,OAASiT,EAAEjT,OAETtB,KAAKkoB,QACd,EAEA3W,EAAGtR,UAAUqX,KAAO,SAAexR,GAEjC,OADA1C,EAA0C,IAAlCpD,KAAK2R,SAAW7L,EAAI6L,WACrB3R,KAAKqX,MAAMvR,EACpB,EAGAyL,EAAGtR,UAAUsX,IAAM,SAAczR,GAC/B,OAAI9F,KAAKsB,OAASwE,EAAIxE,OAAetB,KAAK4E,QAAQ0S,KAAKxR,GAChDA,EAAIlB,QAAQ0S,KAAKtX,KAC1B,EAEAuR,EAAGtR,UAAUuX,KAAO,SAAe1R,GACjC,OAAI9F,KAAKsB,OAASwE,EAAIxE,OAAetB,KAAK4E,QAAQyS,MAAMvR,GACjDA,EAAIlB,QAAQyS,MAAMrX,KAC3B,EAGAuR,EAAGtR,UAAUwX,MAAQ,SAAgB3R,GAEnC,IAAIwO,EACAC,EACAvU,KAAKsB,OAASwE,EAAIxE,QACpBgT,EAAItU,KACJuU,EAAIzO,IAEJwO,EAAIxO,EACJyO,EAAIvU,MAGN,IAAK,IAAIuL,EAAI,EAAGA,EAAIgJ,EAAEjT,OAAQiK,IAC5BvL,KAAK4R,MAAMrG,GAAK+I,EAAE1C,MAAMrG,GAAKgJ,EAAE3C,MAAMrG,GAGvC,GAAIvL,OAASsU,EACX,KAAO/I,EAAI+I,EAAEhT,OAAQiK,IACnBvL,KAAK4R,MAAMrG,GAAK+I,EAAE1C,MAAMrG,GAM5B,OAFAvL,KAAKsB,OAASgT,EAAEhT,OAETtB,KAAKkoB,QACd,EAEA3W,EAAGtR,UAAUyX,KAAO,SAAe5R,GAEjC,OADA1C,EAA0C,IAAlCpD,KAAK2R,SAAW7L,EAAI6L,WACrB3R,KAAKyX,MAAM3R,EACpB,EAGAyL,EAAGtR,UAAU0X,IAAM,SAAc7R,GAC/B,OAAI9F,KAAKsB,OAASwE,EAAIxE,OAAetB,KAAK4E,QAAQ8S,KAAK5R,GAChDA,EAAIlB,QAAQ8S,KAAK1X,KAC1B,EAEAuR,EAAGtR,UAAU2X,KAAO,SAAe9R,GACjC,OAAI9F,KAAKsB,OAASwE,EAAIxE,OAAetB,KAAK4E,QAAQ6S,MAAM3R,GACjDA,EAAIlB,QAAQ6S,MAAMzX,KAC3B,EAGAuR,EAAGtR,UAAUwW,MAAQ,SAAgBF,GACnCnT,EAAwB,iBAAVmT,GAAsBA,GAAS,GAE7C,IAAIsB,EAAsC,EAAxBrF,KAAKS,KAAKsD,EAAQ,IAChCuB,EAAWvB,EAAQ,GAGvBvW,KAAK8T,QAAQ+D,GAETC,EAAW,GACbD,IAIF,IAAK,IAAItM,EAAI,EAAGA,EAAIsM,EAAatM,IAC/BvL,KAAK4R,MAAMrG,GAAsB,UAAhBvL,KAAK4R,MAAMrG,GAS9B,OALIuM,EAAW,IACb9X,KAAK4R,MAAMrG,IAAMvL,KAAK4R,MAAMrG,GAAM,UAAc,GAAKuM,GAIhD9X,KAAKkoB,QACd,EAEA3W,EAAGtR,UAAU4W,KAAO,SAAeN,GACjC,OAAOvW,KAAK4E,QAAQ6R,MAAMF,EAC5B,EAGAhF,EAAGtR,UAAU8X,KAAO,SAAeC,EAAKnS,GACtCzC,EAAsB,iBAAR4U,GAAoBA,GAAO,GAEzC,IAAI7E,EAAO6E,EAAM,GAAM,EACnBC,EAAOD,EAAM,GAUjB,OARAhY,KAAK8T,QAAQX,EAAM,GAGjBnT,KAAK4R,MAAMuB,GADTtN,EACgB7F,KAAK4R,MAAMuB,GAAQ,GAAK8E,EAExBjY,KAAK4R,MAAMuB,KAAS,GAAK8E,GAGtCjY,KAAKkoB,QACd,EAGA3W,EAAGtR,UAAUiY,KAAO,SAAepS,GACjC,IAAIuM,EAkBAiC,EAAGC,EAfP,GAAsB,IAAlBvU,KAAK2R,UAAmC,IAAjB7L,EAAI6L,SAI7B,OAHA3R,KAAK2R,SAAW,EAChBU,EAAIrS,KAAKmY,KAAKrS,GACd9F,KAAK2R,UAAY,EACV3R,KAAK+T,YAGP,GAAsB,IAAlB/T,KAAK2R,UAAmC,IAAjB7L,EAAI6L,SAIpC,OAHA7L,EAAI6L,SAAW,EACfU,EAAIrS,KAAKmY,KAAKrS,GACdA,EAAI6L,SAAW,EACRU,EAAE0B,YAKP/T,KAAKsB,OAASwE,EAAIxE,QACpBgT,EAAItU,KACJuU,EAAIzO,IAEJwO,EAAIxO,EACJyO,EAAIvU,MAIN,IADA,IAAIyU,EAAQ,EACHlJ,EAAI,EAAGA,EAAIgJ,EAAEjT,OAAQiK,IAC5B8G,GAAkB,EAAbiC,EAAE1C,MAAMrG,KAAwB,EAAbgJ,EAAE3C,MAAMrG,IAAUkJ,EAC1CzU,KAAK4R,MAAMrG,GAAS,SAAJ8G,EAChBoC,EAAQpC,IAAM,GAEhB,KAAiB,IAAVoC,GAAelJ,EAAI+I,EAAEhT,OAAQiK,IAClC8G,GAAkB,EAAbiC,EAAE1C,MAAMrG,IAAUkJ,EACvBzU,KAAK4R,MAAMrG,GAAS,SAAJ8G,EAChBoC,EAAQpC,IAAM,GAIhB,GADArS,KAAKsB,OAASgT,EAAEhT,OACF,IAAVmT,EACFzU,KAAK4R,MAAM5R,KAAKsB,QAAUmT,EAC1BzU,KAAKsB,cAEA,GAAIgT,IAAMtU,KACf,KAAOuL,EAAI+I,EAAEhT,OAAQiK,IACnBvL,KAAK4R,MAAMrG,GAAK+I,EAAE1C,MAAMrG,GAI5B,OAAOvL,IACT,EAGAuR,EAAGtR,UAAUmY,IAAM,SAActS,GAC/B,IAAItD,EACJ,OAAqB,IAAjBsD,EAAI6L,UAAoC,IAAlB3R,KAAK2R,UAC7B7L,EAAI6L,SAAW,EACfnP,EAAMxC,KAAKqY,IAAIvS,GACfA,EAAI6L,UAAY,EACTnP,GACmB,IAAjBsD,EAAI6L,UAAoC,IAAlB3R,KAAK2R,UACpC3R,KAAK2R,SAAW,EAChBnP,EAAMsD,EAAIuS,IAAIrY,MACdA,KAAK2R,SAAW,EACTnP,GAGLxC,KAAKsB,OAASwE,EAAIxE,OAAetB,KAAK4E,QAAQsT,KAAKpS,GAEhDA,EAAIlB,QAAQsT,KAAKlY,KAC1B,EAGAuR,EAAGtR,UAAUkY,KAAO,SAAerS,GAEjC,GAAqB,IAAjBA,EAAI6L,SAAgB,CACtB7L,EAAI6L,SAAW,EACf,IAAIU,EAAIrS,KAAKkY,KAAKpS,GAElB,OADAA,EAAI6L,SAAW,EACRU,EAAE0B,WAGX,CAAO,GAAsB,IAAlB/T,KAAK2R,SAId,OAHA3R,KAAK2R,SAAW,EAChB3R,KAAKkY,KAAKpS,GACV9F,KAAK2R,SAAW,EACT3R,KAAK+T,YAId,IAWIO,EAAGC,EAXH3B,EAAM5S,KAAK4S,IAAI9M,GAGnB,GAAY,IAAR8M,EAIF,OAHA5S,KAAK2R,SAAW,EAChB3R,KAAKsB,OAAS,EACdtB,KAAK4R,MAAM,GAAK,EACT5R,KAKL4S,EAAM,GACR0B,EAAItU,KACJuU,EAAIzO,IAEJwO,EAAIxO,EACJyO,EAAIvU,MAIN,IADA,IAAIyU,EAAQ,EACHlJ,EAAI,EAAGA,EAAIgJ,EAAEjT,OAAQiK,IAE5BkJ,GADApC,GAAkB,EAAbiC,EAAE1C,MAAMrG,KAAwB,EAAbgJ,EAAE3C,MAAMrG,IAAUkJ,IAC7B,GACbzU,KAAK4R,MAAMrG,GAAS,SAAJ8G,EAElB,KAAiB,IAAVoC,GAAelJ,EAAI+I,EAAEhT,OAAQiK,IAElCkJ,GADApC,GAAkB,EAAbiC,EAAE1C,MAAMrG,IAAUkJ,IACV,GACbzU,KAAK4R,MAAMrG,GAAS,SAAJ8G,EAIlB,GAAc,IAAVoC,GAAelJ,EAAI+I,EAAEhT,QAAUgT,IAAMtU,KACvC,KAAOuL,EAAI+I,EAAEhT,OAAQiK,IACnBvL,KAAK4R,MAAMrG,GAAK+I,EAAE1C,MAAMrG,GAU5B,OANAvL,KAAKsB,OAASkR,KAAKC,IAAIzS,KAAKsB,OAAQiK,GAEhC+I,IAAMtU,OACRA,KAAK2R,SAAW,GAGX3R,KAAKkoB,QACd,EAGA3W,EAAGtR,UAAUoY,IAAM,SAAcvS,GAC/B,OAAO9F,KAAK4E,QAAQuT,KAAKrS,EAC3B,EA8CA,IAAIwS,EAAc,SAAsBjE,EAAMvO,EAAKhD,GACjD,IAII0R,EACA+D,EACAnC,EANA9B,EAAID,EAAKzC,MACT2C,EAAIzO,EAAI8L,MACR4G,EAAI1V,EAAI8O,MACRM,EAAI,EAIJuG,EAAY,EAAPnE,EAAE,GACPoE,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAPtE,EAAE,GACPuE,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAPzE,EAAE,GACP0E,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAP5E,EAAE,GACP6E,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAP/E,EAAE,GACPgF,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAPlF,EAAE,GACPmF,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAPrF,EAAE,GACPsF,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAPxF,EAAE,GACPyF,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAP3F,EAAE,GACP4F,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAP9F,EAAE,GACP+F,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAPhG,EAAE,GACPiG,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAPnG,EAAE,GACPoG,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAPtG,EAAE,GACPuG,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAPzG,EAAE,GACP0G,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAP5G,EAAE,GACP6G,EAAW,KAALD,EACNE,GAAMF,IAAO,GACbG,GAAY,EAAP/G,EAAE,GACPgH,GAAW,KAALD,GACNE,GAAMF,KAAO,GACbG,GAAY,EAAPlH,EAAE,GACPmH,GAAW,KAALD,GACNE,GAAMF,KAAO,GACbG,GAAY,EAAPrH,EAAE,GACPsH,GAAW,KAALD,GACNE,GAAMF,KAAO,GACbG,GAAY,EAAPxH,EAAE,GACPyH,GAAW,KAALD,GACNE,GAAMF,KAAO,GACbG,GAAY,EAAP3H,EAAE,GACP4H,GAAW,KAALD,GACNE,GAAMF,KAAO,GAEjBpZ,EAAI6O,SAAW0C,EAAK1C,SAAW7L,EAAI6L,SACnC7O,EAAIxB,OAAS,GAMb,IAAI+a,IAAQnK,GAJZsC,EAAKhC,KAAK8J,KAAK5D,EAAK8B,IAIE,KAAa,MAFnCjC,GADAA,EAAM/F,KAAK8J,KAAK5D,EAAK+B,IACRjI,KAAK8J,KAAK3D,EAAK6B,GAAQ,KAEU,IAAO,EACrDtI,IAFAkE,EAAK5D,KAAK8J,KAAK3D,EAAK8B,KAEPlC,IAAQ,IAAO,IAAM8D,KAAO,IAAO,EAChDA,IAAM,SAEN7H,EAAKhC,KAAK8J,KAAKzD,EAAK2B,GAEpBjC,GADAA,EAAM/F,KAAK8J,KAAKzD,EAAK4B,IACRjI,KAAK8J,KAAKxD,EAAK0B,GAAQ,EACpCpE,EAAK5D,KAAK8J,KAAKxD,EAAK2B,GAKpB,IAAI8B,IAAQrK,GAJZsC,EAAMA,EAAKhC,KAAK8J,KAAK5D,EAAKiC,GAAQ,GAIZ,KAAa,MAFnCpC,GADAA,EAAOA,EAAM/F,KAAK8J,KAAK5D,EAAKkC,GAAQ,GACvBpI,KAAK8J,KAAK3D,EAAKgC,GAAQ,KAEU,IAAO,EACrDzI,IAFAkE,EAAMA,EAAK5D,KAAK8J,KAAK3D,EAAKiC,GAAQ,IAErBrC,IAAQ,IAAO,IAAMgE,KAAO,IAAO,EAChDA,IAAM,SAEN/H,EAAKhC,KAAK8J,KAAKtD,EAAKwB,GAEpBjC,GADAA,EAAM/F,KAAK8J,KAAKtD,EAAKyB,IACRjI,KAAK8J,KAAKrD,EAAKuB,GAAQ,EACpCpE,EAAK5D,KAAK8J,KAAKrD,EAAKwB,GACpBjG,EAAMA,EAAKhC,KAAK8J,KAAKzD,EAAK8B,GAAQ,EAElCpC,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKzD,EAAK+B,GAAQ,GACvBpI,KAAK8J,KAAKxD,EAAK6B,GAAQ,EACpCvE,EAAMA,EAAK5D,KAAK8J,KAAKxD,EAAK8B,GAAQ,EAKlC,IAAI4B,IAAQtK,GAJZsC,EAAMA,EAAKhC,KAAK8J,KAAK5D,EAAKoC,GAAQ,GAIZ,KAAa,MAFnCvC,GADAA,EAAOA,EAAM/F,KAAK8J,KAAK5D,EAAKqC,GAAQ,GACvBvI,KAAK8J,KAAK3D,EAAKmC,GAAQ,KAEU,IAAO,EACrD5I,IAFAkE,EAAMA,EAAK5D,KAAK8J,KAAK3D,EAAKoC,GAAQ,IAErBxC,IAAQ,IAAO,IAAMiE,KAAO,IAAO,EAChDA,IAAM,SAENhI,EAAKhC,KAAK8J,KAAKnD,EAAKqB,GAEpBjC,GADAA,EAAM/F,KAAK8J,KAAKnD,EAAKsB,IACRjI,KAAK8J,KAAKlD,EAAKoB,GAAQ,EACpCpE,EAAK5D,KAAK8J,KAAKlD,EAAKqB,GACpBjG,EAAMA,EAAKhC,KAAK8J,KAAKtD,EAAK2B,GAAQ,EAElCpC,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKtD,EAAK4B,GAAQ,GACvBpI,KAAK8J,KAAKrD,EAAK0B,GAAQ,EACpCvE,EAAMA,EAAK5D,KAAK8J,KAAKrD,EAAK2B,GAAQ,EAClCpG,EAAMA,EAAKhC,KAAK8J,KAAKzD,EAAKiC,GAAQ,EAElCvC,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKzD,EAAKkC,GAAQ,GACvBvI,KAAK8J,KAAKxD,EAAKgC,GAAQ,EACpC1E,EAAMA,EAAK5D,KAAK8J,KAAKxD,EAAKiC,GAAQ,EAKlC,IAAI0B,IAAQvK,GAJZsC,EAAMA,EAAKhC,KAAK8J,KAAK5D,EAAKuC,GAAQ,GAIZ,KAAa,MAFnC1C,GADAA,EAAOA,EAAM/F,KAAK8J,KAAK5D,EAAKwC,GAAQ,GACvB1I,KAAK8J,KAAK3D,EAAKsC,GAAQ,KAEU,IAAO,EACrD/I,IAFAkE,EAAMA,EAAK5D,KAAK8J,KAAK3D,EAAKuC,GAAQ,IAErB3C,IAAQ,IAAO,IAAMkE,KAAO,IAAO,EAChDA,IAAM,SAENjI,EAAKhC,KAAK8J,KAAKhD,EAAKkB,GAEpBjC,GADAA,EAAM/F,KAAK8J,KAAKhD,EAAKmB,IACRjI,KAAK8J,KAAK/C,EAAKiB,GAAQ,EACpCpE,EAAK5D,KAAK8J,KAAK/C,EAAKkB,GACpBjG,EAAMA,EAAKhC,KAAK8J,KAAKnD,EAAKwB,GAAQ,EAElCpC,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKnD,EAAKyB,GAAQ,GACvBpI,KAAK8J,KAAKlD,EAAKuB,GAAQ,EACpCvE,EAAMA,EAAK5D,KAAK8J,KAAKlD,EAAKwB,GAAQ,EAClCpG,EAAMA,EAAKhC,KAAK8J,KAAKtD,EAAK8B,GAAQ,EAElCvC,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKtD,EAAK+B,GAAQ,GACvBvI,KAAK8J,KAAKrD,EAAK6B,GAAQ,EACpC1E,EAAMA,EAAK5D,KAAK8J,KAAKrD,EAAK8B,GAAQ,EAClCvG,EAAMA,EAAKhC,KAAK8J,KAAKzD,EAAKoC,GAAQ,EAElC1C,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKzD,EAAKqC,GAAQ,GACvB1I,KAAK8J,KAAKxD,EAAKmC,GAAQ,EACpC7E,EAAMA,EAAK5D,KAAK8J,KAAKxD,EAAKoC,GAAQ,EAKlC,IAAIwB,IAAQxK,GAJZsC,EAAMA,EAAKhC,KAAK8J,KAAK5D,EAAK0C,GAAQ,GAIZ,KAAa,MAFnC7C,GADAA,EAAOA,EAAM/F,KAAK8J,KAAK5D,EAAK2C,IAAQ,GACvB7I,KAAK8J,KAAK3D,EAAKyC,GAAQ,KAEU,IAAO,EACrDlJ,IAFAkE,EAAMA,EAAK5D,KAAK8J,KAAK3D,EAAK0C,IAAQ,IAErB9C,IAAQ,IAAO,IAAMmE,KAAO,IAAO,EAChDA,IAAM,SAENlI,EAAKhC,KAAK8J,KAAK7C,EAAKe,GAEpBjC,GADAA,EAAM/F,KAAK8J,KAAK7C,EAAKgB,IACRjI,KAAK8J,KAAK5C,EAAKc,GAAQ,EACpCpE,EAAK5D,KAAK8J,KAAK5C,EAAKe,GACpBjG,EAAMA,EAAKhC,KAAK8J,KAAKhD,EAAKqB,GAAQ,EAElCpC,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKhD,EAAKsB,GAAQ,GACvBpI,KAAK8J,KAAK/C,EAAKoB,GAAQ,EACpCvE,EAAMA,EAAK5D,KAAK8J,KAAK/C,EAAKqB,GAAQ,EAClCpG,EAAMA,EAAKhC,KAAK8J,KAAKnD,EAAK2B,GAAQ,EAElCvC,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKnD,EAAK4B,GAAQ,GACvBvI,KAAK8J,KAAKlD,EAAK0B,GAAQ,EACpC1E,EAAMA,EAAK5D,KAAK8J,KAAKlD,EAAK2B,GAAQ,EAClCvG,EAAMA,EAAKhC,KAAK8J,KAAKtD,EAAKiC,GAAQ,EAElC1C,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKtD,EAAKkC,GAAQ,GACvB1I,KAAK8J,KAAKrD,EAAKgC,GAAQ,EACpC7E,EAAMA,EAAK5D,KAAK8J,KAAKrD,EAAKiC,GAAQ,EAClC1G,EAAMA,EAAKhC,KAAK8J,KAAKzD,EAAKuC,GAAQ,EAElC7C,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKzD,EAAKwC,IAAQ,GACvB7I,KAAK8J,KAAKxD,EAAKsC,GAAQ,EACpChF,EAAMA,EAAK5D,KAAK8J,KAAKxD,EAAKuC,IAAQ,EAKlC,IAAIsB,IAAQzK,GAJZsC,EAAMA,EAAKhC,KAAK8J,KAAK5D,EAAK6C,IAAQ,GAIZ,KAAa,MAFnChD,GADAA,EAAOA,EAAM/F,KAAK8J,KAAK5D,EAAK8C,IAAQ,GACvBhJ,KAAK8J,KAAK3D,EAAK4C,IAAQ,KAEU,IAAO,EACrDrJ,IAFAkE,EAAMA,EAAK5D,KAAK8J,KAAK3D,EAAK6C,IAAQ,IAErBjD,IAAQ,IAAO,IAAMoE,KAAO,IAAO,EAChDA,IAAM,SAENnI,EAAKhC,KAAK8J,KAAK1C,EAAKY,GAEpBjC,GADAA,EAAM/F,KAAK8J,KAAK1C,EAAKa,IACRjI,KAAK8J,KAAKzC,EAAKW,GAAQ,EACpCpE,EAAK5D,KAAK8J,KAAKzC,EAAKY,GACpBjG,EAAMA,EAAKhC,KAAK8J,KAAK7C,EAAKkB,GAAQ,EAElCpC,GADAA,EAAOA,EAAM/F,KAAK8J,KAAK7C,EAAKmB,GAAQ,GACvBpI,KAAK8J,KAAK5C,EAAKiB,GAAQ,EACpCvE,EAAMA,EAAK5D,KAAK8J,KAAK5C,EAAKkB,GAAQ,EAClCpG,EAAMA,EAAKhC,KAAK8J,KAAKhD,EAAKwB,GAAQ,EAElCvC,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKhD,EAAKyB,GAAQ,GACvBvI,KAAK8J,KAAK/C,EAAKuB,GAAQ,EACpC1E,EAAMA,EAAK5D,KAAK8J,KAAK/C,EAAKwB,GAAQ,EAClCvG,EAAMA,EAAKhC,KAAK8J,KAAKnD,EAAK8B,GAAQ,EAElC1C,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKnD,EAAK+B,GAAQ,GACvB1I,KAAK8J,KAAKlD,EAAK6B,GAAQ,EACpC7E,EAAMA,EAAK5D,KAAK8J,KAAKlD,EAAK8B,GAAQ,EAClC1G,EAAMA,EAAKhC,KAAK8J,KAAKtD,EAAKoC,GAAQ,EAElC7C,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKtD,EAAKqC,IAAQ,GACvB7I,KAAK8J,KAAKrD,EAAKmC,GAAQ,EACpChF,EAAMA,EAAK5D,KAAK8J,KAAKrD,EAAKoC,IAAQ,EAClC7G,EAAMA,EAAKhC,KAAK8J,KAAKzD,EAAK0C,IAAQ,EAElChD,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKzD,EAAK2C,IAAQ,GACvBhJ,KAAK8J,KAAKxD,EAAKyC,IAAQ,EACpCnF,EAAMA,EAAK5D,KAAK8J,KAAKxD,EAAK0C,IAAQ,EAKlC,IAAIoB,IAAQ1K,GAJZsC,EAAMA,EAAKhC,KAAK8J,KAAK5D,EAAKgD,IAAQ,GAIZ,KAAa,MAFnCnD,GADAA,EAAOA,EAAM/F,KAAK8J,KAAK5D,EAAKiD,IAAQ,GACvBnJ,KAAK8J,KAAK3D,EAAK+C,IAAQ,KAEU,IAAO,EACrDxJ,IAFAkE,EAAMA,EAAK5D,KAAK8J,KAAK3D,EAAKgD,IAAQ,IAErBpD,IAAQ,IAAO,IAAMqE,KAAO,IAAO,EAChDA,IAAM,SAENpI,EAAKhC,KAAK8J,KAAKvC,EAAKS,GAEpBjC,GADAA,EAAM/F,KAAK8J,KAAKvC,EAAKU,IACRjI,KAAK8J,KAAKtC,EAAKQ,GAAQ,EACpCpE,EAAK5D,KAAK8J,KAAKtC,EAAKS,GACpBjG,EAAMA,EAAKhC,KAAK8J,KAAK1C,EAAKe,GAAQ,EAElCpC,GADAA,EAAOA,EAAM/F,KAAK8J,KAAK1C,EAAKgB,GAAQ,GACvBpI,KAAK8J,KAAKzC,EAAKc,GAAQ,EACpCvE,EAAMA,EAAK5D,KAAK8J,KAAKzC,EAAKe,GAAQ,EAClCpG,EAAMA,EAAKhC,KAAK8J,KAAK7C,EAAKqB,GAAQ,EAElCvC,GADAA,EAAOA,EAAM/F,KAAK8J,KAAK7C,EAAKsB,GAAQ,GACvBvI,KAAK8J,KAAK5C,EAAKoB,GAAQ,EACpC1E,EAAMA,EAAK5D,KAAK8J,KAAK5C,EAAKqB,GAAQ,EAClCvG,EAAMA,EAAKhC,KAAK8J,KAAKhD,EAAK2B,GAAQ,EAElC1C,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKhD,EAAK4B,GAAQ,GACvB1I,KAAK8J,KAAK/C,EAAK0B,GAAQ,EACpC7E,EAAMA,EAAK5D,KAAK8J,KAAK/C,EAAK2B,GAAQ,EAClC1G,EAAMA,EAAKhC,KAAK8J,KAAKnD,EAAKiC,GAAQ,EAElC7C,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKnD,EAAKkC,IAAQ,GACvB7I,KAAK8J,KAAKlD,EAAKgC,GAAQ,EACpChF,EAAMA,EAAK5D,KAAK8J,KAAKlD,EAAKiC,IAAQ,EAClC7G,EAAMA,EAAKhC,KAAK8J,KAAKtD,EAAKuC,IAAQ,EAElChD,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKtD,EAAKwC,IAAQ,GACvBhJ,KAAK8J,KAAKrD,EAAKsC,IAAQ,EACpCnF,EAAMA,EAAK5D,KAAK8J,KAAKrD,EAAKuC,IAAQ,EAClChH,EAAMA,EAAKhC,KAAK8J,KAAKzD,EAAK6C,IAAQ,EAElCnD,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKzD,EAAK8C,IAAQ,GACvBnJ,KAAK8J,KAAKxD,EAAK4C,IAAQ,EACpCtF,EAAMA,EAAK5D,KAAK8J,KAAKxD,EAAK6C,IAAQ,EAKlC,IAAIkB,IAAQ3K,GAJZsC,EAAMA,EAAKhC,KAAK8J,KAAK5D,EAAKmD,IAAQ,GAIZ,KAAa,MAFnCtD,GADAA,EAAOA,EAAM/F,KAAK8J,KAAK5D,EAAKoD,IAAQ,GACvBtJ,KAAK8J,KAAK3D,EAAKkD,IAAQ,KAEU,IAAO,EACrD3J,IAFAkE,EAAMA,EAAK5D,KAAK8J,KAAK3D,EAAKmD,IAAQ,IAErBvD,IAAQ,IAAO,IAAMsE,KAAO,IAAO,EAChDA,IAAM,SAENrI,EAAKhC,KAAK8J,KAAKpC,EAAKM,GAEpBjC,GADAA,EAAM/F,KAAK8J,KAAKpC,EAAKO,IACRjI,KAAK8J,KAAKnC,EAAKK,GAAQ,EACpCpE,EAAK5D,KAAK8J,KAAKnC,EAAKM,GACpBjG,EAAMA,EAAKhC,KAAK8J,KAAKvC,EAAKY,GAAQ,EAElCpC,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKvC,EAAKa,GAAQ,GACvBpI,KAAK8J,KAAKtC,EAAKW,GAAQ,EACpCvE,EAAMA,EAAK5D,KAAK8J,KAAKtC,EAAKY,GAAQ,EAClCpG,EAAMA,EAAKhC,KAAK8J,KAAK1C,EAAKkB,GAAQ,EAElCvC,GADAA,EAAOA,EAAM/F,KAAK8J,KAAK1C,EAAKmB,GAAQ,GACvBvI,KAAK8J,KAAKzC,EAAKiB,GAAQ,EACpC1E,EAAMA,EAAK5D,KAAK8J,KAAKzC,EAAKkB,GAAQ,EAClCvG,EAAMA,EAAKhC,KAAK8J,KAAK7C,EAAKwB,GAAQ,EAElC1C,GADAA,EAAOA,EAAM/F,KAAK8J,KAAK7C,EAAKyB,GAAQ,GACvB1I,KAAK8J,KAAK5C,EAAKuB,GAAQ,EACpC7E,EAAMA,EAAK5D,KAAK8J,KAAK5C,EAAKwB,GAAQ,EAClC1G,EAAMA,EAAKhC,KAAK8J,KAAKhD,EAAK8B,GAAQ,EAElC7C,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKhD,EAAK+B,IAAQ,GACvB7I,KAAK8J,KAAK/C,EAAK6B,GAAQ,EACpChF,EAAMA,EAAK5D,KAAK8J,KAAK/C,EAAK8B,IAAQ,EAClC7G,EAAMA,EAAKhC,KAAK8J,KAAKnD,EAAKoC,IAAQ,EAElChD,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKnD,EAAKqC,IAAQ,GACvBhJ,KAAK8J,KAAKlD,EAAKmC,IAAQ,EACpCnF,EAAMA,EAAK5D,KAAK8J,KAAKlD,EAAKoC,IAAQ,EAClChH,EAAMA,EAAKhC,KAAK8J,KAAKtD,EAAK0C,IAAQ,EAElCnD,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKtD,EAAK2C,IAAQ,GACvBnJ,KAAK8J,KAAKrD,EAAKyC,IAAQ,EACpCtF,EAAMA,EAAK5D,KAAK8J,KAAKrD,EAAK0C,IAAQ,EAClCnH,EAAMA,EAAKhC,KAAK8J,KAAKzD,EAAKgD,IAAQ,EAElCtD,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKzD,EAAKiD,IAAQ,GACvBtJ,KAAK8J,KAAKxD,EAAK+C,IAAQ,EACpCzF,EAAMA,EAAK5D,KAAK8J,KAAKxD,EAAKgD,IAAQ,EAKlC,IAAIgB,IAAQ5K,GAJZsC,EAAMA,EAAKhC,KAAK8J,KAAK5D,EAAKsD,IAAQ,GAIZ,KAAa,MAFnCzD,GADAA,EAAOA,EAAM/F,KAAK8J,KAAK5D,EAAKuD,IAAQ,GACvBzJ,KAAK8J,KAAK3D,EAAKqD,IAAQ,KAEU,IAAO,EACrD9J,IAFAkE,EAAMA,EAAK5D,KAAK8J,KAAK3D,EAAKsD,IAAQ,IAErB1D,IAAQ,IAAO,IAAMuE,KAAO,IAAO,EAChDA,IAAM,SAENtI,EAAKhC,KAAK8J,KAAKjC,EAAKG,GAEpBjC,GADAA,EAAM/F,KAAK8J,KAAKjC,EAAKI,IACRjI,KAAK8J,KAAKhC,EAAKE,GAAQ,EACpCpE,EAAK5D,KAAK8J,KAAKhC,EAAKG,GACpBjG,EAAMA,EAAKhC,KAAK8J,KAAKpC,EAAKS,GAAQ,EAElCpC,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKpC,EAAKU,GAAQ,GACvBpI,KAAK8J,KAAKnC,EAAKQ,GAAQ,EACpCvE,EAAMA,EAAK5D,KAAK8J,KAAKnC,EAAKS,GAAQ,EAClCpG,EAAMA,EAAKhC,KAAK8J,KAAKvC,EAAKe,GAAQ,EAElCvC,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKvC,EAAKgB,GAAQ,GACvBvI,KAAK8J,KAAKtC,EAAKc,GAAQ,EACpC1E,EAAMA,EAAK5D,KAAK8J,KAAKtC,EAAKe,GAAQ,EAClCvG,EAAMA,EAAKhC,KAAK8J,KAAK1C,EAAKqB,GAAQ,EAElC1C,GADAA,EAAOA,EAAM/F,KAAK8J,KAAK1C,EAAKsB,GAAQ,GACvB1I,KAAK8J,KAAKzC,EAAKoB,GAAQ,EACpC7E,EAAMA,EAAK5D,KAAK8J,KAAKzC,EAAKqB,GAAQ,EAClC1G,EAAMA,EAAKhC,KAAK8J,KAAK7C,EAAK2B,GAAQ,EAElC7C,GADAA,EAAOA,EAAM/F,KAAK8J,KAAK7C,EAAK4B,IAAQ,GACvB7I,KAAK8J,KAAK5C,EAAK0B,GAAQ,EACpChF,EAAMA,EAAK5D,KAAK8J,KAAK5C,EAAK2B,IAAQ,EAClC7G,EAAMA,EAAKhC,KAAK8J,KAAKhD,EAAKiC,IAAQ,EAElChD,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKhD,EAAKkC,IAAQ,GACvBhJ,KAAK8J,KAAK/C,EAAKgC,IAAQ,EACpCnF,EAAMA,EAAK5D,KAAK8J,KAAK/C,EAAKiC,IAAQ,EAClChH,EAAMA,EAAKhC,KAAK8J,KAAKnD,EAAKuC,IAAQ,EAElCnD,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKnD,EAAKwC,IAAQ,GACvBnJ,KAAK8J,KAAKlD,EAAKsC,IAAQ,EACpCtF,EAAMA,EAAK5D,KAAK8J,KAAKlD,EAAKuC,IAAQ,EAClCnH,EAAMA,EAAKhC,KAAK8J,KAAKtD,EAAK6C,IAAQ,EAElCtD,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKtD,EAAK8C,IAAQ,GACvBtJ,KAAK8J,KAAKrD,EAAK4C,IAAQ,EACpCzF,EAAMA,EAAK5D,KAAK8J,KAAKrD,EAAK6C,IAAQ,EAClCtH,EAAMA,EAAKhC,KAAK8J,KAAKzD,EAAKmD,IAAQ,EAElCzD,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKzD,EAAKoD,IAAQ,GACvBzJ,KAAK8J,KAAKxD,EAAKkD,IAAQ,EACpC5F,EAAMA,EAAK5D,KAAK8J,KAAKxD,EAAKmD,IAAQ,EAKlC,IAAIc,IAAQ7K,GAJZsC,EAAMA,EAAKhC,KAAK8J,KAAK5D,EAAKyD,IAAQ,GAIZ,KAAa,MAFnC5D,GADAA,EAAOA,EAAM/F,KAAK8J,KAAK5D,EAAK0D,IAAQ,GACvB5J,KAAK8J,KAAK3D,EAAKwD,IAAQ,KAEU,IAAO,EACrDjK,IAFAkE,EAAMA,EAAK5D,KAAK8J,KAAK3D,EAAKyD,IAAQ,IAErB7D,IAAQ,IAAO,IAAMwE,KAAO,IAAO,EAChDA,IAAM,SAENvI,EAAKhC,KAAK8J,KAAKjC,EAAKM,GAEpBpC,GADAA,EAAM/F,KAAK8J,KAAKjC,EAAKO,IACRpI,KAAK8J,KAAKhC,EAAKK,GAAQ,EACpCvE,EAAK5D,KAAK8J,KAAKhC,EAAKM,GACpBpG,EAAMA,EAAKhC,KAAK8J,KAAKpC,EAAKY,GAAQ,EAElCvC,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKpC,EAAKa,GAAQ,GACvBvI,KAAK8J,KAAKnC,EAAKW,GAAQ,EACpC1E,EAAMA,EAAK5D,KAAK8J,KAAKnC,EAAKY,GAAQ,EAClCvG,EAAMA,EAAKhC,KAAK8J,KAAKvC,EAAKkB,GAAQ,EAElC1C,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKvC,EAAKmB,GAAQ,GACvB1I,KAAK8J,KAAKtC,EAAKiB,GAAQ,EACpC7E,EAAMA,EAAK5D,KAAK8J,KAAKtC,EAAKkB,GAAQ,EAClC1G,EAAMA,EAAKhC,KAAK8J,KAAK1C,EAAKwB,GAAQ,EAElC7C,GADAA,EAAOA,EAAM/F,KAAK8J,KAAK1C,EAAKyB,IAAQ,GACvB7I,KAAK8J,KAAKzC,EAAKuB,GAAQ,EACpChF,EAAMA,EAAK5D,KAAK8J,KAAKzC,EAAKwB,IAAQ,EAClC7G,EAAMA,EAAKhC,KAAK8J,KAAK7C,EAAK8B,IAAQ,EAElChD,GADAA,EAAOA,EAAM/F,KAAK8J,KAAK7C,EAAK+B,IAAQ,GACvBhJ,KAAK8J,KAAK5C,EAAK6B,IAAQ,EACpCnF,EAAMA,EAAK5D,KAAK8J,KAAK5C,EAAK8B,IAAQ,EAClChH,EAAMA,EAAKhC,KAAK8J,KAAKhD,EAAKoC,IAAQ,EAElCnD,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKhD,EAAKqC,IAAQ,GACvBnJ,KAAK8J,KAAK/C,EAAKmC,IAAQ,EACpCtF,EAAMA,EAAK5D,KAAK8J,KAAK/C,EAAKoC,IAAQ,EAClCnH,EAAMA,EAAKhC,KAAK8J,KAAKnD,EAAK0C,IAAQ,EAElCtD,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKnD,EAAK2C,IAAQ,GACvBtJ,KAAK8J,KAAKlD,EAAKyC,IAAQ,EACpCzF,EAAMA,EAAK5D,KAAK8J,KAAKlD,EAAK0C,IAAQ,EAClCtH,EAAMA,EAAKhC,KAAK8J,KAAKtD,EAAKgD,IAAQ,EAElCzD,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKtD,EAAKiD,IAAQ,GACvBzJ,KAAK8J,KAAKrD,EAAK+C,IAAQ,EACpC5F,EAAMA,EAAK5D,KAAK8J,KAAKrD,EAAKgD,IAAQ,EAKlC,IAAIe,IAAS9K,GAJbsC,EAAMA,EAAKhC,KAAK8J,KAAKzD,EAAKsD,IAAQ,GAIX,KAAa,MAFpC5D,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKzD,EAAKuD,IAAQ,GACvB5J,KAAK8J,KAAKxD,EAAKqD,IAAQ,KAEW,IAAO,EACtDjK,IAFAkE,EAAMA,EAAK5D,KAAK8J,KAAKxD,EAAKsD,IAAQ,IAErB7D,IAAQ,IAAO,IAAMyE,KAAQ,IAAO,EACjDA,IAAO,SAEPxI,EAAKhC,KAAK8J,KAAKjC,EAAKS,GAEpBvC,GADAA,EAAM/F,KAAK8J,KAAKjC,EAAKU,IACRvI,KAAK8J,KAAKhC,EAAKQ,GAAQ,EACpC1E,EAAK5D,KAAK8J,KAAKhC,EAAKS,GACpBvG,EAAMA,EAAKhC,KAAK8J,KAAKpC,EAAKe,GAAQ,EAElC1C,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKpC,EAAKgB,GAAQ,GACvB1I,KAAK8J,KAAKnC,EAAKc,GAAQ,EACpC7E,EAAMA,EAAK5D,KAAK8J,KAAKnC,EAAKe,GAAQ,EAClC1G,EAAMA,EAAKhC,KAAK8J,KAAKvC,EAAKqB,GAAQ,EAElC7C,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKvC,EAAKsB,IAAQ,GACvB7I,KAAK8J,KAAKtC,EAAKoB,GAAQ,EACpChF,EAAMA,EAAK5D,KAAK8J,KAAKtC,EAAKqB,IAAQ,EAClC7G,EAAMA,EAAKhC,KAAK8J,KAAK1C,EAAK2B,IAAQ,EAElChD,GADAA,EAAOA,EAAM/F,KAAK8J,KAAK1C,EAAK4B,IAAQ,GACvBhJ,KAAK8J,KAAKzC,EAAK0B,IAAQ,EACpCnF,EAAMA,EAAK5D,KAAK8J,KAAKzC,EAAK2B,IAAQ,EAClChH,EAAMA,EAAKhC,KAAK8J,KAAK7C,EAAKiC,IAAQ,EAElCnD,GADAA,EAAOA,EAAM/F,KAAK8J,KAAK7C,EAAKkC,IAAQ,GACvBnJ,KAAK8J,KAAK5C,EAAKgC,IAAQ,EACpCtF,EAAMA,EAAK5D,KAAK8J,KAAK5C,EAAKiC,IAAQ,EAClCnH,EAAMA,EAAKhC,KAAK8J,KAAKhD,EAAKuC,IAAQ,EAElCtD,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKhD,EAAKwC,IAAQ,GACvBtJ,KAAK8J,KAAK/C,EAAKsC,IAAQ,EACpCzF,EAAMA,EAAK5D,KAAK8J,KAAK/C,EAAKuC,IAAQ,EAClCtH,EAAMA,EAAKhC,KAAK8J,KAAKnD,EAAK6C,IAAQ,EAElCzD,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKnD,EAAK8C,IAAQ,GACvBzJ,KAAK8J,KAAKlD,EAAK4C,IAAQ,EACpC5F,EAAMA,EAAK5D,KAAK8J,KAAKlD,EAAK6C,IAAQ,EAKlC,IAAIgB,IAAS/K,GAJbsC,EAAMA,EAAKhC,KAAK8J,KAAKtD,EAAKmD,IAAQ,GAIX,KAAa,MAFpC5D,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKtD,EAAKoD,IAAQ,GACvB5J,KAAK8J,KAAKrD,EAAKkD,IAAQ,KAEW,IAAO,EACtDjK,IAFAkE,EAAMA,EAAK5D,KAAK8J,KAAKrD,EAAKmD,IAAQ,IAErB7D,IAAQ,IAAO,IAAM0E,KAAQ,IAAO,EACjDA,IAAO,SAEPzI,EAAKhC,KAAK8J,KAAKjC,EAAKY,GAEpB1C,GADAA,EAAM/F,KAAK8J,KAAKjC,EAAKa,IACR1I,KAAK8J,KAAKhC,EAAKW,GAAQ,EACpC7E,EAAK5D,KAAK8J,KAAKhC,EAAKY,GACpB1G,EAAMA,EAAKhC,KAAK8J,KAAKpC,EAAKkB,GAAQ,EAElC7C,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKpC,EAAKmB,IAAQ,GACvB7I,KAAK8J,KAAKnC,EAAKiB,GAAQ,EACpChF,EAAMA,EAAK5D,KAAK8J,KAAKnC,EAAKkB,IAAQ,EAClC7G,EAAMA,EAAKhC,KAAK8J,KAAKvC,EAAKwB,IAAQ,EAElChD,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKvC,EAAKyB,IAAQ,GACvBhJ,KAAK8J,KAAKtC,EAAKuB,IAAQ,EACpCnF,EAAMA,EAAK5D,KAAK8J,KAAKtC,EAAKwB,IAAQ,EAClChH,EAAMA,EAAKhC,KAAK8J,KAAK1C,EAAK8B,IAAQ,EAElCnD,GADAA,EAAOA,EAAM/F,KAAK8J,KAAK1C,EAAK+B,IAAQ,GACvBnJ,KAAK8J,KAAKzC,EAAK6B,IAAQ,EACpCtF,EAAMA,EAAK5D,KAAK8J,KAAKzC,EAAK8B,IAAQ,EAClCnH,EAAMA,EAAKhC,KAAK8J,KAAK7C,EAAKoC,IAAQ,EAElCtD,GADAA,EAAOA,EAAM/F,KAAK8J,KAAK7C,EAAKqC,IAAQ,GACvBtJ,KAAK8J,KAAK5C,EAAKmC,IAAQ,EACpCzF,EAAMA,EAAK5D,KAAK8J,KAAK5C,EAAKoC,IAAQ,EAClCtH,EAAMA,EAAKhC,KAAK8J,KAAKhD,EAAK0C,IAAQ,EAElCzD,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKhD,EAAK2C,IAAQ,GACvBzJ,KAAK8J,KAAK/C,EAAKyC,IAAQ,EACpC5F,EAAMA,EAAK5D,KAAK8J,KAAK/C,EAAK0C,IAAQ,EAKlC,IAAIiB,IAAShL,GAJbsC,EAAMA,EAAKhC,KAAK8J,KAAKnD,EAAKgD,IAAQ,GAIX,KAAa,MAFpC5D,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKnD,EAAKiD,IAAQ,GACvB5J,KAAK8J,KAAKlD,EAAK+C,IAAQ,KAEW,IAAO,EACtDjK,IAFAkE,EAAMA,EAAK5D,KAAK8J,KAAKlD,EAAKgD,IAAQ,IAErB7D,IAAQ,IAAO,IAAM2E,KAAQ,IAAO,EACjDA,IAAO,SAEP1I,EAAKhC,KAAK8J,KAAKjC,EAAKe,GAEpB7C,GADAA,EAAM/F,KAAK8J,KAAKjC,EAAKgB,KACR7I,KAAK8J,KAAKhC,EAAKc,GAAQ,EACpChF,EAAK5D,KAAK8J,KAAKhC,EAAKe,IACpB7G,EAAMA,EAAKhC,KAAK8J,KAAKpC,EAAKqB,IAAQ,EAElChD,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKpC,EAAKsB,IAAQ,GACvBhJ,KAAK8J,KAAKnC,EAAKoB,IAAQ,EACpCnF,EAAMA,EAAK5D,KAAK8J,KAAKnC,EAAKqB,IAAQ,EAClChH,EAAMA,EAAKhC,KAAK8J,KAAKvC,EAAK2B,IAAQ,EAElCnD,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKvC,EAAK4B,IAAQ,GACvBnJ,KAAK8J,KAAKtC,EAAK0B,IAAQ,EACpCtF,EAAMA,EAAK5D,KAAK8J,KAAKtC,EAAK2B,IAAQ,EAClCnH,EAAMA,EAAKhC,KAAK8J,KAAK1C,EAAKiC,IAAQ,EAElCtD,GADAA,EAAOA,EAAM/F,KAAK8J,KAAK1C,EAAKkC,IAAQ,GACvBtJ,KAAK8J,KAAKzC,EAAKgC,IAAQ,EACpCzF,EAAMA,EAAK5D,KAAK8J,KAAKzC,EAAKiC,IAAQ,EAClCtH,EAAMA,EAAKhC,KAAK8J,KAAK7C,EAAKuC,IAAQ,EAElCzD,GADAA,EAAOA,EAAM/F,KAAK8J,KAAK7C,EAAKwC,IAAQ,GACvBzJ,KAAK8J,KAAK5C,EAAKsC,IAAQ,EACpC5F,EAAMA,EAAK5D,KAAK8J,KAAK5C,EAAKuC,IAAQ,EAKlC,IAAIkB,IAASjL,GAJbsC,EAAMA,EAAKhC,KAAK8J,KAAKhD,EAAK6C,IAAQ,GAIX,KAAa,MAFpC5D,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKhD,EAAK8C,IAAQ,GACvB5J,KAAK8J,KAAK/C,EAAK4C,IAAQ,KAEW,IAAO,EACtDjK,IAFAkE,EAAMA,EAAK5D,KAAK8J,KAAK/C,EAAK6C,IAAQ,IAErB7D,IAAQ,IAAO,IAAM4E,KAAQ,IAAO,EACjDA,IAAO,SAEP3I,EAAKhC,KAAK8J,KAAKjC,EAAKkB,IAEpBhD,GADAA,EAAM/F,KAAK8J,KAAKjC,EAAKmB,KACRhJ,KAAK8J,KAAKhC,EAAKiB,IAAQ,EACpCnF,EAAK5D,KAAK8J,KAAKhC,EAAKkB,IACpBhH,EAAMA,EAAKhC,KAAK8J,KAAKpC,EAAKwB,IAAQ,EAElCnD,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKpC,EAAKyB,IAAQ,GACvBnJ,KAAK8J,KAAKnC,EAAKuB,IAAQ,EACpCtF,EAAMA,EAAK5D,KAAK8J,KAAKnC,EAAKwB,IAAQ,EAClCnH,EAAMA,EAAKhC,KAAK8J,KAAKvC,EAAK8B,IAAQ,EAElCtD,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKvC,EAAK+B,IAAQ,GACvBtJ,KAAK8J,KAAKtC,EAAK6B,IAAQ,EACpCzF,EAAMA,EAAK5D,KAAK8J,KAAKtC,EAAK8B,IAAQ,EAClCtH,EAAMA,EAAKhC,KAAK8J,KAAK1C,EAAKoC,IAAQ,EAElCzD,GADAA,EAAOA,EAAM/F,KAAK8J,KAAK1C,EAAKqC,IAAQ,GACvBzJ,KAAK8J,KAAKzC,EAAKmC,IAAQ,EACpC5F,EAAMA,EAAK5D,KAAK8J,KAAKzC,EAAKoC,IAAQ,EAKlC,IAAImB,IAASlL,GAJbsC,EAAMA,EAAKhC,KAAK8J,KAAK7C,EAAK0C,IAAQ,GAIX,KAAa,MAFpC5D,GADAA,EAAOA,EAAM/F,KAAK8J,KAAK7C,EAAK2C,IAAQ,GACvB5J,KAAK8J,KAAK5C,EAAKyC,IAAQ,KAEW,IAAO,EACtDjK,IAFAkE,EAAMA,EAAK5D,KAAK8J,KAAK5C,EAAK0C,IAAQ,IAErB7D,IAAQ,IAAO,IAAM6E,KAAQ,IAAO,EACjDA,IAAO,SAEP5I,EAAKhC,KAAK8J,KAAKjC,EAAKqB,IAEpBnD,GADAA,EAAM/F,KAAK8J,KAAKjC,EAAKsB,KACRnJ,KAAK8J,KAAKhC,EAAKoB,IAAQ,EACpCtF,EAAK5D,KAAK8J,KAAKhC,EAAKqB,IACpBnH,EAAMA,EAAKhC,KAAK8J,KAAKpC,EAAK2B,IAAQ,EAElCtD,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKpC,EAAK4B,IAAQ,GACvBtJ,KAAK8J,KAAKnC,EAAK0B,IAAQ,EACpCzF,EAAMA,EAAK5D,KAAK8J,KAAKnC,EAAK2B,IAAQ,EAClCtH,EAAMA,EAAKhC,KAAK8J,KAAKvC,EAAKiC,IAAQ,EAElCzD,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKvC,EAAKkC,IAAQ,GACvBzJ,KAAK8J,KAAKtC,EAAKgC,IAAQ,EACpC5F,EAAMA,EAAK5D,KAAK8J,KAAKtC,EAAKiC,IAAQ,EAKlC,IAAIoB,IAASnL,GAJbsC,EAAMA,EAAKhC,KAAK8J,KAAK1C,EAAKuC,IAAQ,GAIX,KAAa,MAFpC5D,GADAA,EAAOA,EAAM/F,KAAK8J,KAAK1C,EAAKwC,IAAQ,GACvB5J,KAAK8J,KAAKzC,EAAKsC,IAAQ,KAEW,IAAO,EACtDjK,IAFAkE,EAAMA,EAAK5D,KAAK8J,KAAKzC,EAAKuC,IAAQ,IAErB7D,IAAQ,IAAO,IAAM8E,KAAQ,IAAO,EACjDA,IAAO,SAEP7I,EAAKhC,KAAK8J,KAAKjC,EAAKwB,IAEpBtD,GADAA,EAAM/F,KAAK8J,KAAKjC,EAAKyB,KACRtJ,KAAK8J,KAAKhC,EAAKuB,IAAQ,EACpCzF,EAAK5D,KAAK8J,KAAKhC,EAAKwB,IACpBtH,EAAMA,EAAKhC,KAAK8J,KAAKpC,EAAK8B,IAAQ,EAElCzD,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKpC,EAAK+B,IAAQ,GACvBzJ,KAAK8J,KAAKnC,EAAK6B,IAAQ,EACpC5F,EAAMA,EAAK5D,KAAK8J,KAAKnC,EAAK8B,IAAQ,EAKlC,IAAIqB,IAASpL,GAJbsC,EAAMA,EAAKhC,KAAK8J,KAAKvC,EAAKoC,IAAQ,GAIX,KAAa,MAFpC5D,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKvC,EAAKqC,IAAQ,GACvB5J,KAAK8J,KAAKtC,EAAKmC,IAAQ,KAEW,IAAO,EACtDjK,IAFAkE,EAAMA,EAAK5D,KAAK8J,KAAKtC,EAAKoC,IAAQ,IAErB7D,IAAQ,IAAO,IAAM+E,KAAQ,IAAO,EACjDA,IAAO,SAEP9I,EAAKhC,KAAK8J,KAAKjC,EAAK2B,IAEpBzD,GADAA,EAAM/F,KAAK8J,KAAKjC,EAAK4B,KACRzJ,KAAK8J,KAAKhC,EAAK0B,IAAQ,EACpC5F,EAAK5D,KAAK8J,KAAKhC,EAAK2B,IAKpB,IAAIsB,IAASrL,GAJbsC,EAAMA,EAAKhC,KAAK8J,KAAKpC,EAAKiC,IAAQ,GAIX,KAAa,MAFpC5D,GADAA,EAAOA,EAAM/F,KAAK8J,KAAKpC,EAAKkC,IAAQ,GACvB5J,KAAK8J,KAAKnC,EAAKgC,IAAQ,KAEW,IAAO,EACtDjK,IAFAkE,EAAMA,EAAK5D,KAAK8J,KAAKnC,EAAKiC,IAAQ,IAErB7D,IAAQ,IAAO,IAAMgF,KAAQ,IAAO,EACjDA,IAAO,SAMP,IAAIC,IAAStL,GAJbsC,EAAKhC,KAAK8J,KAAKjC,EAAK8B,KAIG,KAAa,MAFpC5D,GADAA,EAAM/F,KAAK8J,KAAKjC,EAAK+B,KACR5J,KAAK8J,KAAKhC,EAAK6B,IAAQ,KAEW,IAAO,EA0BtD,OAzBAjK,IAFAkE,EAAK5D,KAAK8J,KAAKhC,EAAK8B,MAEP7D,IAAQ,IAAO,IAAMiF,KAAQ,IAAO,EACjDA,IAAO,SACPhF,EAAE,GAAK6D,GACP7D,EAAE,GAAK+D,GACP/D,EAAE,GAAKgE,GACPhE,EAAE,GAAKiE,GACPjE,EAAE,GAAKkE,GACPlE,EAAE,GAAKmE,GACPnE,EAAE,GAAKoE,GACPpE,EAAE,GAAKqE,GACPrE,EAAE,GAAKsE,GACPtE,EAAE,GAAKuE,GACPvE,EAAE,IAAMwE,GACRxE,EAAE,IAAMyE,GACRzE,EAAE,IAAM0E,GACR1E,EAAE,IAAM2E,GACR3E,EAAE,IAAM4E,GACR5E,EAAE,IAAM6E,GACR7E,EAAE,IAAM8E,GACR9E,EAAE,IAAM+E,GACR/E,EAAE,IAAMgF,GACE,IAANtL,IACFsG,EAAE,IAAMtG,EACRpP,EAAIxB,UAECwB,CACT,EAOA,SAASkb,EAAU3J,EAAMvO,EAAKhD,GAC5BA,EAAI6O,SAAW7L,EAAI6L,SAAW0C,EAAK1C,SACnC7O,EAAIxB,OAAS+S,EAAK/S,OAASwE,EAAIxE,OAI/B,IAFA,IAAImT,EAAQ,EACRsJ,EAAU,EACLrJ,EAAI,EAAGA,EAAI5R,EAAIxB,OAAS,EAAGoT,IAAK,CAGvC,IAAIC,EAASoJ,EACbA,EAAU,EAGV,IAFA,IAAInJ,EAAgB,SAARH,EACRI,EAAOrC,KAAKvF,IAAIyH,EAAG5O,EAAIxE,OAAS,GAC3BkK,EAAIgH,KAAKC,IAAI,EAAGiC,EAAIL,EAAK/S,OAAS,GAAIkK,GAAKqJ,EAAMrJ,IAAK,CAC7D,IAAID,EAAImJ,EAAIlJ,EAGR6G,GAFoB,EAAhBgC,EAAKzC,MAAMrG,KACI,EAAfzF,EAAI8L,MAAMpG,IAGdgJ,EAAS,SAAJnC,EAGTuC,EAAa,UADbJ,EAAMA,EAAKI,EAAS,GAIpBmJ,IAFApJ,GAHAA,EAAUA,GAAWtC,EAAI,SAAa,GAAM,IAGxBmC,IAAO,IAAO,KAEZ,GACtBG,GAAU,QACZ,CACA7R,EAAI8O,MAAM8C,GAAKE,EACfH,EAAQE,EACRA,EAASoJ,CACX,CAOA,OANc,IAAVtJ,EACF3R,EAAI8O,MAAM8C,GAAKD,EAEf3R,EAAIxB,SAGCwB,EAAIolB,QACb,CAEA,SAASzK,EAAYpJ,EAAMvO,EAAKhD,GAI9B,OAAOkb,EAAS3J,EAAMvO,EAAKhD,EAC7B,CAqBA,SAAS4a,EAAME,EAAGC,GAChB7d,KAAK4d,EAAIA,EACT5d,KAAK6d,EAAIA,CACX,CA1EKrL,KAAK8J,OACRhE,EAAclE,GAmDhB7C,EAAGtR,UAAU6d,MAAQ,SAAgBhY,EAAKhD,GACxC,IACIwI,EAAMtL,KAAKsB,OAASwE,EAAIxE,OAW5B,OAVoB,KAAhBtB,KAAKsB,QAAgC,KAAfwE,EAAIxE,OACtBgX,EAAYtY,KAAM8F,EAAKhD,GACpBwI,EAAM,GACT8I,EAAWpU,KAAM8F,EAAKhD,GACnBwI,EAAM,KACT0S,EAAShe,KAAM8F,EAAKhD,GAEpB2a,EAAWzd,KAAM8F,EAAKhD,EAIhC,EAUA4a,EAAKzd,UAAUge,QAAU,SAAkBC,GAGzC,IAFA,IAAIjI,EAAI,IAAIvU,MAAMwc,GACdC,EAAI5M,EAAGtR,UAAU+V,WAAWkI,GAAK,EAC5B3S,EAAI,EAAGA,EAAI2S,EAAG3S,IACrB0K,EAAE1K,GAAKvL,KAAKoe,OAAO7S,EAAG4S,EAAGD,GAG3B,OAAOjI,CACT,EAGAyH,EAAKzd,UAAUme,OAAS,SAAiBR,EAAGO,EAAGD,GAC7C,GAAU,IAANN,GAAWA,IAAMM,EAAI,EAAG,OAAON,EAGnC,IADA,IAAIS,EAAK,EACA9S,EAAI,EAAGA,EAAI4S,EAAG5S,IACrB8S,IAAW,EAAJT,IAAWO,EAAI5S,EAAI,EAC1BqS,IAAM,EAGR,OAAOS,CACT,EAIAX,EAAKzd,UAAUqe,QAAU,SAAkBC,EAAKC,EAAKC,EAAKC,EAAMC,EAAMT,GACpE,IAAK,IAAI3S,EAAI,EAAGA,EAAI2S,EAAG3S,IACrBmT,EAAKnT,GAAKiT,EAAID,EAAIhT,IAClBoT,EAAKpT,GAAKkT,EAAIF,EAAIhT,GAEtB,EAEAmS,EAAKzd,UAAU2e,UAAY,SAAoBJ,EAAKC,EAAKC,EAAMC,EAAMT,EAAGK,GACtEve,KAAKse,QAAQC,EAAKC,EAAKC,EAAKC,EAAMC,EAAMT,GAExC,IAAK,IAAIW,EAAI,EAAGA,EAAIX,EAAGW,IAAM,EAM3B,IALA,IAAIV,EAAIU,GAAK,EAETC,EAAQtM,KAAKuM,IAAI,EAAIvM,KAAKwM,GAAKb,GAC/Bc,EAAQzM,KAAK0M,IAAI,EAAI1M,KAAKwM,GAAKb,GAE1BxO,EAAI,EAAGA,EAAIuO,EAAGvO,GAAKwO,EAI1B,IAHA,IAAIgB,EAASL,EACTM,EAASH,EAEJzT,EAAI,EAAGA,EAAIqT,EAAGrT,IAAK,CAC1B,IAAImC,EAAK+Q,EAAK/O,EAAInE,GACd6T,EAAKV,EAAKhP,EAAInE,GAEd8T,EAAKZ,EAAK/O,EAAInE,EAAIqT,GAClBU,EAAKZ,EAAKhP,EAAInE,EAAIqT,GAElBW,EAAKL,EAASG,EAAKF,EAASG,EAEhCA,EAAKJ,EAASI,EAAKH,EAASE,EAC5BA,EAAKE,EAELd,EAAK/O,EAAInE,GAAKmC,EAAK2R,EACnBX,EAAKhP,EAAInE,GAAK6T,EAAKE,EAEnBb,EAAK/O,EAAInE,EAAIqT,GAAKlR,EAAK2R,EACvBX,EAAKhP,EAAInE,EAAIqT,GAAKQ,EAAKE,EAGnB/T,IAAM2S,IACRqB,EAAKV,EAAQK,EAASF,EAAQG,EAE9BA,EAASN,EAAQM,EAASH,EAAQE,EAClCA,EAASK,EAEb,CAGN,EAEA9B,EAAKzd,UAAUwf,YAAc,SAAsBC,EAAGC,GACpD,IAAIzB,EAAqB,EAAjB1L,KAAKC,IAAIkN,EAAGD,GAChBE,EAAU,EAAJ1B,EACN3S,EAAI,EACR,IAAK2S,EAAIA,EAAI,EAAI,EAAGA,EAAGA,KAAU,EAC/B3S,IAGF,OAAO,GAAKA,EAAI,EAAIqU,CACtB,EAEAlC,EAAKzd,UAAU4f,UAAY,SAAoBrB,EAAKC,EAAKP,GACvD,KAAIA,GAAK,GAET,IAAK,IAAI3S,EAAI,EAAGA,EAAI2S,EAAI,EAAG3S,IAAK,CAC9B,IAAI0K,EAAIuI,EAAIjT,GAEZiT,EAAIjT,GAAKiT,EAAIN,EAAI3S,EAAI,GACrBiT,EAAIN,EAAI3S,EAAI,GAAK0K,EAEjBA,EAAIwI,EAAIlT,GAERkT,EAAIlT,IAAMkT,EAAIP,EAAI3S,EAAI,GACtBkT,EAAIP,EAAI3S,EAAI,IAAM0K,CACpB,CACF,EAEAyH,EAAKzd,UAAU6f,aAAe,SAAuBC,EAAI7B,GAEvD,IADA,IAAIzJ,EAAQ,EACHlJ,EAAI,EAAGA,EAAI2S,EAAI,EAAG3S,IAAK,CAC9B,IAAI2H,EAAoC,KAAhCV,KAAKwN,MAAMD,EAAG,EAAIxU,EAAI,GAAK2S,GACjC1L,KAAKwN,MAAMD,EAAG,EAAIxU,GAAK2S,GACvBzJ,EAEFsL,EAAGxU,GAAS,SAAJ2H,EAGNuB,EADEvB,EAAI,SACE,EAEAA,EAAI,SAAY,CAE5B,CAEA,OAAO6M,CACT,EAEArC,EAAKzd,UAAUggB,WAAa,SAAqBF,EAAIzU,EAAKkT,EAAKN,GAE7D,IADA,IAAIzJ,EAAQ,EACHlJ,EAAI,EAAGA,EAAID,EAAKC,IACvBkJ,GAAyB,EAARsL,EAAGxU,GAEpBiT,EAAI,EAAIjT,GAAa,KAARkJ,EAAgBA,KAAkB,GAC/C+J,EAAI,EAAIjT,EAAI,GAAa,KAARkJ,EAAgBA,KAAkB,GAIrD,IAAKlJ,EAAI,EAAID,EAAKC,EAAI2S,IAAK3S,EACzBiT,EAAIjT,GAAK,EAGXnI,EAAiB,IAAVqR,GACPrR,EAA6B,KAAb,KAARqR,GACV,EAEAiJ,EAAKzd,UAAUigB,KAAO,SAAehC,GAEnC,IADA,IAAIiC,EAAK,IAAIze,MAAMwc,GACV3S,EAAI,EAAGA,EAAI2S,EAAG3S,IACrB4U,EAAG5U,GAAK,EAGV,OAAO4U,CACT,EAEAzC,EAAKzd,UAAU0d,KAAO,SAAeC,EAAGC,EAAG/a,GACzC,IAAIob,EAAI,EAAIle,KAAKyf,YAAY7B,EAAEtc,OAAQuc,EAAEvc,QAErCid,EAAMve,KAAKie,QAAQC,GAEnBkC,EAAIpgB,KAAKkgB,KAAKhC,GAEdM,EAAM,IAAI9c,MAAMwc,GAChBmC,EAAO,IAAI3e,MAAMwc,GACjBoC,EAAO,IAAI5e,MAAMwc,GAEjBqC,EAAO,IAAI7e,MAAMwc,GACjBsC,EAAQ,IAAI9e,MAAMwc,GAClBuC,EAAQ,IAAI/e,MAAMwc,GAElBwC,EAAO5d,EAAI8O,MACf8O,EAAKpf,OAAS4c,EAEdle,KAAKigB,WAAWrC,EAAEhM,MAAOgM,EAAEtc,OAAQkd,EAAKN,GACxCle,KAAKigB,WAAWpC,EAAEjM,MAAOiM,EAAEvc,OAAQif,EAAMrC,GAEzCle,KAAK4e,UAAUJ,EAAK4B,EAAGC,EAAMC,EAAMpC,EAAGK,GACtCve,KAAK4e,UAAU2B,EAAMH,EAAGI,EAAOC,EAAOvC,EAAGK,GAEzC,IAAK,IAAIhT,EAAI,EAAGA,EAAI2S,EAAG3S,IAAK,CAC1B,IAAIiU,EAAKa,EAAK9U,GAAKiV,EAAMjV,GAAK+U,EAAK/U,GAAKkV,EAAMlV,GAC9C+U,EAAK/U,GAAK8U,EAAK9U,GAAKkV,EAAMlV,GAAK+U,EAAK/U,GAAKiV,EAAMjV,GAC/C8U,EAAK9U,GAAKiU,CACZ,CASA,OAPAxf,KAAK6f,UAAUQ,EAAMC,EAAMpC,GAC3Ble,KAAK4e,UAAUyB,EAAMC,EAAMI,EAAMN,EAAGlC,EAAGK,GACvCve,KAAK6f,UAAUa,EAAMN,EAAGlC,GACxBle,KAAK8f,aAAaY,EAAMxC,GAExBpb,EAAI6O,SAAWiM,EAAEjM,SAAWkM,EAAElM,SAC9B7O,EAAIxB,OAASsc,EAAEtc,OAASuc,EAAEvc,OACnBwB,EAAIolB,QACb,EAGA3W,EAAGtR,UAAUsS,IAAM,SAAczM,GAC/B,IAAIhD,EAAM,IAAIyO,EAAG,MAEjB,OADAzO,EAAI8O,MAAQ,IAAIlQ,MAAM1B,KAAKsB,OAASwE,EAAIxE,QACjCtB,KAAK8d,MAAMhY,EAAKhD,EACzB,EAGAyO,EAAGtR,UAAU0gB,KAAO,SAAe7a,GACjC,IAAIhD,EAAM,IAAIyO,EAAG,MAEjB,OADAzO,EAAI8O,MAAQ,IAAIlQ,MAAM1B,KAAKsB,OAASwE,EAAIxE,QACjCmc,EAAWzd,KAAM8F,EAAKhD,EAC/B,EAGAyO,EAAGtR,UAAUqc,KAAO,SAAexW,GACjC,OAAO9F,KAAK4E,QAAQkZ,MAAMhY,EAAK9F,KACjC,EAEAuR,EAAGtR,UAAUyT,MAAQ,SAAgB5N,GACnC,IAAIgwB,EAAWhwB,EAAM,EACjBgwB,IAAUhwB,GAAOA,GAErB1C,EAAsB,iBAAR0C,GACd1C,EAAO0C,EAAM,UAIb,IADA,IAAI2O,EAAQ,EACHlJ,EAAI,EAAGA,EAAIvL,KAAKsB,OAAQiK,IAAK,CACpC,IAAI2H,GAAqB,EAAhBlT,KAAK4R,MAAMrG,IAAUzF,EAC1B0O,GAAU,SAAJtB,IAA0B,SAARuB,GAC5BA,IAAU,GACVA,GAAUvB,EAAI,SAAa,EAE3BuB,GAASD,IAAO,GAChBxU,KAAK4R,MAAMrG,GAAU,SAALiJ,CAClB,CAOA,OALc,IAAVC,IACFzU,KAAK4R,MAAMrG,GAAKkJ,EAChBzU,KAAKsB,UAGAw0B,EAAW91B,KAAK8W,OAAS9W,IAClC,EAEAuR,EAAGtR,UAAU2gB,KAAO,SAAe9a,GACjC,OAAO9F,KAAK4E,QAAQ8O,MAAM5N,EAC5B,EAGAyL,EAAGtR,UAAU4gB,IAAM,WACjB,OAAO7gB,KAAKuS,IAAIvS,KAClB,EAGAuR,EAAGtR,UAAU6gB,KAAO,WAClB,OAAO9gB,KAAKsc,KAAKtc,KAAK4E,QACxB,EAGA2M,EAAGtR,UAAU2T,IAAM,SAAc9N,GAC/B,IAAIoN,EA7xCN,SAAqBpN,GAGnB,IAFA,IAAIoN,EAAI,IAAIxR,MAAMoE,EAAIqQ,aAEb6B,EAAM,EAAGA,EAAM9E,EAAE5R,OAAQ0W,IAAO,CACvC,IAAI7E,EAAO6E,EAAM,GAAM,EACnBC,EAAOD,EAAM,GAEjB9E,EAAE8E,GAAQlS,EAAI8L,MAAMuB,KAAS8E,EAAQ,CACvC,CAEA,OAAO/E,CACT,CAkxCU6N,CAAWjb,GACnB,GAAiB,IAAboN,EAAE5R,OAAc,OAAO,IAAIiQ,EAAG,GAIlC,IADA,IAAI/O,EAAMxC,KACDuL,EAAI,EAAGA,EAAI2H,EAAE5R,QACP,IAAT4R,EAAE3H,GADsBA,IAAK/I,EAAMA,EAAIqe,OAI7C,KAAMtV,EAAI2H,EAAE5R,OACV,IAAK,IAAIsU,EAAIpT,EAAIqe,MAAOtV,EAAI2H,EAAE5R,OAAQiK,IAAKqK,EAAIA,EAAEiL,MAClC,IAAT3N,EAAE3H,KAEN/I,EAAMA,EAAI+P,IAAIqD,IAIlB,OAAOpT,CACT,EAGA+O,EAAGtR,UAAU+gB,OAAS,SAAiBC,GACrC7d,EAAuB,iBAAT6d,GAAqBA,GAAQ,GAC3C,IAGI1V,EAHA8G,EAAI4O,EAAO,GACXpC,GAAKoC,EAAO5O,GAAK,GACjB6O,EAAa,WAAe,GAAK7O,GAAQ,GAAKA,EAGlD,GAAU,IAANA,EAAS,CACX,IAAIoC,EAAQ,EAEZ,IAAKlJ,EAAI,EAAGA,EAAIvL,KAAKsB,OAAQiK,IAAK,CAChC,IAAI4V,EAAWnhB,KAAK4R,MAAMrG,GAAK2V,EAC3BhP,GAAsB,EAAhBlS,KAAK4R,MAAMrG,IAAU4V,GAAa9O,EAC5CrS,KAAK4R,MAAMrG,GAAK2G,EAAIuC,EACpBA,EAAQ0M,IAAc,GAAK9O,CAC7B,CAEIoC,IACFzU,KAAK4R,MAAMrG,GAAKkJ,EAChBzU,KAAKsB,SAET,CAEA,GAAU,IAANud,EAAS,CACX,IAAKtT,EAAIvL,KAAKsB,OAAS,EAAGiK,GAAK,EAAGA,IAChCvL,KAAK4R,MAAMrG,EAAIsT,GAAK7e,KAAK4R,MAAMrG,GAGjC,IAAKA,EAAI,EAAGA,EAAIsT,EAAGtT,IACjBvL,KAAK4R,MAAMrG,GAAK,EAGlBvL,KAAKsB,QAAUud,CACjB,CAEA,OAAO7e,KAAKkoB,QACd,EAEA3W,EAAGtR,UAAUmhB,MAAQ,SAAgBH,GAGnC,OADA7d,EAAyB,IAAlBpD,KAAK2R,UACL3R,KAAKghB,OAAOC,EACrB,EAKA1P,EAAGtR,UAAU6V,OAAS,SAAiBmL,EAAMI,EAAMC,GAEjD,IAAIC,EADJne,EAAuB,iBAAT6d,GAAqBA,GAAQ,GAGzCM,EADEF,GACGA,EAAQA,EAAO,IAAO,GAEvB,EAGN,IAAIhP,EAAI4O,EAAO,GACXpC,EAAIrM,KAAKvF,KAAKgU,EAAO5O,GAAK,GAAIrS,KAAKsB,QACnCkgB,EAAO,SAAc,WAAcnP,GAAMA,EACzCoP,EAAcH,EAMlB,GAJAC,GAAK1C,EACL0C,EAAI/O,KAAKC,IAAI,EAAG8O,GAGZE,EAAa,CACf,IAAK,IAAIlW,EAAI,EAAGA,EAAIsT,EAAGtT,IACrBkW,EAAY7P,MAAMrG,GAAKvL,KAAK4R,MAAMrG,GAEpCkW,EAAYngB,OAASud,CACvB,CAEA,GAAU,IAANA,QAEG,GAAI7e,KAAKsB,OAASud,EAEvB,IADA7e,KAAKsB,QAAUud,EACVtT,EAAI,EAAGA,EAAIvL,KAAKsB,OAAQiK,IAC3BvL,KAAK4R,MAAMrG,GAAKvL,KAAK4R,MAAMrG,EAAIsT,QAGjC7e,KAAK4R,MAAM,GAAK,EAChB5R,KAAKsB,OAAS,EAGhB,IAAImT,EAAQ,EACZ,IAAKlJ,EAAIvL,KAAKsB,OAAS,EAAGiK,GAAK,IAAgB,IAAVkJ,GAAelJ,GAAKgW,GAAIhW,IAAK,CAChE,IAAIkI,EAAuB,EAAhBzT,KAAK4R,MAAMrG,GACtBvL,KAAK4R,MAAMrG,GAAMkJ,GAAU,GAAKpC,EAAOoB,IAASpB,EAChDoC,EAAQhB,EAAO+N,CACjB,CAYA,OATIC,GAAyB,IAAVhN,IACjBgN,EAAY7P,MAAM6P,EAAYngB,UAAYmT,GAGxB,IAAhBzU,KAAKsB,SACPtB,KAAK4R,MAAM,GAAK,EAChB5R,KAAKsB,OAAS,GAGTtB,KAAKkoB,QACd,EAEA3W,EAAGtR,UAAUyhB,MAAQ,SAAgBT,EAAMI,EAAMC,GAG/C,OADAle,EAAyB,IAAlBpD,KAAK2R,UACL3R,KAAK8V,OAAOmL,EAAMI,EAAMC,EACjC,EAGA/P,EAAGtR,UAAU0hB,KAAO,SAAeV,GACjC,OAAOjhB,KAAK4E,QAAQwc,MAAMH,EAC5B,EAEA1P,EAAGtR,UAAU2hB,MAAQ,SAAgBX,GACnC,OAAOjhB,KAAK4E,QAAQoc,OAAOC,EAC7B,EAGA1P,EAAGtR,UAAU4hB,KAAO,SAAeZ,GACjC,OAAOjhB,KAAK4E,QAAQ8c,MAAMT,EAC5B,EAEA1P,EAAGtR,UAAU6hB,MAAQ,SAAgBb,GACnC,OAAOjhB,KAAK4E,QAAQkR,OAAOmL,EAC7B,EAGA1P,EAAGtR,UAAU2W,MAAQ,SAAgBoB,GACnC5U,EAAsB,iBAAR4U,GAAoBA,GAAO,GACzC,IAAI3F,EAAI2F,EAAM,GACV6G,GAAK7G,EAAM3F,GAAK,GAChBuD,EAAI,GAAKvD,EAGb,QAAIrS,KAAKsB,QAAUud,KAGX7e,KAAK4R,MAAMiN,GAELjJ,GAChB,EAGArE,EAAGtR,UAAU8hB,OAAS,SAAiBd,GACrC7d,EAAuB,iBAAT6d,GAAqBA,GAAQ,GAC3C,IAAI5O,EAAI4O,EAAO,GACXpC,GAAKoC,EAAO5O,GAAK,GAIrB,GAFAjP,EAAyB,IAAlBpD,KAAK2R,SAAgB,2CAExB3R,KAAKsB,QAAUud,EACjB,OAAO7e,KAQT,GALU,IAANqS,GACFwM,IAEF7e,KAAKsB,OAASkR,KAAKvF,IAAI4R,EAAG7e,KAAKsB,QAErB,IAAN+Q,EAAS,CACX,IAAImP,EAAO,SAAc,WAAcnP,GAAMA,EAC7CrS,KAAK4R,MAAM5R,KAAKsB,OAAS,IAAMkgB,CACjC,CAEA,OAAOxhB,KAAKkoB,QACd,EAGA3W,EAAGtR,UAAU+hB,MAAQ,SAAgBf,GACnC,OAAOjhB,KAAK4E,QAAQmd,OAAOd,EAC7B,EAGA1P,EAAGtR,UAAUyW,MAAQ,SAAgB5Q,GAGnC,OAFA1C,EAAsB,iBAAR0C,GACd1C,EAAO0C,EAAM,UACTA,EAAM,EAAU9F,KAAKiiB,OAAOnc,GAGV,IAAlB9F,KAAK2R,SACa,IAAhB3R,KAAKsB,SAAiC,EAAhBtB,KAAK4R,MAAM,KAAW9L,GAC9C9F,KAAK4R,MAAM,GAAK9L,GAAuB,EAAhB9F,KAAK4R,MAAM,IAClC5R,KAAK2R,SAAW,EACT3R,OAGTA,KAAK2R,SAAW,EAChB3R,KAAKiiB,MAAMnc,GACX9F,KAAK2R,SAAW,EACT3R,MAIFA,KAAK2T,OAAO7N,EACrB,EAEAyL,EAAGtR,UAAU0T,OAAS,SAAiB7N,GACrC9F,KAAK4R,MAAM,IAAM9L,EAGjB,IAAK,IAAIyF,EAAI,EAAGA,EAAIvL,KAAKsB,QAAUtB,KAAK4R,MAAMrG,IAAM,SAAWA,IAC7DvL,KAAK4R,MAAMrG,IAAM,SACbA,IAAMvL,KAAKsB,OAAS,EACtBtB,KAAK4R,MAAMrG,EAAI,GAAK,EAEpBvL,KAAK4R,MAAMrG,EAAI,KAKnB,OAFAvL,KAAKsB,OAASkR,KAAKC,IAAIzS,KAAKsB,OAAQiK,EAAI,GAEjCvL,IACT,EAGAuR,EAAGtR,UAAUgiB,MAAQ,SAAgBnc,GAGnC,GAFA1C,EAAsB,iBAAR0C,GACd1C,EAAO0C,EAAM,UACTA,EAAM,EAAG,OAAO9F,KAAK0W,OAAO5Q,GAEhC,GAAsB,IAAlB9F,KAAK2R,SAIP,OAHA3R,KAAK2R,SAAW,EAChB3R,KAAK0W,MAAM5Q,GACX9F,KAAK2R,SAAW,EACT3R,KAKT,GAFAA,KAAK4R,MAAM,IAAM9L,EAEG,IAAhB9F,KAAKsB,QAAgBtB,KAAK4R,MAAM,GAAK,EACvC5R,KAAK4R,MAAM,IAAM5R,KAAK4R,MAAM,GAC5B5R,KAAK2R,SAAW,OAGhB,IAAK,IAAIpG,EAAI,EAAGA,EAAIvL,KAAKsB,QAAUtB,KAAK4R,MAAMrG,GAAK,EAAGA,IACpDvL,KAAK4R,MAAMrG,IAAM,SACjBvL,KAAK4R,MAAMrG,EAAI,IAAM,EAIzB,OAAOvL,KAAKkoB,QACd,EAEA3W,EAAGtR,UAAUiiB,KAAO,SAAepc,GACjC,OAAO9F,KAAK4E,QAAQ8R,MAAM5Q,EAC5B,EAEAyL,EAAGtR,UAAUkiB,KAAO,SAAerc,GACjC,OAAO9F,KAAK4E,QAAQqd,MAAMnc,EAC5B,EAEAyL,EAAGtR,UAAUmiB,KAAO,WAGlB,OAFApiB,KAAK2R,SAAW,EAET3R,IACT,EAEAuR,EAAGtR,UAAUuW,IAAM,WACjB,OAAOxW,KAAK4E,QAAQwd,MACtB,EAEA7Q,EAAGtR,UAAUoiB,aAAe,SAAuBvc,EAAKyM,EAAK+P,GAC3D,IACI/W,EAIA2H,EALA5H,EAAMxF,EAAIxE,OAASghB,EAGvBtiB,KAAK8T,QAAQxI,GAGb,IAAImJ,EAAQ,EACZ,IAAKlJ,EAAI,EAAGA,EAAIzF,EAAIxE,OAAQiK,IAAK,CAC/B2H,GAA6B,EAAxBlT,KAAK4R,MAAMrG,EAAI+W,IAAc7N,EAClC,IAAI9B,GAAwB,EAAf7M,EAAI8L,MAAMrG,IAAUgH,EAEjCkC,IADAvB,GAAa,SAARP,IACS,KAAQA,EAAQ,SAAa,GAC3C3S,KAAK4R,MAAMrG,EAAI+W,GAAa,SAAJpP,CAC1B,CACA,KAAO3H,EAAIvL,KAAKsB,OAASghB,EAAO/W,IAE9BkJ,GADAvB,GAA6B,EAAxBlT,KAAK4R,MAAMrG,EAAI+W,IAAc7N,IACrB,GACbzU,KAAK4R,MAAMrG,EAAI+W,GAAa,SAAJpP,EAG1B,GAAc,IAAVuB,EAAa,OAAOzU,KAAKkoB,SAK7B,IAFA9kB,GAAkB,IAAXqR,GACPA,EAAQ,EACHlJ,EAAI,EAAGA,EAAIvL,KAAKsB,OAAQiK,IAE3BkJ,GADAvB,IAAsB,EAAhBlT,KAAK4R,MAAMrG,IAAUkJ,IACd,GACbzU,KAAK4R,MAAMrG,GAAS,SAAJ2H,EAIlB,OAFAlT,KAAK2R,SAAW,EAET3R,KAAKkoB,QACd,EAEA3W,EAAGtR,UAAUsiB,SAAW,SAAmBzc,EAAK0c,GAC9C,IAAIF,GAAQtiB,KAAKsB,OAASwE,EAAIxE,QAE1BgT,EAAItU,KAAK4E,QACT2P,EAAIzO,EAGJ2c,EAA8B,EAAxBlO,EAAE3C,MAAM2C,EAAEjT,OAAS,GAGf,IADdghB,EAAQ,GADMtiB,KAAKgW,WAAWyM,MAG5BlO,EAAIA,EAAEqN,MAAMU,GACZhO,EAAE0M,OAAOsB,GACTG,EAA8B,EAAxBlO,EAAE3C,MAAM2C,EAAEjT,OAAS,IAI3B,IACIsU,EADA+J,EAAIrL,EAAEhT,OAASiT,EAAEjT,OAGrB,GAAa,QAATkhB,EAAgB,EAClB5M,EAAI,IAAIrE,EAAG,OACTjQ,OAASqe,EAAI,EACf/J,EAAEhE,MAAQ,IAAIlQ,MAAMkU,EAAEtU,QACtB,IAAK,IAAIiK,EAAI,EAAGA,EAAIqK,EAAEtU,OAAQiK,IAC5BqK,EAAEhE,MAAMrG,GAAK,CAEjB,CAEA,IAAImX,EAAOpO,EAAE1P,QAAQyd,aAAa9N,EAAG,EAAGoL,GAClB,IAAlB+C,EAAK/Q,WACP2C,EAAIoO,EACA9M,IACFA,EAAEhE,MAAM+N,GAAK,IAIjB,IAAK,IAAInU,EAAImU,EAAI,EAAGnU,GAAK,EAAGA,IAAK,CAC/B,IAAImX,EAAmC,UAAL,EAAxBrO,EAAE1C,MAAM2C,EAAEjT,OAASkK,KACE,EAA5B8I,EAAE1C,MAAM2C,EAAEjT,OAASkK,EAAI,IAO1B,IAHAmX,EAAKnQ,KAAKvF,IAAK0V,EAAKF,EAAO,EAAG,UAE9BnO,EAAE+N,aAAa9N,EAAGoO,EAAInX,GACA,IAAf8I,EAAE3C,UACPgR,IACArO,EAAE3C,SAAW,EACb2C,EAAE+N,aAAa9N,EAAG,EAAG/I,GAChB8I,EAAEW,WACLX,EAAE3C,UAAY,GAGdiE,IACFA,EAAEhE,MAAMpG,GAAKmX,EAEjB,CAWA,OAVI/M,GACFA,EAAEsS,SAEJ5T,EAAE4T,SAGW,QAAT1F,GAA4B,IAAVF,GACpBhO,EAAEwB,OAAOwM,GAGJ,CACLM,IAAKhN,GAAK,KACVpC,IAAKc,EAET,EAMA/C,EAAGtR,UAAU4iB,OAAS,SAAiB/c,EAAK0c,EAAMM,GAGhD,OAFA1f,GAAQ0C,EAAImP,UAERjV,KAAKiV,SACA,CACL2N,IAAK,IAAIrR,EAAG,GACZiC,IAAK,IAAIjC,EAAG,IAKM,IAAlBvR,KAAK2R,UAAmC,IAAjB7L,EAAI6L,UAC7BnP,EAAMxC,KAAKgX,MAAM6L,OAAO/c,EAAK0c,GAEhB,QAATA,IACFI,EAAMpgB,EAAIogB,IAAI5L,OAGH,QAATwL,IACFhP,EAAMhR,EAAIgR,IAAIwD,MACV8L,GAA6B,IAAjBtP,EAAI7B,UAClB6B,EAAI0E,KAAKpS,IAIN,CACL8c,IAAKA,EACLpP,IAAKA,IAIa,IAAlBxT,KAAK2R,UAAmC,IAAjB7L,EAAI6L,UAC7BnP,EAAMxC,KAAK6iB,OAAO/c,EAAIkR,MAAOwL,GAEhB,QAATA,IACFI,EAAMpgB,EAAIogB,IAAI5L,OAGT,CACL4L,IAAKA,EACLpP,IAAKhR,EAAIgR,MAI0B,IAAlCxT,KAAK2R,SAAW7L,EAAI6L,WACvBnP,EAAMxC,KAAKgX,MAAM6L,OAAO/c,EAAIkR,MAAOwL,GAEtB,QAATA,IACFhP,EAAMhR,EAAIgR,IAAIwD,MACV8L,GAA6B,IAAjBtP,EAAI7B,UAClB6B,EAAI2E,KAAKrS,IAIN,CACL8c,IAAKpgB,EAAIogB,IACTpP,IAAKA,IAOL1N,EAAIxE,OAAStB,KAAKsB,QAAUtB,KAAK4S,IAAI9M,GAAO,EACvC,CACL8c,IAAK,IAAIrR,EAAG,GACZiC,IAAKxT,MAKU,IAAf8F,EAAIxE,OACO,QAATkhB,EACK,CACLI,IAAK5iB,KAAK+iB,KAAKjd,EAAI8L,MAAM,IACzB4B,IAAK,MAII,QAATgP,EACK,CACLI,IAAK,KACLpP,IAAK,IAAIjC,EAAGvR,KAAKy1B,MAAM3vB,EAAI8L,MAAM,MAI9B,CACLgR,IAAK5iB,KAAK+iB,KAAKjd,EAAI8L,MAAM,IACzB4B,IAAK,IAAIjC,EAAGvR,KAAKy1B,MAAM3vB,EAAI8L,MAAM,MAI9B5R,KAAKuiB,SAASzc,EAAK0c,GAlF1B,IAAII,EAAKpP,EAAKhR,CAmFhB,EAGA+O,EAAGtR,UAAU2iB,IAAM,SAAc9c,GAC/B,OAAO9F,KAAK6iB,OAAO/c,EAAK,OAAO,GAAO8c,GACxC,EAGArR,EAAGtR,UAAUuT,IAAM,SAAc1N,GAC/B,OAAO9F,KAAK6iB,OAAO/c,EAAK,OAAO,GAAO0N,GACxC,EAEAjC,EAAGtR,UAAU+iB,KAAO,SAAeld,GACjC,OAAO9F,KAAK6iB,OAAO/c,EAAK,OAAO,GAAM0N,GACvC,EAGAjC,EAAGtR,UAAUgjB,SAAW,SAAmBnd,GACzC,IAAIod,EAAKljB,KAAK6iB,OAAO/c,GAGrB,GAAIod,EAAG1P,IAAIyB,SAAU,OAAOiO,EAAGN,IAE/B,IAAIpP,EAA0B,IAApB0P,EAAGN,IAAIjR,SAAiBuR,EAAG1P,IAAI2E,KAAKrS,GAAOod,EAAG1P,IAEpD2P,EAAOrd,EAAIgc,MAAM,GACjBsB,EAAKtd,EAAI+P,MAAM,GACfjD,EAAMY,EAAIZ,IAAIuQ,GAGlB,OAAIvQ,EAAM,GAAa,IAAPwQ,GAAoB,IAARxQ,EAAmBsQ,EAAGN,IAGvB,IAApBM,EAAGN,IAAIjR,SAAiBuR,EAAGN,IAAIX,MAAM,GAAKiB,EAAGN,IAAIlM,MAAM,EAChE,EAEAnF,EAAGtR,UAAUw1B,MAAQ,SAAgB3vB,GACnC,IAAIgwB,EAAWhwB,EAAM,EACjBgwB,IAAUhwB,GAAOA,GAErB1C,EAAO0C,GAAO,UAId,IAHA,IAAI6J,GAAK,GAAK,IAAM7J,EAEhBud,EAAM,EACD9X,EAAIvL,KAAKsB,OAAS,EAAGiK,GAAK,EAAGA,IACpC8X,GAAO1T,EAAI0T,GAAuB,EAAhBrjB,KAAK4R,MAAMrG,KAAWzF,EAG1C,OAAOgwB,GAAYzS,EAAMA,CAC3B,EAGA9R,EAAGtR,UAAUiV,KAAO,SAAepP,GACjC,OAAO9F,KAAKy1B,MAAM3vB,EACpB,EAGAyL,EAAGtR,UAAUkV,MAAQ,SAAgBrP,GACnC,IAAIgwB,EAAWhwB,EAAM,EACjBgwB,IAAUhwB,GAAOA,GAErB1C,EAAO0C,GAAO,UAGd,IADA,IAAI2O,EAAQ,EACHlJ,EAAIvL,KAAKsB,OAAS,EAAGiK,GAAK,EAAGA,IAAK,CACzC,IAAI2H,GAAqB,EAAhBlT,KAAK4R,MAAMrG,IAAkB,SAARkJ,EAC9BzU,KAAK4R,MAAMrG,GAAM2H,EAAIpN,EAAO,EAC5B2O,EAAQvB,EAAIpN,CACd,CAGA,OADA9F,KAAKkoB,SACE4N,EAAW91B,KAAK8W,OAAS9W,IAClC,EAEAuR,EAAGtR,UAAU8iB,KAAO,SAAejd,GACjC,OAAO9F,KAAK4E,QAAQuQ,MAAMrP,EAC5B,EAEAyL,EAAGtR,UAAUqjB,KAAO,SAAe3T,GACjCvM,EAAsB,IAAfuM,EAAEgC,UACTvO,GAAQuM,EAAEsF,UAEV,IAAI2I,EAAI5d,KACJ6d,EAAIlO,EAAE/K,QAGRgZ,EADiB,IAAfA,EAAEjM,SACAiM,EAAEoF,KAAKrT,GAEPiO,EAAEhZ,QAaR,IATA,IAAI2e,EAAI,IAAIhS,EAAG,GACXiS,EAAI,IAAIjS,EAAG,GAGXkS,EAAI,IAAIlS,EAAG,GACXmS,EAAI,IAAInS,EAAG,GAEXoS,EAAI,EAED/F,EAAEgG,UAAY/F,EAAE+F,UACrBhG,EAAE9H,OAAO,GACT+H,EAAE/H,OAAO,KACP6N,EAMJ,IAHA,IAAIE,EAAKhG,EAAEjZ,QACPkf,EAAKlG,EAAEhZ,SAEHgZ,EAAE3I,UAAU,CAClB,IAAK,IAAI1J,EAAI,EAAGwY,EAAK,EAAyB,IAArBnG,EAAEhM,MAAM,GAAKmS,IAAaxY,EAAI,KAAMA,EAAGwY,IAAO,GACvE,GAAIxY,EAAI,EAEN,IADAqS,EAAE9H,OAAOvK,GACFA,KAAM,IACPgY,EAAES,SAAWR,EAAEQ,WACjBT,EAAErL,KAAK2L,GACPL,EAAErL,KAAK2L,IAGTP,EAAEzN,OAAO,GACT0N,EAAE1N,OAAO,GAIb,IAAK,IAAItK,EAAI,EAAGyY,EAAK,EAAyB,IAArBpG,EAAEjM,MAAM,GAAKqS,IAAazY,EAAI,KAAMA,EAAGyY,IAAO,GACvE,GAAIzY,EAAI,EAEN,IADAqS,EAAE/H,OAAOtK,GACFA,KAAM,IACPiY,EAAEO,SAAWN,EAAEM,WACjBP,EAAEvL,KAAK2L,GACPH,EAAEvL,KAAK2L,IAGTL,EAAE3N,OAAO,GACT4N,EAAE5N,OAAO,GAIT8H,EAAEhL,IAAIiL,IAAM,GACdD,EAAEzF,KAAK0F,GACP0F,EAAEpL,KAAKsL,GACPD,EAAErL,KAAKuL,KAEP7F,EAAE1F,KAAKyF,GACP6F,EAAEtL,KAAKoL,GACPG,EAAEvL,KAAKqL,GAEX,CAEA,MAAO,CACLlP,EAAGmP,EACHlP,EAAGmP,EACHQ,IAAKrG,EAAEmD,OAAO2C,GAElB,EAKApS,EAAGtR,UAAUkkB,OAAS,SAAiBxU,GACrCvM,EAAsB,IAAfuM,EAAEgC,UACTvO,GAAQuM,EAAEsF,UAEV,IAAIX,EAAItU,KACJuU,EAAI5E,EAAE/K,QAGR0P,EADiB,IAAfA,EAAE3C,SACA2C,EAAE0O,KAAKrT,GAEP2E,EAAE1P,QAQR,IALA,IAuCIpC,EAvCA4hB,EAAK,IAAI7S,EAAG,GACZ8S,EAAK,IAAI9S,EAAG,GAEZ+S,EAAQ/P,EAAE3P,QAEP0P,EAAEiQ,KAAK,GAAK,GAAKhQ,EAAEgQ,KAAK,GAAK,GAAG,CACrC,IAAK,IAAIhZ,EAAI,EAAGwY,EAAK,EAAyB,IAArBzP,EAAE1C,MAAM,GAAKmS,IAAaxY,EAAI,KAAMA,EAAGwY,IAAO,GACvE,GAAIxY,EAAI,EAEN,IADA+I,EAAEwB,OAAOvK,GACFA,KAAM,GACP6Y,EAAGJ,SACLI,EAAGlM,KAAKoM,GAGVF,EAAGtO,OAAO,GAId,IAAK,IAAItK,EAAI,EAAGyY,EAAK,EAAyB,IAArB1P,EAAE3C,MAAM,GAAKqS,IAAazY,EAAI,KAAMA,EAAGyY,IAAO,GACvE,GAAIzY,EAAI,EAEN,IADA+I,EAAEuB,OAAOtK,GACFA,KAAM,GACP6Y,EAAGL,SACLK,EAAGnM,KAAKoM,GAGVD,EAAGvO,OAAO,GAIVxB,EAAE1B,IAAI2B,IAAM,GACdD,EAAE6D,KAAK5D,GACP6P,EAAGjM,KAAKkM,KAER9P,EAAE4D,KAAK7D,GACP+P,EAAGlM,KAAKiM,GAEZ,CAaA,OATE5hB,EADgB,IAAd8R,EAAEiQ,KAAK,GACHH,EAEAC,GAGAE,KAAK,GAAK,GAChB/hB,EAAI0V,KAAKvI,GAGJnN,CACT,EAEA+O,EAAGtR,UAAUikB,IAAM,SAAcpe,GAC/B,GAAI9F,KAAKiV,SAAU,OAAOnP,EAAI0Q,MAC9B,GAAI1Q,EAAImP,SAAU,OAAOjV,KAAKwW,MAE9B,IAAIlC,EAAItU,KAAK4E,QACT2P,EAAIzO,EAAIlB,QACZ0P,EAAE3C,SAAW,EACb4C,EAAE5C,SAAW,EAGb,IAAK,IAAI2Q,EAAQ,EAAGhO,EAAEsP,UAAYrP,EAAEqP,SAAUtB,IAC5ChO,EAAEwB,OAAO,GACTvB,EAAEuB,OAAO,GAGX,OAAG,CACD,KAAOxB,EAAEsP,UACPtP,EAAEwB,OAAO,GAEX,KAAOvB,EAAEqP,UACPrP,EAAEuB,OAAO,GAGX,IAAIzD,EAAIiC,EAAE1B,IAAI2B,GACd,GAAIlC,EAAI,EAAG,CAET,IAAI4D,EAAI3B,EACRA,EAAIC,EACJA,EAAI0B,CACN,MAAO,GAAU,IAAN5D,GAAyB,IAAdkC,EAAEgQ,KAAK,GAC3B,MAGFjQ,EAAE6D,KAAK5D,EACT,CAEA,OAAOA,EAAEyM,OAAOsB,EAClB,EAGA/Q,EAAGtR,UAAUukB,KAAO,SAAe1e,GACjC,OAAO9F,KAAKsjB,KAAKxd,GAAKwO,EAAE0O,KAAKld,EAC/B,EAEAyL,EAAGtR,UAAU2jB,OAAS,WACpB,OAA+B,IAAP,EAAhB5jB,KAAK4R,MAAM,GACrB,EAEAL,EAAGtR,UAAU+jB,MAAQ,WACnB,OAA+B,IAAP,EAAhBhkB,KAAK4R,MAAM,GACrB,EAGAL,EAAGtR,UAAU4V,MAAQ,SAAgB/P,GACnC,OAAO9F,KAAK4R,MAAM,GAAK9L,CACzB,EAGAyL,EAAGtR,UAAUwkB,MAAQ,SAAgBzM,GACnC5U,EAAsB,iBAAR4U,GACd,IAAI3F,EAAI2F,EAAM,GACV6G,GAAK7G,EAAM3F,GAAK,GAChBuD,EAAI,GAAKvD,EAGb,GAAIrS,KAAKsB,QAAUud,EAGjB,OAFA7e,KAAK8T,QAAQ+K,EAAI,GACjB7e,KAAK4R,MAAMiN,IAAMjJ,EACV5V,KAKT,IADA,IAAIyU,EAAQmB,EACHrK,EAAIsT,EAAa,IAAVpK,GAAelJ,EAAIvL,KAAKsB,OAAQiK,IAAK,CACnD,IAAI2H,EAAoB,EAAhBlT,KAAK4R,MAAMrG,GAEnBkJ,GADAvB,GAAKuB,KACS,GACdvB,GAAK,SACLlT,KAAK4R,MAAMrG,GAAK2H,CAClB,CAKA,OAJc,IAAVuB,IACFzU,KAAK4R,MAAMrG,GAAKkJ,EAChBzU,KAAKsB,UAEAtB,IACT,EAEAuR,EAAGtR,UAAUgV,OAAS,WACpB,OAAuB,IAAhBjV,KAAKsB,QAAkC,IAAlBtB,KAAK4R,MAAM,EACzC,EAEAL,EAAGtR,UAAUskB,KAAO,SAAeze,GACjC,IAOItD,EAPAmP,EAAW7L,EAAM,EAErB,GAAsB,IAAlB9F,KAAK2R,WAAmBA,EAAU,OAAQ,EAC9C,GAAsB,IAAlB3R,KAAK2R,UAAkBA,EAAU,OAAO,EAK5C,GAHA3R,KAAKkoB,SAGDloB,KAAKsB,OAAS,EAChBkB,EAAM,MACD,CACDmP,IACF7L,GAAOA,GAGT1C,EAAO0C,GAAO,SAAW,qBAEzB,IAAIoN,EAAoB,EAAhBlT,KAAK4R,MAAM,GACnBpP,EAAM0Q,IAAMpN,EAAM,EAAIoN,EAAIpN,GAAO,EAAI,CACvC,CACA,OAAsB,IAAlB9F,KAAK2R,SAA8B,GAANnP,EAC1BA,CACT,EAMA+O,EAAGtR,UAAU2S,IAAM,SAAc9M,GAC/B,GAAsB,IAAlB9F,KAAK2R,UAAmC,IAAjB7L,EAAI6L,SAAgB,OAAQ,EACvD,GAAsB,IAAlB3R,KAAK2R,UAAmC,IAAjB7L,EAAI6L,SAAgB,OAAO,EAEtD,IAAInP,EAAMxC,KAAK0kB,KAAK5e,GACpB,OAAsB,IAAlB9F,KAAK2R,SAA8B,GAANnP,EAC1BA,CACT,EAGA+O,EAAGtR,UAAUykB,KAAO,SAAe5e,GAEjC,GAAI9F,KAAKsB,OAASwE,EAAIxE,OAAQ,OAAO,EACrC,GAAItB,KAAKsB,OAASwE,EAAIxE,OAAQ,OAAQ,EAGtC,IADA,IAAIkB,EAAM,EACD+I,EAAIvL,KAAKsB,OAAS,EAAGiK,GAAK,EAAGA,IAAK,CACzC,IAAI+I,EAAoB,EAAhBtU,KAAK4R,MAAMrG,GACfgJ,EAAmB,EAAfzO,EAAI8L,MAAMrG,GAElB,GAAI+I,IAAMC,EAAV,CACID,EAAIC,EACN/R,GAAO,EACE8R,EAAIC,IACb/R,EAAM,GAER,KANqB,CAOvB,CACA,OAAOA,CACT,EAEA+O,EAAGtR,UAAU0kB,IAAM,SAAc7e,GAC/B,OAA0B,IAAnB9F,KAAKukB,KAAKze,EACnB,EAEAyL,EAAGtR,UAAU2kB,GAAK,SAAa9e,GAC7B,OAAyB,IAAlB9F,KAAK4S,IAAI9M,EAClB,EAEAyL,EAAGtR,UAAU4kB,KAAO,SAAe/e,GACjC,OAAO9F,KAAKukB,KAAKze,IAAQ,CAC3B,EAEAyL,EAAGtR,UAAU6kB,IAAM,SAAchf,GAC/B,OAAO9F,KAAK4S,IAAI9M,IAAQ,CAC1B,EAEAyL,EAAGtR,UAAU8kB,IAAM,SAAcjf,GAC/B,OAA2B,IAApB9F,KAAKukB,KAAKze,EACnB,EAEAyL,EAAGtR,UAAU+kB,GAAK,SAAalf,GAC7B,OAA0B,IAAnB9F,KAAK4S,IAAI9M,EAClB,EAEAyL,EAAGtR,UAAUglB,KAAO,SAAenf,GACjC,OAAO9F,KAAKukB,KAAKze,IAAQ,CAC3B,EAEAyL,EAAGtR,UAAUilB,IAAM,SAAcpf,GAC/B,OAAO9F,KAAK4S,IAAI9M,IAAQ,CAC1B,EAEAyL,EAAGtR,UAAUklB,IAAM,SAAcrf,GAC/B,OAA0B,IAAnB9F,KAAKukB,KAAKze,EACnB,EAEAyL,EAAGtR,UAAUmlB,GAAK,SAAatf,GAC7B,OAAyB,IAAlB9F,KAAK4S,IAAI9M,EAClB,EAMAyL,EAAGM,IAAM,SAAc/L,GACrB,OAAO,IAAIuf,EAAIvf,EACjB,EAEAyL,EAAGtR,UAAUqlB,MAAQ,SAAgBC,GAGnC,OAFAniB,GAAQpD,KAAK6R,IAAK,yCAClBzO,EAAyB,IAAlBpD,KAAK2R,SAAgB,iCACrB4T,EAAIC,UAAUxlB,MAAMylB,UAAUF,EACvC,EAEAhU,EAAGtR,UAAUylB,QAAU,WAErB,OADAtiB,EAAOpD,KAAK6R,IAAK,wDACV7R,KAAK6R,IAAI8T,YAAY3lB,KAC9B,EAEAuR,EAAGtR,UAAUwlB,UAAY,SAAoBF,GAE3C,OADAvlB,KAAK6R,IAAM0T,EACJvlB,IACT,EAEAuR,EAAGtR,UAAU2lB,SAAW,SAAmBL,GAEzC,OADAniB,GAAQpD,KAAK6R,IAAK,yCACX7R,KAAKylB,UAAUF,EACxB,EAEAhU,EAAGtR,UAAU4lB,OAAS,SAAiB/f,GAErC,OADA1C,EAAOpD,KAAK6R,IAAK,sCACV7R,KAAK6R,IAAIuG,IAAIpY,KAAM8F,EAC5B,EAEAyL,EAAGtR,UAAU6lB,QAAU,SAAkBhgB,GAEvC,OADA1C,EAAOpD,KAAK6R,IAAK,uCACV7R,KAAK6R,IAAIqG,KAAKlY,KAAM8F,EAC7B,EAEAyL,EAAGtR,UAAU8lB,OAAS,SAAiBjgB,GAErC,OADA1C,EAAOpD,KAAK6R,IAAK,sCACV7R,KAAK6R,IAAIwG,IAAIrY,KAAM8F,EAC5B,EAEAyL,EAAGtR,UAAU+lB,QAAU,SAAkBlgB,GAEvC,OADA1C,EAAOpD,KAAK6R,IAAK,uCACV7R,KAAK6R,IAAIsG,KAAKnY,KAAM8F,EAC7B,EAEAyL,EAAGtR,UAAUgmB,OAAS,SAAiBngB,GAErC,OADA1C,EAAOpD,KAAK6R,IAAK,sCACV7R,KAAK6R,IAAIqU,IAAIlmB,KAAM8F,EAC5B,EAEAyL,EAAGtR,UAAUkmB,OAAS,SAAiBrgB,GAGrC,OAFA1C,EAAOpD,KAAK6R,IAAK,sCACjB7R,KAAK6R,IAAIuU,SAASpmB,KAAM8F,GACjB9F,KAAK6R,IAAIU,IAAIvS,KAAM8F,EAC5B,EAEAyL,EAAGtR,UAAUomB,QAAU,SAAkBvgB,GAGvC,OAFA1C,EAAOpD,KAAK6R,IAAK,sCACjB7R,KAAK6R,IAAIuU,SAASpmB,KAAM8F,GACjB9F,KAAK6R,IAAIyK,KAAKtc,KAAM8F,EAC7B,EAEAyL,EAAGtR,UAAUqmB,OAAS,WAGpB,OAFAljB,EAAOpD,KAAK6R,IAAK,sCACjB7R,KAAK6R,IAAI0U,SAASvmB,MACXA,KAAK6R,IAAIgP,IAAI7gB,KACtB,EAEAuR,EAAGtR,UAAUumB,QAAU,WAGrB,OAFApjB,EAAOpD,KAAK6R,IAAK,uCACjB7R,KAAK6R,IAAI0U,SAASvmB,MACXA,KAAK6R,IAAIiP,KAAK9gB,KACvB,EAGAuR,EAAGtR,UAAUwmB,QAAU,WAGrB,OAFArjB,EAAOpD,KAAK6R,IAAK,uCACjB7R,KAAK6R,IAAI0U,SAASvmB,MACXA,KAAK6R,IAAI6U,KAAK1mB,KACvB,EAEAuR,EAAGtR,UAAU0mB,QAAU,WAGrB,OAFAvjB,EAAOpD,KAAK6R,IAAK,uCACjB7R,KAAK6R,IAAI0U,SAASvmB,MACXA,KAAK6R,IAAI2S,KAAKxkB,KACvB,EAGAuR,EAAGtR,UAAU2mB,OAAS,WAGpB,OAFAxjB,EAAOpD,KAAK6R,IAAK,sCACjB7R,KAAK6R,IAAI0U,SAASvmB,MACXA,KAAK6R,IAAImF,IAAIhX,KACtB,EAEAuR,EAAGtR,UAAU4mB,OAAS,SAAiB/gB,GAGrC,OAFA1C,EAAOpD,KAAK6R,MAAQ/L,EAAI+L,IAAK,qBAC7B7R,KAAK6R,IAAI0U,SAASvmB,MACXA,KAAK6R,IAAI+B,IAAI5T,KAAM8F,EAC5B,EAGA,IAAIghB,EAAS,CACXC,KAAM,KACNC,KAAM,KACNC,KAAM,KACNC,OAAQ,MAIV,SAASC,EAAQrnB,EAAM6P,GAErB3P,KAAKF,KAAOA,EACZE,KAAK2P,EAAI,IAAI4B,EAAG5B,EAAG,IACnB3P,KAAK0f,EAAI1f,KAAK2P,EAAEwG,YAChBnW,KAAK0U,EAAI,IAAInD,EAAG,GAAGyP,OAAOhhB,KAAK0f,GAAGvH,KAAKnY,KAAK2P,GAE5C3P,KAAK4M,IAAM5M,KAAKonB,MAClB,CAgDA,SAASC,IACPF,EAAO5mB,KACLP,KACA,OACA,0EACJ,CA8DA,SAASsnB,IACPH,EAAO5mB,KACLP,KACA,OACA,iEACJ,CAGA,SAASunB,IACPJ,EAAO5mB,KACLP,KACA,OACA,wDACJ,CAGA,SAASwnB,IAEPL,EAAO5mB,KACLP,KACA,QACA,sEACJ,CA6CA,SAASqlB,EAAK1F,GACZ,GAAiB,iBAANA,EAAgB,CACzB,IAAI8H,EAAQlW,EAAGmW,OAAO/H,GACtB3f,KAAK2f,EAAI8H,EAAM9X,EACf3P,KAAKynB,MAAQA,CACf,MACErkB,EAAOuc,EAAEgF,IAAI,GAAI,kCACjB3kB,KAAK2f,EAAIA,EACT3f,KAAKynB,MAAQ,IAEjB,CAkOA,SAASE,EAAMhI,GACb0F,EAAI9kB,KAAKP,KAAM2f,GAEf3f,KAAKsiB,MAAQtiB,KAAK2f,EAAExJ,YAChBnW,KAAKsiB,MAAQ,IAAO,IACtBtiB,KAAKsiB,OAAS,GAAMtiB,KAAKsiB,MAAQ,IAGnCtiB,KAAKqS,EAAI,IAAId,EAAG,GAAGyP,OAAOhhB,KAAKsiB,OAC/BtiB,KAAKojB,GAAKpjB,KAAK4nB,KAAK5nB,KAAKqS,EAAEwO,OAC3B7gB,KAAK6nB,KAAO7nB,KAAKqS,EAAE8R,OAAOnkB,KAAK2f,GAE/B3f,KAAK8nB,KAAO9nB,KAAK6nB,KAAKtV,IAAIvS,KAAKqS,GAAG4P,MAAM,GAAGW,IAAI5iB,KAAK2f,GACpD3f,KAAK8nB,KAAO9nB,KAAK8nB,KAAK9E,KAAKhjB,KAAKqS,GAChCrS,KAAK8nB,KAAO9nB,KAAKqS,EAAEgG,IAAIrY,KAAK8nB,KAC9B,CA/aAX,EAAOlnB,UAAUmnB,KAAO,WACtB,IAAIxa,EAAM,IAAI2E,EAAG,MAEjB,OADA3E,EAAIgF,MAAQ,IAAIlQ,MAAM8Q,KAAKS,KAAKjT,KAAK0f,EAAI,KAClC9S,CACT,EAEAua,EAAOlnB,UAAU8nB,QAAU,SAAkBjiB,GAG3C,IACIkiB,EADA3V,EAAIvM,EAGR,GACE9F,KAAKwN,MAAM6E,EAAGrS,KAAK4M,KAGnBob,GADA3V,GADAA,EAAIrS,KAAKioB,MAAM5V,IACT6F,KAAKlY,KAAK4M,MACPuJ,kBACF6R,EAAOhoB,KAAK0f,GAErB,IAAI9M,EAAMoV,EAAOhoB,KAAK0f,GAAK,EAAIrN,EAAEqS,KAAK1kB,KAAK2P,GAgB3C,OAfY,IAARiD,GACFP,EAAET,MAAM,GAAK,EACbS,EAAE/Q,OAAS,GACFsR,EAAM,EACfP,EAAE8F,KAAKnY,KAAK2P,QAEIrH,IAAZ+J,EAAEe,MAEJf,EAAEe,QAGFf,EAAE6V,SAIC7V,CACT,EAEA8U,EAAOlnB,UAAUuN,MAAQ,SAAgBvH,EAAOnD,GAC9CmD,EAAM6P,OAAO9V,KAAK0f,EAAG,EAAG5c,EAC1B,EAEAqkB,EAAOlnB,UAAUgoB,MAAQ,SAAgBniB,GACvC,OAAOA,EAAIwW,KAAKtc,KAAK0U,EACvB,EAQA9U,EAASynB,EAAMF,GAEfE,EAAKpnB,UAAUuN,MAAQ,SAAgBvH,EAAOiL,GAK5C,IAHA,IAAIsQ,EAAO,QAEP2G,EAAS3V,KAAKvF,IAAIhH,EAAM3E,OAAQ,GAC3BiK,EAAI,EAAGA,EAAI4c,EAAQ5c,IAC1B2F,EAAOU,MAAMrG,GAAKtF,EAAM2L,MAAMrG,GAIhC,GAFA2F,EAAO5P,OAAS6mB,EAEZliB,EAAM3E,QAAU,EAGlB,OAFA2E,EAAM2L,MAAM,GAAK,OACjB3L,EAAM3E,OAAS,GAKjB,IAAIyI,EAAO9D,EAAM2L,MAAM,GAGvB,IAFAV,EAAOU,MAAMV,EAAO5P,UAAYyI,EAAOyX,EAElCjW,EAAI,GAAIA,EAAItF,EAAM3E,OAAQiK,IAAK,CAClC,IAAI6c,EAAwB,EAAjBniB,EAAM2L,MAAMrG,GACvBtF,EAAM2L,MAAMrG,EAAI,KAAQ6c,EAAO5G,IAAS,EAAMzX,IAAS,GACvDA,EAAOqe,CACT,CACAre,KAAU,GACV9D,EAAM2L,MAAMrG,EAAI,IAAMxB,EACT,IAATA,GAAc9D,EAAM3E,OAAS,GAC/B2E,EAAM3E,QAAU,GAEhB2E,EAAM3E,QAAU,CAEpB,EAEA+lB,EAAKpnB,UAAUgoB,MAAQ,SAAgBniB,GAErCA,EAAI8L,MAAM9L,EAAIxE,QAAU,EACxBwE,EAAI8L,MAAM9L,EAAIxE,OAAS,GAAK,EAC5BwE,EAAIxE,QAAU,EAId,IADA,IAAIkT,EAAK,EACAjJ,EAAI,EAAGA,EAAIzF,EAAIxE,OAAQiK,IAAK,CACnC,IAAI2H,EAAmB,EAAfpN,EAAI8L,MAAMrG,GAClBiJ,GAAU,IAAJtB,EACNpN,EAAI8L,MAAMrG,GAAU,SAALiJ,EACfA,EAAS,GAAJtB,GAAasB,EAAK,SAAa,EACtC,CASA,OANkC,IAA9B1O,EAAI8L,MAAM9L,EAAIxE,OAAS,KACzBwE,EAAIxE,SAC8B,IAA9BwE,EAAI8L,MAAM9L,EAAIxE,OAAS,IACzBwE,EAAIxE,UAGDwE,CACT,EAQAlG,EAAS0nB,EAAMH,GAQfvnB,EAAS2nB,EAAMJ,GASfvnB,EAAS4nB,EAAQL,GAEjBK,EAAOvnB,UAAUgoB,MAAQ,SAAgBniB,GAGvC,IADA,IAAI2O,EAAQ,EACHlJ,EAAI,EAAGA,EAAIzF,EAAIxE,OAAQiK,IAAK,CACnC,IAAI6K,EAA0B,IAAL,EAAftQ,EAAI8L,MAAMrG,IAAiBkJ,EACjCD,EAAU,SAAL4B,EACTA,KAAQ,GAERtQ,EAAI8L,MAAMrG,GAAKiJ,EACfC,EAAQ2B,CACV,CAIA,OAHc,IAAV3B,IACF3O,EAAI8L,MAAM9L,EAAIxE,UAAYmT,GAErB3O,CACT,EAGAyL,EAAGmW,OAAS,SAAgB5nB,GAE1B,GAAIgnB,EAAOhnB,GAAO,OAAOgnB,EAAOhnB,GAEhC,IAAI2nB,EACJ,GAAa,SAAT3nB,EACF2nB,EAAQ,IAAIJ,OACP,GAAa,SAATvnB,EACT2nB,EAAQ,IAAIH,OACP,GAAa,SAATxnB,EACT2nB,EAAQ,IAAIF,MACP,IAAa,WAATznB,EAGT,MAAM,IAAI6F,MAAM,iBAAmB7F,GAFnC2nB,EAAQ,IAAID,CAGd,CAGA,OAFAV,EAAOhnB,GAAQ2nB,EAERA,CACT,EAiBApC,EAAIplB,UAAUsmB,SAAW,SAAmBjS,GAC1ClR,EAAsB,IAAfkR,EAAE3C,SAAgB,iCACzBvO,EAAOkR,EAAEzC,IAAK,kCAChB,EAEAwT,EAAIplB,UAAUmmB,SAAW,SAAmB9R,EAAGC,GAC7CnR,EAAqC,IAA7BkR,EAAE3C,SAAW4C,EAAE5C,UAAiB,iCACxCvO,EAAOkR,EAAEzC,KAAOyC,EAAEzC,MAAQ0C,EAAE1C,IAC1B,kCACJ,EAEAwT,EAAIplB,UAAU2nB,KAAO,SAAetT,GAClC,OAAItU,KAAKynB,MAAcznB,KAAKynB,MAAMM,QAAQzT,GAAGmR,UAAUzlB,OAEvDo1B,EAAK9gB,EAAGA,EAAE0O,KAAKhjB,KAAK2f,GAAG8F,UAAUzlB,OAC1BsU,EACT,EAEA+Q,EAAIplB,UAAU+W,IAAM,SAAc1C,GAChC,OAAIA,EAAEW,SACGX,EAAE1P,QAGJ5E,KAAK2f,EAAEtH,IAAI/D,GAAGmR,UAAUzlB,KACjC,EAEAqlB,EAAIplB,UAAUmY,IAAM,SAAc9D,EAAGC,GACnCvU,KAAKomB,SAAS9R,EAAGC,GAEjB,IAAI/R,EAAM8R,EAAE8D,IAAI7D,GAIhB,OAHI/R,EAAIoQ,IAAI5S,KAAK2f,IAAM,GACrBnd,EAAI2V,KAAKnY,KAAK2f,GAETnd,EAAIijB,UAAUzlB,KACvB,EAEAqlB,EAAIplB,UAAUiY,KAAO,SAAe5D,EAAGC,GACrCvU,KAAKomB,SAAS9R,EAAGC,GAEjB,IAAI/R,EAAM8R,EAAE4D,KAAK3D,GAIjB,OAHI/R,EAAIoQ,IAAI5S,KAAK2f,IAAM,GACrBnd,EAAI2V,KAAKnY,KAAK2f,GAETnd,CACT,EAEA6iB,EAAIplB,UAAUoY,IAAM,SAAc/D,EAAGC,GACnCvU,KAAKomB,SAAS9R,EAAGC,GAEjB,IAAI/R,EAAM8R,EAAE+D,IAAI9D,GAIhB,OAHI/R,EAAI+hB,KAAK,GAAK,GAChB/hB,EAAI0V,KAAKlY,KAAK2f,GAETnd,EAAIijB,UAAUzlB,KACvB,EAEAqlB,EAAIplB,UAAUkY,KAAO,SAAe7D,EAAGC,GACrCvU,KAAKomB,SAAS9R,EAAGC,GAEjB,IAAI/R,EAAM8R,EAAE6D,KAAK5D,GAIjB,OAHI/R,EAAI+hB,KAAK,GAAK,GAChB/hB,EAAI0V,KAAKlY,KAAK2f,GAETnd,CACT,EAEA6iB,EAAIplB,UAAUimB,IAAM,SAAc5R,EAAGxO,GAEnC,OADA9F,KAAKumB,SAASjS,GACPtU,KAAK4nB,KAAKtT,EAAEsN,MAAM9b,GAC3B,EAEAuf,EAAIplB,UAAUqc,KAAO,SAAehI,EAAGC,GAErC,OADAvU,KAAKomB,SAAS9R,EAAGC,GACVvU,KAAK4nB,KAAKtT,EAAEgI,KAAK/H,GAC1B,EAEA8Q,EAAIplB,UAAUsS,IAAM,SAAc+B,EAAGC,GAEnC,OADAvU,KAAKomB,SAAS9R,EAAGC,GACVvU,KAAK4nB,KAAKtT,EAAE/B,IAAIgC,GACzB,EAEA8Q,EAAIplB,UAAU6gB,KAAO,SAAexM,GAClC,OAAOtU,KAAKsc,KAAKhI,EAAGA,EAAE1P,QACxB,EAEAygB,EAAIplB,UAAU4gB,IAAM,SAAcvM,GAChC,OAAOtU,KAAKuS,IAAI+B,EAAGA,EACrB,EAEA+Q,EAAIplB,UAAUymB,KAAO,SAAepS,GAClC,GAAIA,EAAEW,SAAU,OAAOX,EAAE1P,QAEzB,IAAIyjB,EAAOroB,KAAK2f,EAAE9J,MAAM,GAIxB,GAHAzS,EAAOilB,EAAO,GAAM,GAGP,IAATA,EAAY,CACd,IAAIzU,EAAM5T,KAAK2f,EAAEvH,IAAI,IAAI7G,EAAG,IAAIuE,OAAO,GACvC,OAAO9V,KAAK4T,IAAIU,EAAGV,EACrB,CAOA,IAFA,IAAIgC,EAAI5V,KAAK2f,EAAEwC,KAAK,GAChBtD,EAAI,GACAjJ,EAAEX,UAA2B,IAAfW,EAAEC,MAAM,IAC5BgJ,IACAjJ,EAAEE,OAAO,GAEX1S,GAAQwS,EAAEX,UAEV,IAAIqT,EAAM,IAAI/W,EAAG,GAAG+T,MAAMtlB,MACtBuoB,EAAOD,EAAI1B,SAIX4B,EAAOxoB,KAAK2f,EAAEwC,KAAK,GAAGrM,OAAO,GAC7B2S,EAAIzoB,KAAK2f,EAAExJ,YAGf,IAFAsS,EAAI,IAAIlX,EAAG,EAAIkX,EAAIA,GAAGnD,MAAMtlB,MAEW,IAAhCA,KAAK4T,IAAI6U,EAAGD,GAAM5V,IAAI2V,IAC3BE,EAAE3C,QAAQyC,GAOZ,IAJA,IAAIrW,EAAIlS,KAAK4T,IAAI6U,EAAG7S,GAChBvD,EAAIrS,KAAK4T,IAAIU,EAAGsB,EAAEsM,KAAK,GAAGpM,OAAO,IACjCG,EAAIjW,KAAK4T,IAAIU,EAAGsB,GAChB+J,EAAId,EACc,IAAf5I,EAAErD,IAAI0V,IAAY,CAEvB,IADA,IAAI1b,EAAMqJ,EACD1K,EAAI,EAAoB,IAAjBqB,EAAIgG,IAAI0V,GAAY/c,IAClCqB,EAAMA,EAAI0Z,SAEZljB,EAAOmI,EAAIoU,GACX,IAAIpL,EAAIvU,KAAK4T,IAAI1B,EAAG,IAAIX,EAAG,GAAGyP,OAAOrB,EAAIpU,EAAI,IAE7C8G,EAAIA,EAAE8T,OAAO5R,GACbrC,EAAIqC,EAAE+R,SACNrQ,EAAIA,EAAEkQ,OAAOjU,GACbyN,EAAIpU,CACN,CAEA,OAAO8G,CACT,EAEAgT,EAAIplB,UAAUukB,KAAO,SAAelQ,GAClC,IAAIoU,EAAMpU,EAAE6P,OAAOnkB,KAAK2f,GACxB,OAAqB,IAAjB+I,EAAI/W,UACN+W,EAAI/W,SAAW,EACR3R,KAAK4nB,KAAKc,GAAK9B,UAEf5mB,KAAK4nB,KAAKc,EAErB,EAEArD,EAAIplB,UAAU2T,IAAM,SAAcU,EAAGxO,GACnC,GAAIA,EAAImP,SAAU,OAAO,IAAI1D,EAAG,GAAG+T,MAAMtlB,MACzC,GAAoB,IAAhB8F,EAAIye,KAAK,GAAU,OAAOjQ,EAAE1P,QAEhC,IACI+jB,EAAM,IAAIjnB,MAAM,IACpBinB,EAAI,GAAK,IAAIpX,EAAG,GAAG+T,MAAMtlB,MACzB2oB,EAAI,GAAKrU,EACT,IAAK,IAAI/I,EAAI,EAAGA,EAAIod,EAAIrnB,OAAQiK,IAC9Bod,EAAIpd,GAAKvL,KAAKuS,IAAIoW,EAAIpd,EAAI,GAAI+I,GAGhC,IAAI9R,EAAMmmB,EAAI,GACVC,EAAU,EACVC,EAAa,EACb9hB,EAAQjB,EAAIqQ,YAAc,GAK9B,IAJc,IAAVpP,IACFA,EAAQ,IAGLwE,EAAIzF,EAAIxE,OAAS,EAAGiK,GAAK,EAAGA,IAAK,CAEpC,IADA,IAAIkI,EAAO3N,EAAI8L,MAAMrG,GACZC,EAAIzE,EAAQ,EAAGyE,GAAK,EAAGA,IAAK,CACnC,IAAIwM,EAAOvE,GAAQjI,EAAK,EACpBhJ,IAAQmmB,EAAI,KACdnmB,EAAMxC,KAAK6gB,IAAIre,IAGL,IAARwV,GAAyB,IAAZ4Q,GAKjBA,IAAY,EACZA,GAAW5Q,GA9BE,KA+Bb6Q,GACwC,IAANtd,GAAiB,IAANC,KAE7ChJ,EAAMxC,KAAKuS,IAAI/P,EAAKmmB,EAAIC,IACxBC,EAAa,EACbD,EAAU,IAXRC,EAAa,CAYjB,CACA9hB,EAAQ,EACV,CAEA,OAAOvE,CACT,EAEA6iB,EAAIplB,UAAUulB,UAAY,SAAoB1f,GAC5C,IAAIuM,EAAIvM,EAAIkd,KAAKhjB,KAAK2f,GAEtB,OAAOtN,IAAMvM,EAAMuM,EAAEzN,QAAUyN,CACjC,EAEAgT,EAAIplB,UAAU0lB,YAAc,SAAsB7f,GAChD,IAAItD,EAAMsD,EAAIlB,QAEd,OADApC,EAAIqP,IAAM,KACHrP,CACT,EAMA+O,EAAGuX,KAAO,SAAehjB,GACvB,OAAO,IAAI6hB,EAAK7hB,EAClB,EAkBAlG,EAAS+nB,EAAMtC,GAEfsC,EAAK1nB,UAAUulB,UAAY,SAAoB1f,GAC7C,OAAO9F,KAAK4nB,KAAK9hB,EAAI8b,MAAM5hB,KAAKsiB,OAClC,EAEAqF,EAAK1nB,UAAU0lB,YAAc,SAAsB7f,GACjD,IAAIuM,EAAIrS,KAAK4nB,KAAK9hB,EAAIyM,IAAIvS,KAAK6nB,OAE/B,OADAxV,EAAER,IAAM,KACDQ,CACT,EAEAsV,EAAK1nB,UAAUqc,KAAO,SAAehI,EAAGC,GACtC,GAAID,EAAEW,UAAYV,EAAEU,SAGlB,OAFAX,EAAE1C,MAAM,GAAK,EACb0C,EAAEhT,OAAS,EACJgT,EAGT,IAAI2B,EAAI3B,EAAEgI,KAAK/H,GACXrC,EAAI+D,EAAE+L,MAAMhiB,KAAKsiB,OAAO/P,IAAIvS,KAAK8nB,MAAM/F,OAAO/hB,KAAKsiB,OAAO/P,IAAIvS,KAAK2f,GACnEoJ,EAAI9S,EAAEkC,KAAKjG,GAAG4D,OAAO9V,KAAKsiB,OAC1B9f,EAAMumB,EAQV,OANIA,EAAEnW,IAAI5S,KAAK2f,IAAM,EACnBnd,EAAMumB,EAAE5Q,KAAKnY,KAAK2f,GACToJ,EAAExE,KAAK,GAAK,IACrB/hB,EAAMumB,EAAE7Q,KAAKlY,KAAK2f,IAGbnd,EAAIijB,UAAUzlB,KACvB,EAEA2nB,EAAK1nB,UAAUsS,IAAM,SAAc+B,EAAGC,GACpC,GAAID,EAAEW,UAAYV,EAAEU,SAAU,OAAO,IAAI1D,EAAG,GAAGkU,UAAUzlB,MAEzD,IAAIiW,EAAI3B,EAAE/B,IAAIgC,GACVrC,EAAI+D,EAAE+L,MAAMhiB,KAAKsiB,OAAO/P,IAAIvS,KAAK8nB,MAAM/F,OAAO/hB,KAAKsiB,OAAO/P,IAAIvS,KAAK2f,GACnEoJ,EAAI9S,EAAEkC,KAAKjG,GAAG4D,OAAO9V,KAAKsiB,OAC1B9f,EAAMumB,EAOV,OANIA,EAAEnW,IAAI5S,KAAK2f,IAAM,EACnBnd,EAAMumB,EAAE5Q,KAAKnY,KAAK2f,GACToJ,EAAExE,KAAK,GAAK,IACrB/hB,EAAMumB,EAAE7Q,KAAKlY,KAAK2f,IAGbnd,EAAIijB,UAAUzlB,KACvB,EAEA2nB,EAAK1nB,UAAUukB,KAAO,SAAelQ,GAGnC,OADUtU,KAAK4nB,KAAKtT,EAAE6P,OAAOnkB,KAAK2f,GAAGpN,IAAIvS,KAAKojB,KACnCqC,UAAUzlB,KACvB,CACD,CA19GD,C,WA09G4CA,K,yBCt9G5C,IAAIw5B,EAAQ,CAAC,EAEb,SAASC,EAAgBzoB,EAAM5G,EAASjK,GACjCA,IACHA,EAAOwF,OAWT,IAAI+zB,EAEJ,SAAUC,GAnBZ,IAAwBC,EAAUC,EAsB9B,SAASH,EAAUI,EAAMC,EAAMC,GAC7B,OAAOL,EAAMp5B,KAAKP,KAdtB,SAAoB85B,EAAMC,EAAMC,GAC9B,MAAuB,iBAAZ5vB,EACFA,EAEAA,EAAQ0vB,EAAMC,EAAMC,EAE/B,CAQ4BC,CAAWH,EAAMC,EAAMC,KAAUh6B,IAC3D,CAEA,OA1B8B65B,EAoBJF,GApBNC,EAoBLF,GApBsCz5B,UAAYwF,OAAOsuB,OAAO8F,EAAW55B,WAAY25B,EAAS35B,UAAUgC,YAAc23B,EAAUA,EAASM,UAAYL,EA0B/JH,CACT,CARA,CAQEv5B,GAEFu5B,EAAUz5B,UAAUH,KAAOK,EAAKL,KAChC45B,EAAUz5B,UAAU+Q,KAAOA,EAC3BwoB,EAAMxoB,GAAQ0oB,CAChB,CAGA,SAASS,EAAMC,EAAUvJ,GACvB,GAAInvB,MAAMC,QAAQy4B,GAAW,CAC3B,IAAI9uB,EAAM8uB,EAAS94B,OAKnB,OAJA84B,EAAWA,EAASx4B,KAAI,SAAU2J,GAChC,OAAOQ,OAAOR,EAChB,IAEID,EAAM,EACD,UAAU/H,OAAOstB,EAAO,KAAKttB,OAAO62B,EAASx3B,MAAM,EAAG0I,EAAM,GAAGzI,KAAK,MAAO,SAAWu3B,EAAS9uB,EAAM,GAC3F,IAARA,EACF,UAAU/H,OAAOstB,EAAO,KAAKttB,OAAO62B,EAAS,GAAI,QAAQ72B,OAAO62B,EAAS,IAEzE,MAAM72B,OAAOstB,EAAO,KAAKttB,OAAO62B,EAAS,GAEpD,CACE,MAAO,MAAM72B,OAAOstB,EAAO,KAAKttB,OAAOwI,OAAOquB,GAElD,CA6BAX,EAAgB,yBAAyB,SAAU35B,EAAM2B,GACvD,MAAO,cAAgBA,EAAQ,4BAA8B3B,EAAO,GACtE,GAAG8wB,WACH6I,EAAgB,wBAAwB,SAAU35B,EAAMs6B,EAAUC,GAEhE,IAAIC,EA/BmBC,EAwCnB5wB,EA1BYJ,EAAaxC,EA4B7B,GATwB,iBAAbqzB,IAjCYG,EAiCkC,OAAVH,EAhCpCI,OAAyB,EAAUD,KAAmBA,IAiC/DD,EAAa,cACbF,EAAWA,EAAStsB,QAAQ,QAAS,KAErCwsB,EAAa,UAhCjB,SAAkB/wB,EAAKgxB,EAAQE,GAK7B,YAJiBnyB,IAAbmyB,GAA0BA,EAAWlxB,EAAIjI,UAC3Cm5B,EAAWlxB,EAAIjI,QAGViI,EAAImxB,UAAUD,EAAWF,EAAeE,KAAcF,CAC/D,CA+BMI,CAAS76B,EAAM,aAEjB6J,EAAM,OAAOpG,OAAOzD,EAAM,KAAKyD,OAAO+2B,EAAY,KAAK/2B,OAAO42B,EAAMC,EAAU,aACzE,CACL,IAAIlyB,GA/Be,iBAAVnB,IACTA,EAAQ,GAGNA,EAAQwzB,GALIhxB,EAgCMzJ,GA3BUwB,SAGS,IAAhCiI,EAAI0H,QAwBe,IAxBClK,GAwBmB,WAAb,YACjC4C,EAAM,QAASpG,OAAOzD,EAAM,MAAOyD,OAAO2E,EAAM,KAAK3E,OAAO+2B,EAAY,KAAK/2B,OAAO42B,EAAMC,EAAU,QACtG,CAGA,OADAzwB,EAAO,mBAAmBpG,cAAc82B,EAE1C,GAAGzJ,WACH6I,EAAgB,4BAA6B,2BAC7CA,EAAgB,8BAA8B,SAAU35B,GACtD,MAAO,OAASA,EAAO,4BACzB,IACA25B,EAAgB,6BAA8B,mBAC9CA,EAAgB,wBAAwB,SAAU35B,GAChD,MAAO,eAAiBA,EAAO,+BACjC,IACA25B,EAAgB,wBAAyB,kCACzCA,EAAgB,yBAA0B,6BAC1CA,EAAgB,6BAA8B,mBAC9CA,EAAgB,yBAA0B,sCAAuC7I,WACjF6I,EAAgB,wBAAwB,SAAUj0B,GAChD,MAAO,qBAAuBA,CAChC,GAAGorB,WACH6I,EAAgB,qCAAsC,oCACtD/0B,EAAOrF,QAAQ,EAAQm6B,C,8CCjGnBoB,EAAan1B,OAAOC,MAAQ,SAAUxB,GACxC,IAAIwB,EAAO,GACX,IAAK,IAAIrB,KAAOH,EAAKwB,EAAKV,KAAKX,GAC/B,OAAOqB,CACT,EAGAhB,EAAOrF,QAAUw7B,EACjB,IAAIC,EAAW,EAAQ,OACnBzE,EAAW,EAAQ,OACvB,EAAQ,MAAR,CAAoBwE,EAAQC,GAI1B,IADA,IAAIp1B,EAAOk1B,EAAWvE,EAASp2B,WACtB4pB,EAAI,EAAGA,EAAInkB,EAAKpE,OAAQuoB,IAAK,CACpC,IAAI9kB,EAASW,EAAKmkB,GACbgR,EAAO56B,UAAU8E,KAAS81B,EAAO56B,UAAU8E,GAAUsxB,EAASp2B,UAAU8E,GAC/E,CAEF,SAAS81B,EAAOh6B,GACd,KAAMb,gBAAgB66B,GAAS,OAAO,IAAIA,EAAOh6B,GACjDi6B,EAASv6B,KAAKP,KAAMa,GACpBw1B,EAAS91B,KAAKP,KAAMa,GACpBb,KAAK+6B,eAAgB,EACjBl6B,KACuB,IAArBA,EAAQm6B,WAAoBh7B,KAAKg7B,UAAW,IACvB,IAArBn6B,EAAQo6B,WAAoBj7B,KAAKi7B,UAAW,IAClB,IAA1Bp6B,EAAQk6B,gBACV/6B,KAAK+6B,eAAgB,EACrB/6B,KAAKk7B,KAAK,MAAOC,IAGvB,CA8BA,SAASA,IAEHn7B,KAAKo7B,eAAeC,OAIxBC,EAAQC,SAASC,EAASx7B,KAC5B,CACA,SAASw7B,EAAQnnB,GACfA,EAAKzG,KACP,CAvCAnI,OAAOg2B,eAAeZ,EAAO56B,UAAW,wBAAyB,CAI/Dy7B,YAAY,EACZ5K,IAAK,WACH,OAAO9wB,KAAKo7B,eAAeO,aAC7B,IAEFl2B,OAAOg2B,eAAeZ,EAAO56B,UAAW,iBAAkB,CAIxDy7B,YAAY,EACZ5K,IAAK,WACH,OAAO9wB,KAAKo7B,gBAAkBp7B,KAAKo7B,eAAeQ,WACpD,IAEFn2B,OAAOg2B,eAAeZ,EAAO56B,UAAW,iBAAkB,CAIxDy7B,YAAY,EACZ5K,IAAK,WACH,OAAO9wB,KAAKo7B,eAAe95B,MAC7B,IAeFmE,OAAOg2B,eAAeZ,EAAO56B,UAAW,YAAa,CAInDy7B,YAAY,EACZ5K,IAAK,WACH,YAA4BxoB,IAAxBtI,KAAK67B,qBAAwDvzB,IAAxBtI,KAAKo7B,gBAGvCp7B,KAAK67B,eAAeC,WAAa97B,KAAKo7B,eAAeU,SAC9D,EACAC,IAAK,SAAat6B,QAGY6G,IAAxBtI,KAAK67B,qBAAwDvzB,IAAxBtI,KAAKo7B,iBAM9Cp7B,KAAK67B,eAAeC,UAAYr6B,EAChCzB,KAAKo7B,eAAeU,UAAYr6B,EAClC,G,+BCjGFiD,EAAOrF,QAAU28B,EACjB,IAAIhP,EAAY,EAAQ,OAExB,SAASgP,EAAYn7B,GACnB,KAAMb,gBAAgBg8B,GAAc,OAAO,IAAIA,EAAYn7B,GAC3DmsB,EAAUzsB,KAAKP,KAAMa,EACvB,CAJA,EAAQ,MAAR,CAAoBm7B,EAAahP,GAKjCgP,EAAY/7B,UAAUg8B,WAAa,SAAUtN,EAAOuN,EAAUC,GAC5DA,EAAG,KAAMxN,EACX,C,mCCVIkM,E,WAHJn2B,EAAOrF,QAAUy7B,EAMjBA,EAASsB,cAAgBA,EAGhB,sBAAT,IAqBIC,EApBAC,EAAkB,SAAyBC,EAASr0B,GACtD,OAAOq0B,EAAQC,UAAUt0B,GAAM5G,MACjC,EAIIm7B,EAAS,EAAQ,OAGjBv7B,EAAS,gBACTw7B,QAAmC,IAAX,EAAA/Y,EAAyB,EAAAA,EAA2B,oBAAX5R,OAAyBA,OAAyB,oBAATsC,KAAuBA,KAAO,CAAC,GAAGtD,YAAc,WAAa,EASvK4rB,EAAY,EAAQ,OAGtBN,EADEM,GAAaA,EAAUC,SACjBD,EAAUC,SAAS,UAEnB,WAAkB,EAI5B,IAWIC,EACAC,EACA/uB,EAbAgvB,EAAa,EAAQ,OACrBC,EAAc,EAAQ,OAExBC,EADa,EAAQ,OACOA,iBAC1BC,EAAiB,WACnBC,EAAuBD,EAAeC,qBACtCC,EAA4BF,EAAeE,0BAC3CC,EAA6BH,EAAeG,2BAC5CC,EAAqCJ,EAAeI,mCAMtD,EAAQ,MAAR,CAAoBxC,EAAU2B,GAC9B,IAAIc,EAAiBP,EAAYO,eAC7BC,EAAe,CAAC,QAAS,QAAS,UAAW,QAAS,UAY1D,SAASpB,EAAcv7B,EAASm1B,EAAQyH,GACtC5C,EAASA,GAAU,EAAQ,OAC3Bh6B,EAAUA,GAAW,CAAC,EAOE,kBAAb48B,IAAwBA,EAAWzH,aAAkB6E,GAIhE76B,KAAK09B,aAAe78B,EAAQ68B,WACxBD,IAAUz9B,KAAK09B,WAAa19B,KAAK09B,cAAgB78B,EAAQ88B,oBAI7D39B,KAAK27B,cAAgBsB,EAAiBj9B,KAAMa,EAAS,wBAAyB48B,GAK9Ez9B,KAAKyL,OAAS,IAAIsxB,EAClB/8B,KAAKsB,OAAS,EACdtB,KAAK49B,MAAQ,KACb59B,KAAK69B,WAAa,EAClB79B,KAAK89B,QAAU,KACf99B,KAAKq7B,OAAQ,EACbr7B,KAAK+9B,YAAa,EAClB/9B,KAAKg+B,SAAU,EAMfh+B,KAAKi+B,MAAO,EAIZj+B,KAAKk+B,cAAe,EACpBl+B,KAAKm+B,iBAAkB,EACvBn+B,KAAKo+B,mBAAoB,EACzBp+B,KAAKq+B,iBAAkB,EACvBr+B,KAAKs+B,QAAS,EAGdt+B,KAAKu+B,WAAkC,IAAtB19B,EAAQ09B,UAGzBv+B,KAAKw+B,cAAgB39B,EAAQ29B,YAG7Bx+B,KAAK87B,WAAY,EAKjB97B,KAAKy+B,gBAAkB59B,EAAQ49B,iBAAmB,OAGlDz+B,KAAK0+B,WAAa,EAGlB1+B,KAAK2+B,aAAc,EACnB3+B,KAAK4L,QAAU,KACf5L,KAAKk8B,SAAW,KACZr7B,EAAQq7B,WACLW,IAAeA,EAAgB,YACpC78B,KAAK4L,QAAU,IAAIixB,EAAch8B,EAAQq7B,UACzCl8B,KAAKk8B,SAAWr7B,EAAQq7B,SAE5B,CACA,SAASpB,EAASj6B,GAEhB,GADAg6B,EAASA,GAAU,EAAQ,SACrB76B,gBAAgB86B,GAAW,OAAO,IAAIA,EAASj6B,GAIrD,IAAI48B,EAAWz9B,gBAAgB66B,EAC/B76B,KAAK67B,eAAiB,IAAIO,EAAcv7B,EAASb,KAAMy9B,GAGvDz9B,KAAKg7B,UAAW,EACZn6B,IAC0B,mBAAjBA,EAAQ+9B,OAAqB5+B,KAAK6+B,MAAQh+B,EAAQ+9B,MAC9B,mBAApB/9B,EAAQi+B,UAAwB9+B,KAAK++B,SAAWl+B,EAAQi+B,UAErErC,EAAOl8B,KAAKP,KACd,CAwDA,SAASg/B,EAAiBhJ,EAAQrH,EAAOuN,EAAU+C,EAAYC,GAC7D7C,EAAM,mBAAoB1N,GAC1B,IAKMwQ,EALF17B,EAAQuyB,EAAO6F,eACnB,GAAc,OAAVlN,EACFlrB,EAAMu6B,SAAU,EAuNpB,SAAoBhI,EAAQvyB,GAE1B,GADA44B,EAAM,eACF54B,EAAM43B,MAAV,CACA,GAAI53B,EAAMmI,QAAS,CACjB,IAAI+iB,EAAQlrB,EAAMmI,QAAQgC,MACtB+gB,GAASA,EAAMrtB,SACjBmC,EAAMgI,OAAOzG,KAAK2pB,GAClBlrB,EAAMnC,QAAUmC,EAAMi6B,WAAa,EAAI/O,EAAMrtB,OAEjD,CACAmC,EAAM43B,OAAQ,EACV53B,EAAMw6B,KAIRmB,EAAapJ,IAGbvyB,EAAMy6B,cAAe,EAChBz6B,EAAM06B,kBACT16B,EAAM06B,iBAAkB,EACxBkB,EAAcrJ,IAnBK,CAsBzB,CA9OIsJ,CAAWtJ,EAAQvyB,QAInB,GADKy7B,IAAgBC,EA6CzB,SAAsB17B,EAAOkrB,GAC3B,IAAIwQ,EAjPiBj7B,EAqPrB,OArPqBA,EAkPFyqB,EAjPZztB,EAAOE,SAAS8C,IAAQA,aAAew4B,GAiPA,iBAAV/N,QAAgCrmB,IAAVqmB,GAAwBlrB,EAAMi6B,aACtFyB,EAAK,IAAIhC,EAAqB,QAAS,CAAC,SAAU,SAAU,cAAexO,IAEtEwQ,CACT,CAnD8BI,CAAa97B,EAAOkrB,IAC1CwQ,EACF5B,EAAevH,EAAQmJ,QAClB,GAAI17B,EAAMi6B,YAAc/O,GAASA,EAAMrtB,OAAS,EAIrD,GAHqB,iBAAVqtB,GAAuBlrB,EAAMi6B,YAAcj4B,OAAO+5B,eAAe7Q,KAAWztB,EAAOjB,YAC5F0uB,EA3MR,SAA6BA,GAC3B,OAAOztB,EAAO6M,KAAK4gB,EACrB,CAyMgB8Q,CAAoB9Q,IAE1BsQ,EACEx7B,EAAMs6B,WAAYR,EAAevH,EAAQ,IAAIsH,GAA2CoC,EAAS1J,EAAQvyB,EAAOkrB,GAAO,QACtH,GAAIlrB,EAAM43B,MACfkC,EAAevH,EAAQ,IAAIoH,OACtB,IAAI35B,EAAMq4B,UACf,OAAO,EAEPr4B,EAAMu6B,SAAU,EACZv6B,EAAMmI,UAAYswB,GACpBvN,EAAQlrB,EAAMmI,QAAQ3I,MAAM0rB,GACxBlrB,EAAMi6B,YAA+B,IAAjB/O,EAAMrtB,OAAco+B,EAAS1J,EAAQvyB,EAAOkrB,GAAO,GAAYgR,EAAc3J,EAAQvyB,IAE7Gi8B,EAAS1J,EAAQvyB,EAAOkrB,GAAO,EAEnC,MACUsQ,IACVx7B,EAAMu6B,SAAU,EAChB2B,EAAc3J,EAAQvyB,IAO1B,OAAQA,EAAM43B,QAAU53B,EAAMnC,OAASmC,EAAMk4B,eAAkC,IAAjBl4B,EAAMnC,OACtE,CACA,SAASo+B,EAAS1J,EAAQvyB,EAAOkrB,EAAOsQ,GAClCx7B,EAAMq6B,SAA4B,IAAjBr6B,EAAMnC,SAAiBmC,EAAMw6B,MAChDx6B,EAAMi7B,WAAa,EACnB1I,EAAO4J,KAAK,OAAQjR,KAGpBlrB,EAAMnC,QAAUmC,EAAMi6B,WAAa,EAAI/O,EAAMrtB,OACzC29B,EAAYx7B,EAAMgI,OAAO8D,QAAQof,GAAYlrB,EAAMgI,OAAOzG,KAAK2pB,GAC/DlrB,EAAMy6B,cAAckB,EAAapJ,IAEvC2J,EAAc3J,EAAQvyB,EACxB,CA3GAgC,OAAOg2B,eAAeX,EAAS76B,UAAW,YAAa,CAIrDy7B,YAAY,EACZ5K,IAAK,WACH,YAA4BxoB,IAAxBtI,KAAK67B,gBAGF77B,KAAK67B,eAAeC,SAC7B,EACAC,IAAK,SAAat6B,GAGXzB,KAAK67B,iBAMV77B,KAAK67B,eAAeC,UAAYr6B,EAClC,IAEFq5B,EAAS76B,UAAU6+B,QAAU9B,EAAY8B,QACzChE,EAAS76B,UAAU4/B,WAAa7C,EAAY8C,UAC5ChF,EAAS76B,UAAU8+B,SAAW,SAAU90B,EAAKkyB,GAC3CA,EAAGlyB,EACL,EAMA6wB,EAAS76B,UAAU+E,KAAO,SAAU2pB,EAAOuN,GACzC,IACIgD,EADAz7B,EAAQzD,KAAK67B,eAcjB,OAZKp4B,EAAMi6B,WAUTwB,GAAiB,EATI,iBAAVvQ,KACTuN,EAAWA,GAAYz4B,EAAMg7B,mBACZh7B,EAAMy4B,WACrBvN,EAAQztB,EAAO6M,KAAK4gB,EAAOuN,GAC3BA,EAAW,IAEbgD,GAAiB,GAKdF,EAAiBh/B,KAAM2uB,EAAOuN,GAAU,EAAOgD,EACxD,EAGApE,EAAS76B,UAAUsP,QAAU,SAAUof,GACrC,OAAOqQ,EAAiBh/B,KAAM2uB,EAAO,MAAM,GAAM,EACnD,EA6DAmM,EAAS76B,UAAU8/B,SAAW,WAC5B,OAAuC,IAAhC//B,KAAK67B,eAAeiC,OAC7B,EAGAhD,EAAS76B,UAAU+/B,YAAc,SAAUv/B,GACpCo8B,IAAeA,EAAgB,YACpC,IAAIjxB,EAAU,IAAIixB,EAAcp8B,GAChCT,KAAK67B,eAAejwB,QAAUA,EAE9B5L,KAAK67B,eAAeK,SAAWl8B,KAAK67B,eAAejwB,QAAQswB,SAK3D,IAFA,IAAIvsB,EAAI3P,KAAK67B,eAAepwB,OAAOw0B,KAC/Bz3B,EAAU,GACD,OAANmH,GACLnH,GAAWoD,EAAQ3I,MAAM0M,EAAE/O,MAC3B+O,EAAIA,EAAEyY,KAKR,OAHApoB,KAAK67B,eAAepwB,OAAOy0B,QACX,KAAZ13B,GAAgBxI,KAAK67B,eAAepwB,OAAOzG,KAAKwD,GACpDxI,KAAK67B,eAAev6B,OAASkH,EAAQlH,OAC9BtB,IACT,EAGA,IAAImgC,EAAU,WAqBd,SAASC,EAAc1gB,EAAGjc,GACxB,OAAIic,GAAK,GAAsB,IAAjBjc,EAAMnC,QAAgBmC,EAAM43B,MAAc,EACpD53B,EAAMi6B,WAAmB,EACzBhe,GAAMA,EAEJjc,EAAMq6B,SAAWr6B,EAAMnC,OAAemC,EAAMgI,OAAOw0B,KAAKr/B,KAAKU,OAAmBmC,EAAMnC,QAGxFoe,EAAIjc,EAAMk4B,gBAAel4B,EAAMk4B,cA5BrC,SAAiCjc,GAe/B,OAdIA,GAAKygB,EAEPzgB,EAAIygB,GAIJzgB,IACAA,GAAKA,IAAM,EACXA,GAAKA,IAAM,EACXA,GAAKA,IAAM,EACXA,GAAKA,IAAM,EACXA,GAAKA,IAAM,GACXA,KAEKA,CACT,CAYqD2gB,CAAwB3gB,IACvEA,GAAKjc,EAAMnC,OAAeoe,EAEzBjc,EAAM43B,MAIJ53B,EAAMnC,QAHXmC,EAAMy6B,cAAe,EACd,GAGX,CA6HA,SAASkB,EAAapJ,GACpB,IAAIvyB,EAAQuyB,EAAO6F,eACnBQ,EAAM,eAAgB54B,EAAMy6B,aAAcz6B,EAAM06B,iBAChD16B,EAAMy6B,cAAe,EAChBz6B,EAAM06B,kBACT9B,EAAM,eAAgB54B,EAAMq6B,SAC5Br6B,EAAM06B,iBAAkB,EACxB7C,EAAQC,SAAS8D,EAAerJ,GAEpC,CACA,SAASqJ,EAAcrJ,GACrB,IAAIvyB,EAAQuyB,EAAO6F,eACnBQ,EAAM,gBAAiB54B,EAAMq4B,UAAWr4B,EAAMnC,OAAQmC,EAAM43B,OACvD53B,EAAMq4B,YAAcr4B,EAAMnC,SAAUmC,EAAM43B,QAC7CrF,EAAO4J,KAAK,YACZn8B,EAAM06B,iBAAkB,GAS1B16B,EAAMy6B,cAAgBz6B,EAAMq6B,UAAYr6B,EAAM43B,OAAS53B,EAAMnC,QAAUmC,EAAMk4B,cAC7E2E,EAAKtK,EACP,CAQA,SAAS2J,EAAc3J,EAAQvyB,GACxBA,EAAMk7B,cACTl7B,EAAMk7B,aAAc,EACpBrD,EAAQC,SAASgF,EAAgBvK,EAAQvyB,GAE7C,CACA,SAAS88B,EAAevK,EAAQvyB,GAwB9B,MAAQA,EAAMu6B,UAAYv6B,EAAM43B,QAAU53B,EAAMnC,OAASmC,EAAMk4B,eAAiBl4B,EAAMq6B,SAA4B,IAAjBr6B,EAAMnC,SAAe,CACpH,IAAIgK,EAAM7H,EAAMnC,OAGhB,GAFA+6B,EAAM,wBACNrG,EAAO4I,KAAK,GACRtzB,IAAQ7H,EAAMnC,OAEhB,KACJ,CACAmC,EAAMk7B,aAAc,CACtB,CAgPA,SAAS6B,EAAwBnsB,GAC/B,IAAI5Q,EAAQ4Q,EAAKwnB,eACjBp4B,EAAM26B,kBAAoB/pB,EAAKosB,cAAc,YAAc,EACvDh9B,EAAM46B,kBAAoB56B,EAAM66B,OAGlC76B,EAAMq6B,SAAU,EAGPzpB,EAAKosB,cAAc,QAAU,GACtCpsB,EAAKqsB,QAET,CACA,SAASC,EAAiBtsB,GACxBgoB,EAAM,4BACNhoB,EAAKuqB,KAAK,EACZ,CAuBA,SAASgC,EAAQ5K,EAAQvyB,GACvB44B,EAAM,SAAU54B,EAAMu6B,SACjBv6B,EAAMu6B,SACThI,EAAO4I,KAAK,GAEdn7B,EAAM46B,iBAAkB,EACxBrI,EAAO4J,KAAK,UACZU,EAAKtK,GACDvyB,EAAMq6B,UAAYr6B,EAAMu6B,SAAShI,EAAO4I,KAAK,EACnD,CAWA,SAAS0B,EAAKtK,GACZ,IAAIvyB,EAAQuyB,EAAO6F,eAEnB,IADAQ,EAAM,OAAQ54B,EAAMq6B,SACbr6B,EAAMq6B,SAA6B,OAAlB9H,EAAO4I,SACjC,CAmHA,SAASiC,EAASnhB,EAAGjc,GAEnB,OAAqB,IAAjBA,EAAMnC,OAAqB,MAE3BmC,EAAMi6B,WAAYroB,EAAM5R,EAAMgI,OAAO6W,SAAkB5C,GAAKA,GAAKjc,EAAMnC,QAEtD+T,EAAf5R,EAAMmI,QAAenI,EAAMgI,OAAO5I,KAAK,IAAqC,IAAxBY,EAAMgI,OAAOnK,OAAoBmC,EAAMgI,OAAOiB,QAAmBjJ,EAAMgI,OAAOlI,OAAOE,EAAMnC,QACnJmC,EAAMgI,OAAOy0B,SAGb7qB,EAAM5R,EAAMgI,OAAOq1B,QAAQphB,EAAGjc,EAAMmI,SAE/ByJ,GATP,IAAIA,CAUN,CACA,SAAS0rB,EAAY/K,GACnB,IAAIvyB,EAAQuyB,EAAO6F,eACnBQ,EAAM,cAAe54B,EAAMs6B,YACtBt6B,EAAMs6B,aACTt6B,EAAM43B,OAAQ,EACdC,EAAQC,SAASyF,EAAev9B,EAAOuyB,GAE3C,CACA,SAASgL,EAAcv9B,EAAOuyB,GAI5B,GAHAqG,EAAM,gBAAiB54B,EAAMs6B,WAAYt6B,EAAMnC,SAG1CmC,EAAMs6B,YAA+B,IAAjBt6B,EAAMnC,SAC7BmC,EAAMs6B,YAAa,EACnB/H,EAAOgF,UAAW,EAClBhF,EAAO4J,KAAK,OACRn8B,EAAM+6B,aAAa,CAGrB,IAAIyC,EAASjL,EAAOoF,iBACf6F,GAAUA,EAAOzC,aAAeyC,EAAOC,WAC1ClL,EAAO8I,SAEX,CAEJ,CASA,SAAS7tB,EAAQkwB,EAAIvjB,GACnB,IAAK,IAAIrS,EAAI,EAAG4S,EAAIgjB,EAAG7/B,OAAQiK,EAAI4S,EAAG5S,IACpC,GAAI41B,EAAG51B,KAAOqS,EAAG,OAAOrS,EAE1B,OAAQ,CACV,CA1pBAuvB,EAAS76B,UAAU2+B,KAAO,SAAUlf,GAClC2c,EAAM,OAAQ3c,GACdA,EAAI0hB,SAAS1hB,EAAG,IAChB,IAAIjc,EAAQzD,KAAK67B,eACbwF,EAAQ3hB,EAMZ,GALU,IAANA,IAASjc,EAAM06B,iBAAkB,GAK3B,IAANze,GAAWjc,EAAMy6B,gBAA0C,IAAxBz6B,EAAMk4B,cAAsBl4B,EAAMnC,QAAUmC,EAAMk4B,cAAgBl4B,EAAMnC,OAAS,IAAMmC,EAAM43B,OAGlI,OAFAgB,EAAM,qBAAsB54B,EAAMnC,OAAQmC,EAAM43B,OAC3B,IAAjB53B,EAAMnC,QAAgBmC,EAAM43B,MAAO0F,EAAY/gC,MAAWo/B,EAAap/B,MACpE,KAKT,GAAU,KAHV0f,EAAI0gB,EAAc1gB,EAAGjc,KAGNA,EAAM43B,MAEnB,OADqB,IAAjB53B,EAAMnC,QAAcy/B,EAAY/gC,MAC7B,KA0BT,IA2BIqV,EA3BAisB,EAAS79B,EAAMy6B,aA6CnB,OA5CA7B,EAAM,gBAAiBiF,IAGF,IAAjB79B,EAAMnC,QAAgBmC,EAAMnC,OAASoe,EAAIjc,EAAMk4B,gBAEjDU,EAAM,6BADNiF,GAAS,GAMP79B,EAAM43B,OAAS53B,EAAMu6B,QAEvB3B,EAAM,mBADNiF,GAAS,GAEAA,IACTjF,EAAM,WACN54B,EAAMu6B,SAAU,EAChBv6B,EAAMw6B,MAAO,EAEQ,IAAjBx6B,EAAMnC,SAAcmC,EAAMy6B,cAAe,GAE7Cl+B,KAAK6+B,MAAMp7B,EAAMk4B,eACjBl4B,EAAMw6B,MAAO,EAGRx6B,EAAMu6B,UAASte,EAAI0gB,EAAciB,EAAO59B,KAInC,QADD4R,EAAPqK,EAAI,EAASmhB,EAASnhB,EAAGjc,GAAkB,OAE7CA,EAAMy6B,aAAez6B,EAAMnC,QAAUmC,EAAMk4B,cAC3Cjc,EAAI,IAEJjc,EAAMnC,QAAUoe,EAChBjc,EAAMi7B,WAAa,GAEA,IAAjBj7B,EAAMnC,SAGHmC,EAAM43B,QAAO53B,EAAMy6B,cAAe,GAGnCmD,IAAU3hB,GAAKjc,EAAM43B,OAAO0F,EAAY/gC,OAElC,OAARqV,GAAcrV,KAAK4/B,KAAK,OAAQvqB,GAC7BA,CACT,EA6GAylB,EAAS76B,UAAU4+B,MAAQ,SAAUnf,GACnC6d,EAAev9B,KAAM,IAAIq9B,EAA2B,WACtD,EACAvC,EAAS76B,UAAUshC,KAAO,SAAU1tB,EAAM2tB,GACxC,IAAInM,EAAMr1B,KACNyD,EAAQzD,KAAK67B,eACjB,OAAQp4B,EAAMo6B,YACZ,KAAK,EACHp6B,EAAMm6B,MAAQ/pB,EACd,MACF,KAAK,EACHpQ,EAAMm6B,MAAQ,CAACn6B,EAAMm6B,MAAO/pB,GAC5B,MACF,QACEpQ,EAAMm6B,MAAM54B,KAAK6O,GAGrBpQ,EAAMo6B,YAAc,EACpBxB,EAAM,wBAAyB54B,EAAMo6B,WAAY2D,GACjD,IACIC,EADUD,IAA6B,IAAjBA,EAAS5zB,KAAkBiG,IAASynB,EAAQoG,QAAU7tB,IAASynB,EAAQqG,OACrEC,EAARzG,EAYpB,SAASA,IACPkB,EAAM,SACNxoB,EAAKjG,KACP,CAdInK,EAAMs6B,WAAYzC,EAAQC,SAASkG,GAAYpM,EAAI6F,KAAK,MAAOuG,GACnE5tB,EAAKguB,GAAG,UACR,SAASC,EAAS9G,EAAU+G,GAC1B1F,EAAM,YACFrB,IAAa3F,GACX0M,IAAwC,IAA1BA,EAAWC,aAC3BD,EAAWC,YAAa,EAkB5B3F,EAAM,WAENxoB,EAAKouB,eAAe,QAASC,GAC7BruB,EAAKouB,eAAe,SAAUE,GAC9BtuB,EAAKouB,eAAe,QAASG,GAC7BvuB,EAAKouB,eAAe,QAASI,GAC7BxuB,EAAKouB,eAAe,SAAUH,GAC9BzM,EAAI4M,eAAe,MAAO9G,GAC1B9F,EAAI4M,eAAe,MAAOL,GAC1BvM,EAAI4M,eAAe,OAAQK,GAC3BC,GAAY,GAOR9+B,EAAMi7B,YAAgB7qB,EAAKunB,iBAAkBvnB,EAAKunB,eAAeoH,WAAYJ,IA/BnF,IAUA,IAAIA,EAgFN,SAAqB/M,GACnB,OAAO,WACL,IAAI5xB,EAAQ4xB,EAAIwG,eAChBQ,EAAM,cAAe54B,EAAMi7B,YACvBj7B,EAAMi7B,YAAYj7B,EAAMi7B,aACH,IAArBj7B,EAAMi7B,YAAoBpC,EAAgBjH,EAAK,UACjD5xB,EAAMq6B,SAAU,EAChBwC,EAAKjL,GAET,CACF,CA1FgBoN,CAAYpN,GAC1BxhB,EAAKguB,GAAG,QAASO,GACjB,IAAIG,GAAY,EAsBhB,SAASD,EAAO3T,GACd0N,EAAM,UACN,IAAIhnB,EAAMxB,EAAK5Q,MAAM0rB,GACrB0N,EAAM,aAAchnB,IACR,IAARA,KAKwB,IAArB5R,EAAMo6B,YAAoBp6B,EAAMm6B,QAAU/pB,GAAQpQ,EAAMo6B,WAAa,IAAqC,IAAhC5sB,EAAQxN,EAAMm6B,MAAO/pB,MAAkB0uB,IACpHlG,EAAM,8BAA+B54B,EAAMi7B,YAC3Cj7B,EAAMi7B,cAERrJ,EAAIqN,QAER,CAIA,SAASL,EAAQlD,GACf9C,EAAM,UAAW8C,GACjByC,IACA/tB,EAAKouB,eAAe,QAASI,GACU,IAAnC/F,EAAgBzoB,EAAM,UAAgB0pB,EAAe1pB,EAAMsrB,EACjE,CAMA,SAAS+C,IACPruB,EAAKouB,eAAe,SAAUE,GAC9BP,GACF,CAEA,SAASO,IACP9F,EAAM,YACNxoB,EAAKouB,eAAe,QAASC,GAC7BN,GACF,CAEA,SAASA,IACPvF,EAAM,UACNhH,EAAIuM,OAAO/tB,EACb,CAUA,OAvDAwhB,EAAIwM,GAAG,OAAQS,GAniBjB,SAAyB/F,EAASoG,EAAOC,GAGvC,GAAuC,mBAA5BrG,EAAQsG,gBAAgC,OAAOtG,EAAQsG,gBAAgBF,EAAOC,GAMpFrG,EAAQuG,SAAYvG,EAAQuG,QAAQH,GAAuCjhC,MAAMC,QAAQ46B,EAAQuG,QAAQH,IAASpG,EAAQuG,QAAQH,GAAOpzB,QAAQqzB,GAASrG,EAAQuG,QAAQH,GAAS,CAACC,EAAIrG,EAAQuG,QAAQH,IAA5JpG,EAAQsF,GAAGc,EAAOC,EACrE,CAqjBEC,CAAgBhvB,EAAM,QAASwuB,GAO/BxuB,EAAKqnB,KAAK,QAASgH,GAMnBruB,EAAKqnB,KAAK,SAAUiH,GAOpBtuB,EAAK+rB,KAAK,OAAQvK,GAGb5xB,EAAMq6B,UACTzB,EAAM,eACNhH,EAAIqL,UAEC7sB,CACT,EAYAinB,EAAS76B,UAAU2hC,OAAS,SAAU/tB,GACpC,IAAIpQ,EAAQzD,KAAK67B,eACbkG,EAAa,CACfC,YAAY,GAId,GAAyB,IAArBv+B,EAAMo6B,WAAkB,OAAO79B,KAGnC,GAAyB,IAArByD,EAAMo6B,WAER,OAAIhqB,GAAQA,IAASpQ,EAAMm6B,QACtB/pB,IAAMA,EAAOpQ,EAAMm6B,OAGxBn6B,EAAMm6B,MAAQ,KACdn6B,EAAMo6B,WAAa,EACnBp6B,EAAMq6B,SAAU,EACZjqB,GAAMA,EAAK+rB,KAAK,SAAU5/B,KAAM+hC,IAPK/hC,KAa3C,IAAK6T,EAAM,CAET,IAAIkvB,EAAQt/B,EAAMm6B,MACdtyB,EAAM7H,EAAMo6B,WAChBp6B,EAAMm6B,MAAQ,KACdn6B,EAAMo6B,WAAa,EACnBp6B,EAAMq6B,SAAU,EAChB,IAAK,IAAIvyB,EAAI,EAAGA,EAAID,EAAKC,IAAKw3B,EAAMx3B,GAAGq0B,KAAK,SAAU5/B,KAAM,CAC1DgiC,YAAY,IAEd,OAAOhiC,IACT,CAGA,IAAI8J,EAAQmH,EAAQxN,EAAMm6B,MAAO/pB,GACjC,OAAe,IAAX/J,IACJrG,EAAMm6B,MAAMnvB,OAAO3E,EAAO,GAC1BrG,EAAMo6B,YAAc,EACK,IAArBp6B,EAAMo6B,aAAkBp6B,EAAMm6B,MAAQn6B,EAAMm6B,MAAM,IACtD/pB,EAAK+rB,KAAK,SAAU5/B,KAAM+hC,IAJD/hC,IAM3B,EAIA86B,EAAS76B,UAAU4hC,GAAK,SAAUmB,EAAIJ,GACpC,IAAIpgC,EAAMi6B,EAAOx8B,UAAU4hC,GAAGthC,KAAKP,KAAMgjC,EAAIJ,GACzCn/B,EAAQzD,KAAK67B,eAqBjB,MApBW,SAAPmH,GAGFv/B,EAAM26B,kBAAoBp+B,KAAKygC,cAAc,YAAc,GAGrC,IAAlBh9B,EAAMq6B,SAAmB99B,KAAK0gC,UAClB,aAAPsC,IACJv/B,EAAMs6B,YAAet6B,EAAM26B,oBAC9B36B,EAAM26B,kBAAoB36B,EAAMy6B,cAAe,EAC/Cz6B,EAAMq6B,SAAU,EAChBr6B,EAAM06B,iBAAkB,EACxB9B,EAAM,cAAe54B,EAAMnC,OAAQmC,EAAMu6B,SACrCv6B,EAAMnC,OACR89B,EAAap/B,MACHyD,EAAMu6B,SAChB1C,EAAQC,SAASoF,EAAkB3gC,QAIlCwC,CACT,EACAs4B,EAAS76B,UAAUgjC,YAAcnI,EAAS76B,UAAU4hC,GACpD/G,EAAS76B,UAAUgiC,eAAiB,SAAUe,EAAIJ,GAChD,IAAIpgC,EAAMi6B,EAAOx8B,UAAUgiC,eAAe1hC,KAAKP,KAAMgjC,EAAIJ,GAUzD,MATW,aAAPI,GAOF1H,EAAQC,SAASiF,EAAyBxgC,MAErCwC,CACT,EACAs4B,EAAS76B,UAAUijC,mBAAqB,SAAUF,GAChD,IAAIxgC,EAAMi6B,EAAOx8B,UAAUijC,mBAAmBj+B,MAAMjF,KAAMkF,WAU1D,MATW,aAAP89B,QAA4B16B,IAAP06B,GAOvB1H,EAAQC,SAASiF,EAAyBxgC,MAErCwC,CACT,EAqBAs4B,EAAS76B,UAAUygC,OAAS,WAC1B,IAAIj9B,EAAQzD,KAAK67B,eAUjB,OATKp4B,EAAMq6B,UACTzB,EAAM,UAIN54B,EAAMq6B,SAAWr6B,EAAM26B,kBAM3B,SAAgBpI,EAAQvyB,GACjBA,EAAM46B,kBACT56B,EAAM46B,iBAAkB,EACxB/C,EAAQC,SAASqF,EAAS5K,EAAQvyB,GAEtC,CAVIi9B,CAAO1gC,KAAMyD,IAEfA,EAAM66B,QAAS,EACRt+B,IACT,EAiBA86B,EAAS76B,UAAUyiC,MAAQ,WAQzB,OAPArG,EAAM,wBAAyBr8B,KAAK67B,eAAeiC,UACf,IAAhC99B,KAAK67B,eAAeiC,UACtBzB,EAAM,SACNr8B,KAAK67B,eAAeiC,SAAU,EAC9B99B,KAAK4/B,KAAK,UAEZ5/B,KAAK67B,eAAeyC,QAAS,EACtBt+B,IACT,EAUA86B,EAAS76B,UAAUkjC,KAAO,SAAUnN,GAClC,IAAIoN,EAAQpjC,KACRyD,EAAQzD,KAAK67B,eACbyC,GAAS,EAwBb,IAAK,IAAI/yB,KAvBTyqB,EAAO6L,GAAG,OAAO,WAEf,GADAxF,EAAM,eACF54B,EAAMmI,UAAYnI,EAAM43B,MAAO,CACjC,IAAI1M,EAAQlrB,EAAMmI,QAAQgC,MACtB+gB,GAASA,EAAMrtB,QAAQ8hC,EAAMp+B,KAAK2pB,EACxC,CACAyU,EAAMp+B,KAAK,KACb,IACAgxB,EAAO6L,GAAG,QAAQ,SAAUlT,GAC1B0N,EAAM,gBACF54B,EAAMmI,UAAS+iB,EAAQlrB,EAAMmI,QAAQ3I,MAAM0rB,IAG3ClrB,EAAMi6B,YAAc,MAAC/O,IAAyDlrB,EAAMi6B,YAAgB/O,GAAUA,EAAMrtB,UAC9G8hC,EAAMp+B,KAAK2pB,KAEnB2P,GAAS,EACTtI,EAAO0M,SAEX,IAIc1M,OACI1tB,IAAZtI,KAAKuL,IAAyC,mBAAdyqB,EAAOzqB,KACzCvL,KAAKuL,GAAK,SAAoBxG,GAC5B,OAAO,WACL,OAAOixB,EAAOjxB,GAAQE,MAAM+wB,EAAQ9wB,UACtC,CACF,CAJU,CAIRqG,IAKN,IAAK,IAAImU,EAAI,EAAGA,EAAI8d,EAAal8B,OAAQoe,IACvCsW,EAAO6L,GAAGrE,EAAa9d,GAAI1f,KAAK4/B,KAAKyD,KAAKrjC,KAAMw9B,EAAa9d,KAY/D,OAPA1f,KAAK6+B,MAAQ,SAAUnf,GACrB2c,EAAM,gBAAiB3c,GACnB4e,IACFA,GAAS,EACTtI,EAAO0K,SAEX,EACO1gC,IACT,EACsB,mBAAXu1B,SACTuF,EAAS76B,UAAUs1B,OAAO+N,eAAiB,WAIzC,YAH0Ch7B,IAAtCw0B,IACFA,EAAoC,EAAQ,QAEvCA,EAAkC98B,KAC3C,GAEFyF,OAAOg2B,eAAeX,EAAS76B,UAAW,wBAAyB,CAIjEy7B,YAAY,EACZ5K,IAAK,WACH,OAAO9wB,KAAK67B,eAAeF,aAC7B,IAEFl2B,OAAOg2B,eAAeX,EAAS76B,UAAW,iBAAkB,CAI1Dy7B,YAAY,EACZ5K,IAAK,WACH,OAAO9wB,KAAK67B,gBAAkB77B,KAAK67B,eAAepwB,MACpD,IAEFhG,OAAOg2B,eAAeX,EAAS76B,UAAW,kBAAmB,CAI3Dy7B,YAAY,EACZ5K,IAAK,WACH,OAAO9wB,KAAK67B,eAAeiC,OAC7B,EACA/B,IAAK,SAAat4B,GACZzD,KAAK67B,iBACP77B,KAAK67B,eAAeiC,QAAUr6B,EAElC,IAIFq3B,EAASyI,UAAY1C,EACrBp7B,OAAOg2B,eAAeX,EAAS76B,UAAW,iBAAkB,CAI1Dy7B,YAAY,EACZ5K,IAAK,WACH,OAAO9wB,KAAK67B,eAAev6B,MAC7B,IA+CoB,mBAAXi0B,SACTuF,EAAS/sB,KAAO,SAAUy1B,EAAU5P,GAIlC,YAHatrB,IAATyF,IACFA,EAAO,EAAQ,OAEVA,EAAK+sB,EAAU0I,EAAU5P,EAClC,E,+BC17BFlvB,EAAOrF,QAAU2tB,EACjB,IAAIkQ,EAAiB,WACnBG,EAA6BH,EAAeG,2BAC5CoG,EAAwBvG,EAAeuG,sBACvCC,EAAqCxG,EAAewG,mCACpDC,EAA8BzG,EAAeyG,4BAC3C9I,EAAS,EAAQ,OAErB,SAAS+I,EAAezE,EAAIv+B,GAC1B,IAAIijC,EAAK7jC,KAAK8jC,gBACdD,EAAGE,cAAe,EAClB,IAAI5H,EAAK0H,EAAGG,QACZ,GAAW,OAAP7H,EACF,OAAOn8B,KAAK4/B,KAAK,QAAS,IAAI6D,GAEhCI,EAAGI,WAAa,KAChBJ,EAAGG,QAAU,KACD,MAARpjC,GAEFZ,KAAKgF,KAAKpE,GACZu7B,EAAGgD,GACH,IAAI+E,EAAKlkC,KAAK67B,eACdqI,EAAGlG,SAAU,GACTkG,EAAGhG,cAAgBgG,EAAG5iC,OAAS4iC,EAAGvI,gBACpC37B,KAAK6+B,MAAMqF,EAAGvI,cAElB,CACA,SAAS3O,EAAUnsB,GACjB,KAAMb,gBAAgBgtB,GAAY,OAAO,IAAIA,EAAUnsB,GACvDg6B,EAAOt6B,KAAKP,KAAMa,GAClBb,KAAK8jC,gBAAkB,CACrBF,eAAgBA,EAAeP,KAAKrjC,MACpCmkC,eAAe,EACfJ,cAAc,EACdC,QAAS,KACTC,WAAY,KACZG,cAAe,MAIjBpkC,KAAK67B,eAAeqC,cAAe,EAKnCl+B,KAAK67B,eAAeoC,MAAO,EACvBp9B,IAC+B,mBAAtBA,EAAQ+d,YAA0B5e,KAAKi8B,WAAap7B,EAAQ+d,WAC1C,mBAAlB/d,EAAQkwB,QAAsB/wB,KAAKqkC,OAASxjC,EAAQkwB,QAIjE/wB,KAAK6hC,GAAG,YAAayC,EACvB,CACA,SAASA,IACP,IAAIlB,EAAQpjC,KACe,mBAAhBA,KAAKqkC,QAA0BrkC,KAAK67B,eAAeC,UAK5D/E,EAAK/2B,KAAM,KAAM,MAJjBA,KAAKqkC,QAAO,SAAUlF,EAAIv+B,GACxBm2B,EAAKqM,EAAOjE,EAAIv+B,EAClB,GAIJ,CAiDA,SAASm2B,EAAKf,EAAQmJ,EAAIv+B,GACxB,GAAIu+B,EAAI,OAAOnJ,EAAO4J,KAAK,QAAST,GAQpC,GAPY,MAARv+B,GAEFo1B,EAAOhxB,KAAKpE,GAKVo1B,EAAOoF,eAAe95B,OAAQ,MAAM,IAAIqiC,EAC5C,GAAI3N,EAAO8N,gBAAgBC,aAAc,MAAM,IAAIL,EACnD,OAAO1N,EAAOhxB,KAAK,KACrB,CArHA,EAAQ,MAAR,CAAoBgoB,EAAW6N,GAyD/B7N,EAAU/sB,UAAU+E,KAAO,SAAU2pB,EAAOuN,GAE1C,OADAl8B,KAAK8jC,gBAAgBK,eAAgB,EAC9BtJ,EAAO56B,UAAU+E,KAAKzE,KAAKP,KAAM2uB,EAAOuN,EACjD,EAYAlP,EAAU/sB,UAAUg8B,WAAa,SAAUtN,EAAOuN,EAAUC,GAC1DA,EAAG,IAAIkB,EAA2B,gBACpC,EACArQ,EAAU/sB,UAAU62B,OAAS,SAAUnI,EAAOuN,EAAUC,GACtD,IAAI0H,EAAK7jC,KAAK8jC,gBAId,GAHAD,EAAGG,QAAU7H,EACb0H,EAAGI,WAAatV,EAChBkV,EAAGO,cAAgBlI,GACd2H,EAAGE,aAAc,CACpB,IAAIG,EAAKlkC,KAAK67B,gBACVgI,EAAGM,eAAiBD,EAAGhG,cAAgBgG,EAAG5iC,OAAS4iC,EAAGvI,gBAAe37B,KAAK6+B,MAAMqF,EAAGvI,cACzF,CACF,EAKA3O,EAAU/sB,UAAU4+B,MAAQ,SAAUnf,GACpC,IAAImkB,EAAK7jC,KAAK8jC,gBACQ,OAAlBD,EAAGI,YAAwBJ,EAAGE,aAMhCF,EAAGM,eAAgB,GALnBN,EAAGE,cAAe,EAClB/jC,KAAKi8B,WAAW4H,EAAGI,WAAYJ,EAAGO,cAAeP,EAAGD,gBAMxD,EACA5W,EAAU/sB,UAAU8+B,SAAW,SAAU90B,EAAKkyB,GAC5CtB,EAAO56B,UAAU8+B,SAASx+B,KAAKP,KAAMiK,GAAK,SAAUs6B,GAClDpI,EAAGoI,EACL,GACF,C,mCC9HI1J,E,WAXJ,SAAS2J,EAAc/gC,GACrB,IAAI2/B,EAAQpjC,KACZA,KAAKooB,KAAO,KACZpoB,KAAKykC,MAAQ,KACbzkC,KAAK0kC,OAAS,YA6iBhB,SAAwBC,EAASlhC,EAAOwG,GACtC,IAAIw6B,EAAQE,EAAQF,MAEpB,IADAE,EAAQF,MAAQ,KACTA,GAAO,CACZ,IAAItI,EAAKsI,EAAMG,SACfnhC,EAAMohC,YACN1I,EAljBA2I,WAmjBAL,EAAQA,EAAMrc,IAChB,CAGA3kB,EAAMshC,mBAAmB3c,KAAOuc,CAClC,CAxjBIG,CAAe1B,EAAO3/B,EACxB,CACF,CAnBAiB,EAAOrF,QAAUg3B,EA0BjBA,EAAS2O,cAAgBA,EAGzB,IA+JIC,EA/JAC,EAAe,CACjBC,UAAW,EAAQ,QAKjB1I,EAAS,EAAQ,OAGjBv7B,EAAS,gBACTw7B,QAAmC,IAAX,EAAA/Y,EAAyB,EAAAA,EAA2B,oBAAX5R,OAAyBA,OAAyB,oBAATsC,KAAuBA,KAAO,CAAC,GAAGtD,YAAc,WAAa,EAOvKisB,EAAc,EAAQ,OAExBC,EADa,EAAQ,OACOA,iBAC1BC,EAAiB,WACnBC,EAAuBD,EAAeC,qBACtCE,EAA6BH,EAAeG,2BAC5CoG,EAAwBvG,EAAeuG,sBACvC2B,EAAyBlI,EAAekI,uBACxCC,EAAuBnI,EAAemI,qBACtCC,EAAyBpI,EAAeoI,uBACxCC,EAA6BrI,EAAeqI,2BAC5CC,EAAuBtI,EAAesI,qBACpCjI,EAAiBP,EAAYO,eAEjC,SAASkI,IAAO,CAChB,SAAST,EAAcnkC,EAASm1B,EAAQyH,GACtC5C,EAASA,GAAU,EAAQ,OAC3Bh6B,EAAUA,GAAW,CAAC,EAOE,kBAAb48B,IAAwBA,EAAWzH,aAAkB6E,GAIhE76B,KAAK09B,aAAe78B,EAAQ68B,WACxBD,IAAUz9B,KAAK09B,WAAa19B,KAAK09B,cAAgB78B,EAAQ6kC,oBAK7D1lC,KAAK27B,cAAgBsB,EAAiBj9B,KAAMa,EAAS,wBAAyB48B,GAG9Ez9B,KAAK2lC,aAAc,EAGnB3lC,KAAKwiC,WAAY,EAEjBxiC,KAAK4lC,QAAS,EAEd5lC,KAAKq7B,OAAQ,EAEbr7B,KAAKkhC,UAAW,EAGhBlhC,KAAK87B,WAAY,EAKjB,IAAI+J,GAAqC,IAA1BhlC,EAAQilC,cACvB9lC,KAAK8lC,eAAiBD,EAKtB7lC,KAAKy+B,gBAAkB59B,EAAQ49B,iBAAmB,OAKlDz+B,KAAKsB,OAAS,EAGdtB,KAAK+lC,SAAU,EAGf/lC,KAAKgmC,OAAS,EAMdhmC,KAAKi+B,MAAO,EAKZj+B,KAAKimC,kBAAmB,EAGxBjmC,KAAKkmC,QAAU,SAAU/G,IAsQ3B,SAAiBnJ,EAAQmJ,GACvB,IAAI17B,EAAQuyB,EAAOoF,eACf6C,EAAOx6B,EAAMw6B,KACb9B,EAAK14B,EAAMugC,QACf,GAAkB,mBAAP7H,EAAmB,MAAM,IAAIsH,EAExC,GAZF,SAA4BhgC,GAC1BA,EAAMsiC,SAAU,EAChBtiC,EAAMugC,QAAU,KAChBvgC,EAAMnC,QAAUmC,EAAM0iC,SACtB1iC,EAAM0iC,SAAW,CACnB,CAMEC,CAAmB3iC,GACf07B,GAlCN,SAAsBnJ,EAAQvyB,EAAOw6B,EAAMkB,EAAIhD,KAC3C14B,EAAMohC,UACJ5G,GAGF3C,EAAQC,SAASY,EAAIgD,GAGrB7D,EAAQC,SAAS8K,EAAarQ,EAAQvyB,GACtCuyB,EAAOoF,eAAekL,cAAe,EACrC/I,EAAevH,EAAQmJ,KAIvBhD,EAAGgD,GACHnJ,EAAOoF,eAAekL,cAAe,EACrC/I,EAAevH,EAAQmJ,GAGvBkH,EAAYrQ,EAAQvyB,GAExB,CAaU8iC,CAAavQ,EAAQvyB,EAAOw6B,EAAMkB,EAAIhD,OAAS,CAErD,IAAI+E,EAAWsF,EAAW/iC,IAAUuyB,EAAO8F,UACtCoF,GAAaz9B,EAAMuiC,QAAWviC,EAAMwiC,mBAAoBxiC,EAAMgjC,iBACjEC,EAAY1Q,EAAQvyB,GAElBw6B,EACF3C,EAAQC,SAASoL,EAAY3Q,EAAQvyB,EAAOy9B,EAAU/E,GAEtDwK,EAAW3Q,EAAQvyB,EAAOy9B,EAAU/E,EAExC,CACF,CAvRI+J,CAAQlQ,EAAQmJ,EAClB,EAGAn/B,KAAKgkC,QAAU,KAGfhkC,KAAKmmC,SAAW,EAChBnmC,KAAKymC,gBAAkB,KACvBzmC,KAAK4mC,oBAAsB,KAI3B5mC,KAAK6kC,UAAY,EAIjB7kC,KAAK6mC,aAAc,EAGnB7mC,KAAKsmC,cAAe,EAGpBtmC,KAAKu+B,WAAkC,IAAtB19B,EAAQ09B,UAGzBv+B,KAAKw+B,cAAgB39B,EAAQ29B,YAG7Bx+B,KAAK8mC,qBAAuB,EAI5B9mC,KAAK+kC,mBAAqB,IAAIP,EAAcxkC,KAC9C,CAqCA,SAASq2B,EAASx1B,GAahB,IAAI48B,EAAWz9B,gBAZf66B,EAASA,GAAU,EAAQ,QAa3B,IAAK4C,IAAawH,EAAgB1kC,KAAK81B,EAAUr2B,MAAO,OAAO,IAAIq2B,EAASx1B,GAC5Eb,KAAKo7B,eAAiB,IAAI4J,EAAcnkC,EAASb,KAAMy9B,GAGvDz9B,KAAKi7B,UAAW,EACZp6B,IAC2B,mBAAlBA,EAAQoC,QAAsBjD,KAAK82B,OAASj2B,EAAQoC,OACjC,mBAAnBpC,EAAQkmC,SAAuB/mC,KAAKgnC,QAAUnmC,EAAQkmC,QAClC,mBAApBlmC,EAAQi+B,UAAwB9+B,KAAK++B,SAAWl+B,EAAQi+B,SACtC,mBAAlBj+B,EAAQkuB,QAAsB/uB,KAAK8uB,OAASjuB,EAAQkuB,QAEjE0N,EAAOl8B,KAAKP,KACd,CAgIA,SAASinC,EAAQjR,EAAQvyB,EAAOsjC,EAAQz7B,EAAKqjB,EAAOuN,EAAUC,GAC5D14B,EAAM0iC,SAAW76B,EACjB7H,EAAMugC,QAAU7H,EAChB14B,EAAMsiC,SAAU,EAChBtiC,EAAMw6B,MAAO,EACTx6B,EAAMq4B,UAAWr4B,EAAMyiC,QAAQ,IAAIb,EAAqB,UAAmB0B,EAAQ/Q,EAAOgR,QAAQrY,EAAOlrB,EAAMyiC,SAAclQ,EAAOc,OAAOnI,EAAOuN,EAAUz4B,EAAMyiC,SACtKziC,EAAMw6B,MAAO,CACf,CAgDA,SAAS0I,EAAW3Q,EAAQvyB,EAAOy9B,EAAU/E,GACtC+E,GASP,SAAsBlL,EAAQvyB,GACP,IAAjBA,EAAMnC,QAAgBmC,EAAM++B,YAC9B/+B,EAAM++B,WAAY,EAClBxM,EAAO4J,KAAK,SAEhB,CAdiBsH,CAAalR,EAAQvyB,GACpCA,EAAMohC,YACN1I,IACAkK,EAAYrQ,EAAQvyB,EACtB,CAaA,SAASijC,EAAY1Q,EAAQvyB,GAC3BA,EAAMwiC,kBAAmB,EACzB,IAAIxB,EAAQhhC,EAAMgjC,gBAClB,GAAIzQ,EAAOgR,SAAWvC,GAASA,EAAMrc,KAAM,CAEzC,IAAIjK,EAAI1a,EAAMqjC,qBACVr7B,EAAS,IAAI/J,MAAMyc,GACnBgpB,EAAS1jC,EAAMshC,mBACnBoC,EAAO1C,MAAQA,EAGf,IAFA,IAAI2C,EAAQ,EACRC,GAAa,EACV5C,GACLh5B,EAAO27B,GAAS3C,EACXA,EAAM6C,QAAOD,GAAa,GAC/B5C,EAAQA,EAAMrc,KACdgf,GAAS,EAEX37B,EAAO47B,WAAaA,EACpBJ,EAAQjR,EAAQvyB,GAAO,EAAMA,EAAMnC,OAAQmK,EAAQ,GAAI07B,EAAOzC,QAI9DjhC,EAAMohC,YACNphC,EAAMmjC,oBAAsB,KACxBO,EAAO/e,MACT3kB,EAAMshC,mBAAqBoC,EAAO/e,KAClC+e,EAAO/e,KAAO,MAEd3kB,EAAMshC,mBAAqB,IAAIP,EAAc/gC,GAE/CA,EAAMqjC,qBAAuB,CAC/B,KAAO,CAEL,KAAOrC,GAAO,CACZ,IAAI9V,EAAQ8V,EAAM9V,MACduN,EAAWuI,EAAMvI,SACjBC,EAAKsI,EAAMG,SASf,GAPAqC,EAAQjR,EAAQvyB,GAAO,EADbA,EAAMi6B,WAAa,EAAI/O,EAAMrtB,OACJqtB,EAAOuN,EAAUC,GACpDsI,EAAQA,EAAMrc,KACd3kB,EAAMqjC,uBAKFrjC,EAAMsiC,QACR,KAEJ,CACc,OAAVtB,IAAgBhhC,EAAMmjC,oBAAsB,KAClD,CACAnjC,EAAMgjC,gBAAkBhC,EACxBhhC,EAAMwiC,kBAAmB,CAC3B,CAoCA,SAASO,EAAW/iC,GAClB,OAAOA,EAAMmiC,QAA2B,IAAjBniC,EAAMnC,QAA0C,OAA1BmC,EAAMgjC,kBAA6BhjC,EAAMy9B,WAAaz9B,EAAMsiC,OAC3G,CACA,SAASwB,EAAUvR,EAAQvyB,GACzBuyB,EAAOlH,QAAO,SAAU7kB,GACtBxG,EAAMohC,YACF56B,GACFszB,EAAevH,EAAQ/rB,GAEzBxG,EAAMojC,aAAc,EACpB7Q,EAAO4J,KAAK,aACZyG,EAAYrQ,EAAQvyB,EACtB,GACF,CAaA,SAAS4iC,EAAYrQ,EAAQvyB,GAC3B,IAAI+jC,EAAOhB,EAAW/iC,GACtB,GAAI+jC,IAdN,SAAmBxR,EAAQvyB,GACpBA,EAAMojC,aAAgBpjC,EAAMkiC,cACF,mBAAlB3P,EAAOlH,QAA0BrrB,EAAMq4B,WAKhDr4B,EAAMojC,aAAc,EACpB7Q,EAAO4J,KAAK,eALZn8B,EAAMohC,YACNphC,EAAMkiC,aAAc,EACpBrK,EAAQC,SAASgM,EAAWvR,EAAQvyB,IAM1C,CAII6gC,CAAUtO,EAAQvyB,GACM,IAApBA,EAAMohC,YACRphC,EAAMy9B,UAAW,EACjBlL,EAAO4J,KAAK,UACRn8B,EAAM+6B,cAAa,CAGrB,IAAIiJ,EAASzR,EAAO6F,iBACf4L,GAAUA,EAAOjJ,aAAeiJ,EAAO1J,aAC1C/H,EAAO8I,SAEX,CAGJ,OAAO0I,CACT,CAxfA,EAAQ,MAAR,CAAoBnR,EAAUoG,GA4G9BuI,EAAc/kC,UAAU27B,UAAY,WAGlC,IAFA,IAAIhT,EAAU5oB,KAAKymC,gBACf3jC,EAAM,GACH8lB,GACL9lB,EAAIkC,KAAK4jB,GACTA,EAAUA,EAAQR,KAEpB,OAAOtlB,CACT,EACA,WACE,IACE2C,OAAOg2B,eAAeuJ,EAAc/kC,UAAW,SAAU,CACvD6wB,IAAKoU,EAAaC,WAAU,WAC1B,OAAOnlC,KAAK47B,WACd,GAAG,6EAAmF,YAE1F,CAAE,MAAOxb,GAAI,CACd,CARD,GAasB,mBAAXmV,QAAyBA,OAAOmS,aAAiE,mBAA3CC,SAAS1nC,UAAUs1B,OAAOmS,cACzFzC,EAAkB0C,SAAS1nC,UAAUs1B,OAAOmS,aAC5CjiC,OAAOg2B,eAAepF,EAAUd,OAAOmS,YAAa,CAClDjmC,MAAO,SAAemmC,GACpB,QAAI3C,EAAgB1kC,KAAKP,KAAM4nC,IAC3B5nC,OAASq2B,GACNuR,GAAUA,EAAOxM,0BAA0B4J,CACpD,KAGFC,EAAkB,SAAyB2C,GACzC,OAAOA,aAAkB5nC,IAC3B,EA+BFq2B,EAASp2B,UAAUshC,KAAO,WACxBhE,EAAev9B,KAAM,IAAIolC,EAC3B,EAyBA/O,EAASp2B,UAAUgD,MAAQ,SAAU0rB,EAAOuN,EAAUC,GACpD,IAzNqBj4B,EAyNjBT,EAAQzD,KAAKo7B,eACb/lB,GAAM,EACNiyB,GAAS7jC,EAAMi6B,aA3NEx5B,EA2N0ByqB,EA1NxCztB,EAAOE,SAAS8C,IAAQA,aAAew4B,GAwO9C,OAbI4K,IAAUpmC,EAAOE,SAASutB,KAC5BA,EAhOJ,SAA6BA,GAC3B,OAAOztB,EAAO6M,KAAK4gB,EACrB,CA8NY8Q,CAAoB9Q,IAEN,mBAAbuN,IACTC,EAAKD,EACLA,EAAW,MAEToL,EAAOpL,EAAW,SAAmBA,IAAUA,EAAWz4B,EAAMg7B,iBAClD,mBAAPtC,IAAmBA,EAAKsJ,GAC/BhiC,EAAMmiC,OArCZ,SAAuB5P,EAAQmG,GAC7B,IAAIgD,EAAK,IAAIoG,EAEbhI,EAAevH,EAAQmJ,GACvB7D,EAAQC,SAASY,EAAIgD,EACvB,CAgCoB0I,CAAc7nC,KAAMm8B,IAAamL,GA3BrD,SAAoBtR,EAAQvyB,EAAOkrB,EAAOwN,GACxC,IAAIgD,EAMJ,OALc,OAAVxQ,EACFwQ,EAAK,IAAImG,EACiB,iBAAV3W,GAAuBlrB,EAAMi6B,aAC7CyB,EAAK,IAAIhC,EAAqB,QAAS,CAAC,SAAU,UAAWxO,KAE3DwQ,IACF5B,EAAevH,EAAQmJ,GACvB7D,EAAQC,SAASY,EAAIgD,IACd,EAGX,CAc8D2I,CAAW9nC,KAAMyD,EAAOkrB,EAAOwN,MACzF14B,EAAMohC,YACNxvB,EAiDJ,SAAuB2gB,EAAQvyB,EAAO6jC,EAAO3Y,EAAOuN,EAAUC,GAC5D,IAAKmL,EAAO,CACV,IAAIS,EArBR,SAAqBtkC,EAAOkrB,EAAOuN,GAIjC,OAHKz4B,EAAMi6B,aAAsC,IAAxBj6B,EAAMqiC,eAA4C,iBAAVnX,IAC/DA,EAAQztB,EAAO6M,KAAK4gB,EAAOuN,IAEtBvN,CACT,CAgBmBqZ,CAAYvkC,EAAOkrB,EAAOuN,GACrCvN,IAAUoZ,IACZT,GAAQ,EACRpL,EAAW,SACXvN,EAAQoZ,EAEZ,CACA,IAAIz8B,EAAM7H,EAAMi6B,WAAa,EAAI/O,EAAMrtB,OACvCmC,EAAMnC,QAAUgK,EAChB,IAAI+J,EAAM5R,EAAMnC,OAASmC,EAAMk4B,cAG/B,GADKtmB,IAAK5R,EAAM++B,WAAY,GACxB/+B,EAAMsiC,SAAWtiC,EAAMuiC,OAAQ,CACjC,IAAIhV,EAAOvtB,EAAMmjC,oBACjBnjC,EAAMmjC,oBAAsB,CAC1BjY,MAAOA,EACPuN,SAAUA,EACVoL,MAAOA,EACP1C,SAAUzI,EACV/T,KAAM,MAEJ4I,EACFA,EAAK5I,KAAO3kB,EAAMmjC,oBAElBnjC,EAAMgjC,gBAAkBhjC,EAAMmjC,oBAEhCnjC,EAAMqjC,sBAAwB,CAChC,MACEG,EAAQjR,EAAQvyB,GAAO,EAAO6H,EAAKqjB,EAAOuN,EAAUC,GAEtD,OAAO9mB,CACT,CAlFU4yB,CAAcjoC,KAAMyD,EAAO6jC,EAAO3Y,EAAOuN,EAAUC,IAEpD9mB,CACT,EACAghB,EAASp2B,UAAUioC,KAAO,WACxBloC,KAAKo7B,eAAe4K,QACtB,EACA3P,EAASp2B,UAAUkoC,OAAS,WAC1B,IAAI1kC,EAAQzD,KAAKo7B,eACb33B,EAAMuiC,SACRviC,EAAMuiC,SACDviC,EAAMsiC,SAAYtiC,EAAMuiC,QAAWviC,EAAMwiC,mBAAoBxiC,EAAMgjC,iBAAiBC,EAAY1mC,KAAMyD,GAE/G,EACA4yB,EAASp2B,UAAUmoC,mBAAqB,SAA4BlM,GAGlE,GADwB,iBAAbA,IAAuBA,EAAWA,EAASvL,iBAChD,CAAC,MAAO,OAAQ,QAAS,QAAS,SAAU,SAAU,OAAQ,QAAS,UAAW,WAAY,OAAO1f,SAASirB,EAAW,IAAIvL,gBAAkB,GAAI,MAAM,IAAI6U,EAAqBtJ,GAExL,OADAl8B,KAAKo7B,eAAeqD,gBAAkBvC,EAC/Bl8B,IACT,EACAyF,OAAOg2B,eAAepF,EAASp2B,UAAW,iBAAkB,CAI1Dy7B,YAAY,EACZ5K,IAAK,WACH,OAAO9wB,KAAKo7B,gBAAkBp7B,KAAKo7B,eAAeQ,WACpD,IAQFn2B,OAAOg2B,eAAepF,EAASp2B,UAAW,wBAAyB,CAIjEy7B,YAAY,EACZ5K,IAAK,WACH,OAAO9wB,KAAKo7B,eAAeO,aAC7B,IAuKFtF,EAASp2B,UAAU62B,OAAS,SAAUnI,EAAOuN,EAAUC,GACrDA,EAAG,IAAIkB,EAA2B,YACpC,EACAhH,EAASp2B,UAAU+mC,QAAU,KAC7B3Q,EAASp2B,UAAU2N,IAAM,SAAU+gB,EAAOuN,EAAUC,GAClD,IAAI14B,EAAQzD,KAAKo7B,eAmBjB,MAlBqB,mBAAVzM,GACTwN,EAAKxN,EACLA,EAAQ,KACRuN,EAAW,MACkB,mBAAbA,IAChBC,EAAKD,EACLA,EAAW,MAETvN,SAAuC3uB,KAAKiD,MAAM0rB,EAAOuN,GAGzDz4B,EAAMuiC,SACRviC,EAAMuiC,OAAS,EACfhmC,KAAKmoC,UAIF1kC,EAAMmiC,QAyDb,SAAqB5P,EAAQvyB,EAAO04B,GAClC14B,EAAMmiC,QAAS,EACfS,EAAYrQ,EAAQvyB,GAChB04B,IACE14B,EAAMy9B,SAAU5F,EAAQC,SAASY,GAASnG,EAAOkF,KAAK,SAAUiB,IAEtE14B,EAAM43B,OAAQ,EACdrF,EAAOiF,UAAW,CACpB,CAjEqBoN,CAAYroC,KAAMyD,EAAO04B,GACrCn8B,IACT,EACAyF,OAAOg2B,eAAepF,EAASp2B,UAAW,iBAAkB,CAI1Dy7B,YAAY,EACZ5K,IAAK,WACH,OAAO9wB,KAAKo7B,eAAe95B,MAC7B,IAqEFmE,OAAOg2B,eAAepF,EAASp2B,UAAW,YAAa,CAIrDy7B,YAAY,EACZ5K,IAAK,WACH,YAA4BxoB,IAAxBtI,KAAKo7B,gBAGFp7B,KAAKo7B,eAAeU,SAC7B,EACAC,IAAK,SAAat6B,GAGXzB,KAAKo7B,iBAMVp7B,KAAKo7B,eAAeU,UAAYr6B,EAClC,IAEF40B,EAASp2B,UAAU6+B,QAAU9B,EAAY8B,QACzCzI,EAASp2B,UAAU4/B,WAAa7C,EAAY8C,UAC5CzJ,EAASp2B,UAAU8+B,SAAW,SAAU90B,EAAKkyB,GAC3CA,EAAGlyB,EACL,C,mCC9nBIq+B,E,WACJ,SAASC,EAAgBrkC,EAAKG,EAAK5C,GAA4L,OAAnL4C,EAC5C,SAAwBmB,GAAO,IAAInB,EACnC,SAAsB4B,EAAOob,GAAQ,GAAqB,iBAAVpb,GAAgC,OAAVA,EAAgB,OAAOA,EAAO,IAAIuiC,EAAOviC,EAAMsvB,OAAOkT,aAAc,QAAangC,IAATkgC,EAAoB,CAAE,IAAIhmC,EAAMgmC,EAAKjoC,KAAK0F,EAAOob,UAAoB,GAAmB,iBAAR7e,EAAkB,OAAOA,EAAK,MAAM,IAAIouB,UAAU,+CAAiD,CAAE,OAA4B7kB,OAAiB9F,EAAQ,CAD/UyiC,CAAaljC,GAAgB,MAAsB,iBAARnB,EAAmBA,EAAM0H,OAAO1H,EAAM,CADxEskC,CAAetkC,MAAiBH,EAAOuB,OAAOg2B,eAAev3B,EAAKG,EAAK,CAAE5C,MAAOA,EAAOi6B,YAAY,EAAMkN,cAAc,EAAM3N,UAAU,IAAkB/2B,EAAIG,GAAO5C,EAAgByC,CAAK,CAG3O,IAAIg9B,EAAW,EAAQ,OACnB2H,EAAetT,OAAO,eACtBuT,EAAcvT,OAAO,cACrBwT,EAASxT,OAAO,SAChByT,EAASzT,OAAO,SAChB0T,EAAe1T,OAAO,eACtB2T,EAAiB3T,OAAO,iBACxB4T,EAAU5T,OAAO,UACrB,SAAS6T,EAAiB3nC,EAAOs1B,GAC/B,MAAO,CACLt1B,MAAOA,EACPs1B,KAAMA,EAEV,CACA,SAASsS,EAAeC,GACtB,IAAIC,EAAUD,EAAKT,GACnB,GAAgB,OAAZU,EAAkB,CACpB,IAAI3oC,EAAO0oC,EAAKH,GAASvK,OAIZ,OAATh+B,IACF0oC,EAAKL,GAAgB,KACrBK,EAAKT,GAAgB,KACrBS,EAAKR,GAAe,KACpBS,EAAQH,EAAiBxoC,GAAM,IAEnC,CACF,CACA,SAAS4oC,EAAWF,GAGlBhO,EAAQC,SAAS8N,EAAgBC,EACnC,CAYA,IAAIG,EAAyBhkC,OAAO+5B,gBAAe,WAAa,IAC5DkK,EAAuCjkC,OAAOkkC,gBAmD/CpB,EAnD+DD,EAAwB,CACxF,UAAItS,GACF,OAAOh2B,KAAKmpC,EACd,EACA/gB,KAAM,WACJ,IAAIgb,EAAQpjC,KAGRuB,EAAQvB,KAAK+oC,GACjB,GAAc,OAAVxnC,EACF,OAAOqoC,QAAQC,OAAOtoC,GAExB,GAAIvB,KAAKgpC,GACP,OAAOY,QAAQL,QAAQH,OAAiB9gC,GAAW,IAErD,GAAItI,KAAKmpC,GAASrN,UAKhB,OAAO,IAAI8N,SAAQ,SAAUL,EAASM,GACpCvO,EAAQC,UAAS,WACX6H,EAAM2F,GACRc,EAAOzG,EAAM2F,IAEbQ,EAAQH,OAAiB9gC,GAAW,GAExC,GACF,IAOF,IACIwhC,EADAC,EAAc/pC,KAAKipC,GAEvB,GAAIc,EACFD,EAAU,IAAIF,QAlDpB,SAAqBG,EAAaT,GAChC,OAAO,SAAUC,EAASM,GACxBE,EAAYC,MAAK,WACXV,EAAKN,GACPO,EAAQH,OAAiB9gC,GAAW,IAGtCghC,EAAKJ,GAAgBK,EAASM,EAChC,GAAGA,EACL,CACF,CAwC4BI,CAAYF,EAAa/pC,WAC1C,CAGL,IAAIY,EAAOZ,KAAKmpC,GAASvK,OACzB,GAAa,OAATh+B,EACF,OAAOgpC,QAAQL,QAAQH,EAAiBxoC,GAAM,IAEhDkpC,EAAU,IAAIF,QAAQ5pC,KAAKkpC,GAC7B,CAEA,OADAlpC,KAAKipC,GAAgBa,EACdA,CACT,GACwCvU,OAAO+N,eAAe,WAC9D,OAAOtjC,IACT,IAAIuoC,EAAgBD,EAAuB,UAAU,WACnD,IAAI4B,EAASlqC,KAIb,OAAO,IAAI4pC,SAAQ,SAAUL,EAASM,GACpCK,EAAOf,GAASrK,QAAQ,MAAM,SAAU70B,GAClCA,EACF4/B,EAAO5/B,GAGTs/B,EAAQH,OAAiB9gC,GAAW,GACtC,GACF,GACF,IAAIggC,GAAwBmB,GA4D5B/kC,EAAOrF,QA3DiC,SAA2C22B,GACjF,IAAImU,EACAC,EAAW3kC,OAAOsuB,OAAO2V,GAA4DnB,EAArB4B,EAAiB,CAAC,EAAmChB,EAAS,CAChI1nC,MAAOu0B,EACPiF,UAAU,IACRsN,EAAgB4B,EAAgBtB,EAAc,CAChDpnC,MAAO,KACPw5B,UAAU,IACRsN,EAAgB4B,EAAgBrB,EAAa,CAC/CrnC,MAAO,KACPw5B,UAAU,IACRsN,EAAgB4B,EAAgBpB,EAAQ,CAC1CtnC,MAAO,KACPw5B,UAAU,IACRsN,EAAgB4B,EAAgBnB,EAAQ,CAC1CvnC,MAAOu0B,EAAO6F,eAAekC,WAC7B9C,UAAU,IACRsN,EAAgB4B,EAAgBjB,EAAgB,CAClDznC,MAAO,SAAe8nC,EAASM,GAC7B,IAAIjpC,EAAOwpC,EAASjB,GAASvK,OACzBh+B,GACFwpC,EAASnB,GAAgB,KACzBmB,EAASvB,GAAgB,KACzBuB,EAAStB,GAAe,KACxBS,EAAQH,EAAiBxoC,GAAM,MAE/BwpC,EAASvB,GAAgBU,EACzBa,EAAStB,GAAee,EAE5B,EACA5O,UAAU,IACRkP,IA0BJ,OAzBAC,EAASnB,GAAgB,KACzB/H,EAASlL,GAAQ,SAAU/rB,GACzB,GAAIA,GAAoB,+BAAbA,EAAI+G,KAAuC,CACpD,IAAI64B,EAASO,EAAStB,GAUtB,OAPe,OAAXe,IACFO,EAASnB,GAAgB,KACzBmB,EAASvB,GAAgB,KACzBuB,EAAStB,GAAe,KACxBe,EAAO5/B,SAETmgC,EAASrB,GAAU9+B,EAErB,CACA,IAAIs/B,EAAUa,EAASvB,GACP,OAAZU,IACFa,EAASnB,GAAgB,KACzBmB,EAASvB,GAAgB,KACzBuB,EAAStB,GAAe,KACxBS,EAAQH,OAAiB9gC,GAAW,KAEtC8hC,EAASpB,IAAU,CACrB,IACAhT,EAAO6L,GAAG,WAAY2H,EAAWnG,KAAK,KAAM+G,IACrCA,CACT,C,+BChLA,SAASC,EAAQzC,EAAQ0C,GAAkB,IAAI5kC,EAAOD,OAAOC,KAAKkiC,GAAS,GAAIniC,OAAO8kC,sBAAuB,CAAE,IAAIC,EAAU/kC,OAAO8kC,sBAAsB3C,GAAS0C,IAAmBE,EAAUA,EAAQplC,QAAO,SAAUqlC,GAAO,OAAOhlC,OAAOilC,yBAAyB9C,EAAQ6C,GAAK/O,UAAY,KAAKh2B,EAAKV,KAAKC,MAAMS,EAAM8kC,EAAU,CAAE,OAAO9kC,CAAM,CACpV,SAASilC,EAAcC,GAAU,IAAK,IAAIr/B,EAAI,EAAGA,EAAIrG,UAAU5D,OAAQiK,IAAK,CAAE,IAAIs/B,EAAS,MAAQ3lC,UAAUqG,GAAKrG,UAAUqG,GAAK,CAAC,EAAGA,EAAI,EAAI8+B,EAAQ5kC,OAAOolC,IAAS,GAAI7nC,SAAQ,SAAUqB,GAAOkkC,EAAgBqC,EAAQvmC,EAAKwmC,EAAOxmC,GAAO,IAAKoB,OAAOqlC,0BAA4BrlC,OAAOslC,iBAAiBH,EAAQnlC,OAAOqlC,0BAA0BD,IAAWR,EAAQ5kC,OAAOolC,IAAS7nC,SAAQ,SAAUqB,GAAOoB,OAAOg2B,eAAemP,EAAQvmC,EAAKoB,OAAOilC,yBAAyBG,EAAQxmC,GAAO,GAAI,CAAE,OAAOumC,CAAQ,CACzf,SAASrC,EAAgBrkC,EAAKG,EAAK5C,GAA4L,OAAnL4C,EAAMskC,EAAetkC,MAAiBH,EAAOuB,OAAOg2B,eAAev3B,EAAKG,EAAK,CAAE5C,MAAOA,EAAOi6B,YAAY,EAAMkN,cAAc,EAAM3N,UAAU,IAAkB/2B,EAAIG,GAAO5C,EAAgByC,CAAK,CAE3O,SAAS8mC,EAAkBJ,EAAQK,GAAS,IAAK,IAAI1/B,EAAI,EAAGA,EAAI0/B,EAAM3pC,OAAQiK,IAAK,CAAE,IAAI2/B,EAAaD,EAAM1/B,GAAI2/B,EAAWxP,WAAawP,EAAWxP,aAAc,EAAOwP,EAAWtC,cAAe,EAAU,UAAWsC,IAAYA,EAAWjQ,UAAW,GAAMx1B,OAAOg2B,eAAemP,EAAQjC,EAAeuC,EAAW7mC,KAAM6mC,EAAa,CAAE,CAE5U,SAASvC,EAAenjC,GAAO,IAAInB,EACnC,SAAsB4B,EAAOob,GAAQ,GAAqB,iBAAVpb,GAAgC,OAAVA,EAAgB,OAAOA,EAAO,IAAIuiC,EAAOviC,EAAMsvB,OAAOkT,aAAc,QAAangC,IAATkgC,EAAoB,CAAE,IAAIhmC,EAAMgmC,EAAKjoC,KAAK0F,EAAOob,UAAoB,GAAmB,iBAAR7e,EAAkB,OAAOA,EAAK,MAAM,IAAIouB,UAAU,+CAAiD,CAAE,OAA4B7kB,OAAiB9F,EAAQ,CAD/UyiC,CAAaljC,GAAgB,MAAsB,iBAARnB,EAAmBA,EAAM0H,OAAO1H,EAAM,CAE1H,IACEnD,EADa,EAAQ,OACHA,OAElB8S,EADc,EAAQ,OACFA,QAClBm3B,EAASn3B,GAAWA,EAAQm3B,QAAU,UAI1CzmC,EAAOrF,QAAuB,WAC5B,SAAS09B,KAdX,SAAyBqO,EAAUC,GAAe,KAAMD,aAAoBC,GAAgB,MAAM,IAAIza,UAAU,oCAAwC,CAepJ0a,CAAgBtrC,KAAM+8B,GACtB/8B,KAAKigC,KAAO,KACZjgC,KAAK8tB,KAAO,KACZ9tB,KAAKsB,OAAS,CAChB,CAjBF,IAAsB+pC,EAAaE,EA8KjC,OA9KoBF,EAkBPtO,GAlBoBwO,EAkBR,CAAC,CACxBlnC,IAAK,OACL5C,MAAO,SAAcooB,GACnB,IAAI4a,EAAQ,CACV7jC,KAAMipB,EACNzB,KAAM,MAEJpoB,KAAKsB,OAAS,EAAGtB,KAAK8tB,KAAK1F,KAAOqc,EAAWzkC,KAAKigC,KAAOwE,EAC7DzkC,KAAK8tB,KAAO2W,IACVzkC,KAAKsB,MACT,GACC,CACD+C,IAAK,UACL5C,MAAO,SAAiBooB,GACtB,IAAI4a,EAAQ,CACV7jC,KAAMipB,EACNzB,KAAMpoB,KAAKigC,MAEO,IAAhBjgC,KAAKsB,SAActB,KAAK8tB,KAAO2W,GACnCzkC,KAAKigC,KAAOwE,IACVzkC,KAAKsB,MACT,GACC,CACD+C,IAAK,QACL5C,MAAO,WACL,GAAoB,IAAhBzB,KAAKsB,OAAT,CACA,IAAI+T,EAAMrV,KAAKigC,KAAKr/B,KAGpB,OAFoB,IAAhBZ,KAAKsB,OAActB,KAAKigC,KAAOjgC,KAAK8tB,KAAO,KAAU9tB,KAAKigC,KAAOjgC,KAAKigC,KAAK7X,OAC7EpoB,KAAKsB,OACA+T,CAJsB,CAK/B,GACC,CACDhR,IAAK,QACL5C,MAAO,WACLzB,KAAKigC,KAAOjgC,KAAK8tB,KAAO,KACxB9tB,KAAKsB,OAAS,CAChB,GACC,CACD+C,IAAK,OACL5C,MAAO,SAAcod,GACnB,GAAoB,IAAhB7e,KAAKsB,OAAc,MAAO,GAG9B,IAFA,IAAIqO,EAAI3P,KAAKigC,KACT5qB,EAAM,GAAK1F,EAAE/O,KACV+O,EAAIA,EAAEyY,MAAM/S,GAAOwJ,EAAIlP,EAAE/O,KAChC,OAAOyU,CACT,GACC,CACDhR,IAAK,SACL5C,MAAO,SAAgBie,GACrB,GAAoB,IAAhB1f,KAAKsB,OAAc,OAAOJ,EAAO6B,MAAM,GAI3C,IAHA,IA5DcsyB,EAAKuV,EAAQvpC,EA4DvBgU,EAAMnU,EAAOwrB,YAAYhN,IAAM,GAC/B/P,EAAI3P,KAAKigC,KACT10B,EAAI,EACDoE,GA/DO0lB,EAgED1lB,EAAE/O,KAhEIgqC,EAgEEv1B,EAhEMhU,EAgEDkK,EA/D9BrK,EAAOjB,UAAUiD,KAAK3C,KAAK80B,EAAKuV,EAAQvpC,GAgElCkK,GAAKoE,EAAE/O,KAAKU,OACZqO,EAAIA,EAAEyY,KAER,OAAO/S,CACT,GAGC,CACDhR,IAAK,UACL5C,MAAO,SAAiBie,EAAG8rB,GACzB,IAAIn2B,EAYJ,OAXIqK,EAAI1f,KAAKigC,KAAKr/B,KAAKU,QAErB+T,EAAMrV,KAAKigC,KAAKr/B,KAAKgC,MAAM,EAAG8c,GAC9B1f,KAAKigC,KAAKr/B,KAAOZ,KAAKigC,KAAKr/B,KAAKgC,MAAM8c,IAGtCrK,EAFSqK,IAAM1f,KAAKigC,KAAKr/B,KAAKU,OAExBtB,KAAKsiB,QAGLkpB,EAAaxrC,KAAKyrC,WAAW/rB,GAAK1f,KAAK0rC,WAAWhsB,GAEnDrK,CACT,GACC,CACDhR,IAAK,QACL5C,MAAO,WACL,OAAOzB,KAAKigC,KAAKr/B,IACnB,GAGC,CACDyD,IAAK,aACL5C,MAAO,SAAoBie,GACzB,IAAI/P,EAAI3P,KAAKigC,KACT/tB,EAAI,EACJmD,EAAM1F,EAAE/O,KAEZ,IADA8e,GAAKrK,EAAI/T,OACFqO,EAAIA,EAAEyY,MAAM,CACjB,IAAI7e,EAAMoG,EAAE/O,KACR+qC,EAAKjsB,EAAInW,EAAIjI,OAASiI,EAAIjI,OAASoe,EAGvC,GAFIisB,IAAOpiC,EAAIjI,OAAQ+T,GAAO9L,EAAS8L,GAAO9L,EAAI3G,MAAM,EAAG8c,GAEjD,IADVA,GAAKisB,GACQ,CACPA,IAAOpiC,EAAIjI,UACX4Q,EACEvC,EAAEyY,KAAMpoB,KAAKigC,KAAOtwB,EAAEyY,KAAUpoB,KAAKigC,KAAOjgC,KAAK8tB,KAAO,OAE5D9tB,KAAKigC,KAAOtwB,EACZA,EAAE/O,KAAO2I,EAAI3G,MAAM+oC,IAErB,KACF,GACEz5B,CACJ,CAEA,OADAlS,KAAKsB,QAAU4Q,EACRmD,CACT,GAGC,CACDhR,IAAK,aACL5C,MAAO,SAAoBie,GACzB,IAAIrK,EAAMnU,EAAOwrB,YAAYhN,GACzB/P,EAAI3P,KAAKigC,KACT/tB,EAAI,EAGR,IAFAvC,EAAE/O,KAAKsC,KAAKmS,GACZqK,GAAK/P,EAAE/O,KAAKU,OACLqO,EAAIA,EAAEyY,MAAM,CACjB,IAAIld,EAAMyE,EAAE/O,KACR+qC,EAAKjsB,EAAIxU,EAAI5J,OAAS4J,EAAI5J,OAASoe,EAGvC,GAFAxU,EAAIhI,KAAKmS,EAAKA,EAAI/T,OAASoe,EAAG,EAAGisB,GAEvB,IADVjsB,GAAKisB,GACQ,CACPA,IAAOzgC,EAAI5J,UACX4Q,EACEvC,EAAEyY,KAAMpoB,KAAKigC,KAAOtwB,EAAEyY,KAAUpoB,KAAKigC,KAAOjgC,KAAK8tB,KAAO,OAE5D9tB,KAAKigC,KAAOtwB,EACZA,EAAE/O,KAAOsK,EAAItI,MAAM+oC,IAErB,KACF,GACEz5B,CACJ,CAEA,OADAlS,KAAKsB,QAAU4Q,EACRmD,CACT,GAGC,CACDhR,IAAK8mC,EACL1pC,MAAO,SAAe2e,EAAGvf,GACvB,OAAOmT,EAAQhU,KAAM2qC,EAAcA,EAAc,CAAC,EAAG9pC,GAAU,CAAC,EAAG,CAEjE+qC,MAAO,EAEPC,eAAe,IAEnB,MA5K0Eb,EAAkBK,EAAYprC,UAAWsrC,GAA2E9lC,OAAOg2B,eAAe4P,EAAa,YAAa,CAAEpQ,UAAU,IA8KrP8B,CACT,CApK8B,E,8CCiC9B,SAAS+O,EAAoBz3B,EAAMpK,GACjC8hC,EAAY13B,EAAMpK,GAClB+hC,EAAY33B,EACd,CACA,SAAS23B,EAAY33B,GACfA,EAAK+mB,iBAAmB/mB,EAAK+mB,eAAemD,WAC5ClqB,EAAKwnB,iBAAmBxnB,EAAKwnB,eAAe0C,WAChDlqB,EAAKurB,KAAK,QACZ,CAkBA,SAASmM,EAAY13B,EAAMpK,GACzBoK,EAAKurB,KAAK,QAAS31B,EACrB,CAYAvF,EAAOrF,QAAU,CACfy/B,QAzFF,SAAiB70B,EAAKkyB,GACpB,IAAIiH,EAAQpjC,KACRisC,EAAoBjsC,KAAK67B,gBAAkB77B,KAAK67B,eAAeC,UAC/DoQ,EAAoBlsC,KAAKo7B,gBAAkBp7B,KAAKo7B,eAAeU,UACnE,OAAImQ,GAAqBC,GACnB/P,EACFA,EAAGlyB,GACMA,IACJjK,KAAKo7B,eAEEp7B,KAAKo7B,eAAekL,eAC9BtmC,KAAKo7B,eAAekL,cAAe,EACnChL,EAAQC,SAASwQ,EAAa/rC,KAAMiK,IAHpCqxB,EAAQC,SAASwQ,EAAa/rC,KAAMiK,IAMjCjK,OAMLA,KAAK67B,iBACP77B,KAAK67B,eAAeC,WAAY,GAI9B97B,KAAKo7B,iBACPp7B,KAAKo7B,eAAeU,WAAY,GAElC97B,KAAK++B,SAAS90B,GAAO,MAAM,SAAUA,IAC9BkyB,GAAMlyB,EACJm5B,EAAMhI,eAECgI,EAAMhI,eAAekL,aAI/BhL,EAAQC,SAASyQ,EAAa5I,IAH9BA,EAAMhI,eAAekL,cAAe,EACpChL,EAAQC,SAASuQ,EAAqB1I,EAAOn5B,IAH7CqxB,EAAQC,SAASuQ,EAAqB1I,EAAOn5B,GAOtCkyB,GACTb,EAAQC,SAASyQ,EAAa5I,GAC9BjH,EAAGlyB,IAEHqxB,EAAQC,SAASyQ,EAAa5I,EAElC,IACOpjC,KACT,EA2CE8/B,UAjCF,WACM9/B,KAAK67B,iBACP77B,KAAK67B,eAAeC,WAAY,EAChC97B,KAAK67B,eAAemC,SAAU,EAC9Bh+B,KAAK67B,eAAeR,OAAQ,EAC5Br7B,KAAK67B,eAAekC,YAAa,GAE/B/9B,KAAKo7B,iBACPp7B,KAAKo7B,eAAeU,WAAY,EAChC97B,KAAKo7B,eAAeC,OAAQ,EAC5Br7B,KAAKo7B,eAAewK,QAAS,EAC7B5lC,KAAKo7B,eAAeuK,aAAc,EAClC3lC,KAAKo7B,eAAeyL,aAAc,EAClC7mC,KAAKo7B,eAAe8F,UAAW,EAC/BlhC,KAAKo7B,eAAekL,cAAe,EAEvC,EAkBE/I,eAdF,SAAwBvH,EAAQ/rB,GAO9B,IAAIw9B,EAASzR,EAAO6F,eAChBoF,EAASjL,EAAOoF,eAChBqM,GAAUA,EAAOjJ,aAAeyC,GAAUA,EAAOzC,YAAaxI,EAAO8I,QAAQ70B,GAAU+rB,EAAO4J,KAAK,QAAS31B,EAClH,E,+BCrFA,IAAIkiC,EAA6B,sCAYjC,SAASC,IAAQ,CAoEjB1nC,EAAOrF,QAhEP,SAASgtC,EAAIrW,EAAQpC,EAAMgR,GACzB,GAAoB,mBAAThR,EAAqB,OAAOyY,EAAIrW,EAAQ,KAAMpC,GACpDA,IAAMA,EAAO,CAAC,GACnBgR,EAlBF,SAAcA,GACZ,IAAI0H,GAAS,EACb,OAAO,WACL,IAAIA,EAAJ,CACAA,GAAS,EACT,IAAK,IAAIhe,EAAOppB,UAAU5D,OAAQuC,EAAO,IAAInC,MAAM4sB,GAAO3C,EAAO,EAAGA,EAAO2C,EAAM3C,IAC/E9nB,EAAK8nB,GAAQzmB,UAAUymB,GAEzBiZ,EAAS3/B,MAAMjF,KAAM6D,EALH,CAMpB,CACF,CAQaq3B,CAAK0J,GAAYwH,GAC5B,IAAIpR,EAAWpH,EAAKoH,WAA8B,IAAlBpH,EAAKoH,UAAsBhF,EAAOgF,SAC9DC,EAAWrH,EAAKqH,WAA8B,IAAlBrH,EAAKqH,UAAsBjF,EAAOiF,SAC9DsR,EAAiB,WACdvW,EAAOiF,UAAUkH,GACxB,EACIqK,EAAgBxW,EAAOoF,gBAAkBpF,EAAOoF,eAAe8F,SAC/DiB,EAAW,WACblH,GAAW,EACXuR,GAAgB,EACXxR,GAAU4J,EAASrkC,KAAKy1B,EAC/B,EACIyW,EAAgBzW,EAAO6F,gBAAkB7F,EAAO6F,eAAekC,WAC/D5C,EAAQ,WACVH,GAAW,EACXyR,GAAgB,EACXxR,GAAU2J,EAASrkC,KAAKy1B,EAC/B,EACIqM,EAAU,SAAiBp4B,GAC7B26B,EAASrkC,KAAKy1B,EAAQ/rB,EACxB,EACIi4B,EAAU,WACZ,IAAIj4B,EACJ,OAAI+wB,IAAayR,GACVzW,EAAO6F,gBAAmB7F,EAAO6F,eAAeR,QAAOpxB,EAAM,IAAIkiC,GAC/DvH,EAASrkC,KAAKy1B,EAAQ/rB,IAE3BgxB,IAAauR,GACVxW,EAAOoF,gBAAmBpF,EAAOoF,eAAeC,QAAOpxB,EAAM,IAAIkiC,GAC/DvH,EAASrkC,KAAKy1B,EAAQ/rB,SAF/B,CAIF,EACIyiC,EAAY,WACd1W,EAAO2W,IAAI9K,GAAG,SAAUM,EAC1B,EAcA,OAtDF,SAAmBnM,GACjB,OAAOA,EAAO4W,WAAqC,mBAAjB5W,EAAO6W,KAC3C,CAuCMC,CAAU9W,IACZA,EAAO6L,GAAG,WAAYM,GACtBnM,EAAO6L,GAAG,QAASK,GACflM,EAAO2W,IAAKD,IAAiB1W,EAAO6L,GAAG,UAAW6K,IAC7CzR,IAAajF,EAAOoF,iBAE7BpF,EAAO6L,GAAG,MAAO0K,GACjBvW,EAAO6L,GAAG,QAAS0K,IAErBvW,EAAO6L,GAAG,MAAO1G,GACjBnF,EAAO6L,GAAG,SAAUM,IACD,IAAfvO,EAAKryB,OAAiBy0B,EAAO6L,GAAG,QAASQ,GAC7CrM,EAAO6L,GAAG,QAASK,GACZ,WACLlM,EAAOiM,eAAe,WAAYE,GAClCnM,EAAOiM,eAAe,QAASC,GAC/BlM,EAAOiM,eAAe,UAAWyK,GAC7B1W,EAAO2W,KAAK3W,EAAO2W,IAAI1K,eAAe,SAAUE,GACpDnM,EAAOiM,eAAe,MAAOsK,GAC7BvW,EAAOiM,eAAe,QAASsK,GAC/BvW,EAAOiM,eAAe,SAAUE,GAChCnM,EAAOiM,eAAe,MAAO9G,GAC7BnF,EAAOiM,eAAe,QAASI,GAC/BrM,EAAOiM,eAAe,QAASC,EACjC,CACF,C,WCpFAx9B,EAAOrF,QAAU,WACf,MAAM,IAAIsG,MAAM,gDAClB,C,+BCGA,IAAI0mC,EASAnP,EAAiB,WACnB6P,EAAmB7P,EAAe6P,iBAClC1H,EAAuBnI,EAAemI,qBACxC,SAAS+G,EAAKniC,GAEZ,GAAIA,EAAK,MAAMA,CACjB,CA+BA,SAAS1J,EAAKqiC,GACZA,GACF,CACA,SAASrB,EAAKxzB,EAAMi/B,GAClB,OAAOj/B,EAAKwzB,KAAKyL,EACnB,CA6BAtoC,EAAOrF,QAvBP,WACE,IAAK,IAAIivB,EAAOppB,UAAU5D,OAAQ2rC,EAAU,IAAIvrC,MAAM4sB,GAAO3C,EAAO,EAAGA,EAAO2C,EAAM3C,IAClFshB,EAAQthB,GAAQzmB,UAAUymB,GAE5B,IAKIpqB,EALAqjC,EATN,SAAqBqI,GACnB,OAAKA,EAAQ3rC,OAC8B,mBAAhC2rC,EAAQA,EAAQ3rC,OAAS,GAA0B8qC,EACvDa,EAAQC,MAFad,CAG9B,CAKiBe,CAAYF,GAE3B,GADIvrC,MAAMC,QAAQsrC,EAAQ,MAAKA,EAAUA,EAAQ,IAC7CA,EAAQ3rC,OAAS,EACnB,MAAM,IAAIyrC,EAAiB,WAG7B,IAAIK,EAAWH,EAAQrrC,KAAI,SAAUo0B,EAAQzqB,GAC3C,IAAIyyB,EAAUzyB,EAAI0hC,EAAQ3rC,OAAS,EAEnC,OAnDJ,SAAmB00B,EAAQgI,EAAS+H,EAASnB,GAC3CA,EAnBF,SAAcA,GACZ,IAAI0H,GAAS,EACb,OAAO,WACDA,IACJA,GAAS,EACT1H,EAAS3/B,WAAM,EAAQC,WACzB,CACF,CAYag2B,CAAK0J,GAChB,IAAIyI,GAAS,EACbrX,EAAO6L,GAAG,SAAS,WACjBwL,GAAS,CACX,SACY/kC,IAAR+jC,IAAmBA,EAAM,EAAQ,QACrCA,EAAIrW,EAAQ,CACVgF,SAAUgD,EACV/C,SAAU8K,IACT,SAAU97B,GACX,GAAIA,EAAK,OAAO26B,EAAS36B,GACzBojC,GAAS,EACTzI,GACF,IACA,IAAI9I,GAAY,EAChB,OAAO,SAAU7xB,GACf,IAAIojC,IACAvR,EAIJ,OAHAA,GAAY,EAtBhB,SAAmB9F,GACjB,OAAOA,EAAO4W,WAAqC,mBAAjB5W,EAAO6W,KAC3C,CAuBQC,CAAU9W,GAAgBA,EAAO6W,QACP,mBAAnB7W,EAAO8I,QAA+B9I,EAAO8I,eACxD8F,EAAS36B,GAAO,IAAIo7B,EAAqB,QAC3C,CACF,CAyBWiI,CAAUtX,EAAQgI,EADXzyB,EAAI,GACyB,SAAUtB,GAC9C1I,IAAOA,EAAQ0I,GAChBA,GAAKmjC,EAASpqC,QAAQzC,GACtBy9B,IACJoP,EAASpqC,QAAQzC,GACjBqkC,EAASrjC,GACX,GACF,IACA,OAAO0rC,EAAQM,OAAOhM,EACxB,C,+BClFA,IAAIiM,EAAwB,iCAiB5B9oC,EAAOrF,QAAU,CACf49B,iBAdF,SAA0Bx5B,EAAO5C,EAAS4sC,EAAWhQ,GACnD,IAAIiQ,EAJN,SAA2B7sC,EAAS48B,EAAUgQ,GAC5C,OAAgC,MAAzB5sC,EAAQ86B,cAAwB96B,EAAQ86B,cAAgB8B,EAAW58B,EAAQ4sC,GAAa,IACjG,CAEYE,CAAkB9sC,EAAS48B,EAAUgQ,GAC/C,GAAW,MAAPC,EAAa,CACf,IAAME,SAASF,IAAQl7B,KAAKq7B,MAAMH,KAASA,GAAQA,EAAM,EAEvD,MAAM,IAAIF,EADC/P,EAAWgQ,EAAY,gBACIC,GAExC,OAAOl7B,KAAKq7B,MAAMH,EACpB,CAGA,OAAOjqC,EAAMi6B,WAAa,GAAK,KACjC,E,kBClBAh5B,EAAOrF,QAAU,EAAjB,mB,mBCAAA,EAAUqF,EAAOrF,QAAU,EAAjB,QACFo9B,OAASp9B,EACjBA,EAAQy7B,SAAWz7B,EACnBA,EAAQg3B,SAAW,EAAnB,OACAh3B,EAAQw7B,OAAS,EAAjB,OACAx7B,EAAQ2tB,UAAY,EAApB,OACA3tB,EAAQ28B,YAAc,EAAtB,OACA38B,EAAQ6hC,SAAW,EAAnB,OACA7hC,EAAQyuC,SAAW,EAAnB,M","sources":["webpack://@sunwebgroup/design-system/../node_modules/asn1.js/lib/asn1.js","webpack://@sunwebgroup/design-system/../node_modules/asn1.js/lib/asn1/api.js","webpack://@sunwebgroup/design-system/../node_modules/asn1.js/lib/asn1/base/buffer.js","webpack://@sunwebgroup/design-system/../node_modules/asn1.js/lib/asn1/base/index.js","webpack://@sunwebgroup/design-system/../node_modules/asn1.js/lib/asn1/base/node.js","webpack://@sunwebgroup/design-system/../node_modules/asn1.js/lib/asn1/base/reporter.js","webpack://@sunwebgroup/design-system/../node_modules/asn1.js/lib/asn1/constants/der.js","webpack://@sunwebgroup/design-system/../node_modules/asn1.js/lib/asn1/constants/index.js","webpack://@sunwebgroup/design-system/../node_modules/asn1.js/lib/asn1/decoders/der.js","webpack://@sunwebgroup/design-system/../node_modules/asn1.js/lib/asn1/decoders/index.js","webpack://@sunwebgroup/design-system/../node_modules/asn1.js/lib/asn1/decoders/pem.js","webpack://@sunwebgroup/design-system/../node_modules/asn1.js/lib/asn1/encoders/der.js","webpack://@sunwebgroup/design-system/../node_modules/asn1.js/lib/asn1/encoders/index.js","webpack://@sunwebgroup/design-system/../node_modules/asn1.js/lib/asn1/encoders/pem.js","webpack://@sunwebgroup/design-system/../node_modules/base64-js/index.js","webpack://@sunwebgroup/design-system/../node_modules/bn.js/lib/bn.js","webpack://@sunwebgroup/design-system/../node_modules/brorand/index.js","webpack://@sunwebgroup/design-system/../node_modules/browserify-aes/aes.js","webpack://@sunwebgroup/design-system/../node_modules/browserify-aes/authCipher.js","webpack://@sunwebgroup/design-system/../node_modules/browserify-aes/browser.js","webpack://@sunwebgroup/design-system/../node_modules/browserify-aes/decrypter.js","webpack://@sunwebgroup/design-system/../node_modules/browserify-aes/encrypter.js","webpack://@sunwebgroup/design-system/../node_modules/browserify-aes/ghash.js","webpack://@sunwebgroup/design-system/../node_modules/browserify-aes/incr32.js","webpack://@sunwebgroup/design-system/../node_modules/browserify-aes/modes/cbc.js","webpack://@sunwebgroup/design-system/../node_modules/browserify-aes/modes/cfb.js","webpack://@sunwebgroup/design-system/../node_modules/browserify-aes/modes/cfb1.js","webpack://@sunwebgroup/design-system/../node_modules/browserify-aes/modes/cfb8.js","webpack://@sunwebgroup/design-system/../node_modules/browserify-aes/modes/ctr.js","webpack://@sunwebgroup/design-system/../node_modules/browserify-aes/modes/ecb.js","webpack://@sunwebgroup/design-system/../node_modules/browserify-aes/modes/index.js","webpack://@sunwebgroup/design-system/../node_modules/browserify-aes/modes/ofb.js","webpack://@sunwebgroup/design-system/../node_modules/browserify-aes/streamCipher.js","webpack://@sunwebgroup/design-system/../node_modules/browserify-cipher/browser.js","webpack://@sunwebgroup/design-system/../node_modules/browserify-des/index.js","webpack://@sunwebgroup/design-system/../node_modules/browserify-des/modes.js","webpack://@sunwebgroup/design-system/../node_modules/browserify-rsa/index.js","webpack://@sunwebgroup/design-system/../node_modules/browserify-rsa/node_modules/bn.js/lib/bn.js","webpack://@sunwebgroup/design-system/../node_modules/browserify-sign/algos.js","webpack://@sunwebgroup/design-system/../node_modules/browserify-sign/browser/index.js","webpack://@sunwebgroup/design-system/../node_modules/browserify-sign/browser/sign.js","webpack://@sunwebgroup/design-system/../node_modules/browserify-sign/browser/verify.js","webpack://@sunwebgroup/design-system/../node_modules/browserify-sign/node_modules/bn.js/lib/bn.js","webpack://@sunwebgroup/design-system/../node_modules/browserify-sign/node_modules/readable-stream/errors-browser.js","webpack://@sunwebgroup/design-system/../node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_duplex.js","webpack://@sunwebgroup/design-system/../node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_passthrough.js","webpack://@sunwebgroup/design-system/../node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_readable.js","webpack://@sunwebgroup/design-system/../node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_transform.js","webpack://@sunwebgroup/design-system/../node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_writable.js","webpack://@sunwebgroup/design-system/../node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/async_iterator.js","webpack://@sunwebgroup/design-system/../node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/buffer_list.js","webpack://@sunwebgroup/design-system/../node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/destroy.js","webpack://@sunwebgroup/design-system/../node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/end-of-stream.js","webpack://@sunwebgroup/design-system/../node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/from-browser.js","webpack://@sunwebgroup/design-system/../node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/pipeline.js","webpack://@sunwebgroup/design-system/../node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/state.js","webpack://@sunwebgroup/design-system/../node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/stream-browser.js","webpack://@sunwebgroup/design-system/../node_modules/browserify-sign/node_modules/readable-stream/readable-browser.js"],"sourcesContent":["'use strict';\n\nconst asn1 = exports;\n\nasn1.bignum = require('bn.js');\n\nasn1.define = require('./asn1/api').define;\nasn1.base = require('./asn1/base');\nasn1.constants = require('./asn1/constants');\nasn1.decoders = require('./asn1/decoders');\nasn1.encoders = require('./asn1/encoders');\n","'use strict';\n\nconst encoders = require('./encoders');\nconst decoders = require('./decoders');\nconst inherits = require('inherits');\n\nconst api = exports;\n\napi.define = function define(name, body) {\n return new Entity(name, body);\n};\n\nfunction Entity(name, body) {\n this.name = name;\n this.body = body;\n\n this.decoders = {};\n this.encoders = {};\n}\n\nEntity.prototype._createNamed = function createNamed(Base) {\n const name = this.name;\n\n function Generated(entity) {\n this._initNamed(entity, name);\n }\n inherits(Generated, Base);\n Generated.prototype._initNamed = function _initNamed(entity, name) {\n Base.call(this, entity, name);\n };\n\n return new Generated(this);\n};\n\nEntity.prototype._getDecoder = function _getDecoder(enc) {\n enc = enc || 'der';\n // Lazily create decoder\n if (!this.decoders.hasOwnProperty(enc))\n this.decoders[enc] = this._createNamed(decoders[enc]);\n return this.decoders[enc];\n};\n\nEntity.prototype.decode = function decode(data, enc, options) {\n return this._getDecoder(enc).decode(data, options);\n};\n\nEntity.prototype._getEncoder = function _getEncoder(enc) {\n enc = enc || 'der';\n // Lazily create encoder\n if (!this.encoders.hasOwnProperty(enc))\n this.encoders[enc] = this._createNamed(encoders[enc]);\n return this.encoders[enc];\n};\n\nEntity.prototype.encode = function encode(data, enc, /* internal */ reporter) {\n return this._getEncoder(enc).encode(data, reporter);\n};\n","'use strict';\n\nconst inherits = require('inherits');\nconst Reporter = require('../base/reporter').Reporter;\nconst Buffer = require('safer-buffer').Buffer;\n\nfunction DecoderBuffer(base, options) {\n Reporter.call(this, options);\n if (!Buffer.isBuffer(base)) {\n this.error('Input not Buffer');\n return;\n }\n\n this.base = base;\n this.offset = 0;\n this.length = base.length;\n}\ninherits(DecoderBuffer, Reporter);\nexports.DecoderBuffer = DecoderBuffer;\n\nDecoderBuffer.isDecoderBuffer = function isDecoderBuffer(data) {\n if (data instanceof DecoderBuffer) {\n return true;\n }\n\n // Or accept compatible API\n const isCompatible = typeof data === 'object' &&\n Buffer.isBuffer(data.base) &&\n data.constructor.name === 'DecoderBuffer' &&\n typeof data.offset === 'number' &&\n typeof data.length === 'number' &&\n typeof data.save === 'function' &&\n typeof data.restore === 'function' &&\n typeof data.isEmpty === 'function' &&\n typeof data.readUInt8 === 'function' &&\n typeof data.skip === 'function' &&\n typeof data.raw === 'function';\n\n return isCompatible;\n};\n\nDecoderBuffer.prototype.save = function save() {\n return { offset: this.offset, reporter: Reporter.prototype.save.call(this) };\n};\n\nDecoderBuffer.prototype.restore = function restore(save) {\n // Return skipped data\n const res = new DecoderBuffer(this.base);\n res.offset = save.offset;\n res.length = this.offset;\n\n this.offset = save.offset;\n Reporter.prototype.restore.call(this, save.reporter);\n\n return res;\n};\n\nDecoderBuffer.prototype.isEmpty = function isEmpty() {\n return this.offset === this.length;\n};\n\nDecoderBuffer.prototype.readUInt8 = function readUInt8(fail) {\n if (this.offset + 1 <= this.length)\n return this.base.readUInt8(this.offset++, true);\n else\n return this.error(fail || 'DecoderBuffer overrun');\n};\n\nDecoderBuffer.prototype.skip = function skip(bytes, fail) {\n if (!(this.offset + bytes <= this.length))\n return this.error(fail || 'DecoderBuffer overrun');\n\n const res = new DecoderBuffer(this.base);\n\n // Share reporter state\n res._reporterState = this._reporterState;\n\n res.offset = this.offset;\n res.length = this.offset + bytes;\n this.offset += bytes;\n return res;\n};\n\nDecoderBuffer.prototype.raw = function raw(save) {\n return this.base.slice(save ? save.offset : this.offset, this.length);\n};\n\nfunction EncoderBuffer(value, reporter) {\n if (Array.isArray(value)) {\n this.length = 0;\n this.value = value.map(function(item) {\n if (!EncoderBuffer.isEncoderBuffer(item))\n item = new EncoderBuffer(item, reporter);\n this.length += item.length;\n return item;\n }, this);\n } else if (typeof value === 'number') {\n if (!(0 <= value && value <= 0xff))\n return reporter.error('non-byte EncoderBuffer value');\n this.value = value;\n this.length = 1;\n } else if (typeof value === 'string') {\n this.value = value;\n this.length = Buffer.byteLength(value);\n } else if (Buffer.isBuffer(value)) {\n this.value = value;\n this.length = value.length;\n } else {\n return reporter.error('Unsupported type: ' + typeof value);\n }\n}\nexports.EncoderBuffer = EncoderBuffer;\n\nEncoderBuffer.isEncoderBuffer = function isEncoderBuffer(data) {\n if (data instanceof EncoderBuffer) {\n return true;\n }\n\n // Or accept compatible API\n const isCompatible = typeof data === 'object' &&\n data.constructor.name === 'EncoderBuffer' &&\n typeof data.length === 'number' &&\n typeof data.join === 'function';\n\n return isCompatible;\n};\n\nEncoderBuffer.prototype.join = function join(out, offset) {\n if (!out)\n out = Buffer.alloc(this.length);\n if (!offset)\n offset = 0;\n\n if (this.length === 0)\n return out;\n\n if (Array.isArray(this.value)) {\n this.value.forEach(function(item) {\n item.join(out, offset);\n offset += item.length;\n });\n } else {\n if (typeof this.value === 'number')\n out[offset] = this.value;\n else if (typeof this.value === 'string')\n out.write(this.value, offset);\n else if (Buffer.isBuffer(this.value))\n this.value.copy(out, offset);\n offset += this.length;\n }\n\n return out;\n};\n","'use strict';\n\nconst base = exports;\n\nbase.Reporter = require('./reporter').Reporter;\nbase.DecoderBuffer = require('./buffer').DecoderBuffer;\nbase.EncoderBuffer = require('./buffer').EncoderBuffer;\nbase.Node = require('./node');\n","'use strict';\n\nconst Reporter = require('../base/reporter').Reporter;\nconst EncoderBuffer = require('../base/buffer').EncoderBuffer;\nconst DecoderBuffer = require('../base/buffer').DecoderBuffer;\nconst assert = require('minimalistic-assert');\n\n// Supported tags\nconst tags = [\n 'seq', 'seqof', 'set', 'setof', 'objid', 'bool',\n 'gentime', 'utctime', 'null_', 'enum', 'int', 'objDesc',\n 'bitstr', 'bmpstr', 'charstr', 'genstr', 'graphstr', 'ia5str', 'iso646str',\n 'numstr', 'octstr', 'printstr', 't61str', 'unistr', 'utf8str', 'videostr'\n];\n\n// Public methods list\nconst methods = [\n 'key', 'obj', 'use', 'optional', 'explicit', 'implicit', 'def', 'choice',\n 'any', 'contains'\n].concat(tags);\n\n// Overrided methods list\nconst overrided = [\n '_peekTag', '_decodeTag', '_use',\n '_decodeStr', '_decodeObjid', '_decodeTime',\n '_decodeNull', '_decodeInt', '_decodeBool', '_decodeList',\n\n '_encodeComposite', '_encodeStr', '_encodeObjid', '_encodeTime',\n '_encodeNull', '_encodeInt', '_encodeBool'\n];\n\nfunction Node(enc, parent, name) {\n const state = {};\n this._baseState = state;\n\n state.name = name;\n state.enc = enc;\n\n state.parent = parent || null;\n state.children = null;\n\n // State\n state.tag = null;\n state.args = null;\n state.reverseArgs = null;\n state.choice = null;\n state.optional = false;\n state.any = false;\n state.obj = false;\n state.use = null;\n state.useDecoder = null;\n state.key = null;\n state['default'] = null;\n state.explicit = null;\n state.implicit = null;\n state.contains = null;\n\n // Should create new instance on each method\n if (!state.parent) {\n state.children = [];\n this._wrap();\n }\n}\nmodule.exports = Node;\n\nconst stateProps = [\n 'enc', 'parent', 'children', 'tag', 'args', 'reverseArgs', 'choice',\n 'optional', 'any', 'obj', 'use', 'alteredUse', 'key', 'default', 'explicit',\n 'implicit', 'contains'\n];\n\nNode.prototype.clone = function clone() {\n const state = this._baseState;\n const cstate = {};\n stateProps.forEach(function(prop) {\n cstate[prop] = state[prop];\n });\n const res = new this.constructor(cstate.parent);\n res._baseState = cstate;\n return res;\n};\n\nNode.prototype._wrap = function wrap() {\n const state = this._baseState;\n methods.forEach(function(method) {\n this[method] = function _wrappedMethod() {\n const clone = new this.constructor(this);\n state.children.push(clone);\n return clone[method].apply(clone, arguments);\n };\n }, this);\n};\n\nNode.prototype._init = function init(body) {\n const state = this._baseState;\n\n assert(state.parent === null);\n body.call(this);\n\n // Filter children\n state.children = state.children.filter(function(child) {\n return child._baseState.parent === this;\n }, this);\n assert.equal(state.children.length, 1, 'Root node can have only one child');\n};\n\nNode.prototype._useArgs = function useArgs(args) {\n const state = this._baseState;\n\n // Filter children and args\n const children = args.filter(function(arg) {\n return arg instanceof this.constructor;\n }, this);\n args = args.filter(function(arg) {\n return !(arg instanceof this.constructor);\n }, this);\n\n if (children.length !== 0) {\n assert(state.children === null);\n state.children = children;\n\n // Replace parent to maintain backward link\n children.forEach(function(child) {\n child._baseState.parent = this;\n }, this);\n }\n if (args.length !== 0) {\n assert(state.args === null);\n state.args = args;\n state.reverseArgs = args.map(function(arg) {\n if (typeof arg !== 'object' || arg.constructor !== Object)\n return arg;\n\n const res = {};\n Object.keys(arg).forEach(function(key) {\n if (key == (key | 0))\n key |= 0;\n const value = arg[key];\n res[value] = key;\n });\n return res;\n });\n }\n};\n\n//\n// Overrided methods\n//\n\noverrided.forEach(function(method) {\n Node.prototype[method] = function _overrided() {\n const state = this._baseState;\n throw new Error(method + ' not implemented for encoding: ' + state.enc);\n };\n});\n\n//\n// Public methods\n//\n\ntags.forEach(function(tag) {\n Node.prototype[tag] = function _tagMethod() {\n const state = this._baseState;\n const args = Array.prototype.slice.call(arguments);\n\n assert(state.tag === null);\n state.tag = tag;\n\n this._useArgs(args);\n\n return this;\n };\n});\n\nNode.prototype.use = function use(item) {\n assert(item);\n const state = this._baseState;\n\n assert(state.use === null);\n state.use = item;\n\n return this;\n};\n\nNode.prototype.optional = function optional() {\n const state = this._baseState;\n\n state.optional = true;\n\n return this;\n};\n\nNode.prototype.def = function def(val) {\n const state = this._baseState;\n\n assert(state['default'] === null);\n state['default'] = val;\n state.optional = true;\n\n return this;\n};\n\nNode.prototype.explicit = function explicit(num) {\n const state = this._baseState;\n\n assert(state.explicit === null && state.implicit === null);\n state.explicit = num;\n\n return this;\n};\n\nNode.prototype.implicit = function implicit(num) {\n const state = this._baseState;\n\n assert(state.explicit === null && state.implicit === null);\n state.implicit = num;\n\n return this;\n};\n\nNode.prototype.obj = function obj() {\n const state = this._baseState;\n const args = Array.prototype.slice.call(arguments);\n\n state.obj = true;\n\n if (args.length !== 0)\n this._useArgs(args);\n\n return this;\n};\n\nNode.prototype.key = function key(newKey) {\n const state = this._baseState;\n\n assert(state.key === null);\n state.key = newKey;\n\n return this;\n};\n\nNode.prototype.any = function any() {\n const state = this._baseState;\n\n state.any = true;\n\n return this;\n};\n\nNode.prototype.choice = function choice(obj) {\n const state = this._baseState;\n\n assert(state.choice === null);\n state.choice = obj;\n this._useArgs(Object.keys(obj).map(function(key) {\n return obj[key];\n }));\n\n return this;\n};\n\nNode.prototype.contains = function contains(item) {\n const state = this._baseState;\n\n assert(state.use === null);\n state.contains = item;\n\n return this;\n};\n\n//\n// Decoding\n//\n\nNode.prototype._decode = function decode(input, options) {\n const state = this._baseState;\n\n // Decode root node\n if (state.parent === null)\n return input.wrapResult(state.children[0]._decode(input, options));\n\n let result = state['default'];\n let present = true;\n\n let prevKey = null;\n if (state.key !== null)\n prevKey = input.enterKey(state.key);\n\n // Check if tag is there\n if (state.optional) {\n let tag = null;\n if (state.explicit !== null)\n tag = state.explicit;\n else if (state.implicit !== null)\n tag = state.implicit;\n else if (state.tag !== null)\n tag = state.tag;\n\n if (tag === null && !state.any) {\n // Trial and Error\n const save = input.save();\n try {\n if (state.choice === null)\n this._decodeGeneric(state.tag, input, options);\n else\n this._decodeChoice(input, options);\n present = true;\n } catch (e) {\n present = false;\n }\n input.restore(save);\n } else {\n present = this._peekTag(input, tag, state.any);\n\n if (input.isError(present))\n return present;\n }\n }\n\n // Push object on stack\n let prevObj;\n if (state.obj && present)\n prevObj = input.enterObject();\n\n if (present) {\n // Unwrap explicit values\n if (state.explicit !== null) {\n const explicit = this._decodeTag(input, state.explicit);\n if (input.isError(explicit))\n return explicit;\n input = explicit;\n }\n\n const start = input.offset;\n\n // Unwrap implicit and normal values\n if (state.use === null && state.choice === null) {\n let save;\n if (state.any)\n save = input.save();\n const body = this._decodeTag(\n input,\n state.implicit !== null ? state.implicit : state.tag,\n state.any\n );\n if (input.isError(body))\n return body;\n\n if (state.any)\n result = input.raw(save);\n else\n input = body;\n }\n\n if (options && options.track && state.tag !== null)\n options.track(input.path(), start, input.length, 'tagged');\n\n if (options && options.track && state.tag !== null)\n options.track(input.path(), input.offset, input.length, 'content');\n\n // Select proper method for tag\n if (state.any) {\n // no-op\n } else if (state.choice === null) {\n result = this._decodeGeneric(state.tag, input, options);\n } else {\n result = this._decodeChoice(input, options);\n }\n\n if (input.isError(result))\n return result;\n\n // Decode children\n if (!state.any && state.choice === null && state.children !== null) {\n state.children.forEach(function decodeChildren(child) {\n // NOTE: We are ignoring errors here, to let parser continue with other\n // parts of encoded data\n child._decode(input, options);\n });\n }\n\n // Decode contained/encoded by schema, only in bit or octet strings\n if (state.contains && (state.tag === 'octstr' || state.tag === 'bitstr')) {\n const data = new DecoderBuffer(result);\n result = this._getUse(state.contains, input._reporterState.obj)\n ._decode(data, options);\n }\n }\n\n // Pop object\n if (state.obj && present)\n result = input.leaveObject(prevObj);\n\n // Set key\n if (state.key !== null && (result !== null || present === true))\n input.leaveKey(prevKey, state.key, result);\n else if (prevKey !== null)\n input.exitKey(prevKey);\n\n return result;\n};\n\nNode.prototype._decodeGeneric = function decodeGeneric(tag, input, options) {\n const state = this._baseState;\n\n if (tag === 'seq' || tag === 'set')\n return null;\n if (tag === 'seqof' || tag === 'setof')\n return this._decodeList(input, tag, state.args[0], options);\n else if (/str$/.test(tag))\n return this._decodeStr(input, tag, options);\n else if (tag === 'objid' && state.args)\n return this._decodeObjid(input, state.args[0], state.args[1], options);\n else if (tag === 'objid')\n return this._decodeObjid(input, null, null, options);\n else if (tag === 'gentime' || tag === 'utctime')\n return this._decodeTime(input, tag, options);\n else if (tag === 'null_')\n return this._decodeNull(input, options);\n else if (tag === 'bool')\n return this._decodeBool(input, options);\n else if (tag === 'objDesc')\n return this._decodeStr(input, tag, options);\n else if (tag === 'int' || tag === 'enum')\n return this._decodeInt(input, state.args && state.args[0], options);\n\n if (state.use !== null) {\n return this._getUse(state.use, input._reporterState.obj)\n ._decode(input, options);\n } else {\n return input.error('unknown tag: ' + tag);\n }\n};\n\nNode.prototype._getUse = function _getUse(entity, obj) {\n\n const state = this._baseState;\n // Create altered use decoder if implicit is set\n state.useDecoder = this._use(entity, obj);\n assert(state.useDecoder._baseState.parent === null);\n state.useDecoder = state.useDecoder._baseState.children[0];\n if (state.implicit !== state.useDecoder._baseState.implicit) {\n state.useDecoder = state.useDecoder.clone();\n state.useDecoder._baseState.implicit = state.implicit;\n }\n return state.useDecoder;\n};\n\nNode.prototype._decodeChoice = function decodeChoice(input, options) {\n const state = this._baseState;\n let result = null;\n let match = false;\n\n Object.keys(state.choice).some(function(key) {\n const save = input.save();\n const node = state.choice[key];\n try {\n const value = node._decode(input, options);\n if (input.isError(value))\n return false;\n\n result = { type: key, value: value };\n match = true;\n } catch (e) {\n input.restore(save);\n return false;\n }\n return true;\n }, this);\n\n if (!match)\n return input.error('Choice not matched');\n\n return result;\n};\n\n//\n// Encoding\n//\n\nNode.prototype._createEncoderBuffer = function createEncoderBuffer(data) {\n return new EncoderBuffer(data, this.reporter);\n};\n\nNode.prototype._encode = function encode(data, reporter, parent) {\n const state = this._baseState;\n if (state['default'] !== null && state['default'] === data)\n return;\n\n const result = this._encodeValue(data, reporter, parent);\n if (result === undefined)\n return;\n\n if (this._skipDefault(result, reporter, parent))\n return;\n\n return result;\n};\n\nNode.prototype._encodeValue = function encode(data, reporter, parent) {\n const state = this._baseState;\n\n // Decode root node\n if (state.parent === null)\n return state.children[0]._encode(data, reporter || new Reporter());\n\n let result = null;\n\n // Set reporter to share it with a child class\n this.reporter = reporter;\n\n // Check if data is there\n if (state.optional && data === undefined) {\n if (state['default'] !== null)\n data = state['default'];\n else\n return;\n }\n\n // Encode children first\n let content = null;\n let primitive = false;\n if (state.any) {\n // Anything that was given is translated to buffer\n result = this._createEncoderBuffer(data);\n } else if (state.choice) {\n result = this._encodeChoice(data, reporter);\n } else if (state.contains) {\n content = this._getUse(state.contains, parent)._encode(data, reporter);\n primitive = true;\n } else if (state.children) {\n content = state.children.map(function(child) {\n if (child._baseState.tag === 'null_')\n return child._encode(null, reporter, data);\n\n if (child._baseState.key === null)\n return reporter.error('Child should have a key');\n const prevKey = reporter.enterKey(child._baseState.key);\n\n if (typeof data !== 'object')\n return reporter.error('Child expected, but input is not object');\n\n const res = child._encode(data[child._baseState.key], reporter, data);\n reporter.leaveKey(prevKey);\n\n return res;\n }, this).filter(function(child) {\n return child;\n });\n content = this._createEncoderBuffer(content);\n } else {\n if (state.tag === 'seqof' || state.tag === 'setof') {\n // TODO(indutny): this should be thrown on DSL level\n if (!(state.args && state.args.length === 1))\n return reporter.error('Too many args for : ' + state.tag);\n\n if (!Array.isArray(data))\n return reporter.error('seqof/setof, but data is not Array');\n\n const child = this.clone();\n child._baseState.implicit = null;\n content = this._createEncoderBuffer(data.map(function(item) {\n const state = this._baseState;\n\n return this._getUse(state.args[0], data)._encode(item, reporter);\n }, child));\n } else if (state.use !== null) {\n result = this._getUse(state.use, parent)._encode(data, reporter);\n } else {\n content = this._encodePrimitive(state.tag, data);\n primitive = true;\n }\n }\n\n // Encode data itself\n if (!state.any && state.choice === null) {\n const tag = state.implicit !== null ? state.implicit : state.tag;\n const cls = state.implicit === null ? 'universal' : 'context';\n\n if (tag === null) {\n if (state.use === null)\n reporter.error('Tag could be omitted only for .use()');\n } else {\n if (state.use === null)\n result = this._encodeComposite(tag, primitive, cls, content);\n }\n }\n\n // Wrap in explicit\n if (state.explicit !== null)\n result = this._encodeComposite(state.explicit, false, 'context', result);\n\n return result;\n};\n\nNode.prototype._encodeChoice = function encodeChoice(data, reporter) {\n const state = this._baseState;\n\n const node = state.choice[data.type];\n if (!node) {\n assert(\n false,\n data.type + ' not found in ' +\n JSON.stringify(Object.keys(state.choice)));\n }\n return node._encode(data.value, reporter);\n};\n\nNode.prototype._encodePrimitive = function encodePrimitive(tag, data) {\n const state = this._baseState;\n\n if (/str$/.test(tag))\n return this._encodeStr(data, tag);\n else if (tag === 'objid' && state.args)\n return this._encodeObjid(data, state.reverseArgs[0], state.args[1]);\n else if (tag === 'objid')\n return this._encodeObjid(data, null, null);\n else if (tag === 'gentime' || tag === 'utctime')\n return this._encodeTime(data, tag);\n else if (tag === 'null_')\n return this._encodeNull();\n else if (tag === 'int' || tag === 'enum')\n return this._encodeInt(data, state.args && state.reverseArgs[0]);\n else if (tag === 'bool')\n return this._encodeBool(data);\n else if (tag === 'objDesc')\n return this._encodeStr(data, tag);\n else\n throw new Error('Unsupported tag: ' + tag);\n};\n\nNode.prototype._isNumstr = function isNumstr(str) {\n return /^[0-9 ]*$/.test(str);\n};\n\nNode.prototype._isPrintstr = function isPrintstr(str) {\n return /^[A-Za-z0-9 '()+,-./:=?]*$/.test(str);\n};\n","'use strict';\n\nconst inherits = require('inherits');\n\nfunction Reporter(options) {\n this._reporterState = {\n obj: null,\n path: [],\n options: options || {},\n errors: []\n };\n}\nexports.Reporter = Reporter;\n\nReporter.prototype.isError = function isError(obj) {\n return obj instanceof ReporterError;\n};\n\nReporter.prototype.save = function save() {\n const state = this._reporterState;\n\n return { obj: state.obj, pathLen: state.path.length };\n};\n\nReporter.prototype.restore = function restore(data) {\n const state = this._reporterState;\n\n state.obj = data.obj;\n state.path = state.path.slice(0, data.pathLen);\n};\n\nReporter.prototype.enterKey = function enterKey(key) {\n return this._reporterState.path.push(key);\n};\n\nReporter.prototype.exitKey = function exitKey(index) {\n const state = this._reporterState;\n\n state.path = state.path.slice(0, index - 1);\n};\n\nReporter.prototype.leaveKey = function leaveKey(index, key, value) {\n const state = this._reporterState;\n\n this.exitKey(index);\n if (state.obj !== null)\n state.obj[key] = value;\n};\n\nReporter.prototype.path = function path() {\n return this._reporterState.path.join('/');\n};\n\nReporter.prototype.enterObject = function enterObject() {\n const state = this._reporterState;\n\n const prev = state.obj;\n state.obj = {};\n return prev;\n};\n\nReporter.prototype.leaveObject = function leaveObject(prev) {\n const state = this._reporterState;\n\n const now = state.obj;\n state.obj = prev;\n return now;\n};\n\nReporter.prototype.error = function error(msg) {\n let err;\n const state = this._reporterState;\n\n const inherited = msg instanceof ReporterError;\n if (inherited) {\n err = msg;\n } else {\n err = new ReporterError(state.path.map(function(elem) {\n return '[' + JSON.stringify(elem) + ']';\n }).join(''), msg.message || msg, msg.stack);\n }\n\n if (!state.options.partial)\n throw err;\n\n if (!inherited)\n state.errors.push(err);\n\n return err;\n};\n\nReporter.prototype.wrapResult = function wrapResult(result) {\n const state = this._reporterState;\n if (!state.options.partial)\n return result;\n\n return {\n result: this.isError(result) ? null : result,\n errors: state.errors\n };\n};\n\nfunction ReporterError(path, msg) {\n this.path = path;\n this.rethrow(msg);\n}\ninherits(ReporterError, Error);\n\nReporterError.prototype.rethrow = function rethrow(msg) {\n this.message = msg + ' at: ' + (this.path || '(shallow)');\n if (Error.captureStackTrace)\n Error.captureStackTrace(this, ReporterError);\n\n if (!this.stack) {\n try {\n // IE only adds stack when thrown\n throw new Error(this.message);\n } catch (e) {\n this.stack = e.stack;\n }\n }\n return this;\n};\n","'use strict';\n\n// Helper\nfunction reverse(map) {\n const res = {};\n\n Object.keys(map).forEach(function(key) {\n // Convert key to integer if it is stringified\n if ((key | 0) == key)\n key = key | 0;\n\n const value = map[key];\n res[value] = key;\n });\n\n return res;\n}\n\nexports.tagClass = {\n 0: 'universal',\n 1: 'application',\n 2: 'context',\n 3: 'private'\n};\nexports.tagClassByName = reverse(exports.tagClass);\n\nexports.tag = {\n 0x00: 'end',\n 0x01: 'bool',\n 0x02: 'int',\n 0x03: 'bitstr',\n 0x04: 'octstr',\n 0x05: 'null_',\n 0x06: 'objid',\n 0x07: 'objDesc',\n 0x08: 'external',\n 0x09: 'real',\n 0x0a: 'enum',\n 0x0b: 'embed',\n 0x0c: 'utf8str',\n 0x0d: 'relativeOid',\n 0x10: 'seq',\n 0x11: 'set',\n 0x12: 'numstr',\n 0x13: 'printstr',\n 0x14: 't61str',\n 0x15: 'videostr',\n 0x16: 'ia5str',\n 0x17: 'utctime',\n 0x18: 'gentime',\n 0x19: 'graphstr',\n 0x1a: 'iso646str',\n 0x1b: 'genstr',\n 0x1c: 'unistr',\n 0x1d: 'charstr',\n 0x1e: 'bmpstr'\n};\nexports.tagByName = reverse(exports.tag);\n","'use strict';\n\nconst constants = exports;\n\n// Helper\nconstants._reverse = function reverse(map) {\n const res = {};\n\n Object.keys(map).forEach(function(key) {\n // Convert key to integer if it is stringified\n if ((key | 0) == key)\n key = key | 0;\n\n const value = map[key];\n res[value] = key;\n });\n\n return res;\n};\n\nconstants.der = require('./der');\n","'use strict';\n\nconst inherits = require('inherits');\n\nconst bignum = require('bn.js');\nconst DecoderBuffer = require('../base/buffer').DecoderBuffer;\nconst Node = require('../base/node');\n\n// Import DER constants\nconst der = require('../constants/der');\n\nfunction DERDecoder(entity) {\n this.enc = 'der';\n this.name = entity.name;\n this.entity = entity;\n\n // Construct base tree\n this.tree = new DERNode();\n this.tree._init(entity.body);\n}\nmodule.exports = DERDecoder;\n\nDERDecoder.prototype.decode = function decode(data, options) {\n if (!DecoderBuffer.isDecoderBuffer(data)) {\n data = new DecoderBuffer(data, options);\n }\n\n return this.tree._decode(data, options);\n};\n\n// Tree methods\n\nfunction DERNode(parent) {\n Node.call(this, 'der', parent);\n}\ninherits(DERNode, Node);\n\nDERNode.prototype._peekTag = function peekTag(buffer, tag, any) {\n if (buffer.isEmpty())\n return false;\n\n const state = buffer.save();\n const decodedTag = derDecodeTag(buffer, 'Failed to peek tag: \"' + tag + '\"');\n if (buffer.isError(decodedTag))\n return decodedTag;\n\n buffer.restore(state);\n\n return decodedTag.tag === tag || decodedTag.tagStr === tag ||\n (decodedTag.tagStr + 'of') === tag || any;\n};\n\nDERNode.prototype._decodeTag = function decodeTag(buffer, tag, any) {\n const decodedTag = derDecodeTag(buffer,\n 'Failed to decode tag of \"' + tag + '\"');\n if (buffer.isError(decodedTag))\n return decodedTag;\n\n let len = derDecodeLen(buffer,\n decodedTag.primitive,\n 'Failed to get length of \"' + tag + '\"');\n\n // Failure\n if (buffer.isError(len))\n return len;\n\n if (!any &&\n decodedTag.tag !== tag &&\n decodedTag.tagStr !== tag &&\n decodedTag.tagStr + 'of' !== tag) {\n return buffer.error('Failed to match tag: \"' + tag + '\"');\n }\n\n if (decodedTag.primitive || len !== null)\n return buffer.skip(len, 'Failed to match body of: \"' + tag + '\"');\n\n // Indefinite length... find END tag\n const state = buffer.save();\n const res = this._skipUntilEnd(\n buffer,\n 'Failed to skip indefinite length body: \"' + this.tag + '\"');\n if (buffer.isError(res))\n return res;\n\n len = buffer.offset - state.offset;\n buffer.restore(state);\n return buffer.skip(len, 'Failed to match body of: \"' + tag + '\"');\n};\n\nDERNode.prototype._skipUntilEnd = function skipUntilEnd(buffer, fail) {\n for (;;) {\n const tag = derDecodeTag(buffer, fail);\n if (buffer.isError(tag))\n return tag;\n const len = derDecodeLen(buffer, tag.primitive, fail);\n if (buffer.isError(len))\n return len;\n\n let res;\n if (tag.primitive || len !== null)\n res = buffer.skip(len);\n else\n res = this._skipUntilEnd(buffer, fail);\n\n // Failure\n if (buffer.isError(res))\n return res;\n\n if (tag.tagStr === 'end')\n break;\n }\n};\n\nDERNode.prototype._decodeList = function decodeList(buffer, tag, decoder,\n options) {\n const result = [];\n while (!buffer.isEmpty()) {\n const possibleEnd = this._peekTag(buffer, 'end');\n if (buffer.isError(possibleEnd))\n return possibleEnd;\n\n const res = decoder.decode(buffer, 'der', options);\n if (buffer.isError(res) && possibleEnd)\n break;\n result.push(res);\n }\n return result;\n};\n\nDERNode.prototype._decodeStr = function decodeStr(buffer, tag) {\n if (tag === 'bitstr') {\n const unused = buffer.readUInt8();\n if (buffer.isError(unused))\n return unused;\n return { unused: unused, data: buffer.raw() };\n } else if (tag === 'bmpstr') {\n const raw = buffer.raw();\n if (raw.length % 2 === 1)\n return buffer.error('Decoding of string type: bmpstr length mismatch');\n\n let str = '';\n for (let i = 0; i < raw.length / 2; i++) {\n str += String.fromCharCode(raw.readUInt16BE(i * 2));\n }\n return str;\n } else if (tag === 'numstr') {\n const numstr = buffer.raw().toString('ascii');\n if (!this._isNumstr(numstr)) {\n return buffer.error('Decoding of string type: ' +\n 'numstr unsupported characters');\n }\n return numstr;\n } else if (tag === 'octstr') {\n return buffer.raw();\n } else if (tag === 'objDesc') {\n return buffer.raw();\n } else if (tag === 'printstr') {\n const printstr = buffer.raw().toString('ascii');\n if (!this._isPrintstr(printstr)) {\n return buffer.error('Decoding of string type: ' +\n 'printstr unsupported characters');\n }\n return printstr;\n } else if (/str$/.test(tag)) {\n return buffer.raw().toString();\n } else {\n return buffer.error('Decoding of string type: ' + tag + ' unsupported');\n }\n};\n\nDERNode.prototype._decodeObjid = function decodeObjid(buffer, values, relative) {\n let result;\n const identifiers = [];\n let ident = 0;\n let subident = 0;\n while (!buffer.isEmpty()) {\n subident = buffer.readUInt8();\n ident <<= 7;\n ident |= subident & 0x7f;\n if ((subident & 0x80) === 0) {\n identifiers.push(ident);\n ident = 0;\n }\n }\n if (subident & 0x80)\n identifiers.push(ident);\n\n const first = (identifiers[0] / 40) | 0;\n const second = identifiers[0] % 40;\n\n if (relative)\n result = identifiers;\n else\n result = [first, second].concat(identifiers.slice(1));\n\n if (values) {\n let tmp = values[result.join(' ')];\n if (tmp === undefined)\n tmp = values[result.join('.')];\n if (tmp !== undefined)\n result = tmp;\n }\n\n return result;\n};\n\nDERNode.prototype._decodeTime = function decodeTime(buffer, tag) {\n const str = buffer.raw().toString();\n\n let year;\n let mon;\n let day;\n let hour;\n let min;\n let sec;\n if (tag === 'gentime') {\n year = str.slice(0, 4) | 0;\n mon = str.slice(4, 6) | 0;\n day = str.slice(6, 8) | 0;\n hour = str.slice(8, 10) | 0;\n min = str.slice(10, 12) | 0;\n sec = str.slice(12, 14) | 0;\n } else if (tag === 'utctime') {\n year = str.slice(0, 2) | 0;\n mon = str.slice(2, 4) | 0;\n day = str.slice(4, 6) | 0;\n hour = str.slice(6, 8) | 0;\n min = str.slice(8, 10) | 0;\n sec = str.slice(10, 12) | 0;\n if (year < 70)\n year = 2000 + year;\n else\n year = 1900 + year;\n } else {\n return buffer.error('Decoding ' + tag + ' time is not supported yet');\n }\n\n return Date.UTC(year, mon - 1, day, hour, min, sec, 0);\n};\n\nDERNode.prototype._decodeNull = function decodeNull() {\n return null;\n};\n\nDERNode.prototype._decodeBool = function decodeBool(buffer) {\n const res = buffer.readUInt8();\n if (buffer.isError(res))\n return res;\n else\n return res !== 0;\n};\n\nDERNode.prototype._decodeInt = function decodeInt(buffer, values) {\n // Bigint, return as it is (assume big endian)\n const raw = buffer.raw();\n let res = new bignum(raw);\n\n if (values)\n res = values[res.toString(10)] || res;\n\n return res;\n};\n\nDERNode.prototype._use = function use(entity, obj) {\n if (typeof entity === 'function')\n entity = entity(obj);\n return entity._getDecoder('der').tree;\n};\n\n// Utility methods\n\nfunction derDecodeTag(buf, fail) {\n let tag = buf.readUInt8(fail);\n if (buf.isError(tag))\n return tag;\n\n const cls = der.tagClass[tag >> 6];\n const primitive = (tag & 0x20) === 0;\n\n // Multi-octet tag - load\n if ((tag & 0x1f) === 0x1f) {\n let oct = tag;\n tag = 0;\n while ((oct & 0x80) === 0x80) {\n oct = buf.readUInt8(fail);\n if (buf.isError(oct))\n return oct;\n\n tag <<= 7;\n tag |= oct & 0x7f;\n }\n } else {\n tag &= 0x1f;\n }\n const tagStr = der.tag[tag];\n\n return {\n cls: cls,\n primitive: primitive,\n tag: tag,\n tagStr: tagStr\n };\n}\n\nfunction derDecodeLen(buf, primitive, fail) {\n let len = buf.readUInt8(fail);\n if (buf.isError(len))\n return len;\n\n // Indefinite form\n if (!primitive && len === 0x80)\n return null;\n\n // Definite form\n if ((len & 0x80) === 0) {\n // Short form\n return len;\n }\n\n // Long form\n const num = len & 0x7f;\n if (num > 4)\n return buf.error('length octect is too long');\n\n len = 0;\n for (let i = 0; i < num; i++) {\n len <<= 8;\n const j = buf.readUInt8(fail);\n if (buf.isError(j))\n return j;\n len |= j;\n }\n\n return len;\n}\n","'use strict';\n\nconst decoders = exports;\n\ndecoders.der = require('./der');\ndecoders.pem = require('./pem');\n","'use strict';\n\nconst inherits = require('inherits');\nconst Buffer = require('safer-buffer').Buffer;\n\nconst DERDecoder = require('./der');\n\nfunction PEMDecoder(entity) {\n DERDecoder.call(this, entity);\n this.enc = 'pem';\n}\ninherits(PEMDecoder, DERDecoder);\nmodule.exports = PEMDecoder;\n\nPEMDecoder.prototype.decode = function decode(data, options) {\n const lines = data.toString().split(/[\\r\\n]+/g);\n\n const label = options.label.toUpperCase();\n\n const re = /^-----(BEGIN|END) ([^-]+)-----$/;\n let start = -1;\n let end = -1;\n for (let i = 0; i < lines.length; i++) {\n const match = lines[i].match(re);\n if (match === null)\n continue;\n\n if (match[2] !== label)\n continue;\n\n if (start === -1) {\n if (match[1] !== 'BEGIN')\n break;\n start = i;\n } else {\n if (match[1] !== 'END')\n break;\n end = i;\n break;\n }\n }\n if (start === -1 || end === -1)\n throw new Error('PEM section not found for: ' + label);\n\n const base64 = lines.slice(start + 1, end).join('');\n // Remove excessive symbols\n base64.replace(/[^a-z0-9+/=]+/gi, '');\n\n const input = Buffer.from(base64, 'base64');\n return DERDecoder.prototype.decode.call(this, input, options);\n};\n","'use strict';\n\nconst inherits = require('inherits');\nconst Buffer = require('safer-buffer').Buffer;\nconst Node = require('../base/node');\n\n// Import DER constants\nconst der = require('../constants/der');\n\nfunction DEREncoder(entity) {\n this.enc = 'der';\n this.name = entity.name;\n this.entity = entity;\n\n // Construct base tree\n this.tree = new DERNode();\n this.tree._init(entity.body);\n}\nmodule.exports = DEREncoder;\n\nDEREncoder.prototype.encode = function encode(data, reporter) {\n return this.tree._encode(data, reporter).join();\n};\n\n// Tree methods\n\nfunction DERNode(parent) {\n Node.call(this, 'der', parent);\n}\ninherits(DERNode, Node);\n\nDERNode.prototype._encodeComposite = function encodeComposite(tag,\n primitive,\n cls,\n content) {\n const encodedTag = encodeTag(tag, primitive, cls, this.reporter);\n\n // Short form\n if (content.length < 0x80) {\n const header = Buffer.alloc(2);\n header[0] = encodedTag;\n header[1] = content.length;\n return this._createEncoderBuffer([ header, content ]);\n }\n\n // Long form\n // Count octets required to store length\n let lenOctets = 1;\n for (let i = content.length; i >= 0x100; i >>= 8)\n lenOctets++;\n\n const header = Buffer.alloc(1 + 1 + lenOctets);\n header[0] = encodedTag;\n header[1] = 0x80 | lenOctets;\n\n for (let i = 1 + lenOctets, j = content.length; j > 0; i--, j >>= 8)\n header[i] = j & 0xff;\n\n return this._createEncoderBuffer([ header, content ]);\n};\n\nDERNode.prototype._encodeStr = function encodeStr(str, tag) {\n if (tag === 'bitstr') {\n return this._createEncoderBuffer([ str.unused | 0, str.data ]);\n } else if (tag === 'bmpstr') {\n const buf = Buffer.alloc(str.length * 2);\n for (let i = 0; i < str.length; i++) {\n buf.writeUInt16BE(str.charCodeAt(i), i * 2);\n }\n return this._createEncoderBuffer(buf);\n } else if (tag === 'numstr') {\n if (!this._isNumstr(str)) {\n return this.reporter.error('Encoding of string type: numstr supports ' +\n 'only digits and space');\n }\n return this._createEncoderBuffer(str);\n } else if (tag === 'printstr') {\n if (!this._isPrintstr(str)) {\n return this.reporter.error('Encoding of string type: printstr supports ' +\n 'only latin upper and lower case letters, ' +\n 'digits, space, apostrophe, left and rigth ' +\n 'parenthesis, plus sign, comma, hyphen, ' +\n 'dot, slash, colon, equal sign, ' +\n 'question mark');\n }\n return this._createEncoderBuffer(str);\n } else if (/str$/.test(tag)) {\n return this._createEncoderBuffer(str);\n } else if (tag === 'objDesc') {\n return this._createEncoderBuffer(str);\n } else {\n return this.reporter.error('Encoding of string type: ' + tag +\n ' unsupported');\n }\n};\n\nDERNode.prototype._encodeObjid = function encodeObjid(id, values, relative) {\n if (typeof id === 'string') {\n if (!values)\n return this.reporter.error('string objid given, but no values map found');\n if (!values.hasOwnProperty(id))\n return this.reporter.error('objid not found in values map');\n id = values[id].split(/[\\s.]+/g);\n for (let i = 0; i < id.length; i++)\n id[i] |= 0;\n } else if (Array.isArray(id)) {\n id = id.slice();\n for (let i = 0; i < id.length; i++)\n id[i] |= 0;\n }\n\n if (!Array.isArray(id)) {\n return this.reporter.error('objid() should be either array or string, ' +\n 'got: ' + JSON.stringify(id));\n }\n\n if (!relative) {\n if (id[1] >= 40)\n return this.reporter.error('Second objid identifier OOB');\n id.splice(0, 2, id[0] * 40 + id[1]);\n }\n\n // Count number of octets\n let size = 0;\n for (let i = 0; i < id.length; i++) {\n let ident = id[i];\n for (size++; ident >= 0x80; ident >>= 7)\n size++;\n }\n\n const objid = Buffer.alloc(size);\n let offset = objid.length - 1;\n for (let i = id.length - 1; i >= 0; i--) {\n let ident = id[i];\n objid[offset--] = ident & 0x7f;\n while ((ident >>= 7) > 0)\n objid[offset--] = 0x80 | (ident & 0x7f);\n }\n\n return this._createEncoderBuffer(objid);\n};\n\nfunction two(num) {\n if (num < 10)\n return '0' + num;\n else\n return num;\n}\n\nDERNode.prototype._encodeTime = function encodeTime(time, tag) {\n let str;\n const date = new Date(time);\n\n if (tag === 'gentime') {\n str = [\n two(date.getUTCFullYear()),\n two(date.getUTCMonth() + 1),\n two(date.getUTCDate()),\n two(date.getUTCHours()),\n two(date.getUTCMinutes()),\n two(date.getUTCSeconds()),\n 'Z'\n ].join('');\n } else if (tag === 'utctime') {\n str = [\n two(date.getUTCFullYear() % 100),\n two(date.getUTCMonth() + 1),\n two(date.getUTCDate()),\n two(date.getUTCHours()),\n two(date.getUTCMinutes()),\n two(date.getUTCSeconds()),\n 'Z'\n ].join('');\n } else {\n this.reporter.error('Encoding ' + tag + ' time is not supported yet');\n }\n\n return this._encodeStr(str, 'octstr');\n};\n\nDERNode.prototype._encodeNull = function encodeNull() {\n return this._createEncoderBuffer('');\n};\n\nDERNode.prototype._encodeInt = function encodeInt(num, values) {\n if (typeof num === 'string') {\n if (!values)\n return this.reporter.error('String int or enum given, but no values map');\n if (!values.hasOwnProperty(num)) {\n return this.reporter.error('Values map doesn\\'t contain: ' +\n JSON.stringify(num));\n }\n num = values[num];\n }\n\n // Bignum, assume big endian\n if (typeof num !== 'number' && !Buffer.isBuffer(num)) {\n const numArray = num.toArray();\n if (!num.sign && numArray[0] & 0x80) {\n numArray.unshift(0);\n }\n num = Buffer.from(numArray);\n }\n\n if (Buffer.isBuffer(num)) {\n let size = num.length;\n if (num.length === 0)\n size++;\n\n const out = Buffer.alloc(size);\n num.copy(out);\n if (num.length === 0)\n out[0] = 0;\n return this._createEncoderBuffer(out);\n }\n\n if (num < 0x80)\n return this._createEncoderBuffer(num);\n\n if (num < 0x100)\n return this._createEncoderBuffer([0, num]);\n\n let size = 1;\n for (let i = num; i >= 0x100; i >>= 8)\n size++;\n\n const out = new Array(size);\n for (let i = out.length - 1; i >= 0; i--) {\n out[i] = num & 0xff;\n num >>= 8;\n }\n if(out[0] & 0x80) {\n out.unshift(0);\n }\n\n return this._createEncoderBuffer(Buffer.from(out));\n};\n\nDERNode.prototype._encodeBool = function encodeBool(value) {\n return this._createEncoderBuffer(value ? 0xff : 0);\n};\n\nDERNode.prototype._use = function use(entity, obj) {\n if (typeof entity === 'function')\n entity = entity(obj);\n return entity._getEncoder('der').tree;\n};\n\nDERNode.prototype._skipDefault = function skipDefault(dataBuffer, reporter, parent) {\n const state = this._baseState;\n let i;\n if (state['default'] === null)\n return false;\n\n const data = dataBuffer.join();\n if (state.defaultBuffer === undefined)\n state.defaultBuffer = this._encodeValue(state['default'], reporter, parent).join();\n\n if (data.length !== state.defaultBuffer.length)\n return false;\n\n for (i=0; i < data.length; i++)\n if (data[i] !== state.defaultBuffer[i])\n return false;\n\n return true;\n};\n\n// Utility methods\n\nfunction encodeTag(tag, primitive, cls, reporter) {\n let res;\n\n if (tag === 'seqof')\n tag = 'seq';\n else if (tag === 'setof')\n tag = 'set';\n\n if (der.tagByName.hasOwnProperty(tag))\n res = der.tagByName[tag];\n else if (typeof tag === 'number' && (tag | 0) === tag)\n res = tag;\n else\n return reporter.error('Unknown tag: ' + tag);\n\n if (res >= 0x1f)\n return reporter.error('Multi-octet tag encoding unsupported');\n\n if (!primitive)\n res |= 0x20;\n\n res |= (der.tagClassByName[cls || 'universal'] << 6);\n\n return res;\n}\n","'use strict';\n\nconst encoders = exports;\n\nencoders.der = require('./der');\nencoders.pem = require('./pem');\n","'use strict';\n\nconst inherits = require('inherits');\n\nconst DEREncoder = require('./der');\n\nfunction PEMEncoder(entity) {\n DEREncoder.call(this, entity);\n this.enc = 'pem';\n}\ninherits(PEMEncoder, DEREncoder);\nmodule.exports = PEMEncoder;\n\nPEMEncoder.prototype.encode = function encode(data, options) {\n const buf = DEREncoder.prototype.encode.call(this, data);\n\n const p = buf.toString('base64');\n const out = [ '-----BEGIN ' + options.label + '-----' ];\n for (let i = 0; i < p.length; i += 64)\n out.push(p.slice(i, i + 64));\n out.push('-----END ' + options.label + '-----');\n return out.join('\\n');\n};\n","'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n var i\n for (i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n","(function (module, exports) {\n 'use strict';\n\n // Utils\n function assert (val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n }\n\n // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n function inherits (ctor, superCtor) {\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n\n // BN\n\n function BN (number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0;\n\n // Reduction context\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n\n var Buffer;\n try {\n if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n Buffer = window.Buffer;\n } else {\n Buffer = require('buffer').Buffer;\n }\n } catch (e) {\n }\n\n BN.isBN = function isBN (num) {\n if (num instanceof BN) {\n return true;\n }\n\n return num !== null && typeof num === 'object' &&\n num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n };\n\n BN.max = function max (left, right) {\n if (left.cmp(right) > 0) return left;\n return right;\n };\n\n BN.min = function min (left, right) {\n if (left.cmp(right) < 0) return left;\n return right;\n };\n\n BN.prototype._init = function init (number, base, endian) {\n if (typeof number === 'number') {\n return this._initNumber(number, base, endian);\n }\n\n if (typeof number === 'object') {\n return this._initArray(number, base, endian);\n }\n\n if (base === 'hex') {\n base = 16;\n }\n assert(base === (base | 0) && base >= 2 && base <= 36);\n\n number = number.toString().replace(/\\s+/g, '');\n var start = 0;\n if (number[0] === '-') {\n start++;\n this.negative = 1;\n }\n\n if (start < number.length) {\n if (base === 16) {\n this._parseHex(number, start, endian);\n } else {\n this._parseBase(number, base, start);\n if (endian === 'le') {\n this._initArray(this.toArray(), base, endian);\n }\n }\n }\n };\n\n BN.prototype._initNumber = function _initNumber (number, base, endian) {\n if (number < 0) {\n this.negative = 1;\n number = -number;\n }\n if (number < 0x4000000) {\n this.words = [ number & 0x3ffffff ];\n this.length = 1;\n } else if (number < 0x10000000000000) {\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff\n ];\n this.length = 2;\n } else {\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff,\n 1\n ];\n this.length = 3;\n }\n\n if (endian !== 'le') return;\n\n // Reverse the bytes\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initArray = function _initArray (number, base, endian) {\n // Perhaps a Uint8Array\n assert(typeof number.length === 'number');\n if (number.length <= 0) {\n this.words = [ 0 ];\n this.length = 1;\n return this;\n }\n\n this.length = Math.ceil(number.length / 3);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n var off = 0;\n if (endian === 'be') {\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n } else if (endian === 'le') {\n for (i = 0, j = 0; i < number.length; i += 3) {\n w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n }\n return this.strip();\n };\n\n function parseHex4Bits (string, index) {\n var c = string.charCodeAt(index);\n // 'A' - 'F'\n if (c >= 65 && c <= 70) {\n return c - 55;\n // 'a' - 'f'\n } else if (c >= 97 && c <= 102) {\n return c - 87;\n // '0' - '9'\n } else {\n return (c - 48) & 0xf;\n }\n }\n\n function parseHexByte (string, lowerBound, index) {\n var r = parseHex4Bits(string, index);\n if (index - 1 >= lowerBound) {\n r |= parseHex4Bits(string, index - 1) << 4;\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start, endian) {\n // Create possibly bigger array to ensure that it fits the number\n this.length = Math.ceil((number.length - start) / 6);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n // 24-bits chunks\n var off = 0;\n var j = 0;\n\n var w;\n if (endian === 'be') {\n for (i = number.length - 1; i >= start; i -= 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n } else {\n var parseLength = number.length - start;\n for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n }\n\n this.strip();\n };\n\n function parseBase (str, start, end, mul) {\n var r = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n r += c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n r += c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r += c;\n }\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [ 0 ];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n this.strip();\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype.strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n BN.prototype.inspect = function inspect () {\n return (this.red ? '';\n };\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n if (carry !== 0 || i !== this.length - 1) {\n out = zeros[6 - word.length] + word + out;\n } else {\n out = word + out;\n }\n off += 2;\n if (off >= 26) {\n off -= 26;\n i--;\n }\n }\n if (carry !== 0) {\n out = carry.toString(16) + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n if (base === (base | 0) && base >= 2 && base <= 36) {\n // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n var groupSize = groupSizes[base];\n // var groupBase = Math.pow(base, groupSize);\n var groupBase = groupBases[base];\n out = '';\n var c = this.clone();\n c.negative = 0;\n while (!c.isZero()) {\n var r = c.modn(groupBase).toString(base);\n c = c.idivn(groupBase);\n\n if (!c.isZero()) {\n out = zeros[groupSize - r.length] + r + out;\n } else {\n out = r + out;\n }\n }\n if (this.isZero()) {\n out = '0' + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n assert(false, 'Base should be between 2 and 36');\n };\n\n BN.prototype.toNumber = function toNumber () {\n var ret = this.words[0];\n if (this.length === 2) {\n ret += this.words[1] * 0x4000000;\n } else if (this.length === 3 && this.words[2] === 0x01) {\n // NOTE: at this stage it is known that the top bit is set\n ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n } else if (this.length > 2) {\n assert(false, 'Number can only safely store up to 53 bits');\n }\n return (this.negative !== 0) ? -ret : ret;\n };\n\n BN.prototype.toJSON = function toJSON () {\n return this.toString(16);\n };\n\n BN.prototype.toBuffer = function toBuffer (endian, length) {\n assert(typeof Buffer !== 'undefined');\n return this.toArrayLike(Buffer, endian, length);\n };\n\n BN.prototype.toArray = function toArray (endian, length) {\n return this.toArrayLike(Array, endian, length);\n };\n\n BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n var byteLength = this.byteLength();\n var reqLength = length || Math.max(1, byteLength);\n assert(byteLength <= reqLength, 'byte array longer than desired length');\n assert(reqLength > 0, 'Requested array length <= 0');\n\n this.strip();\n var littleEndian = endian === 'le';\n var res = new ArrayType(reqLength);\n\n var b, i;\n var q = this.clone();\n if (!littleEndian) {\n // Assume big-endian\n for (i = 0; i < reqLength - byteLength; i++) {\n res[i] = 0;\n }\n\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[reqLength - i - 1] = b;\n }\n } else {\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[i] = b;\n }\n\n for (; i < reqLength; i++) {\n res[i] = 0;\n }\n }\n\n return res;\n };\n\n if (Math.clz32) {\n BN.prototype._countBits = function _countBits (w) {\n return 32 - Math.clz32(w);\n };\n } else {\n BN.prototype._countBits = function _countBits (w) {\n var t = w;\n var r = 0;\n if (t >= 0x1000) {\n r += 13;\n t >>>= 13;\n }\n if (t >= 0x40) {\n r += 7;\n t >>>= 7;\n }\n if (t >= 0x8) {\n r += 4;\n t >>>= 4;\n }\n if (t >= 0x02) {\n r += 2;\n t >>>= 2;\n }\n return r + t;\n };\n }\n\n BN.prototype._zeroBits = function _zeroBits (w) {\n // Short-cut\n if (w === 0) return 26;\n\n var t = w;\n var r = 0;\n if ((t & 0x1fff) === 0) {\n r += 13;\n t >>>= 13;\n }\n if ((t & 0x7f) === 0) {\n r += 7;\n t >>>= 7;\n }\n if ((t & 0xf) === 0) {\n r += 4;\n t >>>= 4;\n }\n if ((t & 0x3) === 0) {\n r += 2;\n t >>>= 2;\n }\n if ((t & 0x1) === 0) {\n r++;\n }\n return r;\n };\n\n // Return number of used bits in a BN\n BN.prototype.bitLength = function bitLength () {\n var w = this.words[this.length - 1];\n var hi = this._countBits(w);\n return (this.length - 1) * 26 + hi;\n };\n\n function toBitArray (num) {\n var w = new Array(num.bitLength());\n\n for (var bit = 0; bit < w.length; bit++) {\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;\n }\n\n return w;\n }\n\n // Number of trailing zero bits\n BN.prototype.zeroBits = function zeroBits () {\n if (this.isZero()) return 0;\n\n var r = 0;\n for (var i = 0; i < this.length; i++) {\n var b = this._zeroBits(this.words[i]);\n r += b;\n if (b !== 26) break;\n }\n return r;\n };\n\n BN.prototype.byteLength = function byteLength () {\n return Math.ceil(this.bitLength() / 8);\n };\n\n BN.prototype.toTwos = function toTwos (width) {\n if (this.negative !== 0) {\n return this.abs().inotn(width).iaddn(1);\n }\n return this.clone();\n };\n\n BN.prototype.fromTwos = function fromTwos (width) {\n if (this.testn(width - 1)) {\n return this.notn(width).iaddn(1).ineg();\n }\n return this.clone();\n };\n\n BN.prototype.isNeg = function isNeg () {\n return this.negative !== 0;\n };\n\n // Return negative clone of `this`\n BN.prototype.neg = function neg () {\n return this.clone().ineg();\n };\n\n BN.prototype.ineg = function ineg () {\n if (!this.isZero()) {\n this.negative ^= 1;\n }\n\n return this;\n };\n\n // Or `num` with `this` in-place\n BN.prototype.iuor = function iuor (num) {\n while (this.length < num.length) {\n this.words[this.length++] = 0;\n }\n\n for (var i = 0; i < num.length; i++) {\n this.words[i] = this.words[i] | num.words[i];\n }\n\n return this.strip();\n };\n\n BN.prototype.ior = function ior (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuor(num);\n };\n\n // Or `num` with `this`\n BN.prototype.or = function or (num) {\n if (this.length > num.length) return this.clone().ior(num);\n return num.clone().ior(this);\n };\n\n BN.prototype.uor = function uor (num) {\n if (this.length > num.length) return this.clone().iuor(num);\n return num.clone().iuor(this);\n };\n\n // And `num` with `this` in-place\n BN.prototype.iuand = function iuand (num) {\n // b = min-length(num, this)\n var b;\n if (this.length > num.length) {\n b = num;\n } else {\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = this.words[i] & num.words[i];\n }\n\n this.length = b.length;\n\n return this.strip();\n };\n\n BN.prototype.iand = function iand (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuand(num);\n };\n\n // And `num` with `this`\n BN.prototype.and = function and (num) {\n if (this.length > num.length) return this.clone().iand(num);\n return num.clone().iand(this);\n };\n\n BN.prototype.uand = function uand (num) {\n if (this.length > num.length) return this.clone().iuand(num);\n return num.clone().iuand(this);\n };\n\n // Xor `num` with `this` in-place\n BN.prototype.iuxor = function iuxor (num) {\n // a.length > b.length\n var a;\n var b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = a.words[i] ^ b.words[i];\n }\n\n if (this !== a) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = a.length;\n\n return this.strip();\n };\n\n BN.prototype.ixor = function ixor (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuxor(num);\n };\n\n // Xor `num` with `this`\n BN.prototype.xor = function xor (num) {\n if (this.length > num.length) return this.clone().ixor(num);\n return num.clone().ixor(this);\n };\n\n BN.prototype.uxor = function uxor (num) {\n if (this.length > num.length) return this.clone().iuxor(num);\n return num.clone().iuxor(this);\n };\n\n // Not ``this`` with ``width`` bitwidth\n BN.prototype.inotn = function inotn (width) {\n assert(typeof width === 'number' && width >= 0);\n\n var bytesNeeded = Math.ceil(width / 26) | 0;\n var bitsLeft = width % 26;\n\n // Extend the buffer with leading zeroes\n this._expand(bytesNeeded);\n\n if (bitsLeft > 0) {\n bytesNeeded--;\n }\n\n // Handle complete words\n for (var i = 0; i < bytesNeeded; i++) {\n this.words[i] = ~this.words[i] & 0x3ffffff;\n }\n\n // Handle the residue\n if (bitsLeft > 0) {\n this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n }\n\n // And remove leading zeroes\n return this.strip();\n };\n\n BN.prototype.notn = function notn (width) {\n return this.clone().inotn(width);\n };\n\n // Set `bit` of `this`\n BN.prototype.setn = function setn (bit, val) {\n assert(typeof bit === 'number' && bit >= 0);\n\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n this._expand(off + 1);\n\n if (val) {\n this.words[off] = this.words[off] | (1 << wbit);\n } else {\n this.words[off] = this.words[off] & ~(1 << wbit);\n }\n\n return this.strip();\n };\n\n // Add `num` to `this` in-place\n BN.prototype.iadd = function iadd (num) {\n var r;\n\n // negative + positive\n if (this.negative !== 0 && num.negative === 0) {\n this.negative = 0;\n r = this.isub(num);\n this.negative ^= 1;\n return this._normSign();\n\n // positive + negative\n } else if (this.negative === 0 && num.negative !== 0) {\n num.negative = 0;\n r = this.isub(num);\n num.negative = 1;\n return r._normSign();\n }\n\n // a.length > b.length\n var a, b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n\n this.length = a.length;\n if (carry !== 0) {\n this.words[this.length] = carry;\n this.length++;\n // Copy the rest of the words\n } else if (a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n return this;\n };\n\n // Add `num` to `this`\n BN.prototype.add = function add (num) {\n var res;\n if (num.negative !== 0 && this.negative === 0) {\n num.negative = 0;\n res = this.sub(num);\n num.negative ^= 1;\n return res;\n } else if (num.negative === 0 && this.negative !== 0) {\n this.negative = 0;\n res = num.sub(this);\n this.negative = 1;\n return res;\n }\n\n if (this.length > num.length) return this.clone().iadd(num);\n\n return num.clone().iadd(this);\n };\n\n // Subtract `num` from `this` in-place\n BN.prototype.isub = function isub (num) {\n // this - (-num) = this + num\n if (num.negative !== 0) {\n num.negative = 0;\n var r = this.iadd(num);\n num.negative = 1;\n return r._normSign();\n\n // -this - num = -(this + num)\n } else if (this.negative !== 0) {\n this.negative = 0;\n this.iadd(num);\n this.negative = 1;\n return this._normSign();\n }\n\n // At this point both numbers are positive\n var cmp = this.cmp(num);\n\n // Optimization - zeroify\n if (cmp === 0) {\n this.negative = 0;\n this.length = 1;\n this.words[0] = 0;\n return this;\n }\n\n // a > b\n var a, b;\n if (cmp > 0) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n\n // Copy rest of the words\n if (carry === 0 && i < a.length && a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = Math.max(this.length, i);\n\n if (a !== this) {\n this.negative = 1;\n }\n\n return this.strip();\n };\n\n // Subtract `num` from `this`\n BN.prototype.sub = function sub (num) {\n return this.clone().isub(num);\n };\n\n function smallMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n var len = (self.length + num.length) | 0;\n out.length = len;\n len = (len - 1) | 0;\n\n // Peel one iteration (compiler can't do it, because of code complexity)\n var a = self.words[0] | 0;\n var b = num.words[0] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n var carry = (r / 0x4000000) | 0;\n out.words[0] = lo;\n\n for (var k = 1; k < len; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = carry >>> 26;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = (k - j) | 0;\n a = self.words[i] | 0;\n b = num.words[j] | 0;\n r = a * b + rword;\n ncarry += (r / 0x4000000) | 0;\n rword = r & 0x3ffffff;\n }\n out.words[k] = rword | 0;\n carry = ncarry | 0;\n }\n if (carry !== 0) {\n out.words[k] = carry | 0;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n // TODO(indutny): it may be reasonable to omit it for users who don't need\n // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n // multiplication (like elliptic secp256k1).\n var comb10MulTo = function comb10MulTo (self, num, out) {\n var a = self.words;\n var b = num.words;\n var o = out.words;\n var c = 0;\n var lo;\n var mid;\n var hi;\n var a0 = a[0] | 0;\n var al0 = a0 & 0x1fff;\n var ah0 = a0 >>> 13;\n var a1 = a[1] | 0;\n var al1 = a1 & 0x1fff;\n var ah1 = a1 >>> 13;\n var a2 = a[2] | 0;\n var al2 = a2 & 0x1fff;\n var ah2 = a2 >>> 13;\n var a3 = a[3] | 0;\n var al3 = a3 & 0x1fff;\n var ah3 = a3 >>> 13;\n var a4 = a[4] | 0;\n var al4 = a4 & 0x1fff;\n var ah4 = a4 >>> 13;\n var a5 = a[5] | 0;\n var al5 = a5 & 0x1fff;\n var ah5 = a5 >>> 13;\n var a6 = a[6] | 0;\n var al6 = a6 & 0x1fff;\n var ah6 = a6 >>> 13;\n var a7 = a[7] | 0;\n var al7 = a7 & 0x1fff;\n var ah7 = a7 >>> 13;\n var a8 = a[8] | 0;\n var al8 = a8 & 0x1fff;\n var ah8 = a8 >>> 13;\n var a9 = a[9] | 0;\n var al9 = a9 & 0x1fff;\n var ah9 = a9 >>> 13;\n var b0 = b[0] | 0;\n var bl0 = b0 & 0x1fff;\n var bh0 = b0 >>> 13;\n var b1 = b[1] | 0;\n var bl1 = b1 & 0x1fff;\n var bh1 = b1 >>> 13;\n var b2 = b[2] | 0;\n var bl2 = b2 & 0x1fff;\n var bh2 = b2 >>> 13;\n var b3 = b[3] | 0;\n var bl3 = b3 & 0x1fff;\n var bh3 = b3 >>> 13;\n var b4 = b[4] | 0;\n var bl4 = b4 & 0x1fff;\n var bh4 = b4 >>> 13;\n var b5 = b[5] | 0;\n var bl5 = b5 & 0x1fff;\n var bh5 = b5 >>> 13;\n var b6 = b[6] | 0;\n var bl6 = b6 & 0x1fff;\n var bh6 = b6 >>> 13;\n var b7 = b[7] | 0;\n var bl7 = b7 & 0x1fff;\n var bh7 = b7 >>> 13;\n var b8 = b[8] | 0;\n var bl8 = b8 & 0x1fff;\n var bh8 = b8 >>> 13;\n var b9 = b[9] | 0;\n var bl9 = b9 & 0x1fff;\n var bh9 = b9 >>> 13;\n\n out.negative = self.negative ^ num.negative;\n out.length = 19;\n /* k = 0 */\n lo = Math.imul(al0, bl0);\n mid = Math.imul(al0, bh0);\n mid = (mid + Math.imul(ah0, bl0)) | 0;\n hi = Math.imul(ah0, bh0);\n var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n w0 &= 0x3ffffff;\n /* k = 1 */\n lo = Math.imul(al1, bl0);\n mid = Math.imul(al1, bh0);\n mid = (mid + Math.imul(ah1, bl0)) | 0;\n hi = Math.imul(ah1, bh0);\n lo = (lo + Math.imul(al0, bl1)) | 0;\n mid = (mid + Math.imul(al0, bh1)) | 0;\n mid = (mid + Math.imul(ah0, bl1)) | 0;\n hi = (hi + Math.imul(ah0, bh1)) | 0;\n var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n w1 &= 0x3ffffff;\n /* k = 2 */\n lo = Math.imul(al2, bl0);\n mid = Math.imul(al2, bh0);\n mid = (mid + Math.imul(ah2, bl0)) | 0;\n hi = Math.imul(ah2, bh0);\n lo = (lo + Math.imul(al1, bl1)) | 0;\n mid = (mid + Math.imul(al1, bh1)) | 0;\n mid = (mid + Math.imul(ah1, bl1)) | 0;\n hi = (hi + Math.imul(ah1, bh1)) | 0;\n lo = (lo + Math.imul(al0, bl2)) | 0;\n mid = (mid + Math.imul(al0, bh2)) | 0;\n mid = (mid + Math.imul(ah0, bl2)) | 0;\n hi = (hi + Math.imul(ah0, bh2)) | 0;\n var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n w2 &= 0x3ffffff;\n /* k = 3 */\n lo = Math.imul(al3, bl0);\n mid = Math.imul(al3, bh0);\n mid = (mid + Math.imul(ah3, bl0)) | 0;\n hi = Math.imul(ah3, bh0);\n lo = (lo + Math.imul(al2, bl1)) | 0;\n mid = (mid + Math.imul(al2, bh1)) | 0;\n mid = (mid + Math.imul(ah2, bl1)) | 0;\n hi = (hi + Math.imul(ah2, bh1)) | 0;\n lo = (lo + Math.imul(al1, bl2)) | 0;\n mid = (mid + Math.imul(al1, bh2)) | 0;\n mid = (mid + Math.imul(ah1, bl2)) | 0;\n hi = (hi + Math.imul(ah1, bh2)) | 0;\n lo = (lo + Math.imul(al0, bl3)) | 0;\n mid = (mid + Math.imul(al0, bh3)) | 0;\n mid = (mid + Math.imul(ah0, bl3)) | 0;\n hi = (hi + Math.imul(ah0, bh3)) | 0;\n var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n w3 &= 0x3ffffff;\n /* k = 4 */\n lo = Math.imul(al4, bl0);\n mid = Math.imul(al4, bh0);\n mid = (mid + Math.imul(ah4, bl0)) | 0;\n hi = Math.imul(ah4, bh0);\n lo = (lo + Math.imul(al3, bl1)) | 0;\n mid = (mid + Math.imul(al3, bh1)) | 0;\n mid = (mid + Math.imul(ah3, bl1)) | 0;\n hi = (hi + Math.imul(ah3, bh1)) | 0;\n lo = (lo + Math.imul(al2, bl2)) | 0;\n mid = (mid + Math.imul(al2, bh2)) | 0;\n mid = (mid + Math.imul(ah2, bl2)) | 0;\n hi = (hi + Math.imul(ah2, bh2)) | 0;\n lo = (lo + Math.imul(al1, bl3)) | 0;\n mid = (mid + Math.imul(al1, bh3)) | 0;\n mid = (mid + Math.imul(ah1, bl3)) | 0;\n hi = (hi + Math.imul(ah1, bh3)) | 0;\n lo = (lo + Math.imul(al0, bl4)) | 0;\n mid = (mid + Math.imul(al0, bh4)) | 0;\n mid = (mid + Math.imul(ah0, bl4)) | 0;\n hi = (hi + Math.imul(ah0, bh4)) | 0;\n var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n w4 &= 0x3ffffff;\n /* k = 5 */\n lo = Math.imul(al5, bl0);\n mid = Math.imul(al5, bh0);\n mid = (mid + Math.imul(ah5, bl0)) | 0;\n hi = Math.imul(ah5, bh0);\n lo = (lo + Math.imul(al4, bl1)) | 0;\n mid = (mid + Math.imul(al4, bh1)) | 0;\n mid = (mid + Math.imul(ah4, bl1)) | 0;\n hi = (hi + Math.imul(ah4, bh1)) | 0;\n lo = (lo + Math.imul(al3, bl2)) | 0;\n mid = (mid + Math.imul(al3, bh2)) | 0;\n mid = (mid + Math.imul(ah3, bl2)) | 0;\n hi = (hi + Math.imul(ah3, bh2)) | 0;\n lo = (lo + Math.imul(al2, bl3)) | 0;\n mid = (mid + Math.imul(al2, bh3)) | 0;\n mid = (mid + Math.imul(ah2, bl3)) | 0;\n hi = (hi + Math.imul(ah2, bh3)) | 0;\n lo = (lo + Math.imul(al1, bl4)) | 0;\n mid = (mid + Math.imul(al1, bh4)) | 0;\n mid = (mid + Math.imul(ah1, bl4)) | 0;\n hi = (hi + Math.imul(ah1, bh4)) | 0;\n lo = (lo + Math.imul(al0, bl5)) | 0;\n mid = (mid + Math.imul(al0, bh5)) | 0;\n mid = (mid + Math.imul(ah0, bl5)) | 0;\n hi = (hi + Math.imul(ah0, bh5)) | 0;\n var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n w5 &= 0x3ffffff;\n /* k = 6 */\n lo = Math.imul(al6, bl0);\n mid = Math.imul(al6, bh0);\n mid = (mid + Math.imul(ah6, bl0)) | 0;\n hi = Math.imul(ah6, bh0);\n lo = (lo + Math.imul(al5, bl1)) | 0;\n mid = (mid + Math.imul(al5, bh1)) | 0;\n mid = (mid + Math.imul(ah5, bl1)) | 0;\n hi = (hi + Math.imul(ah5, bh1)) | 0;\n lo = (lo + Math.imul(al4, bl2)) | 0;\n mid = (mid + Math.imul(al4, bh2)) | 0;\n mid = (mid + Math.imul(ah4, bl2)) | 0;\n hi = (hi + Math.imul(ah4, bh2)) | 0;\n lo = (lo + Math.imul(al3, bl3)) | 0;\n mid = (mid + Math.imul(al3, bh3)) | 0;\n mid = (mid + Math.imul(ah3, bl3)) | 0;\n hi = (hi + Math.imul(ah3, bh3)) | 0;\n lo = (lo + Math.imul(al2, bl4)) | 0;\n mid = (mid + Math.imul(al2, bh4)) | 0;\n mid = (mid + Math.imul(ah2, bl4)) | 0;\n hi = (hi + Math.imul(ah2, bh4)) | 0;\n lo = (lo + Math.imul(al1, bl5)) | 0;\n mid = (mid + Math.imul(al1, bh5)) | 0;\n mid = (mid + Math.imul(ah1, bl5)) | 0;\n hi = (hi + Math.imul(ah1, bh5)) | 0;\n lo = (lo + Math.imul(al0, bl6)) | 0;\n mid = (mid + Math.imul(al0, bh6)) | 0;\n mid = (mid + Math.imul(ah0, bl6)) | 0;\n hi = (hi + Math.imul(ah0, bh6)) | 0;\n var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n w6 &= 0x3ffffff;\n /* k = 7 */\n lo = Math.imul(al7, bl0);\n mid = Math.imul(al7, bh0);\n mid = (mid + Math.imul(ah7, bl0)) | 0;\n hi = Math.imul(ah7, bh0);\n lo = (lo + Math.imul(al6, bl1)) | 0;\n mid = (mid + Math.imul(al6, bh1)) | 0;\n mid = (mid + Math.imul(ah6, bl1)) | 0;\n hi = (hi + Math.imul(ah6, bh1)) | 0;\n lo = (lo + Math.imul(al5, bl2)) | 0;\n mid = (mid + Math.imul(al5, bh2)) | 0;\n mid = (mid + Math.imul(ah5, bl2)) | 0;\n hi = (hi + Math.imul(ah5, bh2)) | 0;\n lo = (lo + Math.imul(al4, bl3)) | 0;\n mid = (mid + Math.imul(al4, bh3)) | 0;\n mid = (mid + Math.imul(ah4, bl3)) | 0;\n hi = (hi + Math.imul(ah4, bh3)) | 0;\n lo = (lo + Math.imul(al3, bl4)) | 0;\n mid = (mid + Math.imul(al3, bh4)) | 0;\n mid = (mid + Math.imul(ah3, bl4)) | 0;\n hi = (hi + Math.imul(ah3, bh4)) | 0;\n lo = (lo + Math.imul(al2, bl5)) | 0;\n mid = (mid + Math.imul(al2, bh5)) | 0;\n mid = (mid + Math.imul(ah2, bl5)) | 0;\n hi = (hi + Math.imul(ah2, bh5)) | 0;\n lo = (lo + Math.imul(al1, bl6)) | 0;\n mid = (mid + Math.imul(al1, bh6)) | 0;\n mid = (mid + Math.imul(ah1, bl6)) | 0;\n hi = (hi + Math.imul(ah1, bh6)) | 0;\n lo = (lo + Math.imul(al0, bl7)) | 0;\n mid = (mid + Math.imul(al0, bh7)) | 0;\n mid = (mid + Math.imul(ah0, bl7)) | 0;\n hi = (hi + Math.imul(ah0, bh7)) | 0;\n var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n w7 &= 0x3ffffff;\n /* k = 8 */\n lo = Math.imul(al8, bl0);\n mid = Math.imul(al8, bh0);\n mid = (mid + Math.imul(ah8, bl0)) | 0;\n hi = Math.imul(ah8, bh0);\n lo = (lo + Math.imul(al7, bl1)) | 0;\n mid = (mid + Math.imul(al7, bh1)) | 0;\n mid = (mid + Math.imul(ah7, bl1)) | 0;\n hi = (hi + Math.imul(ah7, bh1)) | 0;\n lo = (lo + Math.imul(al6, bl2)) | 0;\n mid = (mid + Math.imul(al6, bh2)) | 0;\n mid = (mid + Math.imul(ah6, bl2)) | 0;\n hi = (hi + Math.imul(ah6, bh2)) | 0;\n lo = (lo + Math.imul(al5, bl3)) | 0;\n mid = (mid + Math.imul(al5, bh3)) | 0;\n mid = (mid + Math.imul(ah5, bl3)) | 0;\n hi = (hi + Math.imul(ah5, bh3)) | 0;\n lo = (lo + Math.imul(al4, bl4)) | 0;\n mid = (mid + Math.imul(al4, bh4)) | 0;\n mid = (mid + Math.imul(ah4, bl4)) | 0;\n hi = (hi + Math.imul(ah4, bh4)) | 0;\n lo = (lo + Math.imul(al3, bl5)) | 0;\n mid = (mid + Math.imul(al3, bh5)) | 0;\n mid = (mid + Math.imul(ah3, bl5)) | 0;\n hi = (hi + Math.imul(ah3, bh5)) | 0;\n lo = (lo + Math.imul(al2, bl6)) | 0;\n mid = (mid + Math.imul(al2, bh6)) | 0;\n mid = (mid + Math.imul(ah2, bl6)) | 0;\n hi = (hi + Math.imul(ah2, bh6)) | 0;\n lo = (lo + Math.imul(al1, bl7)) | 0;\n mid = (mid + Math.imul(al1, bh7)) | 0;\n mid = (mid + Math.imul(ah1, bl7)) | 0;\n hi = (hi + Math.imul(ah1, bh7)) | 0;\n lo = (lo + Math.imul(al0, bl8)) | 0;\n mid = (mid + Math.imul(al0, bh8)) | 0;\n mid = (mid + Math.imul(ah0, bl8)) | 0;\n hi = (hi + Math.imul(ah0, bh8)) | 0;\n var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n w8 &= 0x3ffffff;\n /* k = 9 */\n lo = Math.imul(al9, bl0);\n mid = Math.imul(al9, bh0);\n mid = (mid + Math.imul(ah9, bl0)) | 0;\n hi = Math.imul(ah9, bh0);\n lo = (lo + Math.imul(al8, bl1)) | 0;\n mid = (mid + Math.imul(al8, bh1)) | 0;\n mid = (mid + Math.imul(ah8, bl1)) | 0;\n hi = (hi + Math.imul(ah8, bh1)) | 0;\n lo = (lo + Math.imul(al7, bl2)) | 0;\n mid = (mid + Math.imul(al7, bh2)) | 0;\n mid = (mid + Math.imul(ah7, bl2)) | 0;\n hi = (hi + Math.imul(ah7, bh2)) | 0;\n lo = (lo + Math.imul(al6, bl3)) | 0;\n mid = (mid + Math.imul(al6, bh3)) | 0;\n mid = (mid + Math.imul(ah6, bl3)) | 0;\n hi = (hi + Math.imul(ah6, bh3)) | 0;\n lo = (lo + Math.imul(al5, bl4)) | 0;\n mid = (mid + Math.imul(al5, bh4)) | 0;\n mid = (mid + Math.imul(ah5, bl4)) | 0;\n hi = (hi + Math.imul(ah5, bh4)) | 0;\n lo = (lo + Math.imul(al4, bl5)) | 0;\n mid = (mid + Math.imul(al4, bh5)) | 0;\n mid = (mid + Math.imul(ah4, bl5)) | 0;\n hi = (hi + Math.imul(ah4, bh5)) | 0;\n lo = (lo + Math.imul(al3, bl6)) | 0;\n mid = (mid + Math.imul(al3, bh6)) | 0;\n mid = (mid + Math.imul(ah3, bl6)) | 0;\n hi = (hi + Math.imul(ah3, bh6)) | 0;\n lo = (lo + Math.imul(al2, bl7)) | 0;\n mid = (mid + Math.imul(al2, bh7)) | 0;\n mid = (mid + Math.imul(ah2, bl7)) | 0;\n hi = (hi + Math.imul(ah2, bh7)) | 0;\n lo = (lo + Math.imul(al1, bl8)) | 0;\n mid = (mid + Math.imul(al1, bh8)) | 0;\n mid = (mid + Math.imul(ah1, bl8)) | 0;\n hi = (hi + Math.imul(ah1, bh8)) | 0;\n lo = (lo + Math.imul(al0, bl9)) | 0;\n mid = (mid + Math.imul(al0, bh9)) | 0;\n mid = (mid + Math.imul(ah0, bl9)) | 0;\n hi = (hi + Math.imul(ah0, bh9)) | 0;\n var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n w9 &= 0x3ffffff;\n /* k = 10 */\n lo = Math.imul(al9, bl1);\n mid = Math.imul(al9, bh1);\n mid = (mid + Math.imul(ah9, bl1)) | 0;\n hi = Math.imul(ah9, bh1);\n lo = (lo + Math.imul(al8, bl2)) | 0;\n mid = (mid + Math.imul(al8, bh2)) | 0;\n mid = (mid + Math.imul(ah8, bl2)) | 0;\n hi = (hi + Math.imul(ah8, bh2)) | 0;\n lo = (lo + Math.imul(al7, bl3)) | 0;\n mid = (mid + Math.imul(al7, bh3)) | 0;\n mid = (mid + Math.imul(ah7, bl3)) | 0;\n hi = (hi + Math.imul(ah7, bh3)) | 0;\n lo = (lo + Math.imul(al6, bl4)) | 0;\n mid = (mid + Math.imul(al6, bh4)) | 0;\n mid = (mid + Math.imul(ah6, bl4)) | 0;\n hi = (hi + Math.imul(ah6, bh4)) | 0;\n lo = (lo + Math.imul(al5, bl5)) | 0;\n mid = (mid + Math.imul(al5, bh5)) | 0;\n mid = (mid + Math.imul(ah5, bl5)) | 0;\n hi = (hi + Math.imul(ah5, bh5)) | 0;\n lo = (lo + Math.imul(al4, bl6)) | 0;\n mid = (mid + Math.imul(al4, bh6)) | 0;\n mid = (mid + Math.imul(ah4, bl6)) | 0;\n hi = (hi + Math.imul(ah4, bh6)) | 0;\n lo = (lo + Math.imul(al3, bl7)) | 0;\n mid = (mid + Math.imul(al3, bh7)) | 0;\n mid = (mid + Math.imul(ah3, bl7)) | 0;\n hi = (hi + Math.imul(ah3, bh7)) | 0;\n lo = (lo + Math.imul(al2, bl8)) | 0;\n mid = (mid + Math.imul(al2, bh8)) | 0;\n mid = (mid + Math.imul(ah2, bl8)) | 0;\n hi = (hi + Math.imul(ah2, bh8)) | 0;\n lo = (lo + Math.imul(al1, bl9)) | 0;\n mid = (mid + Math.imul(al1, bh9)) | 0;\n mid = (mid + Math.imul(ah1, bl9)) | 0;\n hi = (hi + Math.imul(ah1, bh9)) | 0;\n var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n w10 &= 0x3ffffff;\n /* k = 11 */\n lo = Math.imul(al9, bl2);\n mid = Math.imul(al9, bh2);\n mid = (mid + Math.imul(ah9, bl2)) | 0;\n hi = Math.imul(ah9, bh2);\n lo = (lo + Math.imul(al8, bl3)) | 0;\n mid = (mid + Math.imul(al8, bh3)) | 0;\n mid = (mid + Math.imul(ah8, bl3)) | 0;\n hi = (hi + Math.imul(ah8, bh3)) | 0;\n lo = (lo + Math.imul(al7, bl4)) | 0;\n mid = (mid + Math.imul(al7, bh4)) | 0;\n mid = (mid + Math.imul(ah7, bl4)) | 0;\n hi = (hi + Math.imul(ah7, bh4)) | 0;\n lo = (lo + Math.imul(al6, bl5)) | 0;\n mid = (mid + Math.imul(al6, bh5)) | 0;\n mid = (mid + Math.imul(ah6, bl5)) | 0;\n hi = (hi + Math.imul(ah6, bh5)) | 0;\n lo = (lo + Math.imul(al5, bl6)) | 0;\n mid = (mid + Math.imul(al5, bh6)) | 0;\n mid = (mid + Math.imul(ah5, bl6)) | 0;\n hi = (hi + Math.imul(ah5, bh6)) | 0;\n lo = (lo + Math.imul(al4, bl7)) | 0;\n mid = (mid + Math.imul(al4, bh7)) | 0;\n mid = (mid + Math.imul(ah4, bl7)) | 0;\n hi = (hi + Math.imul(ah4, bh7)) | 0;\n lo = (lo + Math.imul(al3, bl8)) | 0;\n mid = (mid + Math.imul(al3, bh8)) | 0;\n mid = (mid + Math.imul(ah3, bl8)) | 0;\n hi = (hi + Math.imul(ah3, bh8)) | 0;\n lo = (lo + Math.imul(al2, bl9)) | 0;\n mid = (mid + Math.imul(al2, bh9)) | 0;\n mid = (mid + Math.imul(ah2, bl9)) | 0;\n hi = (hi + Math.imul(ah2, bh9)) | 0;\n var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n w11 &= 0x3ffffff;\n /* k = 12 */\n lo = Math.imul(al9, bl3);\n mid = Math.imul(al9, bh3);\n mid = (mid + Math.imul(ah9, bl3)) | 0;\n hi = Math.imul(ah9, bh3);\n lo = (lo + Math.imul(al8, bl4)) | 0;\n mid = (mid + Math.imul(al8, bh4)) | 0;\n mid = (mid + Math.imul(ah8, bl4)) | 0;\n hi = (hi + Math.imul(ah8, bh4)) | 0;\n lo = (lo + Math.imul(al7, bl5)) | 0;\n mid = (mid + Math.imul(al7, bh5)) | 0;\n mid = (mid + Math.imul(ah7, bl5)) | 0;\n hi = (hi + Math.imul(ah7, bh5)) | 0;\n lo = (lo + Math.imul(al6, bl6)) | 0;\n mid = (mid + Math.imul(al6, bh6)) | 0;\n mid = (mid + Math.imul(ah6, bl6)) | 0;\n hi = (hi + Math.imul(ah6, bh6)) | 0;\n lo = (lo + Math.imul(al5, bl7)) | 0;\n mid = (mid + Math.imul(al5, bh7)) | 0;\n mid = (mid + Math.imul(ah5, bl7)) | 0;\n hi = (hi + Math.imul(ah5, bh7)) | 0;\n lo = (lo + Math.imul(al4, bl8)) | 0;\n mid = (mid + Math.imul(al4, bh8)) | 0;\n mid = (mid + Math.imul(ah4, bl8)) | 0;\n hi = (hi + Math.imul(ah4, bh8)) | 0;\n lo = (lo + Math.imul(al3, bl9)) | 0;\n mid = (mid + Math.imul(al3, bh9)) | 0;\n mid = (mid + Math.imul(ah3, bl9)) | 0;\n hi = (hi + Math.imul(ah3, bh9)) | 0;\n var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n w12 &= 0x3ffffff;\n /* k = 13 */\n lo = Math.imul(al9, bl4);\n mid = Math.imul(al9, bh4);\n mid = (mid + Math.imul(ah9, bl4)) | 0;\n hi = Math.imul(ah9, bh4);\n lo = (lo + Math.imul(al8, bl5)) | 0;\n mid = (mid + Math.imul(al8, bh5)) | 0;\n mid = (mid + Math.imul(ah8, bl5)) | 0;\n hi = (hi + Math.imul(ah8, bh5)) | 0;\n lo = (lo + Math.imul(al7, bl6)) | 0;\n mid = (mid + Math.imul(al7, bh6)) | 0;\n mid = (mid + Math.imul(ah7, bl6)) | 0;\n hi = (hi + Math.imul(ah7, bh6)) | 0;\n lo = (lo + Math.imul(al6, bl7)) | 0;\n mid = (mid + Math.imul(al6, bh7)) | 0;\n mid = (mid + Math.imul(ah6, bl7)) | 0;\n hi = (hi + Math.imul(ah6, bh7)) | 0;\n lo = (lo + Math.imul(al5, bl8)) | 0;\n mid = (mid + Math.imul(al5, bh8)) | 0;\n mid = (mid + Math.imul(ah5, bl8)) | 0;\n hi = (hi + Math.imul(ah5, bh8)) | 0;\n lo = (lo + Math.imul(al4, bl9)) | 0;\n mid = (mid + Math.imul(al4, bh9)) | 0;\n mid = (mid + Math.imul(ah4, bl9)) | 0;\n hi = (hi + Math.imul(ah4, bh9)) | 0;\n var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n w13 &= 0x3ffffff;\n /* k = 14 */\n lo = Math.imul(al9, bl5);\n mid = Math.imul(al9, bh5);\n mid = (mid + Math.imul(ah9, bl5)) | 0;\n hi = Math.imul(ah9, bh5);\n lo = (lo + Math.imul(al8, bl6)) | 0;\n mid = (mid + Math.imul(al8, bh6)) | 0;\n mid = (mid + Math.imul(ah8, bl6)) | 0;\n hi = (hi + Math.imul(ah8, bh6)) | 0;\n lo = (lo + Math.imul(al7, bl7)) | 0;\n mid = (mid + Math.imul(al7, bh7)) | 0;\n mid = (mid + Math.imul(ah7, bl7)) | 0;\n hi = (hi + Math.imul(ah7, bh7)) | 0;\n lo = (lo + Math.imul(al6, bl8)) | 0;\n mid = (mid + Math.imul(al6, bh8)) | 0;\n mid = (mid + Math.imul(ah6, bl8)) | 0;\n hi = (hi + Math.imul(ah6, bh8)) | 0;\n lo = (lo + Math.imul(al5, bl9)) | 0;\n mid = (mid + Math.imul(al5, bh9)) | 0;\n mid = (mid + Math.imul(ah5, bl9)) | 0;\n hi = (hi + Math.imul(ah5, bh9)) | 0;\n var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n w14 &= 0x3ffffff;\n /* k = 15 */\n lo = Math.imul(al9, bl6);\n mid = Math.imul(al9, bh6);\n mid = (mid + Math.imul(ah9, bl6)) | 0;\n hi = Math.imul(ah9, bh6);\n lo = (lo + Math.imul(al8, bl7)) | 0;\n mid = (mid + Math.imul(al8, bh7)) | 0;\n mid = (mid + Math.imul(ah8, bl7)) | 0;\n hi = (hi + Math.imul(ah8, bh7)) | 0;\n lo = (lo + Math.imul(al7, bl8)) | 0;\n mid = (mid + Math.imul(al7, bh8)) | 0;\n mid = (mid + Math.imul(ah7, bl8)) | 0;\n hi = (hi + Math.imul(ah7, bh8)) | 0;\n lo = (lo + Math.imul(al6, bl9)) | 0;\n mid = (mid + Math.imul(al6, bh9)) | 0;\n mid = (mid + Math.imul(ah6, bl9)) | 0;\n hi = (hi + Math.imul(ah6, bh9)) | 0;\n var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n w15 &= 0x3ffffff;\n /* k = 16 */\n lo = Math.imul(al9, bl7);\n mid = Math.imul(al9, bh7);\n mid = (mid + Math.imul(ah9, bl7)) | 0;\n hi = Math.imul(ah9, bh7);\n lo = (lo + Math.imul(al8, bl8)) | 0;\n mid = (mid + Math.imul(al8, bh8)) | 0;\n mid = (mid + Math.imul(ah8, bl8)) | 0;\n hi = (hi + Math.imul(ah8, bh8)) | 0;\n lo = (lo + Math.imul(al7, bl9)) | 0;\n mid = (mid + Math.imul(al7, bh9)) | 0;\n mid = (mid + Math.imul(ah7, bl9)) | 0;\n hi = (hi + Math.imul(ah7, bh9)) | 0;\n var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n w16 &= 0x3ffffff;\n /* k = 17 */\n lo = Math.imul(al9, bl8);\n mid = Math.imul(al9, bh8);\n mid = (mid + Math.imul(ah9, bl8)) | 0;\n hi = Math.imul(ah9, bh8);\n lo = (lo + Math.imul(al8, bl9)) | 0;\n mid = (mid + Math.imul(al8, bh9)) | 0;\n mid = (mid + Math.imul(ah8, bl9)) | 0;\n hi = (hi + Math.imul(ah8, bh9)) | 0;\n var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n w17 &= 0x3ffffff;\n /* k = 18 */\n lo = Math.imul(al9, bl9);\n mid = Math.imul(al9, bh9);\n mid = (mid + Math.imul(ah9, bl9)) | 0;\n hi = Math.imul(ah9, bh9);\n var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n w18 &= 0x3ffffff;\n o[0] = w0;\n o[1] = w1;\n o[2] = w2;\n o[3] = w3;\n o[4] = w4;\n o[5] = w5;\n o[6] = w6;\n o[7] = w7;\n o[8] = w8;\n o[9] = w9;\n o[10] = w10;\n o[11] = w11;\n o[12] = w12;\n o[13] = w13;\n o[14] = w14;\n o[15] = w15;\n o[16] = w16;\n o[17] = w17;\n o[18] = w18;\n if (c !== 0) {\n o[19] = c;\n out.length++;\n }\n return out;\n };\n\n // Polyfill comb\n if (!Math.imul) {\n comb10MulTo = smallMulTo;\n }\n\n function bigMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n out.length = self.length + num.length;\n\n var carry = 0;\n var hncarry = 0;\n for (var k = 0; k < out.length - 1; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = hncarry;\n hncarry = 0;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = k - j;\n var a = self.words[i] | 0;\n var b = num.words[j] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n lo = (lo + rword) | 0;\n rword = lo & 0x3ffffff;\n ncarry = (ncarry + (lo >>> 26)) | 0;\n\n hncarry += ncarry >>> 26;\n ncarry &= 0x3ffffff;\n }\n out.words[k] = rword;\n carry = ncarry;\n ncarry = hncarry;\n }\n if (carry !== 0) {\n out.words[k] = carry;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n function jumboMulTo (self, num, out) {\n var fftm = new FFTM();\n return fftm.mulp(self, num, out);\n }\n\n BN.prototype.mulTo = function mulTo (num, out) {\n var res;\n var len = this.length + num.length;\n if (this.length === 10 && num.length === 10) {\n res = comb10MulTo(this, num, out);\n } else if (len < 63) {\n res = smallMulTo(this, num, out);\n } else if (len < 1024) {\n res = bigMulTo(this, num, out);\n } else {\n res = jumboMulTo(this, num, out);\n }\n\n return res;\n };\n\n // Cooley-Tukey algorithm for FFT\n // slightly revisited to rely on looping instead of recursion\n\n function FFTM (x, y) {\n this.x = x;\n this.y = y;\n }\n\n FFTM.prototype.makeRBT = function makeRBT (N) {\n var t = new Array(N);\n var l = BN.prototype._countBits(N) - 1;\n for (var i = 0; i < N; i++) {\n t[i] = this.revBin(i, l, N);\n }\n\n return t;\n };\n\n // Returns binary-reversed representation of `x`\n FFTM.prototype.revBin = function revBin (x, l, N) {\n if (x === 0 || x === N - 1) return x;\n\n var rb = 0;\n for (var i = 0; i < l; i++) {\n rb |= (x & 1) << (l - i - 1);\n x >>= 1;\n }\n\n return rb;\n };\n\n // Performs \"tweedling\" phase, therefore 'emulating'\n // behaviour of the recursive algorithm\n FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n for (var i = 0; i < N; i++) {\n rtws[i] = rws[rbt[i]];\n itws[i] = iws[rbt[i]];\n }\n };\n\n FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n this.permute(rbt, rws, iws, rtws, itws, N);\n\n for (var s = 1; s < N; s <<= 1) {\n var l = s << 1;\n\n var rtwdf = Math.cos(2 * Math.PI / l);\n var itwdf = Math.sin(2 * Math.PI / l);\n\n for (var p = 0; p < N; p += l) {\n var rtwdf_ = rtwdf;\n var itwdf_ = itwdf;\n\n for (var j = 0; j < s; j++) {\n var re = rtws[p + j];\n var ie = itws[p + j];\n\n var ro = rtws[p + j + s];\n var io = itws[p + j + s];\n\n var rx = rtwdf_ * ro - itwdf_ * io;\n\n io = rtwdf_ * io + itwdf_ * ro;\n ro = rx;\n\n rtws[p + j] = re + ro;\n itws[p + j] = ie + io;\n\n rtws[p + j + s] = re - ro;\n itws[p + j + s] = ie - io;\n\n /* jshint maxdepth : false */\n if (j !== l) {\n rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n rtwdf_ = rx;\n }\n }\n }\n }\n };\n\n FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n var N = Math.max(m, n) | 1;\n var odd = N & 1;\n var i = 0;\n for (N = N / 2 | 0; N; N = N >>> 1) {\n i++;\n }\n\n return 1 << i + 1 + odd;\n };\n\n FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n if (N <= 1) return;\n\n for (var i = 0; i < N / 2; i++) {\n var t = rws[i];\n\n rws[i] = rws[N - i - 1];\n rws[N - i - 1] = t;\n\n t = iws[i];\n\n iws[i] = -iws[N - i - 1];\n iws[N - i - 1] = -t;\n }\n };\n\n FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n var carry = 0;\n for (var i = 0; i < N / 2; i++) {\n var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n Math.round(ws[2 * i] / N) +\n carry;\n\n ws[i] = w & 0x3ffffff;\n\n if (w < 0x4000000) {\n carry = 0;\n } else {\n carry = w / 0x4000000 | 0;\n }\n }\n\n return ws;\n };\n\n FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n var carry = 0;\n for (var i = 0; i < len; i++) {\n carry = carry + (ws[i] | 0);\n\n rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n }\n\n // Pad with zeroes\n for (i = 2 * len; i < N; ++i) {\n rws[i] = 0;\n }\n\n assert(carry === 0);\n assert((carry & ~0x1fff) === 0);\n };\n\n FFTM.prototype.stub = function stub (N) {\n var ph = new Array(N);\n for (var i = 0; i < N; i++) {\n ph[i] = 0;\n }\n\n return ph;\n };\n\n FFTM.prototype.mulp = function mulp (x, y, out) {\n var N = 2 * this.guessLen13b(x.length, y.length);\n\n var rbt = this.makeRBT(N);\n\n var _ = this.stub(N);\n\n var rws = new Array(N);\n var rwst = new Array(N);\n var iwst = new Array(N);\n\n var nrws = new Array(N);\n var nrwst = new Array(N);\n var niwst = new Array(N);\n\n var rmws = out.words;\n rmws.length = N;\n\n this.convert13b(x.words, x.length, rws, N);\n this.convert13b(y.words, y.length, nrws, N);\n\n this.transform(rws, _, rwst, iwst, N, rbt);\n this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n for (var i = 0; i < N; i++) {\n var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n rwst[i] = rx;\n }\n\n this.conjugate(rwst, iwst, N);\n this.transform(rwst, iwst, rmws, _, N, rbt);\n this.conjugate(rmws, _, N);\n this.normalize13b(rmws, N);\n\n out.negative = x.negative ^ y.negative;\n out.length = x.length + y.length;\n return out.strip();\n };\n\n // Multiply `this` by `num`\n BN.prototype.mul = function mul (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return this.mulTo(num, out);\n };\n\n // Multiply employing FFT\n BN.prototype.mulf = function mulf (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return jumboMulTo(this, num, out);\n };\n\n // In-place Multiplication\n BN.prototype.imul = function imul (num) {\n return this.clone().mulTo(num, this);\n };\n\n BN.prototype.imuln = function imuln (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n\n // Carry\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = (this.words[i] | 0) * num;\n var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n carry >>= 26;\n carry += (w / 0x4000000) | 0;\n // NOTE: lo is 27bit maximum\n carry += lo >>> 26;\n this.words[i] = lo & 0x3ffffff;\n }\n\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n\n return this;\n };\n\n BN.prototype.muln = function muln (num) {\n return this.clone().imuln(num);\n };\n\n // `this` * `this`\n BN.prototype.sqr = function sqr () {\n return this.mul(this);\n };\n\n // `this` * `this` in-place\n BN.prototype.isqr = function isqr () {\n return this.imul(this.clone());\n };\n\n // Math.pow(`this`, `num`)\n BN.prototype.pow = function pow (num) {\n var w = toBitArray(num);\n if (w.length === 0) return new BN(1);\n\n // Skip leading zeroes\n var res = this;\n for (var i = 0; i < w.length; i++, res = res.sqr()) {\n if (w[i] !== 0) break;\n }\n\n if (++i < w.length) {\n for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n if (w[i] === 0) continue;\n\n res = res.mul(q);\n }\n }\n\n return res;\n };\n\n // Shift-left in-place\n BN.prototype.iushln = function iushln (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n var i;\n\n if (r !== 0) {\n var carry = 0;\n\n for (i = 0; i < this.length; i++) {\n var newCarry = this.words[i] & carryMask;\n var c = ((this.words[i] | 0) - newCarry) << r;\n this.words[i] = c | carry;\n carry = newCarry >>> (26 - r);\n }\n\n if (carry) {\n this.words[i] = carry;\n this.length++;\n }\n }\n\n if (s !== 0) {\n for (i = this.length - 1; i >= 0; i--) {\n this.words[i + s] = this.words[i];\n }\n\n for (i = 0; i < s; i++) {\n this.words[i] = 0;\n }\n\n this.length += s;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishln = function ishln (bits) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushln(bits);\n };\n\n // Shift-right in-place\n // NOTE: `hint` is a lowest bit before trailing zeroes\n // NOTE: if `extended` is present - it will be filled with destroyed bits\n BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n assert(typeof bits === 'number' && bits >= 0);\n var h;\n if (hint) {\n h = (hint - (hint % 26)) / 26;\n } else {\n h = 0;\n }\n\n var r = bits % 26;\n var s = Math.min((bits - r) / 26, this.length);\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n var maskedWords = extended;\n\n h -= s;\n h = Math.max(0, h);\n\n // Extended mode, copy masked part\n if (maskedWords) {\n for (var i = 0; i < s; i++) {\n maskedWords.words[i] = this.words[i];\n }\n maskedWords.length = s;\n }\n\n if (s === 0) {\n // No-op, we should not move anything at all\n } else if (this.length > s) {\n this.length -= s;\n for (i = 0; i < this.length; i++) {\n this.words[i] = this.words[i + s];\n }\n } else {\n this.words[0] = 0;\n this.length = 1;\n }\n\n var carry = 0;\n for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n var word = this.words[i] | 0;\n this.words[i] = (carry << (26 - r)) | (word >>> r);\n carry = word & mask;\n }\n\n // Push carried bits as a mask\n if (maskedWords && carry !== 0) {\n maskedWords.words[maskedWords.length++] = carry;\n }\n\n if (this.length === 0) {\n this.words[0] = 0;\n this.length = 1;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushrn(bits, hint, extended);\n };\n\n // Shift-left\n BN.prototype.shln = function shln (bits) {\n return this.clone().ishln(bits);\n };\n\n BN.prototype.ushln = function ushln (bits) {\n return this.clone().iushln(bits);\n };\n\n // Shift-right\n BN.prototype.shrn = function shrn (bits) {\n return this.clone().ishrn(bits);\n };\n\n BN.prototype.ushrn = function ushrn (bits) {\n return this.clone().iushrn(bits);\n };\n\n // Test if n bit is set\n BN.prototype.testn = function testn (bit) {\n assert(typeof bit === 'number' && bit >= 0);\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) return false;\n\n // Check bit and return\n var w = this.words[s];\n\n return !!(w & q);\n };\n\n // Return only lowers bits of number (in-place)\n BN.prototype.imaskn = function imaskn (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n\n assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n if (this.length <= s) {\n return this;\n }\n\n if (r !== 0) {\n s++;\n }\n this.length = Math.min(s, this.length);\n\n if (r !== 0) {\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n this.words[this.length - 1] &= mask;\n }\n\n return this.strip();\n };\n\n // Return only lowers bits of number\n BN.prototype.maskn = function maskn (bits) {\n return this.clone().imaskn(bits);\n };\n\n // Add plain number `num` to `this`\n BN.prototype.iaddn = function iaddn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.isubn(-num);\n\n // Possible sign change\n if (this.negative !== 0) {\n if (this.length === 1 && (this.words[0] | 0) < num) {\n this.words[0] = num - (this.words[0] | 0);\n this.negative = 0;\n return this;\n }\n\n this.negative = 0;\n this.isubn(num);\n this.negative = 1;\n return this;\n }\n\n // Add without checks\n return this._iaddn(num);\n };\n\n BN.prototype._iaddn = function _iaddn (num) {\n this.words[0] += num;\n\n // Carry\n for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n this.words[i] -= 0x4000000;\n if (i === this.length - 1) {\n this.words[i + 1] = 1;\n } else {\n this.words[i + 1]++;\n }\n }\n this.length = Math.max(this.length, i + 1);\n\n return this;\n };\n\n // Subtract plain number `num` from `this`\n BN.prototype.isubn = function isubn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.iaddn(-num);\n\n if (this.negative !== 0) {\n this.negative = 0;\n this.iaddn(num);\n this.negative = 1;\n return this;\n }\n\n this.words[0] -= num;\n\n if (this.length === 1 && this.words[0] < 0) {\n this.words[0] = -this.words[0];\n this.negative = 1;\n } else {\n // Carry\n for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n this.words[i] += 0x4000000;\n this.words[i + 1] -= 1;\n }\n }\n\n return this.strip();\n };\n\n BN.prototype.addn = function addn (num) {\n return this.clone().iaddn(num);\n };\n\n BN.prototype.subn = function subn (num) {\n return this.clone().isubn(num);\n };\n\n BN.prototype.iabs = function iabs () {\n this.negative = 0;\n\n return this;\n };\n\n BN.prototype.abs = function abs () {\n return this.clone().iabs();\n };\n\n BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n var len = num.length + shift;\n var i;\n\n this._expand(len);\n\n var w;\n var carry = 0;\n for (i = 0; i < num.length; i++) {\n w = (this.words[i + shift] | 0) + carry;\n var right = (num.words[i] | 0) * mul;\n w -= right & 0x3ffffff;\n carry = (w >> 26) - ((right / 0x4000000) | 0);\n this.words[i + shift] = w & 0x3ffffff;\n }\n for (; i < this.length - shift; i++) {\n w = (this.words[i + shift] | 0) + carry;\n carry = w >> 26;\n this.words[i + shift] = w & 0x3ffffff;\n }\n\n if (carry === 0) return this.strip();\n\n // Subtraction overflow\n assert(carry === -1);\n carry = 0;\n for (i = 0; i < this.length; i++) {\n w = -(this.words[i] | 0) + carry;\n carry = w >> 26;\n this.words[i] = w & 0x3ffffff;\n }\n this.negative = 1;\n\n return this.strip();\n };\n\n BN.prototype._wordDiv = function _wordDiv (num, mode) {\n var shift = this.length - num.length;\n\n var a = this.clone();\n var b = num;\n\n // Normalize\n var bhi = b.words[b.length - 1] | 0;\n var bhiBits = this._countBits(bhi);\n shift = 26 - bhiBits;\n if (shift !== 0) {\n b = b.ushln(shift);\n a.iushln(shift);\n bhi = b.words[b.length - 1] | 0;\n }\n\n // Initialize quotient\n var m = a.length - b.length;\n var q;\n\n if (mode !== 'mod') {\n q = new BN(null);\n q.length = m + 1;\n q.words = new Array(q.length);\n for (var i = 0; i < q.length; i++) {\n q.words[i] = 0;\n }\n }\n\n var diff = a.clone()._ishlnsubmul(b, 1, m);\n if (diff.negative === 0) {\n a = diff;\n if (q) {\n q.words[m] = 1;\n }\n }\n\n for (var j = m - 1; j >= 0; j--) {\n var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n (a.words[b.length + j - 1] | 0);\n\n // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n // (0x7ffffff)\n qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n a._ishlnsubmul(b, qj, j);\n while (a.negative !== 0) {\n qj--;\n a.negative = 0;\n a._ishlnsubmul(b, 1, j);\n if (!a.isZero()) {\n a.negative ^= 1;\n }\n }\n if (q) {\n q.words[j] = qj;\n }\n }\n if (q) {\n q.strip();\n }\n a.strip();\n\n // Denormalize\n if (mode !== 'div' && shift !== 0) {\n a.iushrn(shift);\n }\n\n return {\n div: q || null,\n mod: a\n };\n };\n\n // NOTE: 1) `mode` can be set to `mod` to request mod only,\n // to `div` to request div only, or be absent to\n // request both div & mod\n // 2) `positive` is true if unsigned mod is requested\n BN.prototype.divmod = function divmod (num, mode, positive) {\n assert(!num.isZero());\n\n if (this.isZero()) {\n return {\n div: new BN(0),\n mod: new BN(0)\n };\n }\n\n var div, mod, res;\n if (this.negative !== 0 && num.negative === 0) {\n res = this.neg().divmod(num, mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.iadd(num);\n }\n }\n\n return {\n div: div,\n mod: mod\n };\n }\n\n if (this.negative === 0 && num.negative !== 0) {\n res = this.divmod(num.neg(), mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n return {\n div: div,\n mod: res.mod\n };\n }\n\n if ((this.negative & num.negative) !== 0) {\n res = this.neg().divmod(num.neg(), mode);\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.isub(num);\n }\n }\n\n return {\n div: res.div,\n mod: mod\n };\n }\n\n // Both numbers are positive at this point\n\n // Strip both numbers to approximate shift value\n if (num.length > this.length || this.cmp(num) < 0) {\n return {\n div: new BN(0),\n mod: this\n };\n }\n\n // Very short reduction\n if (num.length === 1) {\n if (mode === 'div') {\n return {\n div: this.divn(num.words[0]),\n mod: null\n };\n }\n\n if (mode === 'mod') {\n return {\n div: null,\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return {\n div: this.divn(num.words[0]),\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return this._wordDiv(num, mode);\n };\n\n // Find `this` / `num`\n BN.prototype.div = function div (num) {\n return this.divmod(num, 'div', false).div;\n };\n\n // Find `this` % `num`\n BN.prototype.mod = function mod (num) {\n return this.divmod(num, 'mod', false).mod;\n };\n\n BN.prototype.umod = function umod (num) {\n return this.divmod(num, 'mod', true).mod;\n };\n\n // Find Round(`this` / `num`)\n BN.prototype.divRound = function divRound (num) {\n var dm = this.divmod(num);\n\n // Fast case - exact division\n if (dm.mod.isZero()) return dm.div;\n\n var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n var half = num.ushrn(1);\n var r2 = num.andln(1);\n var cmp = mod.cmp(half);\n\n // Round down\n if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;\n\n // Round up\n return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n };\n\n BN.prototype.modn = function modn (num) {\n assert(num <= 0x3ffffff);\n var p = (1 << 26) % num;\n\n var acc = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n acc = (p * acc + (this.words[i] | 0)) % num;\n }\n\n return acc;\n };\n\n // In-place division by number\n BN.prototype.idivn = function idivn (num) {\n assert(num <= 0x3ffffff);\n\n var carry = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var w = (this.words[i] | 0) + carry * 0x4000000;\n this.words[i] = (w / num) | 0;\n carry = w % num;\n }\n\n return this.strip();\n };\n\n BN.prototype.divn = function divn (num) {\n return this.clone().idivn(num);\n };\n\n BN.prototype.egcd = function egcd (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var x = this;\n var y = p.clone();\n\n if (x.negative !== 0) {\n x = x.umod(p);\n } else {\n x = x.clone();\n }\n\n // A * x + B * y = x\n var A = new BN(1);\n var B = new BN(0);\n\n // C * x + D * y = y\n var C = new BN(0);\n var D = new BN(1);\n\n var g = 0;\n\n while (x.isEven() && y.isEven()) {\n x.iushrn(1);\n y.iushrn(1);\n ++g;\n }\n\n var yp = y.clone();\n var xp = x.clone();\n\n while (!x.isZero()) {\n for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n x.iushrn(i);\n while (i-- > 0) {\n if (A.isOdd() || B.isOdd()) {\n A.iadd(yp);\n B.isub(xp);\n }\n\n A.iushrn(1);\n B.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n y.iushrn(j);\n while (j-- > 0) {\n if (C.isOdd() || D.isOdd()) {\n C.iadd(yp);\n D.isub(xp);\n }\n\n C.iushrn(1);\n D.iushrn(1);\n }\n }\n\n if (x.cmp(y) >= 0) {\n x.isub(y);\n A.isub(C);\n B.isub(D);\n } else {\n y.isub(x);\n C.isub(A);\n D.isub(B);\n }\n }\n\n return {\n a: C,\n b: D,\n gcd: y.iushln(g)\n };\n };\n\n // This is reduced incarnation of the binary EEA\n // above, designated to invert members of the\n // _prime_ fields F(p) at a maximal speed\n BN.prototype._invmp = function _invmp (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var a = this;\n var b = p.clone();\n\n if (a.negative !== 0) {\n a = a.umod(p);\n } else {\n a = a.clone();\n }\n\n var x1 = new BN(1);\n var x2 = new BN(0);\n\n var delta = b.clone();\n\n while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n a.iushrn(i);\n while (i-- > 0) {\n if (x1.isOdd()) {\n x1.iadd(delta);\n }\n\n x1.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n b.iushrn(j);\n while (j-- > 0) {\n if (x2.isOdd()) {\n x2.iadd(delta);\n }\n\n x2.iushrn(1);\n }\n }\n\n if (a.cmp(b) >= 0) {\n a.isub(b);\n x1.isub(x2);\n } else {\n b.isub(a);\n x2.isub(x1);\n }\n }\n\n var res;\n if (a.cmpn(1) === 0) {\n res = x1;\n } else {\n res = x2;\n }\n\n if (res.cmpn(0) < 0) {\n res.iadd(p);\n }\n\n return res;\n };\n\n BN.prototype.gcd = function gcd (num) {\n if (this.isZero()) return num.abs();\n if (num.isZero()) return this.abs();\n\n var a = this.clone();\n var b = num.clone();\n a.negative = 0;\n b.negative = 0;\n\n // Remove common factor of two\n for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n a.iushrn(1);\n b.iushrn(1);\n }\n\n do {\n while (a.isEven()) {\n a.iushrn(1);\n }\n while (b.isEven()) {\n b.iushrn(1);\n }\n\n var r = a.cmp(b);\n if (r < 0) {\n // Swap `a` and `b` to make `a` always bigger than `b`\n var t = a;\n a = b;\n b = t;\n } else if (r === 0 || b.cmpn(1) === 0) {\n break;\n }\n\n a.isub(b);\n } while (true);\n\n return b.iushln(shift);\n };\n\n // Invert number in the field F(num)\n BN.prototype.invm = function invm (num) {\n return this.egcd(num).a.umod(num);\n };\n\n BN.prototype.isEven = function isEven () {\n return (this.words[0] & 1) === 0;\n };\n\n BN.prototype.isOdd = function isOdd () {\n return (this.words[0] & 1) === 1;\n };\n\n // And first word and num\n BN.prototype.andln = function andln (num) {\n return this.words[0] & num;\n };\n\n // Increment at the bit position in-line\n BN.prototype.bincn = function bincn (bit) {\n assert(typeof bit === 'number');\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) {\n this._expand(s + 1);\n this.words[s] |= q;\n return this;\n }\n\n // Add bit and propagate, if needed\n var carry = q;\n for (var i = s; carry !== 0 && i < this.length; i++) {\n var w = this.words[i] | 0;\n w += carry;\n carry = w >>> 26;\n w &= 0x3ffffff;\n this.words[i] = w;\n }\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n return this;\n };\n\n BN.prototype.isZero = function isZero () {\n return this.length === 1 && this.words[0] === 0;\n };\n\n BN.prototype.cmpn = function cmpn (num) {\n var negative = num < 0;\n\n if (this.negative !== 0 && !negative) return -1;\n if (this.negative === 0 && negative) return 1;\n\n this.strip();\n\n var res;\n if (this.length > 1) {\n res = 1;\n } else {\n if (negative) {\n num = -num;\n }\n\n assert(num <= 0x3ffffff, 'Number is too big');\n\n var w = this.words[0] | 0;\n res = w === num ? 0 : w < num ? -1 : 1;\n }\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Compare two numbers and return:\n // 1 - if `this` > `num`\n // 0 - if `this` == `num`\n // -1 - if `this` < `num`\n BN.prototype.cmp = function cmp (num) {\n if (this.negative !== 0 && num.negative === 0) return -1;\n if (this.negative === 0 && num.negative !== 0) return 1;\n\n var res = this.ucmp(num);\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Unsigned comparison\n BN.prototype.ucmp = function ucmp (num) {\n // At this point both numbers have the same sign\n if (this.length > num.length) return 1;\n if (this.length < num.length) return -1;\n\n var res = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var a = this.words[i] | 0;\n var b = num.words[i] | 0;\n\n if (a === b) continue;\n if (a < b) {\n res = -1;\n } else if (a > b) {\n res = 1;\n }\n break;\n }\n return res;\n };\n\n BN.prototype.gtn = function gtn (num) {\n return this.cmpn(num) === 1;\n };\n\n BN.prototype.gt = function gt (num) {\n return this.cmp(num) === 1;\n };\n\n BN.prototype.gten = function gten (num) {\n return this.cmpn(num) >= 0;\n };\n\n BN.prototype.gte = function gte (num) {\n return this.cmp(num) >= 0;\n };\n\n BN.prototype.ltn = function ltn (num) {\n return this.cmpn(num) === -1;\n };\n\n BN.prototype.lt = function lt (num) {\n return this.cmp(num) === -1;\n };\n\n BN.prototype.lten = function lten (num) {\n return this.cmpn(num) <= 0;\n };\n\n BN.prototype.lte = function lte (num) {\n return this.cmp(num) <= 0;\n };\n\n BN.prototype.eqn = function eqn (num) {\n return this.cmpn(num) === 0;\n };\n\n BN.prototype.eq = function eq (num) {\n return this.cmp(num) === 0;\n };\n\n //\n // A reduce context, could be using montgomery or something better, depending\n // on the `m` itself.\n //\n BN.red = function red (num) {\n return new Red(num);\n };\n\n BN.prototype.toRed = function toRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n assert(this.negative === 0, 'red works only with positives');\n return ctx.convertTo(this)._forceRed(ctx);\n };\n\n BN.prototype.fromRed = function fromRed () {\n assert(this.red, 'fromRed works only with numbers in reduction context');\n return this.red.convertFrom(this);\n };\n\n BN.prototype._forceRed = function _forceRed (ctx) {\n this.red = ctx;\n return this;\n };\n\n BN.prototype.forceRed = function forceRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n return this._forceRed(ctx);\n };\n\n BN.prototype.redAdd = function redAdd (num) {\n assert(this.red, 'redAdd works only with red numbers');\n return this.red.add(this, num);\n };\n\n BN.prototype.redIAdd = function redIAdd (num) {\n assert(this.red, 'redIAdd works only with red numbers');\n return this.red.iadd(this, num);\n };\n\n BN.prototype.redSub = function redSub (num) {\n assert(this.red, 'redSub works only with red numbers');\n return this.red.sub(this, num);\n };\n\n BN.prototype.redISub = function redISub (num) {\n assert(this.red, 'redISub works only with red numbers');\n return this.red.isub(this, num);\n };\n\n BN.prototype.redShl = function redShl (num) {\n assert(this.red, 'redShl works only with red numbers');\n return this.red.shl(this, num);\n };\n\n BN.prototype.redMul = function redMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.mul(this, num);\n };\n\n BN.prototype.redIMul = function redIMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.imul(this, num);\n };\n\n BN.prototype.redSqr = function redSqr () {\n assert(this.red, 'redSqr works only with red numbers');\n this.red._verify1(this);\n return this.red.sqr(this);\n };\n\n BN.prototype.redISqr = function redISqr () {\n assert(this.red, 'redISqr works only with red numbers');\n this.red._verify1(this);\n return this.red.isqr(this);\n };\n\n // Square root over p\n BN.prototype.redSqrt = function redSqrt () {\n assert(this.red, 'redSqrt works only with red numbers');\n this.red._verify1(this);\n return this.red.sqrt(this);\n };\n\n BN.prototype.redInvm = function redInvm () {\n assert(this.red, 'redInvm works only with red numbers');\n this.red._verify1(this);\n return this.red.invm(this);\n };\n\n // Return negative clone of `this` % `red modulo`\n BN.prototype.redNeg = function redNeg () {\n assert(this.red, 'redNeg works only with red numbers');\n this.red._verify1(this);\n return this.red.neg(this);\n };\n\n BN.prototype.redPow = function redPow (num) {\n assert(this.red && !num.red, 'redPow(normalNum)');\n this.red._verify1(this);\n return this.red.pow(this, num);\n };\n\n // Prime numbers with efficient reduction\n var primes = {\n k256: null,\n p224: null,\n p192: null,\n p25519: null\n };\n\n // Pseudo-Mersenne prime\n function MPrime (name, p) {\n // P = 2 ^ N - K\n this.name = name;\n this.p = new BN(p, 16);\n this.n = this.p.bitLength();\n this.k = new BN(1).iushln(this.n).isub(this.p);\n\n this.tmp = this._tmp();\n }\n\n MPrime.prototype._tmp = function _tmp () {\n var tmp = new BN(null);\n tmp.words = new Array(Math.ceil(this.n / 13));\n return tmp;\n };\n\n MPrime.prototype.ireduce = function ireduce (num) {\n // Assumes that `num` is less than `P^2`\n // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n var r = num;\n var rlen;\n\n do {\n this.split(r, this.tmp);\n r = this.imulK(r);\n r = r.iadd(this.tmp);\n rlen = r.bitLength();\n } while (rlen > this.n);\n\n var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n if (cmp === 0) {\n r.words[0] = 0;\n r.length = 1;\n } else if (cmp > 0) {\n r.isub(this.p);\n } else {\n if (r.strip !== undefined) {\n // r is BN v4 instance\n r.strip();\n } else {\n // r is BN v5 instance\n r._strip();\n }\n }\n\n return r;\n };\n\n MPrime.prototype.split = function split (input, out) {\n input.iushrn(this.n, 0, out);\n };\n\n MPrime.prototype.imulK = function imulK (num) {\n return num.imul(this.k);\n };\n\n function K256 () {\n MPrime.call(\n this,\n 'k256',\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n }\n inherits(K256, MPrime);\n\n K256.prototype.split = function split (input, output) {\n // 256 = 9 * 26 + 22\n var mask = 0x3fffff;\n\n var outLen = Math.min(input.length, 9);\n for (var i = 0; i < outLen; i++) {\n output.words[i] = input.words[i];\n }\n output.length = outLen;\n\n if (input.length <= 9) {\n input.words[0] = 0;\n input.length = 1;\n return;\n }\n\n // Shift by 9 limbs\n var prev = input.words[9];\n output.words[output.length++] = prev & mask;\n\n for (i = 10; i < input.length; i++) {\n var next = input.words[i] | 0;\n input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n prev = next;\n }\n prev >>>= 22;\n input.words[i - 10] = prev;\n if (prev === 0 && input.length > 10) {\n input.length -= 10;\n } else {\n input.length -= 9;\n }\n };\n\n K256.prototype.imulK = function imulK (num) {\n // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n num.words[num.length] = 0;\n num.words[num.length + 1] = 0;\n num.length += 2;\n\n // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n var lo = 0;\n for (var i = 0; i < num.length; i++) {\n var w = num.words[i] | 0;\n lo += w * 0x3d1;\n num.words[i] = lo & 0x3ffffff;\n lo = w * 0x40 + ((lo / 0x4000000) | 0);\n }\n\n // Fast length reduction\n if (num.words[num.length - 1] === 0) {\n num.length--;\n if (num.words[num.length - 1] === 0) {\n num.length--;\n }\n }\n return num;\n };\n\n function P224 () {\n MPrime.call(\n this,\n 'p224',\n 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n }\n inherits(P224, MPrime);\n\n function P192 () {\n MPrime.call(\n this,\n 'p192',\n 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n }\n inherits(P192, MPrime);\n\n function P25519 () {\n // 2 ^ 255 - 19\n MPrime.call(\n this,\n '25519',\n '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n }\n inherits(P25519, MPrime);\n\n P25519.prototype.imulK = function imulK (num) {\n // K = 0x13\n var carry = 0;\n for (var i = 0; i < num.length; i++) {\n var hi = (num.words[i] | 0) * 0x13 + carry;\n var lo = hi & 0x3ffffff;\n hi >>>= 26;\n\n num.words[i] = lo;\n carry = hi;\n }\n if (carry !== 0) {\n num.words[num.length++] = carry;\n }\n return num;\n };\n\n // Exported mostly for testing purposes, use plain name instead\n BN._prime = function prime (name) {\n // Cached version of prime\n if (primes[name]) return primes[name];\n\n var prime;\n if (name === 'k256') {\n prime = new K256();\n } else if (name === 'p224') {\n prime = new P224();\n } else if (name === 'p192') {\n prime = new P192();\n } else if (name === 'p25519') {\n prime = new P25519();\n } else {\n throw new Error('Unknown prime ' + name);\n }\n primes[name] = prime;\n\n return prime;\n };\n\n //\n // Base reduction engine\n //\n function Red (m) {\n if (typeof m === 'string') {\n var prime = BN._prime(m);\n this.m = prime.p;\n this.prime = prime;\n } else {\n assert(m.gtn(1), 'modulus must be greater than 1');\n this.m = m;\n this.prime = null;\n }\n }\n\n Red.prototype._verify1 = function _verify1 (a) {\n assert(a.negative === 0, 'red works only with positives');\n assert(a.red, 'red works only with red numbers');\n };\n\n Red.prototype._verify2 = function _verify2 (a, b) {\n assert((a.negative | b.negative) === 0, 'red works only with positives');\n assert(a.red && a.red === b.red,\n 'red works only with red numbers');\n };\n\n Red.prototype.imod = function imod (a) {\n if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n return a.umod(this.m)._forceRed(this);\n };\n\n Red.prototype.neg = function neg (a) {\n if (a.isZero()) {\n return a.clone();\n }\n\n return this.m.sub(a)._forceRed(this);\n };\n\n Red.prototype.add = function add (a, b) {\n this._verify2(a, b);\n\n var res = a.add(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.iadd = function iadd (a, b) {\n this._verify2(a, b);\n\n var res = a.iadd(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res;\n };\n\n Red.prototype.sub = function sub (a, b) {\n this._verify2(a, b);\n\n var res = a.sub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.isub = function isub (a, b) {\n this._verify2(a, b);\n\n var res = a.isub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res;\n };\n\n Red.prototype.shl = function shl (a, num) {\n this._verify1(a);\n return this.imod(a.ushln(num));\n };\n\n Red.prototype.imul = function imul (a, b) {\n this._verify2(a, b);\n return this.imod(a.imul(b));\n };\n\n Red.prototype.mul = function mul (a, b) {\n this._verify2(a, b);\n return this.imod(a.mul(b));\n };\n\n Red.prototype.isqr = function isqr (a) {\n return this.imul(a, a.clone());\n };\n\n Red.prototype.sqr = function sqr (a) {\n return this.mul(a, a);\n };\n\n Red.prototype.sqrt = function sqrt (a) {\n if (a.isZero()) return a.clone();\n\n var mod3 = this.m.andln(3);\n assert(mod3 % 2 === 1);\n\n // Fast case\n if (mod3 === 3) {\n var pow = this.m.add(new BN(1)).iushrn(2);\n return this.pow(a, pow);\n }\n\n // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n //\n // Find Q and S, that Q * 2 ^ S = (P - 1)\n var q = this.m.subn(1);\n var s = 0;\n while (!q.isZero() && q.andln(1) === 0) {\n s++;\n q.iushrn(1);\n }\n assert(!q.isZero());\n\n var one = new BN(1).toRed(this);\n var nOne = one.redNeg();\n\n // Find quadratic non-residue\n // NOTE: Max is such because of generalized Riemann hypothesis.\n var lpow = this.m.subn(1).iushrn(1);\n var z = this.m.bitLength();\n z = new BN(2 * z * z).toRed(this);\n\n while (this.pow(z, lpow).cmp(nOne) !== 0) {\n z.redIAdd(nOne);\n }\n\n var c = this.pow(z, q);\n var r = this.pow(a, q.addn(1).iushrn(1));\n var t = this.pow(a, q);\n var m = s;\n while (t.cmp(one) !== 0) {\n var tmp = t;\n for (var i = 0; tmp.cmp(one) !== 0; i++) {\n tmp = tmp.redSqr();\n }\n assert(i < m);\n var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n r = r.redMul(b);\n c = b.redSqr();\n t = t.redMul(c);\n m = i;\n }\n\n return r;\n };\n\n Red.prototype.invm = function invm (a) {\n var inv = a._invmp(this.m);\n if (inv.negative !== 0) {\n inv.negative = 0;\n return this.imod(inv).redNeg();\n } else {\n return this.imod(inv);\n }\n };\n\n Red.prototype.pow = function pow (a, num) {\n if (num.isZero()) return new BN(1).toRed(this);\n if (num.cmpn(1) === 0) return a.clone();\n\n var windowSize = 4;\n var wnd = new Array(1 << windowSize);\n wnd[0] = new BN(1).toRed(this);\n wnd[1] = a;\n for (var i = 2; i < wnd.length; i++) {\n wnd[i] = this.mul(wnd[i - 1], a);\n }\n\n var res = wnd[0];\n var current = 0;\n var currentLen = 0;\n var start = num.bitLength() % 26;\n if (start === 0) {\n start = 26;\n }\n\n for (i = num.length - 1; i >= 0; i--) {\n var word = num.words[i];\n for (var j = start - 1; j >= 0; j--) {\n var bit = (word >> j) & 1;\n if (res !== wnd[0]) {\n res = this.sqr(res);\n }\n\n if (bit === 0 && current === 0) {\n currentLen = 0;\n continue;\n }\n\n current <<= 1;\n current |= bit;\n currentLen++;\n if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n res = this.mul(res, wnd[current]);\n currentLen = 0;\n current = 0;\n }\n start = 26;\n }\n\n return res;\n };\n\n Red.prototype.convertTo = function convertTo (num) {\n var r = num.umod(this.m);\n\n return r === num ? r.clone() : r;\n };\n\n Red.prototype.convertFrom = function convertFrom (num) {\n var res = num.clone();\n res.red = null;\n return res;\n };\n\n //\n // Montgomery method engine\n //\n\n BN.mont = function mont (num) {\n return new Mont(num);\n };\n\n function Mont (m) {\n Red.call(this, m);\n\n this.shift = this.m.bitLength();\n if (this.shift % 26 !== 0) {\n this.shift += 26 - (this.shift % 26);\n }\n\n this.r = new BN(1).iushln(this.shift);\n this.r2 = this.imod(this.r.sqr());\n this.rinv = this.r._invmp(this.m);\n\n this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n this.minv = this.minv.umod(this.r);\n this.minv = this.r.sub(this.minv);\n }\n inherits(Mont, Red);\n\n Mont.prototype.convertTo = function convertTo (num) {\n return this.imod(num.ushln(this.shift));\n };\n\n Mont.prototype.convertFrom = function convertFrom (num) {\n var r = this.imod(num.mul(this.rinv));\n r.red = null;\n return r;\n };\n\n Mont.prototype.imul = function imul (a, b) {\n if (a.isZero() || b.isZero()) {\n a.words[0] = 0;\n a.length = 1;\n return a;\n }\n\n var t = a.imul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.mul = function mul (a, b) {\n if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n var t = a.mul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.invm = function invm (a) {\n // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n var res = this.imod(a._invmp(this.m).mul(this.r2));\n return res._forceRed(this);\n };\n})(typeof module === 'undefined' || module, this);\n","var r;\n\nmodule.exports = function rand(len) {\n if (!r)\n r = new Rand(null);\n\n return r.generate(len);\n};\n\nfunction Rand(rand) {\n this.rand = rand;\n}\nmodule.exports.Rand = Rand;\n\nRand.prototype.generate = function generate(len) {\n return this._rand(len);\n};\n\n// Emulate crypto API using randy\nRand.prototype._rand = function _rand(n) {\n if (this.rand.getBytes)\n return this.rand.getBytes(n);\n\n var res = new Uint8Array(n);\n for (var i = 0; i < res.length; i++)\n res[i] = this.rand.getByte();\n return res;\n};\n\nif (typeof self === 'object') {\n if (self.crypto && self.crypto.getRandomValues) {\n // Modern browsers\n Rand.prototype._rand = function _rand(n) {\n var arr = new Uint8Array(n);\n self.crypto.getRandomValues(arr);\n return arr;\n };\n } else if (self.msCrypto && self.msCrypto.getRandomValues) {\n // IE\n Rand.prototype._rand = function _rand(n) {\n var arr = new Uint8Array(n);\n self.msCrypto.getRandomValues(arr);\n return arr;\n };\n\n // Safari's WebWorkers do not have `crypto`\n } else if (typeof window === 'object') {\n // Old junk\n Rand.prototype._rand = function() {\n throw new Error('Not implemented yet');\n };\n }\n} else {\n // Node.js or Web worker with no crypto support\n try {\n var crypto = require('crypto');\n if (typeof crypto.randomBytes !== 'function')\n throw new Error('Not supported');\n\n Rand.prototype._rand = function _rand(n) {\n return crypto.randomBytes(n);\n };\n } catch (e) {\n }\n}\n","// based on the aes implimentation in triple sec\n// https://github.com/keybase/triplesec\n// which is in turn based on the one from crypto-js\n// https://code.google.com/p/crypto-js/\n\nvar Buffer = require('safe-buffer').Buffer\n\nfunction asUInt32Array (buf) {\n if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf)\n\n var len = (buf.length / 4) | 0\n var out = new Array(len)\n\n for (var i = 0; i < len; i++) {\n out[i] = buf.readUInt32BE(i * 4)\n }\n\n return out\n}\n\nfunction scrubVec (v) {\n for (var i = 0; i < v.length; v++) {\n v[i] = 0\n }\n}\n\nfunction cryptBlock (M, keySchedule, SUB_MIX, SBOX, nRounds) {\n var SUB_MIX0 = SUB_MIX[0]\n var SUB_MIX1 = SUB_MIX[1]\n var SUB_MIX2 = SUB_MIX[2]\n var SUB_MIX3 = SUB_MIX[3]\n\n var s0 = M[0] ^ keySchedule[0]\n var s1 = M[1] ^ keySchedule[1]\n var s2 = M[2] ^ keySchedule[2]\n var s3 = M[3] ^ keySchedule[3]\n var t0, t1, t2, t3\n var ksRow = 4\n\n for (var round = 1; round < nRounds; round++) {\n t0 = SUB_MIX0[s0 >>> 24] ^ SUB_MIX1[(s1 >>> 16) & 0xff] ^ SUB_MIX2[(s2 >>> 8) & 0xff] ^ SUB_MIX3[s3 & 0xff] ^ keySchedule[ksRow++]\n t1 = SUB_MIX0[s1 >>> 24] ^ SUB_MIX1[(s2 >>> 16) & 0xff] ^ SUB_MIX2[(s3 >>> 8) & 0xff] ^ SUB_MIX3[s0 & 0xff] ^ keySchedule[ksRow++]\n t2 = SUB_MIX0[s2 >>> 24] ^ SUB_MIX1[(s3 >>> 16) & 0xff] ^ SUB_MIX2[(s0 >>> 8) & 0xff] ^ SUB_MIX3[s1 & 0xff] ^ keySchedule[ksRow++]\n t3 = SUB_MIX0[s3 >>> 24] ^ SUB_MIX1[(s0 >>> 16) & 0xff] ^ SUB_MIX2[(s1 >>> 8) & 0xff] ^ SUB_MIX3[s2 & 0xff] ^ keySchedule[ksRow++]\n s0 = t0\n s1 = t1\n s2 = t2\n s3 = t3\n }\n\n t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++]\n t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++]\n t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++]\n t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++]\n t0 = t0 >>> 0\n t1 = t1 >>> 0\n t2 = t2 >>> 0\n t3 = t3 >>> 0\n\n return [t0, t1, t2, t3]\n}\n\n// AES constants\nvar RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36]\nvar G = (function () {\n // Compute double table\n var d = new Array(256)\n for (var j = 0; j < 256; j++) {\n if (j < 128) {\n d[j] = j << 1\n } else {\n d[j] = (j << 1) ^ 0x11b\n }\n }\n\n var SBOX = []\n var INV_SBOX = []\n var SUB_MIX = [[], [], [], []]\n var INV_SUB_MIX = [[], [], [], []]\n\n // Walk GF(2^8)\n var x = 0\n var xi = 0\n for (var i = 0; i < 256; ++i) {\n // Compute sbox\n var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4)\n sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63\n SBOX[x] = sx\n INV_SBOX[sx] = x\n\n // Compute multiplication\n var x2 = d[x]\n var x4 = d[x2]\n var x8 = d[x4]\n\n // Compute sub bytes, mix columns tables\n var t = (d[sx] * 0x101) ^ (sx * 0x1010100)\n SUB_MIX[0][x] = (t << 24) | (t >>> 8)\n SUB_MIX[1][x] = (t << 16) | (t >>> 16)\n SUB_MIX[2][x] = (t << 8) | (t >>> 24)\n SUB_MIX[3][x] = t\n\n // Compute inv sub bytes, inv mix columns tables\n t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100)\n INV_SUB_MIX[0][sx] = (t << 24) | (t >>> 8)\n INV_SUB_MIX[1][sx] = (t << 16) | (t >>> 16)\n INV_SUB_MIX[2][sx] = (t << 8) | (t >>> 24)\n INV_SUB_MIX[3][sx] = t\n\n if (x === 0) {\n x = xi = 1\n } else {\n x = x2 ^ d[d[d[x8 ^ x2]]]\n xi ^= d[d[xi]]\n }\n }\n\n return {\n SBOX: SBOX,\n INV_SBOX: INV_SBOX,\n SUB_MIX: SUB_MIX,\n INV_SUB_MIX: INV_SUB_MIX\n }\n})()\n\nfunction AES (key) {\n this._key = asUInt32Array(key)\n this._reset()\n}\n\nAES.blockSize = 4 * 4\nAES.keySize = 256 / 8\nAES.prototype.blockSize = AES.blockSize\nAES.prototype.keySize = AES.keySize\nAES.prototype._reset = function () {\n var keyWords = this._key\n var keySize = keyWords.length\n var nRounds = keySize + 6\n var ksRows = (nRounds + 1) * 4\n\n var keySchedule = []\n for (var k = 0; k < keySize; k++) {\n keySchedule[k] = keyWords[k]\n }\n\n for (k = keySize; k < ksRows; k++) {\n var t = keySchedule[k - 1]\n\n if (k % keySize === 0) {\n t = (t << 8) | (t >>> 24)\n t =\n (G.SBOX[t >>> 24] << 24) |\n (G.SBOX[(t >>> 16) & 0xff] << 16) |\n (G.SBOX[(t >>> 8) & 0xff] << 8) |\n (G.SBOX[t & 0xff])\n\n t ^= RCON[(k / keySize) | 0] << 24\n } else if (keySize > 6 && k % keySize === 4) {\n t =\n (G.SBOX[t >>> 24] << 24) |\n (G.SBOX[(t >>> 16) & 0xff] << 16) |\n (G.SBOX[(t >>> 8) & 0xff] << 8) |\n (G.SBOX[t & 0xff])\n }\n\n keySchedule[k] = keySchedule[k - keySize] ^ t\n }\n\n var invKeySchedule = []\n for (var ik = 0; ik < ksRows; ik++) {\n var ksR = ksRows - ik\n var tt = keySchedule[ksR - (ik % 4 ? 0 : 4)]\n\n if (ik < 4 || ksR <= 4) {\n invKeySchedule[ik] = tt\n } else {\n invKeySchedule[ik] =\n G.INV_SUB_MIX[0][G.SBOX[tt >>> 24]] ^\n G.INV_SUB_MIX[1][G.SBOX[(tt >>> 16) & 0xff]] ^\n G.INV_SUB_MIX[2][G.SBOX[(tt >>> 8) & 0xff]] ^\n G.INV_SUB_MIX[3][G.SBOX[tt & 0xff]]\n }\n }\n\n this._nRounds = nRounds\n this._keySchedule = keySchedule\n this._invKeySchedule = invKeySchedule\n}\n\nAES.prototype.encryptBlockRaw = function (M) {\n M = asUInt32Array(M)\n return cryptBlock(M, this._keySchedule, G.SUB_MIX, G.SBOX, this._nRounds)\n}\n\nAES.prototype.encryptBlock = function (M) {\n var out = this.encryptBlockRaw(M)\n var buf = Buffer.allocUnsafe(16)\n buf.writeUInt32BE(out[0], 0)\n buf.writeUInt32BE(out[1], 4)\n buf.writeUInt32BE(out[2], 8)\n buf.writeUInt32BE(out[3], 12)\n return buf\n}\n\nAES.prototype.decryptBlock = function (M) {\n M = asUInt32Array(M)\n\n // swap\n var m1 = M[1]\n M[1] = M[3]\n M[3] = m1\n\n var out = cryptBlock(M, this._invKeySchedule, G.INV_SUB_MIX, G.INV_SBOX, this._nRounds)\n var buf = Buffer.allocUnsafe(16)\n buf.writeUInt32BE(out[0], 0)\n buf.writeUInt32BE(out[3], 4)\n buf.writeUInt32BE(out[2], 8)\n buf.writeUInt32BE(out[1], 12)\n return buf\n}\n\nAES.prototype.scrub = function () {\n scrubVec(this._keySchedule)\n scrubVec(this._invKeySchedule)\n scrubVec(this._key)\n}\n\nmodule.exports.AES = AES\n","var aes = require('./aes')\nvar Buffer = require('safe-buffer').Buffer\nvar Transform = require('cipher-base')\nvar inherits = require('inherits')\nvar GHASH = require('./ghash')\nvar xor = require('buffer-xor')\nvar incr32 = require('./incr32')\n\nfunction xorTest (a, b) {\n var out = 0\n if (a.length !== b.length) out++\n\n var len = Math.min(a.length, b.length)\n for (var i = 0; i < len; ++i) {\n out += (a[i] ^ b[i])\n }\n\n return out\n}\n\nfunction calcIv (self, iv, ck) {\n if (iv.length === 12) {\n self._finID = Buffer.concat([iv, Buffer.from([0, 0, 0, 1])])\n return Buffer.concat([iv, Buffer.from([0, 0, 0, 2])])\n }\n var ghash = new GHASH(ck)\n var len = iv.length\n var toPad = len % 16\n ghash.update(iv)\n if (toPad) {\n toPad = 16 - toPad\n ghash.update(Buffer.alloc(toPad, 0))\n }\n ghash.update(Buffer.alloc(8, 0))\n var ivBits = len * 8\n var tail = Buffer.alloc(8)\n tail.writeUIntBE(ivBits, 0, 8)\n ghash.update(tail)\n self._finID = ghash.state\n var out = Buffer.from(self._finID)\n incr32(out)\n return out\n}\nfunction StreamCipher (mode, key, iv, decrypt) {\n Transform.call(this)\n\n var h = Buffer.alloc(4, 0)\n\n this._cipher = new aes.AES(key)\n var ck = this._cipher.encryptBlock(h)\n this._ghash = new GHASH(ck)\n iv = calcIv(this, iv, ck)\n\n this._prev = Buffer.from(iv)\n this._cache = Buffer.allocUnsafe(0)\n this._secCache = Buffer.allocUnsafe(0)\n this._decrypt = decrypt\n this._alen = 0\n this._len = 0\n this._mode = mode\n\n this._authTag = null\n this._called = false\n}\n\ninherits(StreamCipher, Transform)\n\nStreamCipher.prototype._update = function (chunk) {\n if (!this._called && this._alen) {\n var rump = 16 - (this._alen % 16)\n if (rump < 16) {\n rump = Buffer.alloc(rump, 0)\n this._ghash.update(rump)\n }\n }\n\n this._called = true\n var out = this._mode.encrypt(this, chunk)\n if (this._decrypt) {\n this._ghash.update(chunk)\n } else {\n this._ghash.update(out)\n }\n this._len += chunk.length\n return out\n}\n\nStreamCipher.prototype._final = function () {\n if (this._decrypt && !this._authTag) throw new Error('Unsupported state or unable to authenticate data')\n\n var tag = xor(this._ghash.final(this._alen * 8, this._len * 8), this._cipher.encryptBlock(this._finID))\n if (this._decrypt && xorTest(tag, this._authTag)) throw new Error('Unsupported state or unable to authenticate data')\n\n this._authTag = tag\n this._cipher.scrub()\n}\n\nStreamCipher.prototype.getAuthTag = function getAuthTag () {\n if (this._decrypt || !Buffer.isBuffer(this._authTag)) throw new Error('Attempting to get auth tag in unsupported state')\n\n return this._authTag\n}\n\nStreamCipher.prototype.setAuthTag = function setAuthTag (tag) {\n if (!this._decrypt) throw new Error('Attempting to set auth tag in unsupported state')\n\n this._authTag = tag\n}\n\nStreamCipher.prototype.setAAD = function setAAD (buf) {\n if (this._called) throw new Error('Attempting to set AAD in unsupported state')\n\n this._ghash.update(buf)\n this._alen += buf.length\n}\n\nmodule.exports = StreamCipher\n","var ciphers = require('./encrypter')\nvar deciphers = require('./decrypter')\nvar modes = require('./modes/list.json')\n\nfunction getCiphers () {\n return Object.keys(modes)\n}\n\nexports.createCipher = exports.Cipher = ciphers.createCipher\nexports.createCipheriv = exports.Cipheriv = ciphers.createCipheriv\nexports.createDecipher = exports.Decipher = deciphers.createDecipher\nexports.createDecipheriv = exports.Decipheriv = deciphers.createDecipheriv\nexports.listCiphers = exports.getCiphers = getCiphers\n","var AuthCipher = require('./authCipher')\nvar Buffer = require('safe-buffer').Buffer\nvar MODES = require('./modes')\nvar StreamCipher = require('./streamCipher')\nvar Transform = require('cipher-base')\nvar aes = require('./aes')\nvar ebtk = require('evp_bytestokey')\nvar inherits = require('inherits')\n\nfunction Decipher (mode, key, iv) {\n Transform.call(this)\n\n this._cache = new Splitter()\n this._last = void 0\n this._cipher = new aes.AES(key)\n this._prev = Buffer.from(iv)\n this._mode = mode\n this._autopadding = true\n}\n\ninherits(Decipher, Transform)\n\nDecipher.prototype._update = function (data) {\n this._cache.add(data)\n var chunk\n var thing\n var out = []\n while ((chunk = this._cache.get(this._autopadding))) {\n thing = this._mode.decrypt(this, chunk)\n out.push(thing)\n }\n return Buffer.concat(out)\n}\n\nDecipher.prototype._final = function () {\n var chunk = this._cache.flush()\n if (this._autopadding) {\n return unpad(this._mode.decrypt(this, chunk))\n } else if (chunk) {\n throw new Error('data not multiple of block length')\n }\n}\n\nDecipher.prototype.setAutoPadding = function (setTo) {\n this._autopadding = !!setTo\n return this\n}\n\nfunction Splitter () {\n this.cache = Buffer.allocUnsafe(0)\n}\n\nSplitter.prototype.add = function (data) {\n this.cache = Buffer.concat([this.cache, data])\n}\n\nSplitter.prototype.get = function (autoPadding) {\n var out\n if (autoPadding) {\n if (this.cache.length > 16) {\n out = this.cache.slice(0, 16)\n this.cache = this.cache.slice(16)\n return out\n }\n } else {\n if (this.cache.length >= 16) {\n out = this.cache.slice(0, 16)\n this.cache = this.cache.slice(16)\n return out\n }\n }\n\n return null\n}\n\nSplitter.prototype.flush = function () {\n if (this.cache.length) return this.cache\n}\n\nfunction unpad (last) {\n var padded = last[15]\n if (padded < 1 || padded > 16) {\n throw new Error('unable to decrypt data')\n }\n var i = -1\n while (++i < padded) {\n if (last[(i + (16 - padded))] !== padded) {\n throw new Error('unable to decrypt data')\n }\n }\n if (padded === 16) return\n\n return last.slice(0, 16 - padded)\n}\n\nfunction createDecipheriv (suite, password, iv) {\n var config = MODES[suite.toLowerCase()]\n if (!config) throw new TypeError('invalid suite type')\n\n if (typeof iv === 'string') iv = Buffer.from(iv)\n if (config.mode !== 'GCM' && iv.length !== config.iv) throw new TypeError('invalid iv length ' + iv.length)\n\n if (typeof password === 'string') password = Buffer.from(password)\n if (password.length !== config.key / 8) throw new TypeError('invalid key length ' + password.length)\n\n if (config.type === 'stream') {\n return new StreamCipher(config.module, password, iv, true)\n } else if (config.type === 'auth') {\n return new AuthCipher(config.module, password, iv, true)\n }\n\n return new Decipher(config.module, password, iv)\n}\n\nfunction createDecipher (suite, password) {\n var config = MODES[suite.toLowerCase()]\n if (!config) throw new TypeError('invalid suite type')\n\n var keys = ebtk(password, false, config.key, config.iv)\n return createDecipheriv(suite, keys.key, keys.iv)\n}\n\nexports.createDecipher = createDecipher\nexports.createDecipheriv = createDecipheriv\n","var MODES = require('./modes')\nvar AuthCipher = require('./authCipher')\nvar Buffer = require('safe-buffer').Buffer\nvar StreamCipher = require('./streamCipher')\nvar Transform = require('cipher-base')\nvar aes = require('./aes')\nvar ebtk = require('evp_bytestokey')\nvar inherits = require('inherits')\n\nfunction Cipher (mode, key, iv) {\n Transform.call(this)\n\n this._cache = new Splitter()\n this._cipher = new aes.AES(key)\n this._prev = Buffer.from(iv)\n this._mode = mode\n this._autopadding = true\n}\n\ninherits(Cipher, Transform)\n\nCipher.prototype._update = function (data) {\n this._cache.add(data)\n var chunk\n var thing\n var out = []\n\n while ((chunk = this._cache.get())) {\n thing = this._mode.encrypt(this, chunk)\n out.push(thing)\n }\n\n return Buffer.concat(out)\n}\n\nvar PADDING = Buffer.alloc(16, 0x10)\n\nCipher.prototype._final = function () {\n var chunk = this._cache.flush()\n if (this._autopadding) {\n chunk = this._mode.encrypt(this, chunk)\n this._cipher.scrub()\n return chunk\n }\n\n if (!chunk.equals(PADDING)) {\n this._cipher.scrub()\n throw new Error('data not multiple of block length')\n }\n}\n\nCipher.prototype.setAutoPadding = function (setTo) {\n this._autopadding = !!setTo\n return this\n}\n\nfunction Splitter () {\n this.cache = Buffer.allocUnsafe(0)\n}\n\nSplitter.prototype.add = function (data) {\n this.cache = Buffer.concat([this.cache, data])\n}\n\nSplitter.prototype.get = function () {\n if (this.cache.length > 15) {\n var out = this.cache.slice(0, 16)\n this.cache = this.cache.slice(16)\n return out\n }\n return null\n}\n\nSplitter.prototype.flush = function () {\n var len = 16 - this.cache.length\n var padBuff = Buffer.allocUnsafe(len)\n\n var i = -1\n while (++i < len) {\n padBuff.writeUInt8(len, i)\n }\n\n return Buffer.concat([this.cache, padBuff])\n}\n\nfunction createCipheriv (suite, password, iv) {\n var config = MODES[suite.toLowerCase()]\n if (!config) throw new TypeError('invalid suite type')\n\n if (typeof password === 'string') password = Buffer.from(password)\n if (password.length !== config.key / 8) throw new TypeError('invalid key length ' + password.length)\n\n if (typeof iv === 'string') iv = Buffer.from(iv)\n if (config.mode !== 'GCM' && iv.length !== config.iv) throw new TypeError('invalid iv length ' + iv.length)\n\n if (config.type === 'stream') {\n return new StreamCipher(config.module, password, iv)\n } else if (config.type === 'auth') {\n return new AuthCipher(config.module, password, iv)\n }\n\n return new Cipher(config.module, password, iv)\n}\n\nfunction createCipher (suite, password) {\n var config = MODES[suite.toLowerCase()]\n if (!config) throw new TypeError('invalid suite type')\n\n var keys = ebtk(password, false, config.key, config.iv)\n return createCipheriv(suite, keys.key, keys.iv)\n}\n\nexports.createCipheriv = createCipheriv\nexports.createCipher = createCipher\n","var Buffer = require('safe-buffer').Buffer\nvar ZEROES = Buffer.alloc(16, 0)\n\nfunction toArray (buf) {\n return [\n buf.readUInt32BE(0),\n buf.readUInt32BE(4),\n buf.readUInt32BE(8),\n buf.readUInt32BE(12)\n ]\n}\n\nfunction fromArray (out) {\n var buf = Buffer.allocUnsafe(16)\n buf.writeUInt32BE(out[0] >>> 0, 0)\n buf.writeUInt32BE(out[1] >>> 0, 4)\n buf.writeUInt32BE(out[2] >>> 0, 8)\n buf.writeUInt32BE(out[3] >>> 0, 12)\n return buf\n}\n\nfunction GHASH (key) {\n this.h = key\n this.state = Buffer.alloc(16, 0)\n this.cache = Buffer.allocUnsafe(0)\n}\n\n// from http://bitwiseshiftleft.github.io/sjcl/doc/symbols/src/core_gcm.js.html\n// by Juho Vähä-Herttua\nGHASH.prototype.ghash = function (block) {\n var i = -1\n while (++i < block.length) {\n this.state[i] ^= block[i]\n }\n this._multiply()\n}\n\nGHASH.prototype._multiply = function () {\n var Vi = toArray(this.h)\n var Zi = [0, 0, 0, 0]\n var j, xi, lsbVi\n var i = -1\n while (++i < 128) {\n xi = (this.state[~~(i / 8)] & (1 << (7 - (i % 8)))) !== 0\n if (xi) {\n // Z_i+1 = Z_i ^ V_i\n Zi[0] ^= Vi[0]\n Zi[1] ^= Vi[1]\n Zi[2] ^= Vi[2]\n Zi[3] ^= Vi[3]\n }\n\n // Store the value of LSB(V_i)\n lsbVi = (Vi[3] & 1) !== 0\n\n // V_i+1 = V_i >> 1\n for (j = 3; j > 0; j--) {\n Vi[j] = (Vi[j] >>> 1) | ((Vi[j - 1] & 1) << 31)\n }\n Vi[0] = Vi[0] >>> 1\n\n // If LSB(V_i) is 1, V_i+1 = (V_i >> 1) ^ R\n if (lsbVi) {\n Vi[0] = Vi[0] ^ (0xe1 << 24)\n }\n }\n this.state = fromArray(Zi)\n}\n\nGHASH.prototype.update = function (buf) {\n this.cache = Buffer.concat([this.cache, buf])\n var chunk\n while (this.cache.length >= 16) {\n chunk = this.cache.slice(0, 16)\n this.cache = this.cache.slice(16)\n this.ghash(chunk)\n }\n}\n\nGHASH.prototype.final = function (abl, bl) {\n if (this.cache.length) {\n this.ghash(Buffer.concat([this.cache, ZEROES], 16))\n }\n\n this.ghash(fromArray([0, abl, 0, bl]))\n return this.state\n}\n\nmodule.exports = GHASH\n","function incr32 (iv) {\n var len = iv.length\n var item\n while (len--) {\n item = iv.readUInt8(len)\n if (item === 255) {\n iv.writeUInt8(0, len)\n } else {\n item++\n iv.writeUInt8(item, len)\n break\n }\n }\n}\nmodule.exports = incr32\n","var xor = require('buffer-xor')\n\nexports.encrypt = function (self, block) {\n var data = xor(block, self._prev)\n\n self._prev = self._cipher.encryptBlock(data)\n return self._prev\n}\n\nexports.decrypt = function (self, block) {\n var pad = self._prev\n\n self._prev = block\n var out = self._cipher.decryptBlock(block)\n\n return xor(out, pad)\n}\n","var Buffer = require('safe-buffer').Buffer\nvar xor = require('buffer-xor')\n\nfunction encryptStart (self, data, decrypt) {\n var len = data.length\n var out = xor(data, self._cache)\n self._cache = self._cache.slice(len)\n self._prev = Buffer.concat([self._prev, decrypt ? data : out])\n return out\n}\n\nexports.encrypt = function (self, data, decrypt) {\n var out = Buffer.allocUnsafe(0)\n var len\n\n while (data.length) {\n if (self._cache.length === 0) {\n self._cache = self._cipher.encryptBlock(self._prev)\n self._prev = Buffer.allocUnsafe(0)\n }\n\n if (self._cache.length <= data.length) {\n len = self._cache.length\n out = Buffer.concat([out, encryptStart(self, data.slice(0, len), decrypt)])\n data = data.slice(len)\n } else {\n out = Buffer.concat([out, encryptStart(self, data, decrypt)])\n break\n }\n }\n\n return out\n}\n","var Buffer = require('safe-buffer').Buffer\n\nfunction encryptByte (self, byteParam, decrypt) {\n var pad\n var i = -1\n var len = 8\n var out = 0\n var bit, value\n while (++i < len) {\n pad = self._cipher.encryptBlock(self._prev)\n bit = (byteParam & (1 << (7 - i))) ? 0x80 : 0\n value = pad[0] ^ bit\n out += ((value & 0x80) >> (i % 8))\n self._prev = shiftIn(self._prev, decrypt ? bit : value)\n }\n return out\n}\n\nfunction shiftIn (buffer, value) {\n var len = buffer.length\n var i = -1\n var out = Buffer.allocUnsafe(buffer.length)\n buffer = Buffer.concat([buffer, Buffer.from([value])])\n\n while (++i < len) {\n out[i] = buffer[i] << 1 | buffer[i + 1] >> (7)\n }\n\n return out\n}\n\nexports.encrypt = function (self, chunk, decrypt) {\n var len = chunk.length\n var out = Buffer.allocUnsafe(len)\n var i = -1\n\n while (++i < len) {\n out[i] = encryptByte(self, chunk[i], decrypt)\n }\n\n return out\n}\n","var Buffer = require('safe-buffer').Buffer\n\nfunction encryptByte (self, byteParam, decrypt) {\n var pad = self._cipher.encryptBlock(self._prev)\n var out = pad[0] ^ byteParam\n\n self._prev = Buffer.concat([\n self._prev.slice(1),\n Buffer.from([decrypt ? byteParam : out])\n ])\n\n return out\n}\n\nexports.encrypt = function (self, chunk, decrypt) {\n var len = chunk.length\n var out = Buffer.allocUnsafe(len)\n var i = -1\n\n while (++i < len) {\n out[i] = encryptByte(self, chunk[i], decrypt)\n }\n\n return out\n}\n","var xor = require('buffer-xor')\nvar Buffer = require('safe-buffer').Buffer\nvar incr32 = require('../incr32')\n\nfunction getBlock (self) {\n var out = self._cipher.encryptBlockRaw(self._prev)\n incr32(self._prev)\n return out\n}\n\nvar blockSize = 16\nexports.encrypt = function (self, chunk) {\n var chunkNum = Math.ceil(chunk.length / blockSize)\n var start = self._cache.length\n self._cache = Buffer.concat([\n self._cache,\n Buffer.allocUnsafe(chunkNum * blockSize)\n ])\n for (var i = 0; i < chunkNum; i++) {\n var out = getBlock(self)\n var offset = start + i * blockSize\n self._cache.writeUInt32BE(out[0], offset + 0)\n self._cache.writeUInt32BE(out[1], offset + 4)\n self._cache.writeUInt32BE(out[2], offset + 8)\n self._cache.writeUInt32BE(out[3], offset + 12)\n }\n var pad = self._cache.slice(0, chunk.length)\n self._cache = self._cache.slice(chunk.length)\n return xor(chunk, pad)\n}\n","exports.encrypt = function (self, block) {\n return self._cipher.encryptBlock(block)\n}\n\nexports.decrypt = function (self, block) {\n return self._cipher.decryptBlock(block)\n}\n","var modeModules = {\n ECB: require('./ecb'),\n CBC: require('./cbc'),\n CFB: require('./cfb'),\n CFB8: require('./cfb8'),\n CFB1: require('./cfb1'),\n OFB: require('./ofb'),\n CTR: require('./ctr'),\n GCM: require('./ctr')\n}\n\nvar modes = require('./list.json')\n\nfor (var key in modes) {\n modes[key].module = modeModules[modes[key].mode]\n}\n\nmodule.exports = modes\n","var xor = require('buffer-xor')\n\nfunction getBlock (self) {\n self._prev = self._cipher.encryptBlock(self._prev)\n return self._prev\n}\n\nexports.encrypt = function (self, chunk) {\n while (self._cache.length < chunk.length) {\n self._cache = Buffer.concat([self._cache, getBlock(self)])\n }\n\n var pad = self._cache.slice(0, chunk.length)\n self._cache = self._cache.slice(chunk.length)\n return xor(chunk, pad)\n}\n","var aes = require('./aes')\nvar Buffer = require('safe-buffer').Buffer\nvar Transform = require('cipher-base')\nvar inherits = require('inherits')\n\nfunction StreamCipher (mode, key, iv, decrypt) {\n Transform.call(this)\n\n this._cipher = new aes.AES(key)\n this._prev = Buffer.from(iv)\n this._cache = Buffer.allocUnsafe(0)\n this._secCache = Buffer.allocUnsafe(0)\n this._decrypt = decrypt\n this._mode = mode\n}\n\ninherits(StreamCipher, Transform)\n\nStreamCipher.prototype._update = function (chunk) {\n return this._mode.encrypt(this, chunk, this._decrypt)\n}\n\nStreamCipher.prototype._final = function () {\n this._cipher.scrub()\n}\n\nmodule.exports = StreamCipher\n","var DES = require('browserify-des')\nvar aes = require('browserify-aes/browser')\nvar aesModes = require('browserify-aes/modes')\nvar desModes = require('browserify-des/modes')\nvar ebtk = require('evp_bytestokey')\n\nfunction createCipher (suite, password) {\n suite = suite.toLowerCase()\n\n var keyLen, ivLen\n if (aesModes[suite]) {\n keyLen = aesModes[suite].key\n ivLen = aesModes[suite].iv\n } else if (desModes[suite]) {\n keyLen = desModes[suite].key * 8\n ivLen = desModes[suite].iv\n } else {\n throw new TypeError('invalid suite type')\n }\n\n var keys = ebtk(password, false, keyLen, ivLen)\n return createCipheriv(suite, keys.key, keys.iv)\n}\n\nfunction createDecipher (suite, password) {\n suite = suite.toLowerCase()\n\n var keyLen, ivLen\n if (aesModes[suite]) {\n keyLen = aesModes[suite].key\n ivLen = aesModes[suite].iv\n } else if (desModes[suite]) {\n keyLen = desModes[suite].key * 8\n ivLen = desModes[suite].iv\n } else {\n throw new TypeError('invalid suite type')\n }\n\n var keys = ebtk(password, false, keyLen, ivLen)\n return createDecipheriv(suite, keys.key, keys.iv)\n}\n\nfunction createCipheriv (suite, key, iv) {\n suite = suite.toLowerCase()\n if (aesModes[suite]) return aes.createCipheriv(suite, key, iv)\n if (desModes[suite]) return new DES({ key: key, iv: iv, mode: suite })\n\n throw new TypeError('invalid suite type')\n}\n\nfunction createDecipheriv (suite, key, iv) {\n suite = suite.toLowerCase()\n if (aesModes[suite]) return aes.createDecipheriv(suite, key, iv)\n if (desModes[suite]) return new DES({ key: key, iv: iv, mode: suite, decrypt: true })\n\n throw new TypeError('invalid suite type')\n}\n\nfunction getCiphers () {\n return Object.keys(desModes).concat(aes.getCiphers())\n}\n\nexports.createCipher = exports.Cipher = createCipher\nexports.createCipheriv = exports.Cipheriv = createCipheriv\nexports.createDecipher = exports.Decipher = createDecipher\nexports.createDecipheriv = exports.Decipheriv = createDecipheriv\nexports.listCiphers = exports.getCiphers = getCiphers\n","var CipherBase = require('cipher-base')\nvar des = require('des.js')\nvar inherits = require('inherits')\nvar Buffer = require('safe-buffer').Buffer\n\nvar modes = {\n 'des-ede3-cbc': des.CBC.instantiate(des.EDE),\n 'des-ede3': des.EDE,\n 'des-ede-cbc': des.CBC.instantiate(des.EDE),\n 'des-ede': des.EDE,\n 'des-cbc': des.CBC.instantiate(des.DES),\n 'des-ecb': des.DES\n}\nmodes.des = modes['des-cbc']\nmodes.des3 = modes['des-ede3-cbc']\nmodule.exports = DES\ninherits(DES, CipherBase)\nfunction DES (opts) {\n CipherBase.call(this)\n var modeName = opts.mode.toLowerCase()\n var mode = modes[modeName]\n var type\n if (opts.decrypt) {\n type = 'decrypt'\n } else {\n type = 'encrypt'\n }\n var key = opts.key\n if (!Buffer.isBuffer(key)) {\n key = Buffer.from(key)\n }\n if (modeName === 'des-ede' || modeName === 'des-ede-cbc') {\n key = Buffer.concat([key, key.slice(0, 8)])\n }\n var iv = opts.iv\n if (!Buffer.isBuffer(iv)) {\n iv = Buffer.from(iv)\n }\n this._des = mode.create({\n key: key,\n iv: iv,\n type: type\n })\n}\nDES.prototype._update = function (data) {\n return Buffer.from(this._des.update(data))\n}\nDES.prototype._final = function () {\n return Buffer.from(this._des.final())\n}\n","exports['des-ecb'] = {\n key: 8,\n iv: 0\n}\nexports['des-cbc'] = exports.des = {\n key: 8,\n iv: 8\n}\nexports['des-ede3-cbc'] = exports.des3 = {\n key: 24,\n iv: 8\n}\nexports['des-ede3'] = {\n key: 24,\n iv: 0\n}\nexports['des-ede-cbc'] = {\n key: 16,\n iv: 8\n}\nexports['des-ede'] = {\n key: 16,\n iv: 0\n}\n","var BN = require('bn.js')\nvar randomBytes = require('randombytes')\n\nfunction blind (priv) {\n var r = getr(priv)\n var blinder = r.toRed(BN.mont(priv.modulus)).redPow(new BN(priv.publicExponent)).fromRed()\n return { blinder: blinder, unblinder: r.invm(priv.modulus) }\n}\n\nfunction getr (priv) {\n var len = priv.modulus.byteLength()\n var r\n do {\n r = new BN(randomBytes(len))\n } while (r.cmp(priv.modulus) >= 0 || !r.umod(priv.prime1) || !r.umod(priv.prime2))\n return r\n}\n\nfunction crt (msg, priv) {\n var blinds = blind(priv)\n var len = priv.modulus.byteLength()\n var blinded = new BN(msg).mul(blinds.blinder).umod(priv.modulus)\n var c1 = blinded.toRed(BN.mont(priv.prime1))\n var c2 = blinded.toRed(BN.mont(priv.prime2))\n var qinv = priv.coefficient\n var p = priv.prime1\n var q = priv.prime2\n var m1 = c1.redPow(priv.exponent1).fromRed()\n var m2 = c2.redPow(priv.exponent2).fromRed()\n var h = m1.isub(m2).imul(qinv).umod(p).imul(q)\n return m2.iadd(h).imul(blinds.unblinder).umod(priv.modulus).toArrayLike(Buffer, 'be', len)\n}\ncrt.getr = getr\n\nmodule.exports = crt\n","(function (module, exports) {\n 'use strict';\n\n // Utils\n function assert (val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n }\n\n // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n function inherits (ctor, superCtor) {\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n\n // BN\n\n function BN (number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0;\n\n // Reduction context\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n\n var Buffer;\n try {\n if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n Buffer = window.Buffer;\n } else {\n Buffer = require('buffer').Buffer;\n }\n } catch (e) {\n }\n\n BN.isBN = function isBN (num) {\n if (num instanceof BN) {\n return true;\n }\n\n return num !== null && typeof num === 'object' &&\n num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n };\n\n BN.max = function max (left, right) {\n if (left.cmp(right) > 0) return left;\n return right;\n };\n\n BN.min = function min (left, right) {\n if (left.cmp(right) < 0) return left;\n return right;\n };\n\n BN.prototype._init = function init (number, base, endian) {\n if (typeof number === 'number') {\n return this._initNumber(number, base, endian);\n }\n\n if (typeof number === 'object') {\n return this._initArray(number, base, endian);\n }\n\n if (base === 'hex') {\n base = 16;\n }\n assert(base === (base | 0) && base >= 2 && base <= 36);\n\n number = number.toString().replace(/\\s+/g, '');\n var start = 0;\n if (number[0] === '-') {\n start++;\n this.negative = 1;\n }\n\n if (start < number.length) {\n if (base === 16) {\n this._parseHex(number, start, endian);\n } else {\n this._parseBase(number, base, start);\n if (endian === 'le') {\n this._initArray(this.toArray(), base, endian);\n }\n }\n }\n };\n\n BN.prototype._initNumber = function _initNumber (number, base, endian) {\n if (number < 0) {\n this.negative = 1;\n number = -number;\n }\n if (number < 0x4000000) {\n this.words = [number & 0x3ffffff];\n this.length = 1;\n } else if (number < 0x10000000000000) {\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff\n ];\n this.length = 2;\n } else {\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff,\n 1\n ];\n this.length = 3;\n }\n\n if (endian !== 'le') return;\n\n // Reverse the bytes\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initArray = function _initArray (number, base, endian) {\n // Perhaps a Uint8Array\n assert(typeof number.length === 'number');\n if (number.length <= 0) {\n this.words = [0];\n this.length = 1;\n return this;\n }\n\n this.length = Math.ceil(number.length / 3);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n var off = 0;\n if (endian === 'be') {\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n } else if (endian === 'le') {\n for (i = 0, j = 0; i < number.length; i += 3) {\n w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n }\n return this._strip();\n };\n\n function parseHex4Bits (string, index) {\n var c = string.charCodeAt(index);\n // '0' - '9'\n if (c >= 48 && c <= 57) {\n return c - 48;\n // 'A' - 'F'\n } else if (c >= 65 && c <= 70) {\n return c - 55;\n // 'a' - 'f'\n } else if (c >= 97 && c <= 102) {\n return c - 87;\n } else {\n assert(false, 'Invalid character in ' + string);\n }\n }\n\n function parseHexByte (string, lowerBound, index) {\n var r = parseHex4Bits(string, index);\n if (index - 1 >= lowerBound) {\n r |= parseHex4Bits(string, index - 1) << 4;\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start, endian) {\n // Create possibly bigger array to ensure that it fits the number\n this.length = Math.ceil((number.length - start) / 6);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n // 24-bits chunks\n var off = 0;\n var j = 0;\n\n var w;\n if (endian === 'be') {\n for (i = number.length - 1; i >= start; i -= 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n } else {\n var parseLength = number.length - start;\n for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n }\n\n this._strip();\n };\n\n function parseBase (str, start, end, mul) {\n var r = 0;\n var b = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n b = c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n b = c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n b = c;\n }\n assert(c >= 0 && b < mul, 'Invalid character');\n r += b;\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [0];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n this._strip();\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n function move (dest, src) {\n dest.words = src.words;\n dest.length = src.length;\n dest.negative = src.negative;\n dest.red = src.red;\n }\n\n BN.prototype._move = function _move (dest) {\n move(dest, this);\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype._strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n // Check Symbol.for because not everywhere where Symbol defined\n // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol#Browser_compatibility\n if (typeof Symbol !== 'undefined' && typeof Symbol.for === 'function') {\n try {\n BN.prototype[Symbol.for('nodejs.util.inspect.custom')] = inspect;\n } catch (e) {\n BN.prototype.inspect = inspect;\n }\n } else {\n BN.prototype.inspect = inspect;\n }\n\n function inspect () {\n return (this.red ? '';\n }\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n off += 2;\n if (off >= 26) {\n off -= 26;\n i--;\n }\n if (carry !== 0 || i !== this.length - 1) {\n out = zeros[6 - word.length] + word + out;\n } else {\n out = word + out;\n }\n }\n if (carry !== 0) {\n out = carry.toString(16) + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n if (base === (base | 0) && base >= 2 && base <= 36) {\n // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n var groupSize = groupSizes[base];\n // var groupBase = Math.pow(base, groupSize);\n var groupBase = groupBases[base];\n out = '';\n var c = this.clone();\n c.negative = 0;\n while (!c.isZero()) {\n var r = c.modrn(groupBase).toString(base);\n c = c.idivn(groupBase);\n\n if (!c.isZero()) {\n out = zeros[groupSize - r.length] + r + out;\n } else {\n out = r + out;\n }\n }\n if (this.isZero()) {\n out = '0' + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n assert(false, 'Base should be between 2 and 36');\n };\n\n BN.prototype.toNumber = function toNumber () {\n var ret = this.words[0];\n if (this.length === 2) {\n ret += this.words[1] * 0x4000000;\n } else if (this.length === 3 && this.words[2] === 0x01) {\n // NOTE: at this stage it is known that the top bit is set\n ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n } else if (this.length > 2) {\n assert(false, 'Number can only safely store up to 53 bits');\n }\n return (this.negative !== 0) ? -ret : ret;\n };\n\n BN.prototype.toJSON = function toJSON () {\n return this.toString(16, 2);\n };\n\n if (Buffer) {\n BN.prototype.toBuffer = function toBuffer (endian, length) {\n return this.toArrayLike(Buffer, endian, length);\n };\n }\n\n BN.prototype.toArray = function toArray (endian, length) {\n return this.toArrayLike(Array, endian, length);\n };\n\n var allocate = function allocate (ArrayType, size) {\n if (ArrayType.allocUnsafe) {\n return ArrayType.allocUnsafe(size);\n }\n return new ArrayType(size);\n };\n\n BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n this._strip();\n\n var byteLength = this.byteLength();\n var reqLength = length || Math.max(1, byteLength);\n assert(byteLength <= reqLength, 'byte array longer than desired length');\n assert(reqLength > 0, 'Requested array length <= 0');\n\n var res = allocate(ArrayType, reqLength);\n var postfix = endian === 'le' ? 'LE' : 'BE';\n this['_toArrayLike' + postfix](res, byteLength);\n return res;\n };\n\n BN.prototype._toArrayLikeLE = function _toArrayLikeLE (res, byteLength) {\n var position = 0;\n var carry = 0;\n\n for (var i = 0, shift = 0; i < this.length; i++) {\n var word = (this.words[i] << shift) | carry;\n\n res[position++] = word & 0xff;\n if (position < res.length) {\n res[position++] = (word >> 8) & 0xff;\n }\n if (position < res.length) {\n res[position++] = (word >> 16) & 0xff;\n }\n\n if (shift === 6) {\n if (position < res.length) {\n res[position++] = (word >> 24) & 0xff;\n }\n carry = 0;\n shift = 0;\n } else {\n carry = word >>> 24;\n shift += 2;\n }\n }\n\n if (position < res.length) {\n res[position++] = carry;\n\n while (position < res.length) {\n res[position++] = 0;\n }\n }\n };\n\n BN.prototype._toArrayLikeBE = function _toArrayLikeBE (res, byteLength) {\n var position = res.length - 1;\n var carry = 0;\n\n for (var i = 0, shift = 0; i < this.length; i++) {\n var word = (this.words[i] << shift) | carry;\n\n res[position--] = word & 0xff;\n if (position >= 0) {\n res[position--] = (word >> 8) & 0xff;\n }\n if (position >= 0) {\n res[position--] = (word >> 16) & 0xff;\n }\n\n if (shift === 6) {\n if (position >= 0) {\n res[position--] = (word >> 24) & 0xff;\n }\n carry = 0;\n shift = 0;\n } else {\n carry = word >>> 24;\n shift += 2;\n }\n }\n\n if (position >= 0) {\n res[position--] = carry;\n\n while (position >= 0) {\n res[position--] = 0;\n }\n }\n };\n\n if (Math.clz32) {\n BN.prototype._countBits = function _countBits (w) {\n return 32 - Math.clz32(w);\n };\n } else {\n BN.prototype._countBits = function _countBits (w) {\n var t = w;\n var r = 0;\n if (t >= 0x1000) {\n r += 13;\n t >>>= 13;\n }\n if (t >= 0x40) {\n r += 7;\n t >>>= 7;\n }\n if (t >= 0x8) {\n r += 4;\n t >>>= 4;\n }\n if (t >= 0x02) {\n r += 2;\n t >>>= 2;\n }\n return r + t;\n };\n }\n\n BN.prototype._zeroBits = function _zeroBits (w) {\n // Short-cut\n if (w === 0) return 26;\n\n var t = w;\n var r = 0;\n if ((t & 0x1fff) === 0) {\n r += 13;\n t >>>= 13;\n }\n if ((t & 0x7f) === 0) {\n r += 7;\n t >>>= 7;\n }\n if ((t & 0xf) === 0) {\n r += 4;\n t >>>= 4;\n }\n if ((t & 0x3) === 0) {\n r += 2;\n t >>>= 2;\n }\n if ((t & 0x1) === 0) {\n r++;\n }\n return r;\n };\n\n // Return number of used bits in a BN\n BN.prototype.bitLength = function bitLength () {\n var w = this.words[this.length - 1];\n var hi = this._countBits(w);\n return (this.length - 1) * 26 + hi;\n };\n\n function toBitArray (num) {\n var w = new Array(num.bitLength());\n\n for (var bit = 0; bit < w.length; bit++) {\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n w[bit] = (num.words[off] >>> wbit) & 0x01;\n }\n\n return w;\n }\n\n // Number of trailing zero bits\n BN.prototype.zeroBits = function zeroBits () {\n if (this.isZero()) return 0;\n\n var r = 0;\n for (var i = 0; i < this.length; i++) {\n var b = this._zeroBits(this.words[i]);\n r += b;\n if (b !== 26) break;\n }\n return r;\n };\n\n BN.prototype.byteLength = function byteLength () {\n return Math.ceil(this.bitLength() / 8);\n };\n\n BN.prototype.toTwos = function toTwos (width) {\n if (this.negative !== 0) {\n return this.abs().inotn(width).iaddn(1);\n }\n return this.clone();\n };\n\n BN.prototype.fromTwos = function fromTwos (width) {\n if (this.testn(width - 1)) {\n return this.notn(width).iaddn(1).ineg();\n }\n return this.clone();\n };\n\n BN.prototype.isNeg = function isNeg () {\n return this.negative !== 0;\n };\n\n // Return negative clone of `this`\n BN.prototype.neg = function neg () {\n return this.clone().ineg();\n };\n\n BN.prototype.ineg = function ineg () {\n if (!this.isZero()) {\n this.negative ^= 1;\n }\n\n return this;\n };\n\n // Or `num` with `this` in-place\n BN.prototype.iuor = function iuor (num) {\n while (this.length < num.length) {\n this.words[this.length++] = 0;\n }\n\n for (var i = 0; i < num.length; i++) {\n this.words[i] = this.words[i] | num.words[i];\n }\n\n return this._strip();\n };\n\n BN.prototype.ior = function ior (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuor(num);\n };\n\n // Or `num` with `this`\n BN.prototype.or = function or (num) {\n if (this.length > num.length) return this.clone().ior(num);\n return num.clone().ior(this);\n };\n\n BN.prototype.uor = function uor (num) {\n if (this.length > num.length) return this.clone().iuor(num);\n return num.clone().iuor(this);\n };\n\n // And `num` with `this` in-place\n BN.prototype.iuand = function iuand (num) {\n // b = min-length(num, this)\n var b;\n if (this.length > num.length) {\n b = num;\n } else {\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = this.words[i] & num.words[i];\n }\n\n this.length = b.length;\n\n return this._strip();\n };\n\n BN.prototype.iand = function iand (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuand(num);\n };\n\n // And `num` with `this`\n BN.prototype.and = function and (num) {\n if (this.length > num.length) return this.clone().iand(num);\n return num.clone().iand(this);\n };\n\n BN.prototype.uand = function uand (num) {\n if (this.length > num.length) return this.clone().iuand(num);\n return num.clone().iuand(this);\n };\n\n // Xor `num` with `this` in-place\n BN.prototype.iuxor = function iuxor (num) {\n // a.length > b.length\n var a;\n var b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = a.words[i] ^ b.words[i];\n }\n\n if (this !== a) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = a.length;\n\n return this._strip();\n };\n\n BN.prototype.ixor = function ixor (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuxor(num);\n };\n\n // Xor `num` with `this`\n BN.prototype.xor = function xor (num) {\n if (this.length > num.length) return this.clone().ixor(num);\n return num.clone().ixor(this);\n };\n\n BN.prototype.uxor = function uxor (num) {\n if (this.length > num.length) return this.clone().iuxor(num);\n return num.clone().iuxor(this);\n };\n\n // Not ``this`` with ``width`` bitwidth\n BN.prototype.inotn = function inotn (width) {\n assert(typeof width === 'number' && width >= 0);\n\n var bytesNeeded = Math.ceil(width / 26) | 0;\n var bitsLeft = width % 26;\n\n // Extend the buffer with leading zeroes\n this._expand(bytesNeeded);\n\n if (bitsLeft > 0) {\n bytesNeeded--;\n }\n\n // Handle complete words\n for (var i = 0; i < bytesNeeded; i++) {\n this.words[i] = ~this.words[i] & 0x3ffffff;\n }\n\n // Handle the residue\n if (bitsLeft > 0) {\n this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n }\n\n // And remove leading zeroes\n return this._strip();\n };\n\n BN.prototype.notn = function notn (width) {\n return this.clone().inotn(width);\n };\n\n // Set `bit` of `this`\n BN.prototype.setn = function setn (bit, val) {\n assert(typeof bit === 'number' && bit >= 0);\n\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n this._expand(off + 1);\n\n if (val) {\n this.words[off] = this.words[off] | (1 << wbit);\n } else {\n this.words[off] = this.words[off] & ~(1 << wbit);\n }\n\n return this._strip();\n };\n\n // Add `num` to `this` in-place\n BN.prototype.iadd = function iadd (num) {\n var r;\n\n // negative + positive\n if (this.negative !== 0 && num.negative === 0) {\n this.negative = 0;\n r = this.isub(num);\n this.negative ^= 1;\n return this._normSign();\n\n // positive + negative\n } else if (this.negative === 0 && num.negative !== 0) {\n num.negative = 0;\n r = this.isub(num);\n num.negative = 1;\n return r._normSign();\n }\n\n // a.length > b.length\n var a, b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n\n this.length = a.length;\n if (carry !== 0) {\n this.words[this.length] = carry;\n this.length++;\n // Copy the rest of the words\n } else if (a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n return this;\n };\n\n // Add `num` to `this`\n BN.prototype.add = function add (num) {\n var res;\n if (num.negative !== 0 && this.negative === 0) {\n num.negative = 0;\n res = this.sub(num);\n num.negative ^= 1;\n return res;\n } else if (num.negative === 0 && this.negative !== 0) {\n this.negative = 0;\n res = num.sub(this);\n this.negative = 1;\n return res;\n }\n\n if (this.length > num.length) return this.clone().iadd(num);\n\n return num.clone().iadd(this);\n };\n\n // Subtract `num` from `this` in-place\n BN.prototype.isub = function isub (num) {\n // this - (-num) = this + num\n if (num.negative !== 0) {\n num.negative = 0;\n var r = this.iadd(num);\n num.negative = 1;\n return r._normSign();\n\n // -this - num = -(this + num)\n } else if (this.negative !== 0) {\n this.negative = 0;\n this.iadd(num);\n this.negative = 1;\n return this._normSign();\n }\n\n // At this point both numbers are positive\n var cmp = this.cmp(num);\n\n // Optimization - zeroify\n if (cmp === 0) {\n this.negative = 0;\n this.length = 1;\n this.words[0] = 0;\n return this;\n }\n\n // a > b\n var a, b;\n if (cmp > 0) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n\n // Copy rest of the words\n if (carry === 0 && i < a.length && a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = Math.max(this.length, i);\n\n if (a !== this) {\n this.negative = 1;\n }\n\n return this._strip();\n };\n\n // Subtract `num` from `this`\n BN.prototype.sub = function sub (num) {\n return this.clone().isub(num);\n };\n\n function smallMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n var len = (self.length + num.length) | 0;\n out.length = len;\n len = (len - 1) | 0;\n\n // Peel one iteration (compiler can't do it, because of code complexity)\n var a = self.words[0] | 0;\n var b = num.words[0] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n var carry = (r / 0x4000000) | 0;\n out.words[0] = lo;\n\n for (var k = 1; k < len; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = carry >>> 26;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = (k - j) | 0;\n a = self.words[i] | 0;\n b = num.words[j] | 0;\n r = a * b + rword;\n ncarry += (r / 0x4000000) | 0;\n rword = r & 0x3ffffff;\n }\n out.words[k] = rword | 0;\n carry = ncarry | 0;\n }\n if (carry !== 0) {\n out.words[k] = carry | 0;\n } else {\n out.length--;\n }\n\n return out._strip();\n }\n\n // TODO(indutny): it may be reasonable to omit it for users who don't need\n // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n // multiplication (like elliptic secp256k1).\n var comb10MulTo = function comb10MulTo (self, num, out) {\n var a = self.words;\n var b = num.words;\n var o = out.words;\n var c = 0;\n var lo;\n var mid;\n var hi;\n var a0 = a[0] | 0;\n var al0 = a0 & 0x1fff;\n var ah0 = a0 >>> 13;\n var a1 = a[1] | 0;\n var al1 = a1 & 0x1fff;\n var ah1 = a1 >>> 13;\n var a2 = a[2] | 0;\n var al2 = a2 & 0x1fff;\n var ah2 = a2 >>> 13;\n var a3 = a[3] | 0;\n var al3 = a3 & 0x1fff;\n var ah3 = a3 >>> 13;\n var a4 = a[4] | 0;\n var al4 = a4 & 0x1fff;\n var ah4 = a4 >>> 13;\n var a5 = a[5] | 0;\n var al5 = a5 & 0x1fff;\n var ah5 = a5 >>> 13;\n var a6 = a[6] | 0;\n var al6 = a6 & 0x1fff;\n var ah6 = a6 >>> 13;\n var a7 = a[7] | 0;\n var al7 = a7 & 0x1fff;\n var ah7 = a7 >>> 13;\n var a8 = a[8] | 0;\n var al8 = a8 & 0x1fff;\n var ah8 = a8 >>> 13;\n var a9 = a[9] | 0;\n var al9 = a9 & 0x1fff;\n var ah9 = a9 >>> 13;\n var b0 = b[0] | 0;\n var bl0 = b0 & 0x1fff;\n var bh0 = b0 >>> 13;\n var b1 = b[1] | 0;\n var bl1 = b1 & 0x1fff;\n var bh1 = b1 >>> 13;\n var b2 = b[2] | 0;\n var bl2 = b2 & 0x1fff;\n var bh2 = b2 >>> 13;\n var b3 = b[3] | 0;\n var bl3 = b3 & 0x1fff;\n var bh3 = b3 >>> 13;\n var b4 = b[4] | 0;\n var bl4 = b4 & 0x1fff;\n var bh4 = b4 >>> 13;\n var b5 = b[5] | 0;\n var bl5 = b5 & 0x1fff;\n var bh5 = b5 >>> 13;\n var b6 = b[6] | 0;\n var bl6 = b6 & 0x1fff;\n var bh6 = b6 >>> 13;\n var b7 = b[7] | 0;\n var bl7 = b7 & 0x1fff;\n var bh7 = b7 >>> 13;\n var b8 = b[8] | 0;\n var bl8 = b8 & 0x1fff;\n var bh8 = b8 >>> 13;\n var b9 = b[9] | 0;\n var bl9 = b9 & 0x1fff;\n var bh9 = b9 >>> 13;\n\n out.negative = self.negative ^ num.negative;\n out.length = 19;\n /* k = 0 */\n lo = Math.imul(al0, bl0);\n mid = Math.imul(al0, bh0);\n mid = (mid + Math.imul(ah0, bl0)) | 0;\n hi = Math.imul(ah0, bh0);\n var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n w0 &= 0x3ffffff;\n /* k = 1 */\n lo = Math.imul(al1, bl0);\n mid = Math.imul(al1, bh0);\n mid = (mid + Math.imul(ah1, bl0)) | 0;\n hi = Math.imul(ah1, bh0);\n lo = (lo + Math.imul(al0, bl1)) | 0;\n mid = (mid + Math.imul(al0, bh1)) | 0;\n mid = (mid + Math.imul(ah0, bl1)) | 0;\n hi = (hi + Math.imul(ah0, bh1)) | 0;\n var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n w1 &= 0x3ffffff;\n /* k = 2 */\n lo = Math.imul(al2, bl0);\n mid = Math.imul(al2, bh0);\n mid = (mid + Math.imul(ah2, bl0)) | 0;\n hi = Math.imul(ah2, bh0);\n lo = (lo + Math.imul(al1, bl1)) | 0;\n mid = (mid + Math.imul(al1, bh1)) | 0;\n mid = (mid + Math.imul(ah1, bl1)) | 0;\n hi = (hi + Math.imul(ah1, bh1)) | 0;\n lo = (lo + Math.imul(al0, bl2)) | 0;\n mid = (mid + Math.imul(al0, bh2)) | 0;\n mid = (mid + Math.imul(ah0, bl2)) | 0;\n hi = (hi + Math.imul(ah0, bh2)) | 0;\n var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n w2 &= 0x3ffffff;\n /* k = 3 */\n lo = Math.imul(al3, bl0);\n mid = Math.imul(al3, bh0);\n mid = (mid + Math.imul(ah3, bl0)) | 0;\n hi = Math.imul(ah3, bh0);\n lo = (lo + Math.imul(al2, bl1)) | 0;\n mid = (mid + Math.imul(al2, bh1)) | 0;\n mid = (mid + Math.imul(ah2, bl1)) | 0;\n hi = (hi + Math.imul(ah2, bh1)) | 0;\n lo = (lo + Math.imul(al1, bl2)) | 0;\n mid = (mid + Math.imul(al1, bh2)) | 0;\n mid = (mid + Math.imul(ah1, bl2)) | 0;\n hi = (hi + Math.imul(ah1, bh2)) | 0;\n lo = (lo + Math.imul(al0, bl3)) | 0;\n mid = (mid + Math.imul(al0, bh3)) | 0;\n mid = (mid + Math.imul(ah0, bl3)) | 0;\n hi = (hi + Math.imul(ah0, bh3)) | 0;\n var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n w3 &= 0x3ffffff;\n /* k = 4 */\n lo = Math.imul(al4, bl0);\n mid = Math.imul(al4, bh0);\n mid = (mid + Math.imul(ah4, bl0)) | 0;\n hi = Math.imul(ah4, bh0);\n lo = (lo + Math.imul(al3, bl1)) | 0;\n mid = (mid + Math.imul(al3, bh1)) | 0;\n mid = (mid + Math.imul(ah3, bl1)) | 0;\n hi = (hi + Math.imul(ah3, bh1)) | 0;\n lo = (lo + Math.imul(al2, bl2)) | 0;\n mid = (mid + Math.imul(al2, bh2)) | 0;\n mid = (mid + Math.imul(ah2, bl2)) | 0;\n hi = (hi + Math.imul(ah2, bh2)) | 0;\n lo = (lo + Math.imul(al1, bl3)) | 0;\n mid = (mid + Math.imul(al1, bh3)) | 0;\n mid = (mid + Math.imul(ah1, bl3)) | 0;\n hi = (hi + Math.imul(ah1, bh3)) | 0;\n lo = (lo + Math.imul(al0, bl4)) | 0;\n mid = (mid + Math.imul(al0, bh4)) | 0;\n mid = (mid + Math.imul(ah0, bl4)) | 0;\n hi = (hi + Math.imul(ah0, bh4)) | 0;\n var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n w4 &= 0x3ffffff;\n /* k = 5 */\n lo = Math.imul(al5, bl0);\n mid = Math.imul(al5, bh0);\n mid = (mid + Math.imul(ah5, bl0)) | 0;\n hi = Math.imul(ah5, bh0);\n lo = (lo + Math.imul(al4, bl1)) | 0;\n mid = (mid + Math.imul(al4, bh1)) | 0;\n mid = (mid + Math.imul(ah4, bl1)) | 0;\n hi = (hi + Math.imul(ah4, bh1)) | 0;\n lo = (lo + Math.imul(al3, bl2)) | 0;\n mid = (mid + Math.imul(al3, bh2)) | 0;\n mid = (mid + Math.imul(ah3, bl2)) | 0;\n hi = (hi + Math.imul(ah3, bh2)) | 0;\n lo = (lo + Math.imul(al2, bl3)) | 0;\n mid = (mid + Math.imul(al2, bh3)) | 0;\n mid = (mid + Math.imul(ah2, bl3)) | 0;\n hi = (hi + Math.imul(ah2, bh3)) | 0;\n lo = (lo + Math.imul(al1, bl4)) | 0;\n mid = (mid + Math.imul(al1, bh4)) | 0;\n mid = (mid + Math.imul(ah1, bl4)) | 0;\n hi = (hi + Math.imul(ah1, bh4)) | 0;\n lo = (lo + Math.imul(al0, bl5)) | 0;\n mid = (mid + Math.imul(al0, bh5)) | 0;\n mid = (mid + Math.imul(ah0, bl5)) | 0;\n hi = (hi + Math.imul(ah0, bh5)) | 0;\n var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n w5 &= 0x3ffffff;\n /* k = 6 */\n lo = Math.imul(al6, bl0);\n mid = Math.imul(al6, bh0);\n mid = (mid + Math.imul(ah6, bl0)) | 0;\n hi = Math.imul(ah6, bh0);\n lo = (lo + Math.imul(al5, bl1)) | 0;\n mid = (mid + Math.imul(al5, bh1)) | 0;\n mid = (mid + Math.imul(ah5, bl1)) | 0;\n hi = (hi + Math.imul(ah5, bh1)) | 0;\n lo = (lo + Math.imul(al4, bl2)) | 0;\n mid = (mid + Math.imul(al4, bh2)) | 0;\n mid = (mid + Math.imul(ah4, bl2)) | 0;\n hi = (hi + Math.imul(ah4, bh2)) | 0;\n lo = (lo + Math.imul(al3, bl3)) | 0;\n mid = (mid + Math.imul(al3, bh3)) | 0;\n mid = (mid + Math.imul(ah3, bl3)) | 0;\n hi = (hi + Math.imul(ah3, bh3)) | 0;\n lo = (lo + Math.imul(al2, bl4)) | 0;\n mid = (mid + Math.imul(al2, bh4)) | 0;\n mid = (mid + Math.imul(ah2, bl4)) | 0;\n hi = (hi + Math.imul(ah2, bh4)) | 0;\n lo = (lo + Math.imul(al1, bl5)) | 0;\n mid = (mid + Math.imul(al1, bh5)) | 0;\n mid = (mid + Math.imul(ah1, bl5)) | 0;\n hi = (hi + Math.imul(ah1, bh5)) | 0;\n lo = (lo + Math.imul(al0, bl6)) | 0;\n mid = (mid + Math.imul(al0, bh6)) | 0;\n mid = (mid + Math.imul(ah0, bl6)) | 0;\n hi = (hi + Math.imul(ah0, bh6)) | 0;\n var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n w6 &= 0x3ffffff;\n /* k = 7 */\n lo = Math.imul(al7, bl0);\n mid = Math.imul(al7, bh0);\n mid = (mid + Math.imul(ah7, bl0)) | 0;\n hi = Math.imul(ah7, bh0);\n lo = (lo + Math.imul(al6, bl1)) | 0;\n mid = (mid + Math.imul(al6, bh1)) | 0;\n mid = (mid + Math.imul(ah6, bl1)) | 0;\n hi = (hi + Math.imul(ah6, bh1)) | 0;\n lo = (lo + Math.imul(al5, bl2)) | 0;\n mid = (mid + Math.imul(al5, bh2)) | 0;\n mid = (mid + Math.imul(ah5, bl2)) | 0;\n hi = (hi + Math.imul(ah5, bh2)) | 0;\n lo = (lo + Math.imul(al4, bl3)) | 0;\n mid = (mid + Math.imul(al4, bh3)) | 0;\n mid = (mid + Math.imul(ah4, bl3)) | 0;\n hi = (hi + Math.imul(ah4, bh3)) | 0;\n lo = (lo + Math.imul(al3, bl4)) | 0;\n mid = (mid + Math.imul(al3, bh4)) | 0;\n mid = (mid + Math.imul(ah3, bl4)) | 0;\n hi = (hi + Math.imul(ah3, bh4)) | 0;\n lo = (lo + Math.imul(al2, bl5)) | 0;\n mid = (mid + Math.imul(al2, bh5)) | 0;\n mid = (mid + Math.imul(ah2, bl5)) | 0;\n hi = (hi + Math.imul(ah2, bh5)) | 0;\n lo = (lo + Math.imul(al1, bl6)) | 0;\n mid = (mid + Math.imul(al1, bh6)) | 0;\n mid = (mid + Math.imul(ah1, bl6)) | 0;\n hi = (hi + Math.imul(ah1, bh6)) | 0;\n lo = (lo + Math.imul(al0, bl7)) | 0;\n mid = (mid + Math.imul(al0, bh7)) | 0;\n mid = (mid + Math.imul(ah0, bl7)) | 0;\n hi = (hi + Math.imul(ah0, bh7)) | 0;\n var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n w7 &= 0x3ffffff;\n /* k = 8 */\n lo = Math.imul(al8, bl0);\n mid = Math.imul(al8, bh0);\n mid = (mid + Math.imul(ah8, bl0)) | 0;\n hi = Math.imul(ah8, bh0);\n lo = (lo + Math.imul(al7, bl1)) | 0;\n mid = (mid + Math.imul(al7, bh1)) | 0;\n mid = (mid + Math.imul(ah7, bl1)) | 0;\n hi = (hi + Math.imul(ah7, bh1)) | 0;\n lo = (lo + Math.imul(al6, bl2)) | 0;\n mid = (mid + Math.imul(al6, bh2)) | 0;\n mid = (mid + Math.imul(ah6, bl2)) | 0;\n hi = (hi + Math.imul(ah6, bh2)) | 0;\n lo = (lo + Math.imul(al5, bl3)) | 0;\n mid = (mid + Math.imul(al5, bh3)) | 0;\n mid = (mid + Math.imul(ah5, bl3)) | 0;\n hi = (hi + Math.imul(ah5, bh3)) | 0;\n lo = (lo + Math.imul(al4, bl4)) | 0;\n mid = (mid + Math.imul(al4, bh4)) | 0;\n mid = (mid + Math.imul(ah4, bl4)) | 0;\n hi = (hi + Math.imul(ah4, bh4)) | 0;\n lo = (lo + Math.imul(al3, bl5)) | 0;\n mid = (mid + Math.imul(al3, bh5)) | 0;\n mid = (mid + Math.imul(ah3, bl5)) | 0;\n hi = (hi + Math.imul(ah3, bh5)) | 0;\n lo = (lo + Math.imul(al2, bl6)) | 0;\n mid = (mid + Math.imul(al2, bh6)) | 0;\n mid = (mid + Math.imul(ah2, bl6)) | 0;\n hi = (hi + Math.imul(ah2, bh6)) | 0;\n lo = (lo + Math.imul(al1, bl7)) | 0;\n mid = (mid + Math.imul(al1, bh7)) | 0;\n mid = (mid + Math.imul(ah1, bl7)) | 0;\n hi = (hi + Math.imul(ah1, bh7)) | 0;\n lo = (lo + Math.imul(al0, bl8)) | 0;\n mid = (mid + Math.imul(al0, bh8)) | 0;\n mid = (mid + Math.imul(ah0, bl8)) | 0;\n hi = (hi + Math.imul(ah0, bh8)) | 0;\n var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n w8 &= 0x3ffffff;\n /* k = 9 */\n lo = Math.imul(al9, bl0);\n mid = Math.imul(al9, bh0);\n mid = (mid + Math.imul(ah9, bl0)) | 0;\n hi = Math.imul(ah9, bh0);\n lo = (lo + Math.imul(al8, bl1)) | 0;\n mid = (mid + Math.imul(al8, bh1)) | 0;\n mid = (mid + Math.imul(ah8, bl1)) | 0;\n hi = (hi + Math.imul(ah8, bh1)) | 0;\n lo = (lo + Math.imul(al7, bl2)) | 0;\n mid = (mid + Math.imul(al7, bh2)) | 0;\n mid = (mid + Math.imul(ah7, bl2)) | 0;\n hi = (hi + Math.imul(ah7, bh2)) | 0;\n lo = (lo + Math.imul(al6, bl3)) | 0;\n mid = (mid + Math.imul(al6, bh3)) | 0;\n mid = (mid + Math.imul(ah6, bl3)) | 0;\n hi = (hi + Math.imul(ah6, bh3)) | 0;\n lo = (lo + Math.imul(al5, bl4)) | 0;\n mid = (mid + Math.imul(al5, bh4)) | 0;\n mid = (mid + Math.imul(ah5, bl4)) | 0;\n hi = (hi + Math.imul(ah5, bh4)) | 0;\n lo = (lo + Math.imul(al4, bl5)) | 0;\n mid = (mid + Math.imul(al4, bh5)) | 0;\n mid = (mid + Math.imul(ah4, bl5)) | 0;\n hi = (hi + Math.imul(ah4, bh5)) | 0;\n lo = (lo + Math.imul(al3, bl6)) | 0;\n mid = (mid + Math.imul(al3, bh6)) | 0;\n mid = (mid + Math.imul(ah3, bl6)) | 0;\n hi = (hi + Math.imul(ah3, bh6)) | 0;\n lo = (lo + Math.imul(al2, bl7)) | 0;\n mid = (mid + Math.imul(al2, bh7)) | 0;\n mid = (mid + Math.imul(ah2, bl7)) | 0;\n hi = (hi + Math.imul(ah2, bh7)) | 0;\n lo = (lo + Math.imul(al1, bl8)) | 0;\n mid = (mid + Math.imul(al1, bh8)) | 0;\n mid = (mid + Math.imul(ah1, bl8)) | 0;\n hi = (hi + Math.imul(ah1, bh8)) | 0;\n lo = (lo + Math.imul(al0, bl9)) | 0;\n mid = (mid + Math.imul(al0, bh9)) | 0;\n mid = (mid + Math.imul(ah0, bl9)) | 0;\n hi = (hi + Math.imul(ah0, bh9)) | 0;\n var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n w9 &= 0x3ffffff;\n /* k = 10 */\n lo = Math.imul(al9, bl1);\n mid = Math.imul(al9, bh1);\n mid = (mid + Math.imul(ah9, bl1)) | 0;\n hi = Math.imul(ah9, bh1);\n lo = (lo + Math.imul(al8, bl2)) | 0;\n mid = (mid + Math.imul(al8, bh2)) | 0;\n mid = (mid + Math.imul(ah8, bl2)) | 0;\n hi = (hi + Math.imul(ah8, bh2)) | 0;\n lo = (lo + Math.imul(al7, bl3)) | 0;\n mid = (mid + Math.imul(al7, bh3)) | 0;\n mid = (mid + Math.imul(ah7, bl3)) | 0;\n hi = (hi + Math.imul(ah7, bh3)) | 0;\n lo = (lo + Math.imul(al6, bl4)) | 0;\n mid = (mid + Math.imul(al6, bh4)) | 0;\n mid = (mid + Math.imul(ah6, bl4)) | 0;\n hi = (hi + Math.imul(ah6, bh4)) | 0;\n lo = (lo + Math.imul(al5, bl5)) | 0;\n mid = (mid + Math.imul(al5, bh5)) | 0;\n mid = (mid + Math.imul(ah5, bl5)) | 0;\n hi = (hi + Math.imul(ah5, bh5)) | 0;\n lo = (lo + Math.imul(al4, bl6)) | 0;\n mid = (mid + Math.imul(al4, bh6)) | 0;\n mid = (mid + Math.imul(ah4, bl6)) | 0;\n hi = (hi + Math.imul(ah4, bh6)) | 0;\n lo = (lo + Math.imul(al3, bl7)) | 0;\n mid = (mid + Math.imul(al3, bh7)) | 0;\n mid = (mid + Math.imul(ah3, bl7)) | 0;\n hi = (hi + Math.imul(ah3, bh7)) | 0;\n lo = (lo + Math.imul(al2, bl8)) | 0;\n mid = (mid + Math.imul(al2, bh8)) | 0;\n mid = (mid + Math.imul(ah2, bl8)) | 0;\n hi = (hi + Math.imul(ah2, bh8)) | 0;\n lo = (lo + Math.imul(al1, bl9)) | 0;\n mid = (mid + Math.imul(al1, bh9)) | 0;\n mid = (mid + Math.imul(ah1, bl9)) | 0;\n hi = (hi + Math.imul(ah1, bh9)) | 0;\n var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n w10 &= 0x3ffffff;\n /* k = 11 */\n lo = Math.imul(al9, bl2);\n mid = Math.imul(al9, bh2);\n mid = (mid + Math.imul(ah9, bl2)) | 0;\n hi = Math.imul(ah9, bh2);\n lo = (lo + Math.imul(al8, bl3)) | 0;\n mid = (mid + Math.imul(al8, bh3)) | 0;\n mid = (mid + Math.imul(ah8, bl3)) | 0;\n hi = (hi + Math.imul(ah8, bh3)) | 0;\n lo = (lo + Math.imul(al7, bl4)) | 0;\n mid = (mid + Math.imul(al7, bh4)) | 0;\n mid = (mid + Math.imul(ah7, bl4)) | 0;\n hi = (hi + Math.imul(ah7, bh4)) | 0;\n lo = (lo + Math.imul(al6, bl5)) | 0;\n mid = (mid + Math.imul(al6, bh5)) | 0;\n mid = (mid + Math.imul(ah6, bl5)) | 0;\n hi = (hi + Math.imul(ah6, bh5)) | 0;\n lo = (lo + Math.imul(al5, bl6)) | 0;\n mid = (mid + Math.imul(al5, bh6)) | 0;\n mid = (mid + Math.imul(ah5, bl6)) | 0;\n hi = (hi + Math.imul(ah5, bh6)) | 0;\n lo = (lo + Math.imul(al4, bl7)) | 0;\n mid = (mid + Math.imul(al4, bh7)) | 0;\n mid = (mid + Math.imul(ah4, bl7)) | 0;\n hi = (hi + Math.imul(ah4, bh7)) | 0;\n lo = (lo + Math.imul(al3, bl8)) | 0;\n mid = (mid + Math.imul(al3, bh8)) | 0;\n mid = (mid + Math.imul(ah3, bl8)) | 0;\n hi = (hi + Math.imul(ah3, bh8)) | 0;\n lo = (lo + Math.imul(al2, bl9)) | 0;\n mid = (mid + Math.imul(al2, bh9)) | 0;\n mid = (mid + Math.imul(ah2, bl9)) | 0;\n hi = (hi + Math.imul(ah2, bh9)) | 0;\n var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n w11 &= 0x3ffffff;\n /* k = 12 */\n lo = Math.imul(al9, bl3);\n mid = Math.imul(al9, bh3);\n mid = (mid + Math.imul(ah9, bl3)) | 0;\n hi = Math.imul(ah9, bh3);\n lo = (lo + Math.imul(al8, bl4)) | 0;\n mid = (mid + Math.imul(al8, bh4)) | 0;\n mid = (mid + Math.imul(ah8, bl4)) | 0;\n hi = (hi + Math.imul(ah8, bh4)) | 0;\n lo = (lo + Math.imul(al7, bl5)) | 0;\n mid = (mid + Math.imul(al7, bh5)) | 0;\n mid = (mid + Math.imul(ah7, bl5)) | 0;\n hi = (hi + Math.imul(ah7, bh5)) | 0;\n lo = (lo + Math.imul(al6, bl6)) | 0;\n mid = (mid + Math.imul(al6, bh6)) | 0;\n mid = (mid + Math.imul(ah6, bl6)) | 0;\n hi = (hi + Math.imul(ah6, bh6)) | 0;\n lo = (lo + Math.imul(al5, bl7)) | 0;\n mid = (mid + Math.imul(al5, bh7)) | 0;\n mid = (mid + Math.imul(ah5, bl7)) | 0;\n hi = (hi + Math.imul(ah5, bh7)) | 0;\n lo = (lo + Math.imul(al4, bl8)) | 0;\n mid = (mid + Math.imul(al4, bh8)) | 0;\n mid = (mid + Math.imul(ah4, bl8)) | 0;\n hi = (hi + Math.imul(ah4, bh8)) | 0;\n lo = (lo + Math.imul(al3, bl9)) | 0;\n mid = (mid + Math.imul(al3, bh9)) | 0;\n mid = (mid + Math.imul(ah3, bl9)) | 0;\n hi = (hi + Math.imul(ah3, bh9)) | 0;\n var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n w12 &= 0x3ffffff;\n /* k = 13 */\n lo = Math.imul(al9, bl4);\n mid = Math.imul(al9, bh4);\n mid = (mid + Math.imul(ah9, bl4)) | 0;\n hi = Math.imul(ah9, bh4);\n lo = (lo + Math.imul(al8, bl5)) | 0;\n mid = (mid + Math.imul(al8, bh5)) | 0;\n mid = (mid + Math.imul(ah8, bl5)) | 0;\n hi = (hi + Math.imul(ah8, bh5)) | 0;\n lo = (lo + Math.imul(al7, bl6)) | 0;\n mid = (mid + Math.imul(al7, bh6)) | 0;\n mid = (mid + Math.imul(ah7, bl6)) | 0;\n hi = (hi + Math.imul(ah7, bh6)) | 0;\n lo = (lo + Math.imul(al6, bl7)) | 0;\n mid = (mid + Math.imul(al6, bh7)) | 0;\n mid = (mid + Math.imul(ah6, bl7)) | 0;\n hi = (hi + Math.imul(ah6, bh7)) | 0;\n lo = (lo + Math.imul(al5, bl8)) | 0;\n mid = (mid + Math.imul(al5, bh8)) | 0;\n mid = (mid + Math.imul(ah5, bl8)) | 0;\n hi = (hi + Math.imul(ah5, bh8)) | 0;\n lo = (lo + Math.imul(al4, bl9)) | 0;\n mid = (mid + Math.imul(al4, bh9)) | 0;\n mid = (mid + Math.imul(ah4, bl9)) | 0;\n hi = (hi + Math.imul(ah4, bh9)) | 0;\n var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n w13 &= 0x3ffffff;\n /* k = 14 */\n lo = Math.imul(al9, bl5);\n mid = Math.imul(al9, bh5);\n mid = (mid + Math.imul(ah9, bl5)) | 0;\n hi = Math.imul(ah9, bh5);\n lo = (lo + Math.imul(al8, bl6)) | 0;\n mid = (mid + Math.imul(al8, bh6)) | 0;\n mid = (mid + Math.imul(ah8, bl6)) | 0;\n hi = (hi + Math.imul(ah8, bh6)) | 0;\n lo = (lo + Math.imul(al7, bl7)) | 0;\n mid = (mid + Math.imul(al7, bh7)) | 0;\n mid = (mid + Math.imul(ah7, bl7)) | 0;\n hi = (hi + Math.imul(ah7, bh7)) | 0;\n lo = (lo + Math.imul(al6, bl8)) | 0;\n mid = (mid + Math.imul(al6, bh8)) | 0;\n mid = (mid + Math.imul(ah6, bl8)) | 0;\n hi = (hi + Math.imul(ah6, bh8)) | 0;\n lo = (lo + Math.imul(al5, bl9)) | 0;\n mid = (mid + Math.imul(al5, bh9)) | 0;\n mid = (mid + Math.imul(ah5, bl9)) | 0;\n hi = (hi + Math.imul(ah5, bh9)) | 0;\n var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n w14 &= 0x3ffffff;\n /* k = 15 */\n lo = Math.imul(al9, bl6);\n mid = Math.imul(al9, bh6);\n mid = (mid + Math.imul(ah9, bl6)) | 0;\n hi = Math.imul(ah9, bh6);\n lo = (lo + Math.imul(al8, bl7)) | 0;\n mid = (mid + Math.imul(al8, bh7)) | 0;\n mid = (mid + Math.imul(ah8, bl7)) | 0;\n hi = (hi + Math.imul(ah8, bh7)) | 0;\n lo = (lo + Math.imul(al7, bl8)) | 0;\n mid = (mid + Math.imul(al7, bh8)) | 0;\n mid = (mid + Math.imul(ah7, bl8)) | 0;\n hi = (hi + Math.imul(ah7, bh8)) | 0;\n lo = (lo + Math.imul(al6, bl9)) | 0;\n mid = (mid + Math.imul(al6, bh9)) | 0;\n mid = (mid + Math.imul(ah6, bl9)) | 0;\n hi = (hi + Math.imul(ah6, bh9)) | 0;\n var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n w15 &= 0x3ffffff;\n /* k = 16 */\n lo = Math.imul(al9, bl7);\n mid = Math.imul(al9, bh7);\n mid = (mid + Math.imul(ah9, bl7)) | 0;\n hi = Math.imul(ah9, bh7);\n lo = (lo + Math.imul(al8, bl8)) | 0;\n mid = (mid + Math.imul(al8, bh8)) | 0;\n mid = (mid + Math.imul(ah8, bl8)) | 0;\n hi = (hi + Math.imul(ah8, bh8)) | 0;\n lo = (lo + Math.imul(al7, bl9)) | 0;\n mid = (mid + Math.imul(al7, bh9)) | 0;\n mid = (mid + Math.imul(ah7, bl9)) | 0;\n hi = (hi + Math.imul(ah7, bh9)) | 0;\n var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n w16 &= 0x3ffffff;\n /* k = 17 */\n lo = Math.imul(al9, bl8);\n mid = Math.imul(al9, bh8);\n mid = (mid + Math.imul(ah9, bl8)) | 0;\n hi = Math.imul(ah9, bh8);\n lo = (lo + Math.imul(al8, bl9)) | 0;\n mid = (mid + Math.imul(al8, bh9)) | 0;\n mid = (mid + Math.imul(ah8, bl9)) | 0;\n hi = (hi + Math.imul(ah8, bh9)) | 0;\n var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n w17 &= 0x3ffffff;\n /* k = 18 */\n lo = Math.imul(al9, bl9);\n mid = Math.imul(al9, bh9);\n mid = (mid + Math.imul(ah9, bl9)) | 0;\n hi = Math.imul(ah9, bh9);\n var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n w18 &= 0x3ffffff;\n o[0] = w0;\n o[1] = w1;\n o[2] = w2;\n o[3] = w3;\n o[4] = w4;\n o[5] = w5;\n o[6] = w6;\n o[7] = w7;\n o[8] = w8;\n o[9] = w9;\n o[10] = w10;\n o[11] = w11;\n o[12] = w12;\n o[13] = w13;\n o[14] = w14;\n o[15] = w15;\n o[16] = w16;\n o[17] = w17;\n o[18] = w18;\n if (c !== 0) {\n o[19] = c;\n out.length++;\n }\n return out;\n };\n\n // Polyfill comb\n if (!Math.imul) {\n comb10MulTo = smallMulTo;\n }\n\n function bigMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n out.length = self.length + num.length;\n\n var carry = 0;\n var hncarry = 0;\n for (var k = 0; k < out.length - 1; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = hncarry;\n hncarry = 0;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = k - j;\n var a = self.words[i] | 0;\n var b = num.words[j] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n lo = (lo + rword) | 0;\n rword = lo & 0x3ffffff;\n ncarry = (ncarry + (lo >>> 26)) | 0;\n\n hncarry += ncarry >>> 26;\n ncarry &= 0x3ffffff;\n }\n out.words[k] = rword;\n carry = ncarry;\n ncarry = hncarry;\n }\n if (carry !== 0) {\n out.words[k] = carry;\n } else {\n out.length--;\n }\n\n return out._strip();\n }\n\n function jumboMulTo (self, num, out) {\n // Temporary disable, see https://github.com/indutny/bn.js/issues/211\n // var fftm = new FFTM();\n // return fftm.mulp(self, num, out);\n return bigMulTo(self, num, out);\n }\n\n BN.prototype.mulTo = function mulTo (num, out) {\n var res;\n var len = this.length + num.length;\n if (this.length === 10 && num.length === 10) {\n res = comb10MulTo(this, num, out);\n } else if (len < 63) {\n res = smallMulTo(this, num, out);\n } else if (len < 1024) {\n res = bigMulTo(this, num, out);\n } else {\n res = jumboMulTo(this, num, out);\n }\n\n return res;\n };\n\n // Cooley-Tukey algorithm for FFT\n // slightly revisited to rely on looping instead of recursion\n\n function FFTM (x, y) {\n this.x = x;\n this.y = y;\n }\n\n FFTM.prototype.makeRBT = function makeRBT (N) {\n var t = new Array(N);\n var l = BN.prototype._countBits(N) - 1;\n for (var i = 0; i < N; i++) {\n t[i] = this.revBin(i, l, N);\n }\n\n return t;\n };\n\n // Returns binary-reversed representation of `x`\n FFTM.prototype.revBin = function revBin (x, l, N) {\n if (x === 0 || x === N - 1) return x;\n\n var rb = 0;\n for (var i = 0; i < l; i++) {\n rb |= (x & 1) << (l - i - 1);\n x >>= 1;\n }\n\n return rb;\n };\n\n // Performs \"tweedling\" phase, therefore 'emulating'\n // behaviour of the recursive algorithm\n FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n for (var i = 0; i < N; i++) {\n rtws[i] = rws[rbt[i]];\n itws[i] = iws[rbt[i]];\n }\n };\n\n FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n this.permute(rbt, rws, iws, rtws, itws, N);\n\n for (var s = 1; s < N; s <<= 1) {\n var l = s << 1;\n\n var rtwdf = Math.cos(2 * Math.PI / l);\n var itwdf = Math.sin(2 * Math.PI / l);\n\n for (var p = 0; p < N; p += l) {\n var rtwdf_ = rtwdf;\n var itwdf_ = itwdf;\n\n for (var j = 0; j < s; j++) {\n var re = rtws[p + j];\n var ie = itws[p + j];\n\n var ro = rtws[p + j + s];\n var io = itws[p + j + s];\n\n var rx = rtwdf_ * ro - itwdf_ * io;\n\n io = rtwdf_ * io + itwdf_ * ro;\n ro = rx;\n\n rtws[p + j] = re + ro;\n itws[p + j] = ie + io;\n\n rtws[p + j + s] = re - ro;\n itws[p + j + s] = ie - io;\n\n /* jshint maxdepth : false */\n if (j !== l) {\n rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n rtwdf_ = rx;\n }\n }\n }\n }\n };\n\n FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n var N = Math.max(m, n) | 1;\n var odd = N & 1;\n var i = 0;\n for (N = N / 2 | 0; N; N = N >>> 1) {\n i++;\n }\n\n return 1 << i + 1 + odd;\n };\n\n FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n if (N <= 1) return;\n\n for (var i = 0; i < N / 2; i++) {\n var t = rws[i];\n\n rws[i] = rws[N - i - 1];\n rws[N - i - 1] = t;\n\n t = iws[i];\n\n iws[i] = -iws[N - i - 1];\n iws[N - i - 1] = -t;\n }\n };\n\n FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n var carry = 0;\n for (var i = 0; i < N / 2; i++) {\n var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n Math.round(ws[2 * i] / N) +\n carry;\n\n ws[i] = w & 0x3ffffff;\n\n if (w < 0x4000000) {\n carry = 0;\n } else {\n carry = w / 0x4000000 | 0;\n }\n }\n\n return ws;\n };\n\n FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n var carry = 0;\n for (var i = 0; i < len; i++) {\n carry = carry + (ws[i] | 0);\n\n rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n }\n\n // Pad with zeroes\n for (i = 2 * len; i < N; ++i) {\n rws[i] = 0;\n }\n\n assert(carry === 0);\n assert((carry & ~0x1fff) === 0);\n };\n\n FFTM.prototype.stub = function stub (N) {\n var ph = new Array(N);\n for (var i = 0; i < N; i++) {\n ph[i] = 0;\n }\n\n return ph;\n };\n\n FFTM.prototype.mulp = function mulp (x, y, out) {\n var N = 2 * this.guessLen13b(x.length, y.length);\n\n var rbt = this.makeRBT(N);\n\n var _ = this.stub(N);\n\n var rws = new Array(N);\n var rwst = new Array(N);\n var iwst = new Array(N);\n\n var nrws = new Array(N);\n var nrwst = new Array(N);\n var niwst = new Array(N);\n\n var rmws = out.words;\n rmws.length = N;\n\n this.convert13b(x.words, x.length, rws, N);\n this.convert13b(y.words, y.length, nrws, N);\n\n this.transform(rws, _, rwst, iwst, N, rbt);\n this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n for (var i = 0; i < N; i++) {\n var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n rwst[i] = rx;\n }\n\n this.conjugate(rwst, iwst, N);\n this.transform(rwst, iwst, rmws, _, N, rbt);\n this.conjugate(rmws, _, N);\n this.normalize13b(rmws, N);\n\n out.negative = x.negative ^ y.negative;\n out.length = x.length + y.length;\n return out._strip();\n };\n\n // Multiply `this` by `num`\n BN.prototype.mul = function mul (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return this.mulTo(num, out);\n };\n\n // Multiply employing FFT\n BN.prototype.mulf = function mulf (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return jumboMulTo(this, num, out);\n };\n\n // In-place Multiplication\n BN.prototype.imul = function imul (num) {\n return this.clone().mulTo(num, this);\n };\n\n BN.prototype.imuln = function imuln (num) {\n var isNegNum = num < 0;\n if (isNegNum) num = -num;\n\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n\n // Carry\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = (this.words[i] | 0) * num;\n var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n carry >>= 26;\n carry += (w / 0x4000000) | 0;\n // NOTE: lo is 27bit maximum\n carry += lo >>> 26;\n this.words[i] = lo & 0x3ffffff;\n }\n\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n\n return isNegNum ? this.ineg() : this;\n };\n\n BN.prototype.muln = function muln (num) {\n return this.clone().imuln(num);\n };\n\n // `this` * `this`\n BN.prototype.sqr = function sqr () {\n return this.mul(this);\n };\n\n // `this` * `this` in-place\n BN.prototype.isqr = function isqr () {\n return this.imul(this.clone());\n };\n\n // Math.pow(`this`, `num`)\n BN.prototype.pow = function pow (num) {\n var w = toBitArray(num);\n if (w.length === 0) return new BN(1);\n\n // Skip leading zeroes\n var res = this;\n for (var i = 0; i < w.length; i++, res = res.sqr()) {\n if (w[i] !== 0) break;\n }\n\n if (++i < w.length) {\n for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n if (w[i] === 0) continue;\n\n res = res.mul(q);\n }\n }\n\n return res;\n };\n\n // Shift-left in-place\n BN.prototype.iushln = function iushln (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n var i;\n\n if (r !== 0) {\n var carry = 0;\n\n for (i = 0; i < this.length; i++) {\n var newCarry = this.words[i] & carryMask;\n var c = ((this.words[i] | 0) - newCarry) << r;\n this.words[i] = c | carry;\n carry = newCarry >>> (26 - r);\n }\n\n if (carry) {\n this.words[i] = carry;\n this.length++;\n }\n }\n\n if (s !== 0) {\n for (i = this.length - 1; i >= 0; i--) {\n this.words[i + s] = this.words[i];\n }\n\n for (i = 0; i < s; i++) {\n this.words[i] = 0;\n }\n\n this.length += s;\n }\n\n return this._strip();\n };\n\n BN.prototype.ishln = function ishln (bits) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushln(bits);\n };\n\n // Shift-right in-place\n // NOTE: `hint` is a lowest bit before trailing zeroes\n // NOTE: if `extended` is present - it will be filled with destroyed bits\n BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n assert(typeof bits === 'number' && bits >= 0);\n var h;\n if (hint) {\n h = (hint - (hint % 26)) / 26;\n } else {\n h = 0;\n }\n\n var r = bits % 26;\n var s = Math.min((bits - r) / 26, this.length);\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n var maskedWords = extended;\n\n h -= s;\n h = Math.max(0, h);\n\n // Extended mode, copy masked part\n if (maskedWords) {\n for (var i = 0; i < s; i++) {\n maskedWords.words[i] = this.words[i];\n }\n maskedWords.length = s;\n }\n\n if (s === 0) {\n // No-op, we should not move anything at all\n } else if (this.length > s) {\n this.length -= s;\n for (i = 0; i < this.length; i++) {\n this.words[i] = this.words[i + s];\n }\n } else {\n this.words[0] = 0;\n this.length = 1;\n }\n\n var carry = 0;\n for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n var word = this.words[i] | 0;\n this.words[i] = (carry << (26 - r)) | (word >>> r);\n carry = word & mask;\n }\n\n // Push carried bits as a mask\n if (maskedWords && carry !== 0) {\n maskedWords.words[maskedWords.length++] = carry;\n }\n\n if (this.length === 0) {\n this.words[0] = 0;\n this.length = 1;\n }\n\n return this._strip();\n };\n\n BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushrn(bits, hint, extended);\n };\n\n // Shift-left\n BN.prototype.shln = function shln (bits) {\n return this.clone().ishln(bits);\n };\n\n BN.prototype.ushln = function ushln (bits) {\n return this.clone().iushln(bits);\n };\n\n // Shift-right\n BN.prototype.shrn = function shrn (bits) {\n return this.clone().ishrn(bits);\n };\n\n BN.prototype.ushrn = function ushrn (bits) {\n return this.clone().iushrn(bits);\n };\n\n // Test if n bit is set\n BN.prototype.testn = function testn (bit) {\n assert(typeof bit === 'number' && bit >= 0);\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) return false;\n\n // Check bit and return\n var w = this.words[s];\n\n return !!(w & q);\n };\n\n // Return only lowers bits of number (in-place)\n BN.prototype.imaskn = function imaskn (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n\n assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n if (this.length <= s) {\n return this;\n }\n\n if (r !== 0) {\n s++;\n }\n this.length = Math.min(s, this.length);\n\n if (r !== 0) {\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n this.words[this.length - 1] &= mask;\n }\n\n return this._strip();\n };\n\n // Return only lowers bits of number\n BN.prototype.maskn = function maskn (bits) {\n return this.clone().imaskn(bits);\n };\n\n // Add plain number `num` to `this`\n BN.prototype.iaddn = function iaddn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.isubn(-num);\n\n // Possible sign change\n if (this.negative !== 0) {\n if (this.length === 1 && (this.words[0] | 0) <= num) {\n this.words[0] = num - (this.words[0] | 0);\n this.negative = 0;\n return this;\n }\n\n this.negative = 0;\n this.isubn(num);\n this.negative = 1;\n return this;\n }\n\n // Add without checks\n return this._iaddn(num);\n };\n\n BN.prototype._iaddn = function _iaddn (num) {\n this.words[0] += num;\n\n // Carry\n for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n this.words[i] -= 0x4000000;\n if (i === this.length - 1) {\n this.words[i + 1] = 1;\n } else {\n this.words[i + 1]++;\n }\n }\n this.length = Math.max(this.length, i + 1);\n\n return this;\n };\n\n // Subtract plain number `num` from `this`\n BN.prototype.isubn = function isubn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.iaddn(-num);\n\n if (this.negative !== 0) {\n this.negative = 0;\n this.iaddn(num);\n this.negative = 1;\n return this;\n }\n\n this.words[0] -= num;\n\n if (this.length === 1 && this.words[0] < 0) {\n this.words[0] = -this.words[0];\n this.negative = 1;\n } else {\n // Carry\n for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n this.words[i] += 0x4000000;\n this.words[i + 1] -= 1;\n }\n }\n\n return this._strip();\n };\n\n BN.prototype.addn = function addn (num) {\n return this.clone().iaddn(num);\n };\n\n BN.prototype.subn = function subn (num) {\n return this.clone().isubn(num);\n };\n\n BN.prototype.iabs = function iabs () {\n this.negative = 0;\n\n return this;\n };\n\n BN.prototype.abs = function abs () {\n return this.clone().iabs();\n };\n\n BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n var len = num.length + shift;\n var i;\n\n this._expand(len);\n\n var w;\n var carry = 0;\n for (i = 0; i < num.length; i++) {\n w = (this.words[i + shift] | 0) + carry;\n var right = (num.words[i] | 0) * mul;\n w -= right & 0x3ffffff;\n carry = (w >> 26) - ((right / 0x4000000) | 0);\n this.words[i + shift] = w & 0x3ffffff;\n }\n for (; i < this.length - shift; i++) {\n w = (this.words[i + shift] | 0) + carry;\n carry = w >> 26;\n this.words[i + shift] = w & 0x3ffffff;\n }\n\n if (carry === 0) return this._strip();\n\n // Subtraction overflow\n assert(carry === -1);\n carry = 0;\n for (i = 0; i < this.length; i++) {\n w = -(this.words[i] | 0) + carry;\n carry = w >> 26;\n this.words[i] = w & 0x3ffffff;\n }\n this.negative = 1;\n\n return this._strip();\n };\n\n BN.prototype._wordDiv = function _wordDiv (num, mode) {\n var shift = this.length - num.length;\n\n var a = this.clone();\n var b = num;\n\n // Normalize\n var bhi = b.words[b.length - 1] | 0;\n var bhiBits = this._countBits(bhi);\n shift = 26 - bhiBits;\n if (shift !== 0) {\n b = b.ushln(shift);\n a.iushln(shift);\n bhi = b.words[b.length - 1] | 0;\n }\n\n // Initialize quotient\n var m = a.length - b.length;\n var q;\n\n if (mode !== 'mod') {\n q = new BN(null);\n q.length = m + 1;\n q.words = new Array(q.length);\n for (var i = 0; i < q.length; i++) {\n q.words[i] = 0;\n }\n }\n\n var diff = a.clone()._ishlnsubmul(b, 1, m);\n if (diff.negative === 0) {\n a = diff;\n if (q) {\n q.words[m] = 1;\n }\n }\n\n for (var j = m - 1; j >= 0; j--) {\n var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n (a.words[b.length + j - 1] | 0);\n\n // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n // (0x7ffffff)\n qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n a._ishlnsubmul(b, qj, j);\n while (a.negative !== 0) {\n qj--;\n a.negative = 0;\n a._ishlnsubmul(b, 1, j);\n if (!a.isZero()) {\n a.negative ^= 1;\n }\n }\n if (q) {\n q.words[j] = qj;\n }\n }\n if (q) {\n q._strip();\n }\n a._strip();\n\n // Denormalize\n if (mode !== 'div' && shift !== 0) {\n a.iushrn(shift);\n }\n\n return {\n div: q || null,\n mod: a\n };\n };\n\n // NOTE: 1) `mode` can be set to `mod` to request mod only,\n // to `div` to request div only, or be absent to\n // request both div & mod\n // 2) `positive` is true if unsigned mod is requested\n BN.prototype.divmod = function divmod (num, mode, positive) {\n assert(!num.isZero());\n\n if (this.isZero()) {\n return {\n div: new BN(0),\n mod: new BN(0)\n };\n }\n\n var div, mod, res;\n if (this.negative !== 0 && num.negative === 0) {\n res = this.neg().divmod(num, mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.iadd(num);\n }\n }\n\n return {\n div: div,\n mod: mod\n };\n }\n\n if (this.negative === 0 && num.negative !== 0) {\n res = this.divmod(num.neg(), mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n return {\n div: div,\n mod: res.mod\n };\n }\n\n if ((this.negative & num.negative) !== 0) {\n res = this.neg().divmod(num.neg(), mode);\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.isub(num);\n }\n }\n\n return {\n div: res.div,\n mod: mod\n };\n }\n\n // Both numbers are positive at this point\n\n // Strip both numbers to approximate shift value\n if (num.length > this.length || this.cmp(num) < 0) {\n return {\n div: new BN(0),\n mod: this\n };\n }\n\n // Very short reduction\n if (num.length === 1) {\n if (mode === 'div') {\n return {\n div: this.divn(num.words[0]),\n mod: null\n };\n }\n\n if (mode === 'mod') {\n return {\n div: null,\n mod: new BN(this.modrn(num.words[0]))\n };\n }\n\n return {\n div: this.divn(num.words[0]),\n mod: new BN(this.modrn(num.words[0]))\n };\n }\n\n return this._wordDiv(num, mode);\n };\n\n // Find `this` / `num`\n BN.prototype.div = function div (num) {\n return this.divmod(num, 'div', false).div;\n };\n\n // Find `this` % `num`\n BN.prototype.mod = function mod (num) {\n return this.divmod(num, 'mod', false).mod;\n };\n\n BN.prototype.umod = function umod (num) {\n return this.divmod(num, 'mod', true).mod;\n };\n\n // Find Round(`this` / `num`)\n BN.prototype.divRound = function divRound (num) {\n var dm = this.divmod(num);\n\n // Fast case - exact division\n if (dm.mod.isZero()) return dm.div;\n\n var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n var half = num.ushrn(1);\n var r2 = num.andln(1);\n var cmp = mod.cmp(half);\n\n // Round down\n if (cmp < 0 || (r2 === 1 && cmp === 0)) return dm.div;\n\n // Round up\n return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n };\n\n BN.prototype.modrn = function modrn (num) {\n var isNegNum = num < 0;\n if (isNegNum) num = -num;\n\n assert(num <= 0x3ffffff);\n var p = (1 << 26) % num;\n\n var acc = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n acc = (p * acc + (this.words[i] | 0)) % num;\n }\n\n return isNegNum ? -acc : acc;\n };\n\n // WARNING: DEPRECATED\n BN.prototype.modn = function modn (num) {\n return this.modrn(num);\n };\n\n // In-place division by number\n BN.prototype.idivn = function idivn (num) {\n var isNegNum = num < 0;\n if (isNegNum) num = -num;\n\n assert(num <= 0x3ffffff);\n\n var carry = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var w = (this.words[i] | 0) + carry * 0x4000000;\n this.words[i] = (w / num) | 0;\n carry = w % num;\n }\n\n this._strip();\n return isNegNum ? this.ineg() : this;\n };\n\n BN.prototype.divn = function divn (num) {\n return this.clone().idivn(num);\n };\n\n BN.prototype.egcd = function egcd (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var x = this;\n var y = p.clone();\n\n if (x.negative !== 0) {\n x = x.umod(p);\n } else {\n x = x.clone();\n }\n\n // A * x + B * y = x\n var A = new BN(1);\n var B = new BN(0);\n\n // C * x + D * y = y\n var C = new BN(0);\n var D = new BN(1);\n\n var g = 0;\n\n while (x.isEven() && y.isEven()) {\n x.iushrn(1);\n y.iushrn(1);\n ++g;\n }\n\n var yp = y.clone();\n var xp = x.clone();\n\n while (!x.isZero()) {\n for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n x.iushrn(i);\n while (i-- > 0) {\n if (A.isOdd() || B.isOdd()) {\n A.iadd(yp);\n B.isub(xp);\n }\n\n A.iushrn(1);\n B.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n y.iushrn(j);\n while (j-- > 0) {\n if (C.isOdd() || D.isOdd()) {\n C.iadd(yp);\n D.isub(xp);\n }\n\n C.iushrn(1);\n D.iushrn(1);\n }\n }\n\n if (x.cmp(y) >= 0) {\n x.isub(y);\n A.isub(C);\n B.isub(D);\n } else {\n y.isub(x);\n C.isub(A);\n D.isub(B);\n }\n }\n\n return {\n a: C,\n b: D,\n gcd: y.iushln(g)\n };\n };\n\n // This is reduced incarnation of the binary EEA\n // above, designated to invert members of the\n // _prime_ fields F(p) at a maximal speed\n BN.prototype._invmp = function _invmp (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var a = this;\n var b = p.clone();\n\n if (a.negative !== 0) {\n a = a.umod(p);\n } else {\n a = a.clone();\n }\n\n var x1 = new BN(1);\n var x2 = new BN(0);\n\n var delta = b.clone();\n\n while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n a.iushrn(i);\n while (i-- > 0) {\n if (x1.isOdd()) {\n x1.iadd(delta);\n }\n\n x1.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n b.iushrn(j);\n while (j-- > 0) {\n if (x2.isOdd()) {\n x2.iadd(delta);\n }\n\n x2.iushrn(1);\n }\n }\n\n if (a.cmp(b) >= 0) {\n a.isub(b);\n x1.isub(x2);\n } else {\n b.isub(a);\n x2.isub(x1);\n }\n }\n\n var res;\n if (a.cmpn(1) === 0) {\n res = x1;\n } else {\n res = x2;\n }\n\n if (res.cmpn(0) < 0) {\n res.iadd(p);\n }\n\n return res;\n };\n\n BN.prototype.gcd = function gcd (num) {\n if (this.isZero()) return num.abs();\n if (num.isZero()) return this.abs();\n\n var a = this.clone();\n var b = num.clone();\n a.negative = 0;\n b.negative = 0;\n\n // Remove common factor of two\n for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n a.iushrn(1);\n b.iushrn(1);\n }\n\n do {\n while (a.isEven()) {\n a.iushrn(1);\n }\n while (b.isEven()) {\n b.iushrn(1);\n }\n\n var r = a.cmp(b);\n if (r < 0) {\n // Swap `a` and `b` to make `a` always bigger than `b`\n var t = a;\n a = b;\n b = t;\n } else if (r === 0 || b.cmpn(1) === 0) {\n break;\n }\n\n a.isub(b);\n } while (true);\n\n return b.iushln(shift);\n };\n\n // Invert number in the field F(num)\n BN.prototype.invm = function invm (num) {\n return this.egcd(num).a.umod(num);\n };\n\n BN.prototype.isEven = function isEven () {\n return (this.words[0] & 1) === 0;\n };\n\n BN.prototype.isOdd = function isOdd () {\n return (this.words[0] & 1) === 1;\n };\n\n // And first word and num\n BN.prototype.andln = function andln (num) {\n return this.words[0] & num;\n };\n\n // Increment at the bit position in-line\n BN.prototype.bincn = function bincn (bit) {\n assert(typeof bit === 'number');\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) {\n this._expand(s + 1);\n this.words[s] |= q;\n return this;\n }\n\n // Add bit and propagate, if needed\n var carry = q;\n for (var i = s; carry !== 0 && i < this.length; i++) {\n var w = this.words[i] | 0;\n w += carry;\n carry = w >>> 26;\n w &= 0x3ffffff;\n this.words[i] = w;\n }\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n return this;\n };\n\n BN.prototype.isZero = function isZero () {\n return this.length === 1 && this.words[0] === 0;\n };\n\n BN.prototype.cmpn = function cmpn (num) {\n var negative = num < 0;\n\n if (this.negative !== 0 && !negative) return -1;\n if (this.negative === 0 && negative) return 1;\n\n this._strip();\n\n var res;\n if (this.length > 1) {\n res = 1;\n } else {\n if (negative) {\n num = -num;\n }\n\n assert(num <= 0x3ffffff, 'Number is too big');\n\n var w = this.words[0] | 0;\n res = w === num ? 0 : w < num ? -1 : 1;\n }\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Compare two numbers and return:\n // 1 - if `this` > `num`\n // 0 - if `this` == `num`\n // -1 - if `this` < `num`\n BN.prototype.cmp = function cmp (num) {\n if (this.negative !== 0 && num.negative === 0) return -1;\n if (this.negative === 0 && num.negative !== 0) return 1;\n\n var res = this.ucmp(num);\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Unsigned comparison\n BN.prototype.ucmp = function ucmp (num) {\n // At this point both numbers have the same sign\n if (this.length > num.length) return 1;\n if (this.length < num.length) return -1;\n\n var res = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var a = this.words[i] | 0;\n var b = num.words[i] | 0;\n\n if (a === b) continue;\n if (a < b) {\n res = -1;\n } else if (a > b) {\n res = 1;\n }\n break;\n }\n return res;\n };\n\n BN.prototype.gtn = function gtn (num) {\n return this.cmpn(num) === 1;\n };\n\n BN.prototype.gt = function gt (num) {\n return this.cmp(num) === 1;\n };\n\n BN.prototype.gten = function gten (num) {\n return this.cmpn(num) >= 0;\n };\n\n BN.prototype.gte = function gte (num) {\n return this.cmp(num) >= 0;\n };\n\n BN.prototype.ltn = function ltn (num) {\n return this.cmpn(num) === -1;\n };\n\n BN.prototype.lt = function lt (num) {\n return this.cmp(num) === -1;\n };\n\n BN.prototype.lten = function lten (num) {\n return this.cmpn(num) <= 0;\n };\n\n BN.prototype.lte = function lte (num) {\n return this.cmp(num) <= 0;\n };\n\n BN.prototype.eqn = function eqn (num) {\n return this.cmpn(num) === 0;\n };\n\n BN.prototype.eq = function eq (num) {\n return this.cmp(num) === 0;\n };\n\n //\n // A reduce context, could be using montgomery or something better, depending\n // on the `m` itself.\n //\n BN.red = function red (num) {\n return new Red(num);\n };\n\n BN.prototype.toRed = function toRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n assert(this.negative === 0, 'red works only with positives');\n return ctx.convertTo(this)._forceRed(ctx);\n };\n\n BN.prototype.fromRed = function fromRed () {\n assert(this.red, 'fromRed works only with numbers in reduction context');\n return this.red.convertFrom(this);\n };\n\n BN.prototype._forceRed = function _forceRed (ctx) {\n this.red = ctx;\n return this;\n };\n\n BN.prototype.forceRed = function forceRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n return this._forceRed(ctx);\n };\n\n BN.prototype.redAdd = function redAdd (num) {\n assert(this.red, 'redAdd works only with red numbers');\n return this.red.add(this, num);\n };\n\n BN.prototype.redIAdd = function redIAdd (num) {\n assert(this.red, 'redIAdd works only with red numbers');\n return this.red.iadd(this, num);\n };\n\n BN.prototype.redSub = function redSub (num) {\n assert(this.red, 'redSub works only with red numbers');\n return this.red.sub(this, num);\n };\n\n BN.prototype.redISub = function redISub (num) {\n assert(this.red, 'redISub works only with red numbers');\n return this.red.isub(this, num);\n };\n\n BN.prototype.redShl = function redShl (num) {\n assert(this.red, 'redShl works only with red numbers');\n return this.red.shl(this, num);\n };\n\n BN.prototype.redMul = function redMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.mul(this, num);\n };\n\n BN.prototype.redIMul = function redIMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.imul(this, num);\n };\n\n BN.prototype.redSqr = function redSqr () {\n assert(this.red, 'redSqr works only with red numbers');\n this.red._verify1(this);\n return this.red.sqr(this);\n };\n\n BN.prototype.redISqr = function redISqr () {\n assert(this.red, 'redISqr works only with red numbers');\n this.red._verify1(this);\n return this.red.isqr(this);\n };\n\n // Square root over p\n BN.prototype.redSqrt = function redSqrt () {\n assert(this.red, 'redSqrt works only with red numbers');\n this.red._verify1(this);\n return this.red.sqrt(this);\n };\n\n BN.prototype.redInvm = function redInvm () {\n assert(this.red, 'redInvm works only with red numbers');\n this.red._verify1(this);\n return this.red.invm(this);\n };\n\n // Return negative clone of `this` % `red modulo`\n BN.prototype.redNeg = function redNeg () {\n assert(this.red, 'redNeg works only with red numbers');\n this.red._verify1(this);\n return this.red.neg(this);\n };\n\n BN.prototype.redPow = function redPow (num) {\n assert(this.red && !num.red, 'redPow(normalNum)');\n this.red._verify1(this);\n return this.red.pow(this, num);\n };\n\n // Prime numbers with efficient reduction\n var primes = {\n k256: null,\n p224: null,\n p192: null,\n p25519: null\n };\n\n // Pseudo-Mersenne prime\n function MPrime (name, p) {\n // P = 2 ^ N - K\n this.name = name;\n this.p = new BN(p, 16);\n this.n = this.p.bitLength();\n this.k = new BN(1).iushln(this.n).isub(this.p);\n\n this.tmp = this._tmp();\n }\n\n MPrime.prototype._tmp = function _tmp () {\n var tmp = new BN(null);\n tmp.words = new Array(Math.ceil(this.n / 13));\n return tmp;\n };\n\n MPrime.prototype.ireduce = function ireduce (num) {\n // Assumes that `num` is less than `P^2`\n // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n var r = num;\n var rlen;\n\n do {\n this.split(r, this.tmp);\n r = this.imulK(r);\n r = r.iadd(this.tmp);\n rlen = r.bitLength();\n } while (rlen > this.n);\n\n var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n if (cmp === 0) {\n r.words[0] = 0;\n r.length = 1;\n } else if (cmp > 0) {\n r.isub(this.p);\n } else {\n if (r.strip !== undefined) {\n // r is a BN v4 instance\n r.strip();\n } else {\n // r is a BN v5 instance\n r._strip();\n }\n }\n\n return r;\n };\n\n MPrime.prototype.split = function split (input, out) {\n input.iushrn(this.n, 0, out);\n };\n\n MPrime.prototype.imulK = function imulK (num) {\n return num.imul(this.k);\n };\n\n function K256 () {\n MPrime.call(\n this,\n 'k256',\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n }\n inherits(K256, MPrime);\n\n K256.prototype.split = function split (input, output) {\n // 256 = 9 * 26 + 22\n var mask = 0x3fffff;\n\n var outLen = Math.min(input.length, 9);\n for (var i = 0; i < outLen; i++) {\n output.words[i] = input.words[i];\n }\n output.length = outLen;\n\n if (input.length <= 9) {\n input.words[0] = 0;\n input.length = 1;\n return;\n }\n\n // Shift by 9 limbs\n var prev = input.words[9];\n output.words[output.length++] = prev & mask;\n\n for (i = 10; i < input.length; i++) {\n var next = input.words[i] | 0;\n input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n prev = next;\n }\n prev >>>= 22;\n input.words[i - 10] = prev;\n if (prev === 0 && input.length > 10) {\n input.length -= 10;\n } else {\n input.length -= 9;\n }\n };\n\n K256.prototype.imulK = function imulK (num) {\n // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n num.words[num.length] = 0;\n num.words[num.length + 1] = 0;\n num.length += 2;\n\n // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n var lo = 0;\n for (var i = 0; i < num.length; i++) {\n var w = num.words[i] | 0;\n lo += w * 0x3d1;\n num.words[i] = lo & 0x3ffffff;\n lo = w * 0x40 + ((lo / 0x4000000) | 0);\n }\n\n // Fast length reduction\n if (num.words[num.length - 1] === 0) {\n num.length--;\n if (num.words[num.length - 1] === 0) {\n num.length--;\n }\n }\n return num;\n };\n\n function P224 () {\n MPrime.call(\n this,\n 'p224',\n 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n }\n inherits(P224, MPrime);\n\n function P192 () {\n MPrime.call(\n this,\n 'p192',\n 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n }\n inherits(P192, MPrime);\n\n function P25519 () {\n // 2 ^ 255 - 19\n MPrime.call(\n this,\n '25519',\n '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n }\n inherits(P25519, MPrime);\n\n P25519.prototype.imulK = function imulK (num) {\n // K = 0x13\n var carry = 0;\n for (var i = 0; i < num.length; i++) {\n var hi = (num.words[i] | 0) * 0x13 + carry;\n var lo = hi & 0x3ffffff;\n hi >>>= 26;\n\n num.words[i] = lo;\n carry = hi;\n }\n if (carry !== 0) {\n num.words[num.length++] = carry;\n }\n return num;\n };\n\n // Exported mostly for testing purposes, use plain name instead\n BN._prime = function prime (name) {\n // Cached version of prime\n if (primes[name]) return primes[name];\n\n var prime;\n if (name === 'k256') {\n prime = new K256();\n } else if (name === 'p224') {\n prime = new P224();\n } else if (name === 'p192') {\n prime = new P192();\n } else if (name === 'p25519') {\n prime = new P25519();\n } else {\n throw new Error('Unknown prime ' + name);\n }\n primes[name] = prime;\n\n return prime;\n };\n\n //\n // Base reduction engine\n //\n function Red (m) {\n if (typeof m === 'string') {\n var prime = BN._prime(m);\n this.m = prime.p;\n this.prime = prime;\n } else {\n assert(m.gtn(1), 'modulus must be greater than 1');\n this.m = m;\n this.prime = null;\n }\n }\n\n Red.prototype._verify1 = function _verify1 (a) {\n assert(a.negative === 0, 'red works only with positives');\n assert(a.red, 'red works only with red numbers');\n };\n\n Red.prototype._verify2 = function _verify2 (a, b) {\n assert((a.negative | b.negative) === 0, 'red works only with positives');\n assert(a.red && a.red === b.red,\n 'red works only with red numbers');\n };\n\n Red.prototype.imod = function imod (a) {\n if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n\n move(a, a.umod(this.m)._forceRed(this));\n return a;\n };\n\n Red.prototype.neg = function neg (a) {\n if (a.isZero()) {\n return a.clone();\n }\n\n return this.m.sub(a)._forceRed(this);\n };\n\n Red.prototype.add = function add (a, b) {\n this._verify2(a, b);\n\n var res = a.add(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.iadd = function iadd (a, b) {\n this._verify2(a, b);\n\n var res = a.iadd(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res;\n };\n\n Red.prototype.sub = function sub (a, b) {\n this._verify2(a, b);\n\n var res = a.sub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.isub = function isub (a, b) {\n this._verify2(a, b);\n\n var res = a.isub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res;\n };\n\n Red.prototype.shl = function shl (a, num) {\n this._verify1(a);\n return this.imod(a.ushln(num));\n };\n\n Red.prototype.imul = function imul (a, b) {\n this._verify2(a, b);\n return this.imod(a.imul(b));\n };\n\n Red.prototype.mul = function mul (a, b) {\n this._verify2(a, b);\n return this.imod(a.mul(b));\n };\n\n Red.prototype.isqr = function isqr (a) {\n return this.imul(a, a.clone());\n };\n\n Red.prototype.sqr = function sqr (a) {\n return this.mul(a, a);\n };\n\n Red.prototype.sqrt = function sqrt (a) {\n if (a.isZero()) return a.clone();\n\n var mod3 = this.m.andln(3);\n assert(mod3 % 2 === 1);\n\n // Fast case\n if (mod3 === 3) {\n var pow = this.m.add(new BN(1)).iushrn(2);\n return this.pow(a, pow);\n }\n\n // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n //\n // Find Q and S, that Q * 2 ^ S = (P - 1)\n var q = this.m.subn(1);\n var s = 0;\n while (!q.isZero() && q.andln(1) === 0) {\n s++;\n q.iushrn(1);\n }\n assert(!q.isZero());\n\n var one = new BN(1).toRed(this);\n var nOne = one.redNeg();\n\n // Find quadratic non-residue\n // NOTE: Max is such because of generalized Riemann hypothesis.\n var lpow = this.m.subn(1).iushrn(1);\n var z = this.m.bitLength();\n z = new BN(2 * z * z).toRed(this);\n\n while (this.pow(z, lpow).cmp(nOne) !== 0) {\n z.redIAdd(nOne);\n }\n\n var c = this.pow(z, q);\n var r = this.pow(a, q.addn(1).iushrn(1));\n var t = this.pow(a, q);\n var m = s;\n while (t.cmp(one) !== 0) {\n var tmp = t;\n for (var i = 0; tmp.cmp(one) !== 0; i++) {\n tmp = tmp.redSqr();\n }\n assert(i < m);\n var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n r = r.redMul(b);\n c = b.redSqr();\n t = t.redMul(c);\n m = i;\n }\n\n return r;\n };\n\n Red.prototype.invm = function invm (a) {\n var inv = a._invmp(this.m);\n if (inv.negative !== 0) {\n inv.negative = 0;\n return this.imod(inv).redNeg();\n } else {\n return this.imod(inv);\n }\n };\n\n Red.prototype.pow = function pow (a, num) {\n if (num.isZero()) return new BN(1).toRed(this);\n if (num.cmpn(1) === 0) return a.clone();\n\n var windowSize = 4;\n var wnd = new Array(1 << windowSize);\n wnd[0] = new BN(1).toRed(this);\n wnd[1] = a;\n for (var i = 2; i < wnd.length; i++) {\n wnd[i] = this.mul(wnd[i - 1], a);\n }\n\n var res = wnd[0];\n var current = 0;\n var currentLen = 0;\n var start = num.bitLength() % 26;\n if (start === 0) {\n start = 26;\n }\n\n for (i = num.length - 1; i >= 0; i--) {\n var word = num.words[i];\n for (var j = start - 1; j >= 0; j--) {\n var bit = (word >> j) & 1;\n if (res !== wnd[0]) {\n res = this.sqr(res);\n }\n\n if (bit === 0 && current === 0) {\n currentLen = 0;\n continue;\n }\n\n current <<= 1;\n current |= bit;\n currentLen++;\n if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n res = this.mul(res, wnd[current]);\n currentLen = 0;\n current = 0;\n }\n start = 26;\n }\n\n return res;\n };\n\n Red.prototype.convertTo = function convertTo (num) {\n var r = num.umod(this.m);\n\n return r === num ? r.clone() : r;\n };\n\n Red.prototype.convertFrom = function convertFrom (num) {\n var res = num.clone();\n res.red = null;\n return res;\n };\n\n //\n // Montgomery method engine\n //\n\n BN.mont = function mont (num) {\n return new Mont(num);\n };\n\n function Mont (m) {\n Red.call(this, m);\n\n this.shift = this.m.bitLength();\n if (this.shift % 26 !== 0) {\n this.shift += 26 - (this.shift % 26);\n }\n\n this.r = new BN(1).iushln(this.shift);\n this.r2 = this.imod(this.r.sqr());\n this.rinv = this.r._invmp(this.m);\n\n this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n this.minv = this.minv.umod(this.r);\n this.minv = this.r.sub(this.minv);\n }\n inherits(Mont, Red);\n\n Mont.prototype.convertTo = function convertTo (num) {\n return this.imod(num.ushln(this.shift));\n };\n\n Mont.prototype.convertFrom = function convertFrom (num) {\n var r = this.imod(num.mul(this.rinv));\n r.red = null;\n return r;\n };\n\n Mont.prototype.imul = function imul (a, b) {\n if (a.isZero() || b.isZero()) {\n a.words[0] = 0;\n a.length = 1;\n return a;\n }\n\n var t = a.imul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.mul = function mul (a, b) {\n if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n var t = a.mul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.invm = function invm (a) {\n // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n var res = this.imod(a._invmp(this.m).mul(this.r2));\n return res._forceRed(this);\n };\n})(typeof module === 'undefined' || module, this);\n","module.exports = require('./browser/algorithms.json')\n","var Buffer = require('safe-buffer').Buffer\nvar createHash = require('create-hash')\nvar stream = require('readable-stream')\nvar inherits = require('inherits')\nvar sign = require('./sign')\nvar verify = require('./verify')\n\nvar algorithms = require('./algorithms.json')\nObject.keys(algorithms).forEach(function (key) {\n algorithms[key].id = Buffer.from(algorithms[key].id, 'hex')\n algorithms[key.toLowerCase()] = algorithms[key]\n})\n\nfunction Sign (algorithm) {\n stream.Writable.call(this)\n\n var data = algorithms[algorithm]\n if (!data) throw new Error('Unknown message digest')\n\n this._hashType = data.hash\n this._hash = createHash(data.hash)\n this._tag = data.id\n this._signType = data.sign\n}\ninherits(Sign, stream.Writable)\n\nSign.prototype._write = function _write (data, _, done) {\n this._hash.update(data)\n done()\n}\n\nSign.prototype.update = function update (data, enc) {\n if (typeof data === 'string') data = Buffer.from(data, enc)\n\n this._hash.update(data)\n return this\n}\n\nSign.prototype.sign = function signMethod (key, enc) {\n this.end()\n var hash = this._hash.digest()\n var sig = sign(hash, key, this._hashType, this._signType, this._tag)\n\n return enc ? sig.toString(enc) : sig\n}\n\nfunction Verify (algorithm) {\n stream.Writable.call(this)\n\n var data = algorithms[algorithm]\n if (!data) throw new Error('Unknown message digest')\n\n this._hash = createHash(data.hash)\n this._tag = data.id\n this._signType = data.sign\n}\ninherits(Verify, stream.Writable)\n\nVerify.prototype._write = function _write (data, _, done) {\n this._hash.update(data)\n done()\n}\n\nVerify.prototype.update = function update (data, enc) {\n if (typeof data === 'string') data = Buffer.from(data, enc)\n\n this._hash.update(data)\n return this\n}\n\nVerify.prototype.verify = function verifyMethod (key, sig, enc) {\n if (typeof sig === 'string') sig = Buffer.from(sig, enc)\n\n this.end()\n var hash = this._hash.digest()\n return verify(sig, hash, key, this._signType, this._tag)\n}\n\nfunction createSign (algorithm) {\n return new Sign(algorithm)\n}\n\nfunction createVerify (algorithm) {\n return new Verify(algorithm)\n}\n\nmodule.exports = {\n Sign: createSign,\n Verify: createVerify,\n createSign: createSign,\n createVerify: createVerify\n}\n","// much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js\nvar Buffer = require('safe-buffer').Buffer\nvar createHmac = require('create-hmac')\nvar crt = require('browserify-rsa')\nvar EC = require('elliptic').ec\nvar BN = require('bn.js')\nvar parseKeys = require('parse-asn1')\nvar curves = require('./curves.json')\n\nfunction sign (hash, key, hashType, signType, tag) {\n var priv = parseKeys(key)\n if (priv.curve) {\n // rsa keys can be interpreted as ecdsa ones in openssl\n if (signType !== 'ecdsa' && signType !== 'ecdsa/rsa') throw new Error('wrong private key type')\n return ecSign(hash, priv)\n } else if (priv.type === 'dsa') {\n if (signType !== 'dsa') throw new Error('wrong private key type')\n return dsaSign(hash, priv, hashType)\n } else {\n if (signType !== 'rsa' && signType !== 'ecdsa/rsa') throw new Error('wrong private key type')\n }\n hash = Buffer.concat([tag, hash])\n var len = priv.modulus.byteLength()\n var pad = [0, 1]\n while (hash.length + pad.length + 1 < len) pad.push(0xff)\n pad.push(0x00)\n var i = -1\n while (++i < hash.length) pad.push(hash[i])\n\n var out = crt(pad, priv)\n return out\n}\n\nfunction ecSign (hash, priv) {\n var curveId = curves[priv.curve.join('.')]\n if (!curveId) throw new Error('unknown curve ' + priv.curve.join('.'))\n\n var curve = new EC(curveId)\n var key = curve.keyFromPrivate(priv.privateKey)\n var out = key.sign(hash)\n\n return Buffer.from(out.toDER())\n}\n\nfunction dsaSign (hash, priv, algo) {\n var x = priv.params.priv_key\n var p = priv.params.p\n var q = priv.params.q\n var g = priv.params.g\n var r = new BN(0)\n var k\n var H = bits2int(hash, q).mod(q)\n var s = false\n var kv = getKey(x, q, hash, algo)\n while (s === false) {\n k = makeKey(q, kv, algo)\n r = makeR(g, k, p, q)\n s = k.invm(q).imul(H.add(x.mul(r))).mod(q)\n if (s.cmpn(0) === 0) {\n s = false\n r = new BN(0)\n }\n }\n return toDER(r, s)\n}\n\nfunction toDER (r, s) {\n r = r.toArray()\n s = s.toArray()\n\n // Pad values\n if (r[0] & 0x80) r = [0].concat(r)\n if (s[0] & 0x80) s = [0].concat(s)\n\n var total = r.length + s.length + 4\n var res = [0x30, total, 0x02, r.length]\n res = res.concat(r, [0x02, s.length], s)\n return Buffer.from(res)\n}\n\nfunction getKey (x, q, hash, algo) {\n x = Buffer.from(x.toArray())\n if (x.length < q.byteLength()) {\n var zeros = Buffer.alloc(q.byteLength() - x.length)\n x = Buffer.concat([zeros, x])\n }\n var hlen = hash.length\n var hbits = bits2octets(hash, q)\n var v = Buffer.alloc(hlen)\n v.fill(1)\n var k = Buffer.alloc(hlen)\n k = createHmac(algo, k).update(v).update(Buffer.from([0])).update(x).update(hbits).digest()\n v = createHmac(algo, k).update(v).digest()\n k = createHmac(algo, k).update(v).update(Buffer.from([1])).update(x).update(hbits).digest()\n v = createHmac(algo, k).update(v).digest()\n return { k: k, v: v }\n}\n\nfunction bits2int (obits, q) {\n var bits = new BN(obits)\n var shift = (obits.length << 3) - q.bitLength()\n if (shift > 0) bits.ishrn(shift)\n return bits\n}\n\nfunction bits2octets (bits, q) {\n bits = bits2int(bits, q)\n bits = bits.mod(q)\n var out = Buffer.from(bits.toArray())\n if (out.length < q.byteLength()) {\n var zeros = Buffer.alloc(q.byteLength() - out.length)\n out = Buffer.concat([zeros, out])\n }\n return out\n}\n\nfunction makeKey (q, kv, algo) {\n var t\n var k\n\n do {\n t = Buffer.alloc(0)\n\n while (t.length * 8 < q.bitLength()) {\n kv.v = createHmac(algo, kv.k).update(kv.v).digest()\n t = Buffer.concat([t, kv.v])\n }\n\n k = bits2int(t, q)\n kv.k = createHmac(algo, kv.k).update(kv.v).update(Buffer.from([0])).digest()\n kv.v = createHmac(algo, kv.k).update(kv.v).digest()\n } while (k.cmp(q) !== -1)\n\n return k\n}\n\nfunction makeR (g, k, p, q) {\n return g.toRed(BN.mont(p)).redPow(k).fromRed().mod(q)\n}\n\nmodule.exports = sign\nmodule.exports.getKey = getKey\nmodule.exports.makeKey = makeKey\n","// much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js\nvar Buffer = require('safe-buffer').Buffer\nvar BN = require('bn.js')\nvar EC = require('elliptic').ec\nvar parseKeys = require('parse-asn1')\nvar curves = require('./curves.json')\n\nfunction verify (sig, hash, key, signType, tag) {\n var pub = parseKeys(key)\n if (pub.type === 'ec') {\n // rsa keys can be interpreted as ecdsa ones in openssl\n if (signType !== 'ecdsa' && signType !== 'ecdsa/rsa') throw new Error('wrong public key type')\n return ecVerify(sig, hash, pub)\n } else if (pub.type === 'dsa') {\n if (signType !== 'dsa') throw new Error('wrong public key type')\n return dsaVerify(sig, hash, pub)\n } else {\n if (signType !== 'rsa' && signType !== 'ecdsa/rsa') throw new Error('wrong public key type')\n }\n hash = Buffer.concat([tag, hash])\n var len = pub.modulus.byteLength()\n var pad = [1]\n var padNum = 0\n while (hash.length + pad.length + 2 < len) {\n pad.push(0xff)\n padNum++\n }\n pad.push(0x00)\n var i = -1\n while (++i < hash.length) {\n pad.push(hash[i])\n }\n pad = Buffer.from(pad)\n var red = BN.mont(pub.modulus)\n sig = new BN(sig).toRed(red)\n\n sig = sig.redPow(new BN(pub.publicExponent))\n sig = Buffer.from(sig.fromRed().toArray())\n var out = padNum < 8 ? 1 : 0\n len = Math.min(sig.length, pad.length)\n if (sig.length !== pad.length) out = 1\n\n i = -1\n while (++i < len) out |= sig[i] ^ pad[i]\n return out === 0\n}\n\nfunction ecVerify (sig, hash, pub) {\n var curveId = curves[pub.data.algorithm.curve.join('.')]\n if (!curveId) throw new Error('unknown curve ' + pub.data.algorithm.curve.join('.'))\n\n var curve = new EC(curveId)\n var pubkey = pub.data.subjectPrivateKey.data\n\n return curve.verify(hash, sig, pubkey)\n}\n\nfunction dsaVerify (sig, hash, pub) {\n var p = pub.data.p\n var q = pub.data.q\n var g = pub.data.g\n var y = pub.data.pub_key\n var unpacked = parseKeys.signature.decode(sig, 'der')\n var s = unpacked.s\n var r = unpacked.r\n checkValue(s, q)\n checkValue(r, q)\n var montp = BN.mont(p)\n var w = s.invm(q)\n var v = g.toRed(montp)\n .redPow(new BN(hash).mul(w).mod(q))\n .fromRed()\n .mul(y.toRed(montp).redPow(r.mul(w).mod(q)).fromRed())\n .mod(p)\n .mod(q)\n return v.cmp(r) === 0\n}\n\nfunction checkValue (b, q) {\n if (b.cmpn(0) <= 0) throw new Error('invalid sig')\n if (b.cmp(q) >= q) throw new Error('invalid sig')\n}\n\nmodule.exports = verify\n","(function (module, exports) {\n 'use strict';\n\n // Utils\n function assert (val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n }\n\n // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n function inherits (ctor, superCtor) {\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n\n // BN\n\n function BN (number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0;\n\n // Reduction context\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n\n var Buffer;\n try {\n if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n Buffer = window.Buffer;\n } else {\n Buffer = require('buffer').Buffer;\n }\n } catch (e) {\n }\n\n BN.isBN = function isBN (num) {\n if (num instanceof BN) {\n return true;\n }\n\n return num !== null && typeof num === 'object' &&\n num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n };\n\n BN.max = function max (left, right) {\n if (left.cmp(right) > 0) return left;\n return right;\n };\n\n BN.min = function min (left, right) {\n if (left.cmp(right) < 0) return left;\n return right;\n };\n\n BN.prototype._init = function init (number, base, endian) {\n if (typeof number === 'number') {\n return this._initNumber(number, base, endian);\n }\n\n if (typeof number === 'object') {\n return this._initArray(number, base, endian);\n }\n\n if (base === 'hex') {\n base = 16;\n }\n assert(base === (base | 0) && base >= 2 && base <= 36);\n\n number = number.toString().replace(/\\s+/g, '');\n var start = 0;\n if (number[0] === '-') {\n start++;\n this.negative = 1;\n }\n\n if (start < number.length) {\n if (base === 16) {\n this._parseHex(number, start, endian);\n } else {\n this._parseBase(number, base, start);\n if (endian === 'le') {\n this._initArray(this.toArray(), base, endian);\n }\n }\n }\n };\n\n BN.prototype._initNumber = function _initNumber (number, base, endian) {\n if (number < 0) {\n this.negative = 1;\n number = -number;\n }\n if (number < 0x4000000) {\n this.words = [number & 0x3ffffff];\n this.length = 1;\n } else if (number < 0x10000000000000) {\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff\n ];\n this.length = 2;\n } else {\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff,\n 1\n ];\n this.length = 3;\n }\n\n if (endian !== 'le') return;\n\n // Reverse the bytes\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initArray = function _initArray (number, base, endian) {\n // Perhaps a Uint8Array\n assert(typeof number.length === 'number');\n if (number.length <= 0) {\n this.words = [0];\n this.length = 1;\n return this;\n }\n\n this.length = Math.ceil(number.length / 3);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n var off = 0;\n if (endian === 'be') {\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n } else if (endian === 'le') {\n for (i = 0, j = 0; i < number.length; i += 3) {\n w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n }\n return this._strip();\n };\n\n function parseHex4Bits (string, index) {\n var c = string.charCodeAt(index);\n // '0' - '9'\n if (c >= 48 && c <= 57) {\n return c - 48;\n // 'A' - 'F'\n } else if (c >= 65 && c <= 70) {\n return c - 55;\n // 'a' - 'f'\n } else if (c >= 97 && c <= 102) {\n return c - 87;\n } else {\n assert(false, 'Invalid character in ' + string);\n }\n }\n\n function parseHexByte (string, lowerBound, index) {\n var r = parseHex4Bits(string, index);\n if (index - 1 >= lowerBound) {\n r |= parseHex4Bits(string, index - 1) << 4;\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start, endian) {\n // Create possibly bigger array to ensure that it fits the number\n this.length = Math.ceil((number.length - start) / 6);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n // 24-bits chunks\n var off = 0;\n var j = 0;\n\n var w;\n if (endian === 'be') {\n for (i = number.length - 1; i >= start; i -= 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n } else {\n var parseLength = number.length - start;\n for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n }\n\n this._strip();\n };\n\n function parseBase (str, start, end, mul) {\n var r = 0;\n var b = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n b = c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n b = c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n b = c;\n }\n assert(c >= 0 && b < mul, 'Invalid character');\n r += b;\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [0];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n this._strip();\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n function move (dest, src) {\n dest.words = src.words;\n dest.length = src.length;\n dest.negative = src.negative;\n dest.red = src.red;\n }\n\n BN.prototype._move = function _move (dest) {\n move(dest, this);\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype._strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n // Check Symbol.for because not everywhere where Symbol defined\n // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol#Browser_compatibility\n if (typeof Symbol !== 'undefined' && typeof Symbol.for === 'function') {\n try {\n BN.prototype[Symbol.for('nodejs.util.inspect.custom')] = inspect;\n } catch (e) {\n BN.prototype.inspect = inspect;\n }\n } else {\n BN.prototype.inspect = inspect;\n }\n\n function inspect () {\n return (this.red ? '';\n }\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n off += 2;\n if (off >= 26) {\n off -= 26;\n i--;\n }\n if (carry !== 0 || i !== this.length - 1) {\n out = zeros[6 - word.length] + word + out;\n } else {\n out = word + out;\n }\n }\n if (carry !== 0) {\n out = carry.toString(16) + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n if (base === (base | 0) && base >= 2 && base <= 36) {\n // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n var groupSize = groupSizes[base];\n // var groupBase = Math.pow(base, groupSize);\n var groupBase = groupBases[base];\n out = '';\n var c = this.clone();\n c.negative = 0;\n while (!c.isZero()) {\n var r = c.modrn(groupBase).toString(base);\n c = c.idivn(groupBase);\n\n if (!c.isZero()) {\n out = zeros[groupSize - r.length] + r + out;\n } else {\n out = r + out;\n }\n }\n if (this.isZero()) {\n out = '0' + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n assert(false, 'Base should be between 2 and 36');\n };\n\n BN.prototype.toNumber = function toNumber () {\n var ret = this.words[0];\n if (this.length === 2) {\n ret += this.words[1] * 0x4000000;\n } else if (this.length === 3 && this.words[2] === 0x01) {\n // NOTE: at this stage it is known that the top bit is set\n ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n } else if (this.length > 2) {\n assert(false, 'Number can only safely store up to 53 bits');\n }\n return (this.negative !== 0) ? -ret : ret;\n };\n\n BN.prototype.toJSON = function toJSON () {\n return this.toString(16, 2);\n };\n\n if (Buffer) {\n BN.prototype.toBuffer = function toBuffer (endian, length) {\n return this.toArrayLike(Buffer, endian, length);\n };\n }\n\n BN.prototype.toArray = function toArray (endian, length) {\n return this.toArrayLike(Array, endian, length);\n };\n\n var allocate = function allocate (ArrayType, size) {\n if (ArrayType.allocUnsafe) {\n return ArrayType.allocUnsafe(size);\n }\n return new ArrayType(size);\n };\n\n BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n this._strip();\n\n var byteLength = this.byteLength();\n var reqLength = length || Math.max(1, byteLength);\n assert(byteLength <= reqLength, 'byte array longer than desired length');\n assert(reqLength > 0, 'Requested array length <= 0');\n\n var res = allocate(ArrayType, reqLength);\n var postfix = endian === 'le' ? 'LE' : 'BE';\n this['_toArrayLike' + postfix](res, byteLength);\n return res;\n };\n\n BN.prototype._toArrayLikeLE = function _toArrayLikeLE (res, byteLength) {\n var position = 0;\n var carry = 0;\n\n for (var i = 0, shift = 0; i < this.length; i++) {\n var word = (this.words[i] << shift) | carry;\n\n res[position++] = word & 0xff;\n if (position < res.length) {\n res[position++] = (word >> 8) & 0xff;\n }\n if (position < res.length) {\n res[position++] = (word >> 16) & 0xff;\n }\n\n if (shift === 6) {\n if (position < res.length) {\n res[position++] = (word >> 24) & 0xff;\n }\n carry = 0;\n shift = 0;\n } else {\n carry = word >>> 24;\n shift += 2;\n }\n }\n\n if (position < res.length) {\n res[position++] = carry;\n\n while (position < res.length) {\n res[position++] = 0;\n }\n }\n };\n\n BN.prototype._toArrayLikeBE = function _toArrayLikeBE (res, byteLength) {\n var position = res.length - 1;\n var carry = 0;\n\n for (var i = 0, shift = 0; i < this.length; i++) {\n var word = (this.words[i] << shift) | carry;\n\n res[position--] = word & 0xff;\n if (position >= 0) {\n res[position--] = (word >> 8) & 0xff;\n }\n if (position >= 0) {\n res[position--] = (word >> 16) & 0xff;\n }\n\n if (shift === 6) {\n if (position >= 0) {\n res[position--] = (word >> 24) & 0xff;\n }\n carry = 0;\n shift = 0;\n } else {\n carry = word >>> 24;\n shift += 2;\n }\n }\n\n if (position >= 0) {\n res[position--] = carry;\n\n while (position >= 0) {\n res[position--] = 0;\n }\n }\n };\n\n if (Math.clz32) {\n BN.prototype._countBits = function _countBits (w) {\n return 32 - Math.clz32(w);\n };\n } else {\n BN.prototype._countBits = function _countBits (w) {\n var t = w;\n var r = 0;\n if (t >= 0x1000) {\n r += 13;\n t >>>= 13;\n }\n if (t >= 0x40) {\n r += 7;\n t >>>= 7;\n }\n if (t >= 0x8) {\n r += 4;\n t >>>= 4;\n }\n if (t >= 0x02) {\n r += 2;\n t >>>= 2;\n }\n return r + t;\n };\n }\n\n BN.prototype._zeroBits = function _zeroBits (w) {\n // Short-cut\n if (w === 0) return 26;\n\n var t = w;\n var r = 0;\n if ((t & 0x1fff) === 0) {\n r += 13;\n t >>>= 13;\n }\n if ((t & 0x7f) === 0) {\n r += 7;\n t >>>= 7;\n }\n if ((t & 0xf) === 0) {\n r += 4;\n t >>>= 4;\n }\n if ((t & 0x3) === 0) {\n r += 2;\n t >>>= 2;\n }\n if ((t & 0x1) === 0) {\n r++;\n }\n return r;\n };\n\n // Return number of used bits in a BN\n BN.prototype.bitLength = function bitLength () {\n var w = this.words[this.length - 1];\n var hi = this._countBits(w);\n return (this.length - 1) * 26 + hi;\n };\n\n function toBitArray (num) {\n var w = new Array(num.bitLength());\n\n for (var bit = 0; bit < w.length; bit++) {\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n w[bit] = (num.words[off] >>> wbit) & 0x01;\n }\n\n return w;\n }\n\n // Number of trailing zero bits\n BN.prototype.zeroBits = function zeroBits () {\n if (this.isZero()) return 0;\n\n var r = 0;\n for (var i = 0; i < this.length; i++) {\n var b = this._zeroBits(this.words[i]);\n r += b;\n if (b !== 26) break;\n }\n return r;\n };\n\n BN.prototype.byteLength = function byteLength () {\n return Math.ceil(this.bitLength() / 8);\n };\n\n BN.prototype.toTwos = function toTwos (width) {\n if (this.negative !== 0) {\n return this.abs().inotn(width).iaddn(1);\n }\n return this.clone();\n };\n\n BN.prototype.fromTwos = function fromTwos (width) {\n if (this.testn(width - 1)) {\n return this.notn(width).iaddn(1).ineg();\n }\n return this.clone();\n };\n\n BN.prototype.isNeg = function isNeg () {\n return this.negative !== 0;\n };\n\n // Return negative clone of `this`\n BN.prototype.neg = function neg () {\n return this.clone().ineg();\n };\n\n BN.prototype.ineg = function ineg () {\n if (!this.isZero()) {\n this.negative ^= 1;\n }\n\n return this;\n };\n\n // Or `num` with `this` in-place\n BN.prototype.iuor = function iuor (num) {\n while (this.length < num.length) {\n this.words[this.length++] = 0;\n }\n\n for (var i = 0; i < num.length; i++) {\n this.words[i] = this.words[i] | num.words[i];\n }\n\n return this._strip();\n };\n\n BN.prototype.ior = function ior (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuor(num);\n };\n\n // Or `num` with `this`\n BN.prototype.or = function or (num) {\n if (this.length > num.length) return this.clone().ior(num);\n return num.clone().ior(this);\n };\n\n BN.prototype.uor = function uor (num) {\n if (this.length > num.length) return this.clone().iuor(num);\n return num.clone().iuor(this);\n };\n\n // And `num` with `this` in-place\n BN.prototype.iuand = function iuand (num) {\n // b = min-length(num, this)\n var b;\n if (this.length > num.length) {\n b = num;\n } else {\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = this.words[i] & num.words[i];\n }\n\n this.length = b.length;\n\n return this._strip();\n };\n\n BN.prototype.iand = function iand (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuand(num);\n };\n\n // And `num` with `this`\n BN.prototype.and = function and (num) {\n if (this.length > num.length) return this.clone().iand(num);\n return num.clone().iand(this);\n };\n\n BN.prototype.uand = function uand (num) {\n if (this.length > num.length) return this.clone().iuand(num);\n return num.clone().iuand(this);\n };\n\n // Xor `num` with `this` in-place\n BN.prototype.iuxor = function iuxor (num) {\n // a.length > b.length\n var a;\n var b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = a.words[i] ^ b.words[i];\n }\n\n if (this !== a) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = a.length;\n\n return this._strip();\n };\n\n BN.prototype.ixor = function ixor (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuxor(num);\n };\n\n // Xor `num` with `this`\n BN.prototype.xor = function xor (num) {\n if (this.length > num.length) return this.clone().ixor(num);\n return num.clone().ixor(this);\n };\n\n BN.prototype.uxor = function uxor (num) {\n if (this.length > num.length) return this.clone().iuxor(num);\n return num.clone().iuxor(this);\n };\n\n // Not ``this`` with ``width`` bitwidth\n BN.prototype.inotn = function inotn (width) {\n assert(typeof width === 'number' && width >= 0);\n\n var bytesNeeded = Math.ceil(width / 26) | 0;\n var bitsLeft = width % 26;\n\n // Extend the buffer with leading zeroes\n this._expand(bytesNeeded);\n\n if (bitsLeft > 0) {\n bytesNeeded--;\n }\n\n // Handle complete words\n for (var i = 0; i < bytesNeeded; i++) {\n this.words[i] = ~this.words[i] & 0x3ffffff;\n }\n\n // Handle the residue\n if (bitsLeft > 0) {\n this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n }\n\n // And remove leading zeroes\n return this._strip();\n };\n\n BN.prototype.notn = function notn (width) {\n return this.clone().inotn(width);\n };\n\n // Set `bit` of `this`\n BN.prototype.setn = function setn (bit, val) {\n assert(typeof bit === 'number' && bit >= 0);\n\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n this._expand(off + 1);\n\n if (val) {\n this.words[off] = this.words[off] | (1 << wbit);\n } else {\n this.words[off] = this.words[off] & ~(1 << wbit);\n }\n\n return this._strip();\n };\n\n // Add `num` to `this` in-place\n BN.prototype.iadd = function iadd (num) {\n var r;\n\n // negative + positive\n if (this.negative !== 0 && num.negative === 0) {\n this.negative = 0;\n r = this.isub(num);\n this.negative ^= 1;\n return this._normSign();\n\n // positive + negative\n } else if (this.negative === 0 && num.negative !== 0) {\n num.negative = 0;\n r = this.isub(num);\n num.negative = 1;\n return r._normSign();\n }\n\n // a.length > b.length\n var a, b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n\n this.length = a.length;\n if (carry !== 0) {\n this.words[this.length] = carry;\n this.length++;\n // Copy the rest of the words\n } else if (a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n return this;\n };\n\n // Add `num` to `this`\n BN.prototype.add = function add (num) {\n var res;\n if (num.negative !== 0 && this.negative === 0) {\n num.negative = 0;\n res = this.sub(num);\n num.negative ^= 1;\n return res;\n } else if (num.negative === 0 && this.negative !== 0) {\n this.negative = 0;\n res = num.sub(this);\n this.negative = 1;\n return res;\n }\n\n if (this.length > num.length) return this.clone().iadd(num);\n\n return num.clone().iadd(this);\n };\n\n // Subtract `num` from `this` in-place\n BN.prototype.isub = function isub (num) {\n // this - (-num) = this + num\n if (num.negative !== 0) {\n num.negative = 0;\n var r = this.iadd(num);\n num.negative = 1;\n return r._normSign();\n\n // -this - num = -(this + num)\n } else if (this.negative !== 0) {\n this.negative = 0;\n this.iadd(num);\n this.negative = 1;\n return this._normSign();\n }\n\n // At this point both numbers are positive\n var cmp = this.cmp(num);\n\n // Optimization - zeroify\n if (cmp === 0) {\n this.negative = 0;\n this.length = 1;\n this.words[0] = 0;\n return this;\n }\n\n // a > b\n var a, b;\n if (cmp > 0) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n\n // Copy rest of the words\n if (carry === 0 && i < a.length && a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = Math.max(this.length, i);\n\n if (a !== this) {\n this.negative = 1;\n }\n\n return this._strip();\n };\n\n // Subtract `num` from `this`\n BN.prototype.sub = function sub (num) {\n return this.clone().isub(num);\n };\n\n function smallMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n var len = (self.length + num.length) | 0;\n out.length = len;\n len = (len - 1) | 0;\n\n // Peel one iteration (compiler can't do it, because of code complexity)\n var a = self.words[0] | 0;\n var b = num.words[0] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n var carry = (r / 0x4000000) | 0;\n out.words[0] = lo;\n\n for (var k = 1; k < len; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = carry >>> 26;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = (k - j) | 0;\n a = self.words[i] | 0;\n b = num.words[j] | 0;\n r = a * b + rword;\n ncarry += (r / 0x4000000) | 0;\n rword = r & 0x3ffffff;\n }\n out.words[k] = rword | 0;\n carry = ncarry | 0;\n }\n if (carry !== 0) {\n out.words[k] = carry | 0;\n } else {\n out.length--;\n }\n\n return out._strip();\n }\n\n // TODO(indutny): it may be reasonable to omit it for users who don't need\n // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n // multiplication (like elliptic secp256k1).\n var comb10MulTo = function comb10MulTo (self, num, out) {\n var a = self.words;\n var b = num.words;\n var o = out.words;\n var c = 0;\n var lo;\n var mid;\n var hi;\n var a0 = a[0] | 0;\n var al0 = a0 & 0x1fff;\n var ah0 = a0 >>> 13;\n var a1 = a[1] | 0;\n var al1 = a1 & 0x1fff;\n var ah1 = a1 >>> 13;\n var a2 = a[2] | 0;\n var al2 = a2 & 0x1fff;\n var ah2 = a2 >>> 13;\n var a3 = a[3] | 0;\n var al3 = a3 & 0x1fff;\n var ah3 = a3 >>> 13;\n var a4 = a[4] | 0;\n var al4 = a4 & 0x1fff;\n var ah4 = a4 >>> 13;\n var a5 = a[5] | 0;\n var al5 = a5 & 0x1fff;\n var ah5 = a5 >>> 13;\n var a6 = a[6] | 0;\n var al6 = a6 & 0x1fff;\n var ah6 = a6 >>> 13;\n var a7 = a[7] | 0;\n var al7 = a7 & 0x1fff;\n var ah7 = a7 >>> 13;\n var a8 = a[8] | 0;\n var al8 = a8 & 0x1fff;\n var ah8 = a8 >>> 13;\n var a9 = a[9] | 0;\n var al9 = a9 & 0x1fff;\n var ah9 = a9 >>> 13;\n var b0 = b[0] | 0;\n var bl0 = b0 & 0x1fff;\n var bh0 = b0 >>> 13;\n var b1 = b[1] | 0;\n var bl1 = b1 & 0x1fff;\n var bh1 = b1 >>> 13;\n var b2 = b[2] | 0;\n var bl2 = b2 & 0x1fff;\n var bh2 = b2 >>> 13;\n var b3 = b[3] | 0;\n var bl3 = b3 & 0x1fff;\n var bh3 = b3 >>> 13;\n var b4 = b[4] | 0;\n var bl4 = b4 & 0x1fff;\n var bh4 = b4 >>> 13;\n var b5 = b[5] | 0;\n var bl5 = b5 & 0x1fff;\n var bh5 = b5 >>> 13;\n var b6 = b[6] | 0;\n var bl6 = b6 & 0x1fff;\n var bh6 = b6 >>> 13;\n var b7 = b[7] | 0;\n var bl7 = b7 & 0x1fff;\n var bh7 = b7 >>> 13;\n var b8 = b[8] | 0;\n var bl8 = b8 & 0x1fff;\n var bh8 = b8 >>> 13;\n var b9 = b[9] | 0;\n var bl9 = b9 & 0x1fff;\n var bh9 = b9 >>> 13;\n\n out.negative = self.negative ^ num.negative;\n out.length = 19;\n /* k = 0 */\n lo = Math.imul(al0, bl0);\n mid = Math.imul(al0, bh0);\n mid = (mid + Math.imul(ah0, bl0)) | 0;\n hi = Math.imul(ah0, bh0);\n var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n w0 &= 0x3ffffff;\n /* k = 1 */\n lo = Math.imul(al1, bl0);\n mid = Math.imul(al1, bh0);\n mid = (mid + Math.imul(ah1, bl0)) | 0;\n hi = Math.imul(ah1, bh0);\n lo = (lo + Math.imul(al0, bl1)) | 0;\n mid = (mid + Math.imul(al0, bh1)) | 0;\n mid = (mid + Math.imul(ah0, bl1)) | 0;\n hi = (hi + Math.imul(ah0, bh1)) | 0;\n var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n w1 &= 0x3ffffff;\n /* k = 2 */\n lo = Math.imul(al2, bl0);\n mid = Math.imul(al2, bh0);\n mid = (mid + Math.imul(ah2, bl0)) | 0;\n hi = Math.imul(ah2, bh0);\n lo = (lo + Math.imul(al1, bl1)) | 0;\n mid = (mid + Math.imul(al1, bh1)) | 0;\n mid = (mid + Math.imul(ah1, bl1)) | 0;\n hi = (hi + Math.imul(ah1, bh1)) | 0;\n lo = (lo + Math.imul(al0, bl2)) | 0;\n mid = (mid + Math.imul(al0, bh2)) | 0;\n mid = (mid + Math.imul(ah0, bl2)) | 0;\n hi = (hi + Math.imul(ah0, bh2)) | 0;\n var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n w2 &= 0x3ffffff;\n /* k = 3 */\n lo = Math.imul(al3, bl0);\n mid = Math.imul(al3, bh0);\n mid = (mid + Math.imul(ah3, bl0)) | 0;\n hi = Math.imul(ah3, bh0);\n lo = (lo + Math.imul(al2, bl1)) | 0;\n mid = (mid + Math.imul(al2, bh1)) | 0;\n mid = (mid + Math.imul(ah2, bl1)) | 0;\n hi = (hi + Math.imul(ah2, bh1)) | 0;\n lo = (lo + Math.imul(al1, bl2)) | 0;\n mid = (mid + Math.imul(al1, bh2)) | 0;\n mid = (mid + Math.imul(ah1, bl2)) | 0;\n hi = (hi + Math.imul(ah1, bh2)) | 0;\n lo = (lo + Math.imul(al0, bl3)) | 0;\n mid = (mid + Math.imul(al0, bh3)) | 0;\n mid = (mid + Math.imul(ah0, bl3)) | 0;\n hi = (hi + Math.imul(ah0, bh3)) | 0;\n var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n w3 &= 0x3ffffff;\n /* k = 4 */\n lo = Math.imul(al4, bl0);\n mid = Math.imul(al4, bh0);\n mid = (mid + Math.imul(ah4, bl0)) | 0;\n hi = Math.imul(ah4, bh0);\n lo = (lo + Math.imul(al3, bl1)) | 0;\n mid = (mid + Math.imul(al3, bh1)) | 0;\n mid = (mid + Math.imul(ah3, bl1)) | 0;\n hi = (hi + Math.imul(ah3, bh1)) | 0;\n lo = (lo + Math.imul(al2, bl2)) | 0;\n mid = (mid + Math.imul(al2, bh2)) | 0;\n mid = (mid + Math.imul(ah2, bl2)) | 0;\n hi = (hi + Math.imul(ah2, bh2)) | 0;\n lo = (lo + Math.imul(al1, bl3)) | 0;\n mid = (mid + Math.imul(al1, bh3)) | 0;\n mid = (mid + Math.imul(ah1, bl3)) | 0;\n hi = (hi + Math.imul(ah1, bh3)) | 0;\n lo = (lo + Math.imul(al0, bl4)) | 0;\n mid = (mid + Math.imul(al0, bh4)) | 0;\n mid = (mid + Math.imul(ah0, bl4)) | 0;\n hi = (hi + Math.imul(ah0, bh4)) | 0;\n var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n w4 &= 0x3ffffff;\n /* k = 5 */\n lo = Math.imul(al5, bl0);\n mid = Math.imul(al5, bh0);\n mid = (mid + Math.imul(ah5, bl0)) | 0;\n hi = Math.imul(ah5, bh0);\n lo = (lo + Math.imul(al4, bl1)) | 0;\n mid = (mid + Math.imul(al4, bh1)) | 0;\n mid = (mid + Math.imul(ah4, bl1)) | 0;\n hi = (hi + Math.imul(ah4, bh1)) | 0;\n lo = (lo + Math.imul(al3, bl2)) | 0;\n mid = (mid + Math.imul(al3, bh2)) | 0;\n mid = (mid + Math.imul(ah3, bl2)) | 0;\n hi = (hi + Math.imul(ah3, bh2)) | 0;\n lo = (lo + Math.imul(al2, bl3)) | 0;\n mid = (mid + Math.imul(al2, bh3)) | 0;\n mid = (mid + Math.imul(ah2, bl3)) | 0;\n hi = (hi + Math.imul(ah2, bh3)) | 0;\n lo = (lo + Math.imul(al1, bl4)) | 0;\n mid = (mid + Math.imul(al1, bh4)) | 0;\n mid = (mid + Math.imul(ah1, bl4)) | 0;\n hi = (hi + Math.imul(ah1, bh4)) | 0;\n lo = (lo + Math.imul(al0, bl5)) | 0;\n mid = (mid + Math.imul(al0, bh5)) | 0;\n mid = (mid + Math.imul(ah0, bl5)) | 0;\n hi = (hi + Math.imul(ah0, bh5)) | 0;\n var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n w5 &= 0x3ffffff;\n /* k = 6 */\n lo = Math.imul(al6, bl0);\n mid = Math.imul(al6, bh0);\n mid = (mid + Math.imul(ah6, bl0)) | 0;\n hi = Math.imul(ah6, bh0);\n lo = (lo + Math.imul(al5, bl1)) | 0;\n mid = (mid + Math.imul(al5, bh1)) | 0;\n mid = (mid + Math.imul(ah5, bl1)) | 0;\n hi = (hi + Math.imul(ah5, bh1)) | 0;\n lo = (lo + Math.imul(al4, bl2)) | 0;\n mid = (mid + Math.imul(al4, bh2)) | 0;\n mid = (mid + Math.imul(ah4, bl2)) | 0;\n hi = (hi + Math.imul(ah4, bh2)) | 0;\n lo = (lo + Math.imul(al3, bl3)) | 0;\n mid = (mid + Math.imul(al3, bh3)) | 0;\n mid = (mid + Math.imul(ah3, bl3)) | 0;\n hi = (hi + Math.imul(ah3, bh3)) | 0;\n lo = (lo + Math.imul(al2, bl4)) | 0;\n mid = (mid + Math.imul(al2, bh4)) | 0;\n mid = (mid + Math.imul(ah2, bl4)) | 0;\n hi = (hi + Math.imul(ah2, bh4)) | 0;\n lo = (lo + Math.imul(al1, bl5)) | 0;\n mid = (mid + Math.imul(al1, bh5)) | 0;\n mid = (mid + Math.imul(ah1, bl5)) | 0;\n hi = (hi + Math.imul(ah1, bh5)) | 0;\n lo = (lo + Math.imul(al0, bl6)) | 0;\n mid = (mid + Math.imul(al0, bh6)) | 0;\n mid = (mid + Math.imul(ah0, bl6)) | 0;\n hi = (hi + Math.imul(ah0, bh6)) | 0;\n var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n w6 &= 0x3ffffff;\n /* k = 7 */\n lo = Math.imul(al7, bl0);\n mid = Math.imul(al7, bh0);\n mid = (mid + Math.imul(ah7, bl0)) | 0;\n hi = Math.imul(ah7, bh0);\n lo = (lo + Math.imul(al6, bl1)) | 0;\n mid = (mid + Math.imul(al6, bh1)) | 0;\n mid = (mid + Math.imul(ah6, bl1)) | 0;\n hi = (hi + Math.imul(ah6, bh1)) | 0;\n lo = (lo + Math.imul(al5, bl2)) | 0;\n mid = (mid + Math.imul(al5, bh2)) | 0;\n mid = (mid + Math.imul(ah5, bl2)) | 0;\n hi = (hi + Math.imul(ah5, bh2)) | 0;\n lo = (lo + Math.imul(al4, bl3)) | 0;\n mid = (mid + Math.imul(al4, bh3)) | 0;\n mid = (mid + Math.imul(ah4, bl3)) | 0;\n hi = (hi + Math.imul(ah4, bh3)) | 0;\n lo = (lo + Math.imul(al3, bl4)) | 0;\n mid = (mid + Math.imul(al3, bh4)) | 0;\n mid = (mid + Math.imul(ah3, bl4)) | 0;\n hi = (hi + Math.imul(ah3, bh4)) | 0;\n lo = (lo + Math.imul(al2, bl5)) | 0;\n mid = (mid + Math.imul(al2, bh5)) | 0;\n mid = (mid + Math.imul(ah2, bl5)) | 0;\n hi = (hi + Math.imul(ah2, bh5)) | 0;\n lo = (lo + Math.imul(al1, bl6)) | 0;\n mid = (mid + Math.imul(al1, bh6)) | 0;\n mid = (mid + Math.imul(ah1, bl6)) | 0;\n hi = (hi + Math.imul(ah1, bh6)) | 0;\n lo = (lo + Math.imul(al0, bl7)) | 0;\n mid = (mid + Math.imul(al0, bh7)) | 0;\n mid = (mid + Math.imul(ah0, bl7)) | 0;\n hi = (hi + Math.imul(ah0, bh7)) | 0;\n var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n w7 &= 0x3ffffff;\n /* k = 8 */\n lo = Math.imul(al8, bl0);\n mid = Math.imul(al8, bh0);\n mid = (mid + Math.imul(ah8, bl0)) | 0;\n hi = Math.imul(ah8, bh0);\n lo = (lo + Math.imul(al7, bl1)) | 0;\n mid = (mid + Math.imul(al7, bh1)) | 0;\n mid = (mid + Math.imul(ah7, bl1)) | 0;\n hi = (hi + Math.imul(ah7, bh1)) | 0;\n lo = (lo + Math.imul(al6, bl2)) | 0;\n mid = (mid + Math.imul(al6, bh2)) | 0;\n mid = (mid + Math.imul(ah6, bl2)) | 0;\n hi = (hi + Math.imul(ah6, bh2)) | 0;\n lo = (lo + Math.imul(al5, bl3)) | 0;\n mid = (mid + Math.imul(al5, bh3)) | 0;\n mid = (mid + Math.imul(ah5, bl3)) | 0;\n hi = (hi + Math.imul(ah5, bh3)) | 0;\n lo = (lo + Math.imul(al4, bl4)) | 0;\n mid = (mid + Math.imul(al4, bh4)) | 0;\n mid = (mid + Math.imul(ah4, bl4)) | 0;\n hi = (hi + Math.imul(ah4, bh4)) | 0;\n lo = (lo + Math.imul(al3, bl5)) | 0;\n mid = (mid + Math.imul(al3, bh5)) | 0;\n mid = (mid + Math.imul(ah3, bl5)) | 0;\n hi = (hi + Math.imul(ah3, bh5)) | 0;\n lo = (lo + Math.imul(al2, bl6)) | 0;\n mid = (mid + Math.imul(al2, bh6)) | 0;\n mid = (mid + Math.imul(ah2, bl6)) | 0;\n hi = (hi + Math.imul(ah2, bh6)) | 0;\n lo = (lo + Math.imul(al1, bl7)) | 0;\n mid = (mid + Math.imul(al1, bh7)) | 0;\n mid = (mid + Math.imul(ah1, bl7)) | 0;\n hi = (hi + Math.imul(ah1, bh7)) | 0;\n lo = (lo + Math.imul(al0, bl8)) | 0;\n mid = (mid + Math.imul(al0, bh8)) | 0;\n mid = (mid + Math.imul(ah0, bl8)) | 0;\n hi = (hi + Math.imul(ah0, bh8)) | 0;\n var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n w8 &= 0x3ffffff;\n /* k = 9 */\n lo = Math.imul(al9, bl0);\n mid = Math.imul(al9, bh0);\n mid = (mid + Math.imul(ah9, bl0)) | 0;\n hi = Math.imul(ah9, bh0);\n lo = (lo + Math.imul(al8, bl1)) | 0;\n mid = (mid + Math.imul(al8, bh1)) | 0;\n mid = (mid + Math.imul(ah8, bl1)) | 0;\n hi = (hi + Math.imul(ah8, bh1)) | 0;\n lo = (lo + Math.imul(al7, bl2)) | 0;\n mid = (mid + Math.imul(al7, bh2)) | 0;\n mid = (mid + Math.imul(ah7, bl2)) | 0;\n hi = (hi + Math.imul(ah7, bh2)) | 0;\n lo = (lo + Math.imul(al6, bl3)) | 0;\n mid = (mid + Math.imul(al6, bh3)) | 0;\n mid = (mid + Math.imul(ah6, bl3)) | 0;\n hi = (hi + Math.imul(ah6, bh3)) | 0;\n lo = (lo + Math.imul(al5, bl4)) | 0;\n mid = (mid + Math.imul(al5, bh4)) | 0;\n mid = (mid + Math.imul(ah5, bl4)) | 0;\n hi = (hi + Math.imul(ah5, bh4)) | 0;\n lo = (lo + Math.imul(al4, bl5)) | 0;\n mid = (mid + Math.imul(al4, bh5)) | 0;\n mid = (mid + Math.imul(ah4, bl5)) | 0;\n hi = (hi + Math.imul(ah4, bh5)) | 0;\n lo = (lo + Math.imul(al3, bl6)) | 0;\n mid = (mid + Math.imul(al3, bh6)) | 0;\n mid = (mid + Math.imul(ah3, bl6)) | 0;\n hi = (hi + Math.imul(ah3, bh6)) | 0;\n lo = (lo + Math.imul(al2, bl7)) | 0;\n mid = (mid + Math.imul(al2, bh7)) | 0;\n mid = (mid + Math.imul(ah2, bl7)) | 0;\n hi = (hi + Math.imul(ah2, bh7)) | 0;\n lo = (lo + Math.imul(al1, bl8)) | 0;\n mid = (mid + Math.imul(al1, bh8)) | 0;\n mid = (mid + Math.imul(ah1, bl8)) | 0;\n hi = (hi + Math.imul(ah1, bh8)) | 0;\n lo = (lo + Math.imul(al0, bl9)) | 0;\n mid = (mid + Math.imul(al0, bh9)) | 0;\n mid = (mid + Math.imul(ah0, bl9)) | 0;\n hi = (hi + Math.imul(ah0, bh9)) | 0;\n var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n w9 &= 0x3ffffff;\n /* k = 10 */\n lo = Math.imul(al9, bl1);\n mid = Math.imul(al9, bh1);\n mid = (mid + Math.imul(ah9, bl1)) | 0;\n hi = Math.imul(ah9, bh1);\n lo = (lo + Math.imul(al8, bl2)) | 0;\n mid = (mid + Math.imul(al8, bh2)) | 0;\n mid = (mid + Math.imul(ah8, bl2)) | 0;\n hi = (hi + Math.imul(ah8, bh2)) | 0;\n lo = (lo + Math.imul(al7, bl3)) | 0;\n mid = (mid + Math.imul(al7, bh3)) | 0;\n mid = (mid + Math.imul(ah7, bl3)) | 0;\n hi = (hi + Math.imul(ah7, bh3)) | 0;\n lo = (lo + Math.imul(al6, bl4)) | 0;\n mid = (mid + Math.imul(al6, bh4)) | 0;\n mid = (mid + Math.imul(ah6, bl4)) | 0;\n hi = (hi + Math.imul(ah6, bh4)) | 0;\n lo = (lo + Math.imul(al5, bl5)) | 0;\n mid = (mid + Math.imul(al5, bh5)) | 0;\n mid = (mid + Math.imul(ah5, bl5)) | 0;\n hi = (hi + Math.imul(ah5, bh5)) | 0;\n lo = (lo + Math.imul(al4, bl6)) | 0;\n mid = (mid + Math.imul(al4, bh6)) | 0;\n mid = (mid + Math.imul(ah4, bl6)) | 0;\n hi = (hi + Math.imul(ah4, bh6)) | 0;\n lo = (lo + Math.imul(al3, bl7)) | 0;\n mid = (mid + Math.imul(al3, bh7)) | 0;\n mid = (mid + Math.imul(ah3, bl7)) | 0;\n hi = (hi + Math.imul(ah3, bh7)) | 0;\n lo = (lo + Math.imul(al2, bl8)) | 0;\n mid = (mid + Math.imul(al2, bh8)) | 0;\n mid = (mid + Math.imul(ah2, bl8)) | 0;\n hi = (hi + Math.imul(ah2, bh8)) | 0;\n lo = (lo + Math.imul(al1, bl9)) | 0;\n mid = (mid + Math.imul(al1, bh9)) | 0;\n mid = (mid + Math.imul(ah1, bl9)) | 0;\n hi = (hi + Math.imul(ah1, bh9)) | 0;\n var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n w10 &= 0x3ffffff;\n /* k = 11 */\n lo = Math.imul(al9, bl2);\n mid = Math.imul(al9, bh2);\n mid = (mid + Math.imul(ah9, bl2)) | 0;\n hi = Math.imul(ah9, bh2);\n lo = (lo + Math.imul(al8, bl3)) | 0;\n mid = (mid + Math.imul(al8, bh3)) | 0;\n mid = (mid + Math.imul(ah8, bl3)) | 0;\n hi = (hi + Math.imul(ah8, bh3)) | 0;\n lo = (lo + Math.imul(al7, bl4)) | 0;\n mid = (mid + Math.imul(al7, bh4)) | 0;\n mid = (mid + Math.imul(ah7, bl4)) | 0;\n hi = (hi + Math.imul(ah7, bh4)) | 0;\n lo = (lo + Math.imul(al6, bl5)) | 0;\n mid = (mid + Math.imul(al6, bh5)) | 0;\n mid = (mid + Math.imul(ah6, bl5)) | 0;\n hi = (hi + Math.imul(ah6, bh5)) | 0;\n lo = (lo + Math.imul(al5, bl6)) | 0;\n mid = (mid + Math.imul(al5, bh6)) | 0;\n mid = (mid + Math.imul(ah5, bl6)) | 0;\n hi = (hi + Math.imul(ah5, bh6)) | 0;\n lo = (lo + Math.imul(al4, bl7)) | 0;\n mid = (mid + Math.imul(al4, bh7)) | 0;\n mid = (mid + Math.imul(ah4, bl7)) | 0;\n hi = (hi + Math.imul(ah4, bh7)) | 0;\n lo = (lo + Math.imul(al3, bl8)) | 0;\n mid = (mid + Math.imul(al3, bh8)) | 0;\n mid = (mid + Math.imul(ah3, bl8)) | 0;\n hi = (hi + Math.imul(ah3, bh8)) | 0;\n lo = (lo + Math.imul(al2, bl9)) | 0;\n mid = (mid + Math.imul(al2, bh9)) | 0;\n mid = (mid + Math.imul(ah2, bl9)) | 0;\n hi = (hi + Math.imul(ah2, bh9)) | 0;\n var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n w11 &= 0x3ffffff;\n /* k = 12 */\n lo = Math.imul(al9, bl3);\n mid = Math.imul(al9, bh3);\n mid = (mid + Math.imul(ah9, bl3)) | 0;\n hi = Math.imul(ah9, bh3);\n lo = (lo + Math.imul(al8, bl4)) | 0;\n mid = (mid + Math.imul(al8, bh4)) | 0;\n mid = (mid + Math.imul(ah8, bl4)) | 0;\n hi = (hi + Math.imul(ah8, bh4)) | 0;\n lo = (lo + Math.imul(al7, bl5)) | 0;\n mid = (mid + Math.imul(al7, bh5)) | 0;\n mid = (mid + Math.imul(ah7, bl5)) | 0;\n hi = (hi + Math.imul(ah7, bh5)) | 0;\n lo = (lo + Math.imul(al6, bl6)) | 0;\n mid = (mid + Math.imul(al6, bh6)) | 0;\n mid = (mid + Math.imul(ah6, bl6)) | 0;\n hi = (hi + Math.imul(ah6, bh6)) | 0;\n lo = (lo + Math.imul(al5, bl7)) | 0;\n mid = (mid + Math.imul(al5, bh7)) | 0;\n mid = (mid + Math.imul(ah5, bl7)) | 0;\n hi = (hi + Math.imul(ah5, bh7)) | 0;\n lo = (lo + Math.imul(al4, bl8)) | 0;\n mid = (mid + Math.imul(al4, bh8)) | 0;\n mid = (mid + Math.imul(ah4, bl8)) | 0;\n hi = (hi + Math.imul(ah4, bh8)) | 0;\n lo = (lo + Math.imul(al3, bl9)) | 0;\n mid = (mid + Math.imul(al3, bh9)) | 0;\n mid = (mid + Math.imul(ah3, bl9)) | 0;\n hi = (hi + Math.imul(ah3, bh9)) | 0;\n var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n w12 &= 0x3ffffff;\n /* k = 13 */\n lo = Math.imul(al9, bl4);\n mid = Math.imul(al9, bh4);\n mid = (mid + Math.imul(ah9, bl4)) | 0;\n hi = Math.imul(ah9, bh4);\n lo = (lo + Math.imul(al8, bl5)) | 0;\n mid = (mid + Math.imul(al8, bh5)) | 0;\n mid = (mid + Math.imul(ah8, bl5)) | 0;\n hi = (hi + Math.imul(ah8, bh5)) | 0;\n lo = (lo + Math.imul(al7, bl6)) | 0;\n mid = (mid + Math.imul(al7, bh6)) | 0;\n mid = (mid + Math.imul(ah7, bl6)) | 0;\n hi = (hi + Math.imul(ah7, bh6)) | 0;\n lo = (lo + Math.imul(al6, bl7)) | 0;\n mid = (mid + Math.imul(al6, bh7)) | 0;\n mid = (mid + Math.imul(ah6, bl7)) | 0;\n hi = (hi + Math.imul(ah6, bh7)) | 0;\n lo = (lo + Math.imul(al5, bl8)) | 0;\n mid = (mid + Math.imul(al5, bh8)) | 0;\n mid = (mid + Math.imul(ah5, bl8)) | 0;\n hi = (hi + Math.imul(ah5, bh8)) | 0;\n lo = (lo + Math.imul(al4, bl9)) | 0;\n mid = (mid + Math.imul(al4, bh9)) | 0;\n mid = (mid + Math.imul(ah4, bl9)) | 0;\n hi = (hi + Math.imul(ah4, bh9)) | 0;\n var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n w13 &= 0x3ffffff;\n /* k = 14 */\n lo = Math.imul(al9, bl5);\n mid = Math.imul(al9, bh5);\n mid = (mid + Math.imul(ah9, bl5)) | 0;\n hi = Math.imul(ah9, bh5);\n lo = (lo + Math.imul(al8, bl6)) | 0;\n mid = (mid + Math.imul(al8, bh6)) | 0;\n mid = (mid + Math.imul(ah8, bl6)) | 0;\n hi = (hi + Math.imul(ah8, bh6)) | 0;\n lo = (lo + Math.imul(al7, bl7)) | 0;\n mid = (mid + Math.imul(al7, bh7)) | 0;\n mid = (mid + Math.imul(ah7, bl7)) | 0;\n hi = (hi + Math.imul(ah7, bh7)) | 0;\n lo = (lo + Math.imul(al6, bl8)) | 0;\n mid = (mid + Math.imul(al6, bh8)) | 0;\n mid = (mid + Math.imul(ah6, bl8)) | 0;\n hi = (hi + Math.imul(ah6, bh8)) | 0;\n lo = (lo + Math.imul(al5, bl9)) | 0;\n mid = (mid + Math.imul(al5, bh9)) | 0;\n mid = (mid + Math.imul(ah5, bl9)) | 0;\n hi = (hi + Math.imul(ah5, bh9)) | 0;\n var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n w14 &= 0x3ffffff;\n /* k = 15 */\n lo = Math.imul(al9, bl6);\n mid = Math.imul(al9, bh6);\n mid = (mid + Math.imul(ah9, bl6)) | 0;\n hi = Math.imul(ah9, bh6);\n lo = (lo + Math.imul(al8, bl7)) | 0;\n mid = (mid + Math.imul(al8, bh7)) | 0;\n mid = (mid + Math.imul(ah8, bl7)) | 0;\n hi = (hi + Math.imul(ah8, bh7)) | 0;\n lo = (lo + Math.imul(al7, bl8)) | 0;\n mid = (mid + Math.imul(al7, bh8)) | 0;\n mid = (mid + Math.imul(ah7, bl8)) | 0;\n hi = (hi + Math.imul(ah7, bh8)) | 0;\n lo = (lo + Math.imul(al6, bl9)) | 0;\n mid = (mid + Math.imul(al6, bh9)) | 0;\n mid = (mid + Math.imul(ah6, bl9)) | 0;\n hi = (hi + Math.imul(ah6, bh9)) | 0;\n var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n w15 &= 0x3ffffff;\n /* k = 16 */\n lo = Math.imul(al9, bl7);\n mid = Math.imul(al9, bh7);\n mid = (mid + Math.imul(ah9, bl7)) | 0;\n hi = Math.imul(ah9, bh7);\n lo = (lo + Math.imul(al8, bl8)) | 0;\n mid = (mid + Math.imul(al8, bh8)) | 0;\n mid = (mid + Math.imul(ah8, bl8)) | 0;\n hi = (hi + Math.imul(ah8, bh8)) | 0;\n lo = (lo + Math.imul(al7, bl9)) | 0;\n mid = (mid + Math.imul(al7, bh9)) | 0;\n mid = (mid + Math.imul(ah7, bl9)) | 0;\n hi = (hi + Math.imul(ah7, bh9)) | 0;\n var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n w16 &= 0x3ffffff;\n /* k = 17 */\n lo = Math.imul(al9, bl8);\n mid = Math.imul(al9, bh8);\n mid = (mid + Math.imul(ah9, bl8)) | 0;\n hi = Math.imul(ah9, bh8);\n lo = (lo + Math.imul(al8, bl9)) | 0;\n mid = (mid + Math.imul(al8, bh9)) | 0;\n mid = (mid + Math.imul(ah8, bl9)) | 0;\n hi = (hi + Math.imul(ah8, bh9)) | 0;\n var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n w17 &= 0x3ffffff;\n /* k = 18 */\n lo = Math.imul(al9, bl9);\n mid = Math.imul(al9, bh9);\n mid = (mid + Math.imul(ah9, bl9)) | 0;\n hi = Math.imul(ah9, bh9);\n var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n w18 &= 0x3ffffff;\n o[0] = w0;\n o[1] = w1;\n o[2] = w2;\n o[3] = w3;\n o[4] = w4;\n o[5] = w5;\n o[6] = w6;\n o[7] = w7;\n o[8] = w8;\n o[9] = w9;\n o[10] = w10;\n o[11] = w11;\n o[12] = w12;\n o[13] = w13;\n o[14] = w14;\n o[15] = w15;\n o[16] = w16;\n o[17] = w17;\n o[18] = w18;\n if (c !== 0) {\n o[19] = c;\n out.length++;\n }\n return out;\n };\n\n // Polyfill comb\n if (!Math.imul) {\n comb10MulTo = smallMulTo;\n }\n\n function bigMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n out.length = self.length + num.length;\n\n var carry = 0;\n var hncarry = 0;\n for (var k = 0; k < out.length - 1; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = hncarry;\n hncarry = 0;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = k - j;\n var a = self.words[i] | 0;\n var b = num.words[j] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n lo = (lo + rword) | 0;\n rword = lo & 0x3ffffff;\n ncarry = (ncarry + (lo >>> 26)) | 0;\n\n hncarry += ncarry >>> 26;\n ncarry &= 0x3ffffff;\n }\n out.words[k] = rword;\n carry = ncarry;\n ncarry = hncarry;\n }\n if (carry !== 0) {\n out.words[k] = carry;\n } else {\n out.length--;\n }\n\n return out._strip();\n }\n\n function jumboMulTo (self, num, out) {\n // Temporary disable, see https://github.com/indutny/bn.js/issues/211\n // var fftm = new FFTM();\n // return fftm.mulp(self, num, out);\n return bigMulTo(self, num, out);\n }\n\n BN.prototype.mulTo = function mulTo (num, out) {\n var res;\n var len = this.length + num.length;\n if (this.length === 10 && num.length === 10) {\n res = comb10MulTo(this, num, out);\n } else if (len < 63) {\n res = smallMulTo(this, num, out);\n } else if (len < 1024) {\n res = bigMulTo(this, num, out);\n } else {\n res = jumboMulTo(this, num, out);\n }\n\n return res;\n };\n\n // Cooley-Tukey algorithm for FFT\n // slightly revisited to rely on looping instead of recursion\n\n function FFTM (x, y) {\n this.x = x;\n this.y = y;\n }\n\n FFTM.prototype.makeRBT = function makeRBT (N) {\n var t = new Array(N);\n var l = BN.prototype._countBits(N) - 1;\n for (var i = 0; i < N; i++) {\n t[i] = this.revBin(i, l, N);\n }\n\n return t;\n };\n\n // Returns binary-reversed representation of `x`\n FFTM.prototype.revBin = function revBin (x, l, N) {\n if (x === 0 || x === N - 1) return x;\n\n var rb = 0;\n for (var i = 0; i < l; i++) {\n rb |= (x & 1) << (l - i - 1);\n x >>= 1;\n }\n\n return rb;\n };\n\n // Performs \"tweedling\" phase, therefore 'emulating'\n // behaviour of the recursive algorithm\n FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n for (var i = 0; i < N; i++) {\n rtws[i] = rws[rbt[i]];\n itws[i] = iws[rbt[i]];\n }\n };\n\n FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n this.permute(rbt, rws, iws, rtws, itws, N);\n\n for (var s = 1; s < N; s <<= 1) {\n var l = s << 1;\n\n var rtwdf = Math.cos(2 * Math.PI / l);\n var itwdf = Math.sin(2 * Math.PI / l);\n\n for (var p = 0; p < N; p += l) {\n var rtwdf_ = rtwdf;\n var itwdf_ = itwdf;\n\n for (var j = 0; j < s; j++) {\n var re = rtws[p + j];\n var ie = itws[p + j];\n\n var ro = rtws[p + j + s];\n var io = itws[p + j + s];\n\n var rx = rtwdf_ * ro - itwdf_ * io;\n\n io = rtwdf_ * io + itwdf_ * ro;\n ro = rx;\n\n rtws[p + j] = re + ro;\n itws[p + j] = ie + io;\n\n rtws[p + j + s] = re - ro;\n itws[p + j + s] = ie - io;\n\n /* jshint maxdepth : false */\n if (j !== l) {\n rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n rtwdf_ = rx;\n }\n }\n }\n }\n };\n\n FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n var N = Math.max(m, n) | 1;\n var odd = N & 1;\n var i = 0;\n for (N = N / 2 | 0; N; N = N >>> 1) {\n i++;\n }\n\n return 1 << i + 1 + odd;\n };\n\n FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n if (N <= 1) return;\n\n for (var i = 0; i < N / 2; i++) {\n var t = rws[i];\n\n rws[i] = rws[N - i - 1];\n rws[N - i - 1] = t;\n\n t = iws[i];\n\n iws[i] = -iws[N - i - 1];\n iws[N - i - 1] = -t;\n }\n };\n\n FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n var carry = 0;\n for (var i = 0; i < N / 2; i++) {\n var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n Math.round(ws[2 * i] / N) +\n carry;\n\n ws[i] = w & 0x3ffffff;\n\n if (w < 0x4000000) {\n carry = 0;\n } else {\n carry = w / 0x4000000 | 0;\n }\n }\n\n return ws;\n };\n\n FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n var carry = 0;\n for (var i = 0; i < len; i++) {\n carry = carry + (ws[i] | 0);\n\n rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n }\n\n // Pad with zeroes\n for (i = 2 * len; i < N; ++i) {\n rws[i] = 0;\n }\n\n assert(carry === 0);\n assert((carry & ~0x1fff) === 0);\n };\n\n FFTM.prototype.stub = function stub (N) {\n var ph = new Array(N);\n for (var i = 0; i < N; i++) {\n ph[i] = 0;\n }\n\n return ph;\n };\n\n FFTM.prototype.mulp = function mulp (x, y, out) {\n var N = 2 * this.guessLen13b(x.length, y.length);\n\n var rbt = this.makeRBT(N);\n\n var _ = this.stub(N);\n\n var rws = new Array(N);\n var rwst = new Array(N);\n var iwst = new Array(N);\n\n var nrws = new Array(N);\n var nrwst = new Array(N);\n var niwst = new Array(N);\n\n var rmws = out.words;\n rmws.length = N;\n\n this.convert13b(x.words, x.length, rws, N);\n this.convert13b(y.words, y.length, nrws, N);\n\n this.transform(rws, _, rwst, iwst, N, rbt);\n this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n for (var i = 0; i < N; i++) {\n var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n rwst[i] = rx;\n }\n\n this.conjugate(rwst, iwst, N);\n this.transform(rwst, iwst, rmws, _, N, rbt);\n this.conjugate(rmws, _, N);\n this.normalize13b(rmws, N);\n\n out.negative = x.negative ^ y.negative;\n out.length = x.length + y.length;\n return out._strip();\n };\n\n // Multiply `this` by `num`\n BN.prototype.mul = function mul (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return this.mulTo(num, out);\n };\n\n // Multiply employing FFT\n BN.prototype.mulf = function mulf (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return jumboMulTo(this, num, out);\n };\n\n // In-place Multiplication\n BN.prototype.imul = function imul (num) {\n return this.clone().mulTo(num, this);\n };\n\n BN.prototype.imuln = function imuln (num) {\n var isNegNum = num < 0;\n if (isNegNum) num = -num;\n\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n\n // Carry\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = (this.words[i] | 0) * num;\n var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n carry >>= 26;\n carry += (w / 0x4000000) | 0;\n // NOTE: lo is 27bit maximum\n carry += lo >>> 26;\n this.words[i] = lo & 0x3ffffff;\n }\n\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n\n return isNegNum ? this.ineg() : this;\n };\n\n BN.prototype.muln = function muln (num) {\n return this.clone().imuln(num);\n };\n\n // `this` * `this`\n BN.prototype.sqr = function sqr () {\n return this.mul(this);\n };\n\n // `this` * `this` in-place\n BN.prototype.isqr = function isqr () {\n return this.imul(this.clone());\n };\n\n // Math.pow(`this`, `num`)\n BN.prototype.pow = function pow (num) {\n var w = toBitArray(num);\n if (w.length === 0) return new BN(1);\n\n // Skip leading zeroes\n var res = this;\n for (var i = 0; i < w.length; i++, res = res.sqr()) {\n if (w[i] !== 0) break;\n }\n\n if (++i < w.length) {\n for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n if (w[i] === 0) continue;\n\n res = res.mul(q);\n }\n }\n\n return res;\n };\n\n // Shift-left in-place\n BN.prototype.iushln = function iushln (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n var i;\n\n if (r !== 0) {\n var carry = 0;\n\n for (i = 0; i < this.length; i++) {\n var newCarry = this.words[i] & carryMask;\n var c = ((this.words[i] | 0) - newCarry) << r;\n this.words[i] = c | carry;\n carry = newCarry >>> (26 - r);\n }\n\n if (carry) {\n this.words[i] = carry;\n this.length++;\n }\n }\n\n if (s !== 0) {\n for (i = this.length - 1; i >= 0; i--) {\n this.words[i + s] = this.words[i];\n }\n\n for (i = 0; i < s; i++) {\n this.words[i] = 0;\n }\n\n this.length += s;\n }\n\n return this._strip();\n };\n\n BN.prototype.ishln = function ishln (bits) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushln(bits);\n };\n\n // Shift-right in-place\n // NOTE: `hint` is a lowest bit before trailing zeroes\n // NOTE: if `extended` is present - it will be filled with destroyed bits\n BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n assert(typeof bits === 'number' && bits >= 0);\n var h;\n if (hint) {\n h = (hint - (hint % 26)) / 26;\n } else {\n h = 0;\n }\n\n var r = bits % 26;\n var s = Math.min((bits - r) / 26, this.length);\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n var maskedWords = extended;\n\n h -= s;\n h = Math.max(0, h);\n\n // Extended mode, copy masked part\n if (maskedWords) {\n for (var i = 0; i < s; i++) {\n maskedWords.words[i] = this.words[i];\n }\n maskedWords.length = s;\n }\n\n if (s === 0) {\n // No-op, we should not move anything at all\n } else if (this.length > s) {\n this.length -= s;\n for (i = 0; i < this.length; i++) {\n this.words[i] = this.words[i + s];\n }\n } else {\n this.words[0] = 0;\n this.length = 1;\n }\n\n var carry = 0;\n for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n var word = this.words[i] | 0;\n this.words[i] = (carry << (26 - r)) | (word >>> r);\n carry = word & mask;\n }\n\n // Push carried bits as a mask\n if (maskedWords && carry !== 0) {\n maskedWords.words[maskedWords.length++] = carry;\n }\n\n if (this.length === 0) {\n this.words[0] = 0;\n this.length = 1;\n }\n\n return this._strip();\n };\n\n BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushrn(bits, hint, extended);\n };\n\n // Shift-left\n BN.prototype.shln = function shln (bits) {\n return this.clone().ishln(bits);\n };\n\n BN.prototype.ushln = function ushln (bits) {\n return this.clone().iushln(bits);\n };\n\n // Shift-right\n BN.prototype.shrn = function shrn (bits) {\n return this.clone().ishrn(bits);\n };\n\n BN.prototype.ushrn = function ushrn (bits) {\n return this.clone().iushrn(bits);\n };\n\n // Test if n bit is set\n BN.prototype.testn = function testn (bit) {\n assert(typeof bit === 'number' && bit >= 0);\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) return false;\n\n // Check bit and return\n var w = this.words[s];\n\n return !!(w & q);\n };\n\n // Return only lowers bits of number (in-place)\n BN.prototype.imaskn = function imaskn (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n\n assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n if (this.length <= s) {\n return this;\n }\n\n if (r !== 0) {\n s++;\n }\n this.length = Math.min(s, this.length);\n\n if (r !== 0) {\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n this.words[this.length - 1] &= mask;\n }\n\n return this._strip();\n };\n\n // Return only lowers bits of number\n BN.prototype.maskn = function maskn (bits) {\n return this.clone().imaskn(bits);\n };\n\n // Add plain number `num` to `this`\n BN.prototype.iaddn = function iaddn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.isubn(-num);\n\n // Possible sign change\n if (this.negative !== 0) {\n if (this.length === 1 && (this.words[0] | 0) <= num) {\n this.words[0] = num - (this.words[0] | 0);\n this.negative = 0;\n return this;\n }\n\n this.negative = 0;\n this.isubn(num);\n this.negative = 1;\n return this;\n }\n\n // Add without checks\n return this._iaddn(num);\n };\n\n BN.prototype._iaddn = function _iaddn (num) {\n this.words[0] += num;\n\n // Carry\n for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n this.words[i] -= 0x4000000;\n if (i === this.length - 1) {\n this.words[i + 1] = 1;\n } else {\n this.words[i + 1]++;\n }\n }\n this.length = Math.max(this.length, i + 1);\n\n return this;\n };\n\n // Subtract plain number `num` from `this`\n BN.prototype.isubn = function isubn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.iaddn(-num);\n\n if (this.negative !== 0) {\n this.negative = 0;\n this.iaddn(num);\n this.negative = 1;\n return this;\n }\n\n this.words[0] -= num;\n\n if (this.length === 1 && this.words[0] < 0) {\n this.words[0] = -this.words[0];\n this.negative = 1;\n } else {\n // Carry\n for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n this.words[i] += 0x4000000;\n this.words[i + 1] -= 1;\n }\n }\n\n return this._strip();\n };\n\n BN.prototype.addn = function addn (num) {\n return this.clone().iaddn(num);\n };\n\n BN.prototype.subn = function subn (num) {\n return this.clone().isubn(num);\n };\n\n BN.prototype.iabs = function iabs () {\n this.negative = 0;\n\n return this;\n };\n\n BN.prototype.abs = function abs () {\n return this.clone().iabs();\n };\n\n BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n var len = num.length + shift;\n var i;\n\n this._expand(len);\n\n var w;\n var carry = 0;\n for (i = 0; i < num.length; i++) {\n w = (this.words[i + shift] | 0) + carry;\n var right = (num.words[i] | 0) * mul;\n w -= right & 0x3ffffff;\n carry = (w >> 26) - ((right / 0x4000000) | 0);\n this.words[i + shift] = w & 0x3ffffff;\n }\n for (; i < this.length - shift; i++) {\n w = (this.words[i + shift] | 0) + carry;\n carry = w >> 26;\n this.words[i + shift] = w & 0x3ffffff;\n }\n\n if (carry === 0) return this._strip();\n\n // Subtraction overflow\n assert(carry === -1);\n carry = 0;\n for (i = 0; i < this.length; i++) {\n w = -(this.words[i] | 0) + carry;\n carry = w >> 26;\n this.words[i] = w & 0x3ffffff;\n }\n this.negative = 1;\n\n return this._strip();\n };\n\n BN.prototype._wordDiv = function _wordDiv (num, mode) {\n var shift = this.length - num.length;\n\n var a = this.clone();\n var b = num;\n\n // Normalize\n var bhi = b.words[b.length - 1] | 0;\n var bhiBits = this._countBits(bhi);\n shift = 26 - bhiBits;\n if (shift !== 0) {\n b = b.ushln(shift);\n a.iushln(shift);\n bhi = b.words[b.length - 1] | 0;\n }\n\n // Initialize quotient\n var m = a.length - b.length;\n var q;\n\n if (mode !== 'mod') {\n q = new BN(null);\n q.length = m + 1;\n q.words = new Array(q.length);\n for (var i = 0; i < q.length; i++) {\n q.words[i] = 0;\n }\n }\n\n var diff = a.clone()._ishlnsubmul(b, 1, m);\n if (diff.negative === 0) {\n a = diff;\n if (q) {\n q.words[m] = 1;\n }\n }\n\n for (var j = m - 1; j >= 0; j--) {\n var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n (a.words[b.length + j - 1] | 0);\n\n // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n // (0x7ffffff)\n qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n a._ishlnsubmul(b, qj, j);\n while (a.negative !== 0) {\n qj--;\n a.negative = 0;\n a._ishlnsubmul(b, 1, j);\n if (!a.isZero()) {\n a.negative ^= 1;\n }\n }\n if (q) {\n q.words[j] = qj;\n }\n }\n if (q) {\n q._strip();\n }\n a._strip();\n\n // Denormalize\n if (mode !== 'div' && shift !== 0) {\n a.iushrn(shift);\n }\n\n return {\n div: q || null,\n mod: a\n };\n };\n\n // NOTE: 1) `mode` can be set to `mod` to request mod only,\n // to `div` to request div only, or be absent to\n // request both div & mod\n // 2) `positive` is true if unsigned mod is requested\n BN.prototype.divmod = function divmod (num, mode, positive) {\n assert(!num.isZero());\n\n if (this.isZero()) {\n return {\n div: new BN(0),\n mod: new BN(0)\n };\n }\n\n var div, mod, res;\n if (this.negative !== 0 && num.negative === 0) {\n res = this.neg().divmod(num, mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.iadd(num);\n }\n }\n\n return {\n div: div,\n mod: mod\n };\n }\n\n if (this.negative === 0 && num.negative !== 0) {\n res = this.divmod(num.neg(), mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n return {\n div: div,\n mod: res.mod\n };\n }\n\n if ((this.negative & num.negative) !== 0) {\n res = this.neg().divmod(num.neg(), mode);\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.isub(num);\n }\n }\n\n return {\n div: res.div,\n mod: mod\n };\n }\n\n // Both numbers are positive at this point\n\n // Strip both numbers to approximate shift value\n if (num.length > this.length || this.cmp(num) < 0) {\n return {\n div: new BN(0),\n mod: this\n };\n }\n\n // Very short reduction\n if (num.length === 1) {\n if (mode === 'div') {\n return {\n div: this.divn(num.words[0]),\n mod: null\n };\n }\n\n if (mode === 'mod') {\n return {\n div: null,\n mod: new BN(this.modrn(num.words[0]))\n };\n }\n\n return {\n div: this.divn(num.words[0]),\n mod: new BN(this.modrn(num.words[0]))\n };\n }\n\n return this._wordDiv(num, mode);\n };\n\n // Find `this` / `num`\n BN.prototype.div = function div (num) {\n return this.divmod(num, 'div', false).div;\n };\n\n // Find `this` % `num`\n BN.prototype.mod = function mod (num) {\n return this.divmod(num, 'mod', false).mod;\n };\n\n BN.prototype.umod = function umod (num) {\n return this.divmod(num, 'mod', true).mod;\n };\n\n // Find Round(`this` / `num`)\n BN.prototype.divRound = function divRound (num) {\n var dm = this.divmod(num);\n\n // Fast case - exact division\n if (dm.mod.isZero()) return dm.div;\n\n var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n var half = num.ushrn(1);\n var r2 = num.andln(1);\n var cmp = mod.cmp(half);\n\n // Round down\n if (cmp < 0 || (r2 === 1 && cmp === 0)) return dm.div;\n\n // Round up\n return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n };\n\n BN.prototype.modrn = function modrn (num) {\n var isNegNum = num < 0;\n if (isNegNum) num = -num;\n\n assert(num <= 0x3ffffff);\n var p = (1 << 26) % num;\n\n var acc = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n acc = (p * acc + (this.words[i] | 0)) % num;\n }\n\n return isNegNum ? -acc : acc;\n };\n\n // WARNING: DEPRECATED\n BN.prototype.modn = function modn (num) {\n return this.modrn(num);\n };\n\n // In-place division by number\n BN.prototype.idivn = function idivn (num) {\n var isNegNum = num < 0;\n if (isNegNum) num = -num;\n\n assert(num <= 0x3ffffff);\n\n var carry = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var w = (this.words[i] | 0) + carry * 0x4000000;\n this.words[i] = (w / num) | 0;\n carry = w % num;\n }\n\n this._strip();\n return isNegNum ? this.ineg() : this;\n };\n\n BN.prototype.divn = function divn (num) {\n return this.clone().idivn(num);\n };\n\n BN.prototype.egcd = function egcd (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var x = this;\n var y = p.clone();\n\n if (x.negative !== 0) {\n x = x.umod(p);\n } else {\n x = x.clone();\n }\n\n // A * x + B * y = x\n var A = new BN(1);\n var B = new BN(0);\n\n // C * x + D * y = y\n var C = new BN(0);\n var D = new BN(1);\n\n var g = 0;\n\n while (x.isEven() && y.isEven()) {\n x.iushrn(1);\n y.iushrn(1);\n ++g;\n }\n\n var yp = y.clone();\n var xp = x.clone();\n\n while (!x.isZero()) {\n for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n x.iushrn(i);\n while (i-- > 0) {\n if (A.isOdd() || B.isOdd()) {\n A.iadd(yp);\n B.isub(xp);\n }\n\n A.iushrn(1);\n B.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n y.iushrn(j);\n while (j-- > 0) {\n if (C.isOdd() || D.isOdd()) {\n C.iadd(yp);\n D.isub(xp);\n }\n\n C.iushrn(1);\n D.iushrn(1);\n }\n }\n\n if (x.cmp(y) >= 0) {\n x.isub(y);\n A.isub(C);\n B.isub(D);\n } else {\n y.isub(x);\n C.isub(A);\n D.isub(B);\n }\n }\n\n return {\n a: C,\n b: D,\n gcd: y.iushln(g)\n };\n };\n\n // This is reduced incarnation of the binary EEA\n // above, designated to invert members of the\n // _prime_ fields F(p) at a maximal speed\n BN.prototype._invmp = function _invmp (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var a = this;\n var b = p.clone();\n\n if (a.negative !== 0) {\n a = a.umod(p);\n } else {\n a = a.clone();\n }\n\n var x1 = new BN(1);\n var x2 = new BN(0);\n\n var delta = b.clone();\n\n while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n a.iushrn(i);\n while (i-- > 0) {\n if (x1.isOdd()) {\n x1.iadd(delta);\n }\n\n x1.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n b.iushrn(j);\n while (j-- > 0) {\n if (x2.isOdd()) {\n x2.iadd(delta);\n }\n\n x2.iushrn(1);\n }\n }\n\n if (a.cmp(b) >= 0) {\n a.isub(b);\n x1.isub(x2);\n } else {\n b.isub(a);\n x2.isub(x1);\n }\n }\n\n var res;\n if (a.cmpn(1) === 0) {\n res = x1;\n } else {\n res = x2;\n }\n\n if (res.cmpn(0) < 0) {\n res.iadd(p);\n }\n\n return res;\n };\n\n BN.prototype.gcd = function gcd (num) {\n if (this.isZero()) return num.abs();\n if (num.isZero()) return this.abs();\n\n var a = this.clone();\n var b = num.clone();\n a.negative = 0;\n b.negative = 0;\n\n // Remove common factor of two\n for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n a.iushrn(1);\n b.iushrn(1);\n }\n\n do {\n while (a.isEven()) {\n a.iushrn(1);\n }\n while (b.isEven()) {\n b.iushrn(1);\n }\n\n var r = a.cmp(b);\n if (r < 0) {\n // Swap `a` and `b` to make `a` always bigger than `b`\n var t = a;\n a = b;\n b = t;\n } else if (r === 0 || b.cmpn(1) === 0) {\n break;\n }\n\n a.isub(b);\n } while (true);\n\n return b.iushln(shift);\n };\n\n // Invert number in the field F(num)\n BN.prototype.invm = function invm (num) {\n return this.egcd(num).a.umod(num);\n };\n\n BN.prototype.isEven = function isEven () {\n return (this.words[0] & 1) === 0;\n };\n\n BN.prototype.isOdd = function isOdd () {\n return (this.words[0] & 1) === 1;\n };\n\n // And first word and num\n BN.prototype.andln = function andln (num) {\n return this.words[0] & num;\n };\n\n // Increment at the bit position in-line\n BN.prototype.bincn = function bincn (bit) {\n assert(typeof bit === 'number');\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) {\n this._expand(s + 1);\n this.words[s] |= q;\n return this;\n }\n\n // Add bit and propagate, if needed\n var carry = q;\n for (var i = s; carry !== 0 && i < this.length; i++) {\n var w = this.words[i] | 0;\n w += carry;\n carry = w >>> 26;\n w &= 0x3ffffff;\n this.words[i] = w;\n }\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n return this;\n };\n\n BN.prototype.isZero = function isZero () {\n return this.length === 1 && this.words[0] === 0;\n };\n\n BN.prototype.cmpn = function cmpn (num) {\n var negative = num < 0;\n\n if (this.negative !== 0 && !negative) return -1;\n if (this.negative === 0 && negative) return 1;\n\n this._strip();\n\n var res;\n if (this.length > 1) {\n res = 1;\n } else {\n if (negative) {\n num = -num;\n }\n\n assert(num <= 0x3ffffff, 'Number is too big');\n\n var w = this.words[0] | 0;\n res = w === num ? 0 : w < num ? -1 : 1;\n }\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Compare two numbers and return:\n // 1 - if `this` > `num`\n // 0 - if `this` == `num`\n // -1 - if `this` < `num`\n BN.prototype.cmp = function cmp (num) {\n if (this.negative !== 0 && num.negative === 0) return -1;\n if (this.negative === 0 && num.negative !== 0) return 1;\n\n var res = this.ucmp(num);\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Unsigned comparison\n BN.prototype.ucmp = function ucmp (num) {\n // At this point both numbers have the same sign\n if (this.length > num.length) return 1;\n if (this.length < num.length) return -1;\n\n var res = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var a = this.words[i] | 0;\n var b = num.words[i] | 0;\n\n if (a === b) continue;\n if (a < b) {\n res = -1;\n } else if (a > b) {\n res = 1;\n }\n break;\n }\n return res;\n };\n\n BN.prototype.gtn = function gtn (num) {\n return this.cmpn(num) === 1;\n };\n\n BN.prototype.gt = function gt (num) {\n return this.cmp(num) === 1;\n };\n\n BN.prototype.gten = function gten (num) {\n return this.cmpn(num) >= 0;\n };\n\n BN.prototype.gte = function gte (num) {\n return this.cmp(num) >= 0;\n };\n\n BN.prototype.ltn = function ltn (num) {\n return this.cmpn(num) === -1;\n };\n\n BN.prototype.lt = function lt (num) {\n return this.cmp(num) === -1;\n };\n\n BN.prototype.lten = function lten (num) {\n return this.cmpn(num) <= 0;\n };\n\n BN.prototype.lte = function lte (num) {\n return this.cmp(num) <= 0;\n };\n\n BN.prototype.eqn = function eqn (num) {\n return this.cmpn(num) === 0;\n };\n\n BN.prototype.eq = function eq (num) {\n return this.cmp(num) === 0;\n };\n\n //\n // A reduce context, could be using montgomery or something better, depending\n // on the `m` itself.\n //\n BN.red = function red (num) {\n return new Red(num);\n };\n\n BN.prototype.toRed = function toRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n assert(this.negative === 0, 'red works only with positives');\n return ctx.convertTo(this)._forceRed(ctx);\n };\n\n BN.prototype.fromRed = function fromRed () {\n assert(this.red, 'fromRed works only with numbers in reduction context');\n return this.red.convertFrom(this);\n };\n\n BN.prototype._forceRed = function _forceRed (ctx) {\n this.red = ctx;\n return this;\n };\n\n BN.prototype.forceRed = function forceRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n return this._forceRed(ctx);\n };\n\n BN.prototype.redAdd = function redAdd (num) {\n assert(this.red, 'redAdd works only with red numbers');\n return this.red.add(this, num);\n };\n\n BN.prototype.redIAdd = function redIAdd (num) {\n assert(this.red, 'redIAdd works only with red numbers');\n return this.red.iadd(this, num);\n };\n\n BN.prototype.redSub = function redSub (num) {\n assert(this.red, 'redSub works only with red numbers');\n return this.red.sub(this, num);\n };\n\n BN.prototype.redISub = function redISub (num) {\n assert(this.red, 'redISub works only with red numbers');\n return this.red.isub(this, num);\n };\n\n BN.prototype.redShl = function redShl (num) {\n assert(this.red, 'redShl works only with red numbers');\n return this.red.shl(this, num);\n };\n\n BN.prototype.redMul = function redMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.mul(this, num);\n };\n\n BN.prototype.redIMul = function redIMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.imul(this, num);\n };\n\n BN.prototype.redSqr = function redSqr () {\n assert(this.red, 'redSqr works only with red numbers');\n this.red._verify1(this);\n return this.red.sqr(this);\n };\n\n BN.prototype.redISqr = function redISqr () {\n assert(this.red, 'redISqr works only with red numbers');\n this.red._verify1(this);\n return this.red.isqr(this);\n };\n\n // Square root over p\n BN.prototype.redSqrt = function redSqrt () {\n assert(this.red, 'redSqrt works only with red numbers');\n this.red._verify1(this);\n return this.red.sqrt(this);\n };\n\n BN.prototype.redInvm = function redInvm () {\n assert(this.red, 'redInvm works only with red numbers');\n this.red._verify1(this);\n return this.red.invm(this);\n };\n\n // Return negative clone of `this` % `red modulo`\n BN.prototype.redNeg = function redNeg () {\n assert(this.red, 'redNeg works only with red numbers');\n this.red._verify1(this);\n return this.red.neg(this);\n };\n\n BN.prototype.redPow = function redPow (num) {\n assert(this.red && !num.red, 'redPow(normalNum)');\n this.red._verify1(this);\n return this.red.pow(this, num);\n };\n\n // Prime numbers with efficient reduction\n var primes = {\n k256: null,\n p224: null,\n p192: null,\n p25519: null\n };\n\n // Pseudo-Mersenne prime\n function MPrime (name, p) {\n // P = 2 ^ N - K\n this.name = name;\n this.p = new BN(p, 16);\n this.n = this.p.bitLength();\n this.k = new BN(1).iushln(this.n).isub(this.p);\n\n this.tmp = this._tmp();\n }\n\n MPrime.prototype._tmp = function _tmp () {\n var tmp = new BN(null);\n tmp.words = new Array(Math.ceil(this.n / 13));\n return tmp;\n };\n\n MPrime.prototype.ireduce = function ireduce (num) {\n // Assumes that `num` is less than `P^2`\n // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n var r = num;\n var rlen;\n\n do {\n this.split(r, this.tmp);\n r = this.imulK(r);\n r = r.iadd(this.tmp);\n rlen = r.bitLength();\n } while (rlen > this.n);\n\n var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n if (cmp === 0) {\n r.words[0] = 0;\n r.length = 1;\n } else if (cmp > 0) {\n r.isub(this.p);\n } else {\n if (r.strip !== undefined) {\n // r is a BN v4 instance\n r.strip();\n } else {\n // r is a BN v5 instance\n r._strip();\n }\n }\n\n return r;\n };\n\n MPrime.prototype.split = function split (input, out) {\n input.iushrn(this.n, 0, out);\n };\n\n MPrime.prototype.imulK = function imulK (num) {\n return num.imul(this.k);\n };\n\n function K256 () {\n MPrime.call(\n this,\n 'k256',\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n }\n inherits(K256, MPrime);\n\n K256.prototype.split = function split (input, output) {\n // 256 = 9 * 26 + 22\n var mask = 0x3fffff;\n\n var outLen = Math.min(input.length, 9);\n for (var i = 0; i < outLen; i++) {\n output.words[i] = input.words[i];\n }\n output.length = outLen;\n\n if (input.length <= 9) {\n input.words[0] = 0;\n input.length = 1;\n return;\n }\n\n // Shift by 9 limbs\n var prev = input.words[9];\n output.words[output.length++] = prev & mask;\n\n for (i = 10; i < input.length; i++) {\n var next = input.words[i] | 0;\n input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n prev = next;\n }\n prev >>>= 22;\n input.words[i - 10] = prev;\n if (prev === 0 && input.length > 10) {\n input.length -= 10;\n } else {\n input.length -= 9;\n }\n };\n\n K256.prototype.imulK = function imulK (num) {\n // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n num.words[num.length] = 0;\n num.words[num.length + 1] = 0;\n num.length += 2;\n\n // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n var lo = 0;\n for (var i = 0; i < num.length; i++) {\n var w = num.words[i] | 0;\n lo += w * 0x3d1;\n num.words[i] = lo & 0x3ffffff;\n lo = w * 0x40 + ((lo / 0x4000000) | 0);\n }\n\n // Fast length reduction\n if (num.words[num.length - 1] === 0) {\n num.length--;\n if (num.words[num.length - 1] === 0) {\n num.length--;\n }\n }\n return num;\n };\n\n function P224 () {\n MPrime.call(\n this,\n 'p224',\n 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n }\n inherits(P224, MPrime);\n\n function P192 () {\n MPrime.call(\n this,\n 'p192',\n 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n }\n inherits(P192, MPrime);\n\n function P25519 () {\n // 2 ^ 255 - 19\n MPrime.call(\n this,\n '25519',\n '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n }\n inherits(P25519, MPrime);\n\n P25519.prototype.imulK = function imulK (num) {\n // K = 0x13\n var carry = 0;\n for (var i = 0; i < num.length; i++) {\n var hi = (num.words[i] | 0) * 0x13 + carry;\n var lo = hi & 0x3ffffff;\n hi >>>= 26;\n\n num.words[i] = lo;\n carry = hi;\n }\n if (carry !== 0) {\n num.words[num.length++] = carry;\n }\n return num;\n };\n\n // Exported mostly for testing purposes, use plain name instead\n BN._prime = function prime (name) {\n // Cached version of prime\n if (primes[name]) return primes[name];\n\n var prime;\n if (name === 'k256') {\n prime = new K256();\n } else if (name === 'p224') {\n prime = new P224();\n } else if (name === 'p192') {\n prime = new P192();\n } else if (name === 'p25519') {\n prime = new P25519();\n } else {\n throw new Error('Unknown prime ' + name);\n }\n primes[name] = prime;\n\n return prime;\n };\n\n //\n // Base reduction engine\n //\n function Red (m) {\n if (typeof m === 'string') {\n var prime = BN._prime(m);\n this.m = prime.p;\n this.prime = prime;\n } else {\n assert(m.gtn(1), 'modulus must be greater than 1');\n this.m = m;\n this.prime = null;\n }\n }\n\n Red.prototype._verify1 = function _verify1 (a) {\n assert(a.negative === 0, 'red works only with positives');\n assert(a.red, 'red works only with red numbers');\n };\n\n Red.prototype._verify2 = function _verify2 (a, b) {\n assert((a.negative | b.negative) === 0, 'red works only with positives');\n assert(a.red && a.red === b.red,\n 'red works only with red numbers');\n };\n\n Red.prototype.imod = function imod (a) {\n if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n\n move(a, a.umod(this.m)._forceRed(this));\n return a;\n };\n\n Red.prototype.neg = function neg (a) {\n if (a.isZero()) {\n return a.clone();\n }\n\n return this.m.sub(a)._forceRed(this);\n };\n\n Red.prototype.add = function add (a, b) {\n this._verify2(a, b);\n\n var res = a.add(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.iadd = function iadd (a, b) {\n this._verify2(a, b);\n\n var res = a.iadd(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res;\n };\n\n Red.prototype.sub = function sub (a, b) {\n this._verify2(a, b);\n\n var res = a.sub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.isub = function isub (a, b) {\n this._verify2(a, b);\n\n var res = a.isub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res;\n };\n\n Red.prototype.shl = function shl (a, num) {\n this._verify1(a);\n return this.imod(a.ushln(num));\n };\n\n Red.prototype.imul = function imul (a, b) {\n this._verify2(a, b);\n return this.imod(a.imul(b));\n };\n\n Red.prototype.mul = function mul (a, b) {\n this._verify2(a, b);\n return this.imod(a.mul(b));\n };\n\n Red.prototype.isqr = function isqr (a) {\n return this.imul(a, a.clone());\n };\n\n Red.prototype.sqr = function sqr (a) {\n return this.mul(a, a);\n };\n\n Red.prototype.sqrt = function sqrt (a) {\n if (a.isZero()) return a.clone();\n\n var mod3 = this.m.andln(3);\n assert(mod3 % 2 === 1);\n\n // Fast case\n if (mod3 === 3) {\n var pow = this.m.add(new BN(1)).iushrn(2);\n return this.pow(a, pow);\n }\n\n // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n //\n // Find Q and S, that Q * 2 ^ S = (P - 1)\n var q = this.m.subn(1);\n var s = 0;\n while (!q.isZero() && q.andln(1) === 0) {\n s++;\n q.iushrn(1);\n }\n assert(!q.isZero());\n\n var one = new BN(1).toRed(this);\n var nOne = one.redNeg();\n\n // Find quadratic non-residue\n // NOTE: Max is such because of generalized Riemann hypothesis.\n var lpow = this.m.subn(1).iushrn(1);\n var z = this.m.bitLength();\n z = new BN(2 * z * z).toRed(this);\n\n while (this.pow(z, lpow).cmp(nOne) !== 0) {\n z.redIAdd(nOne);\n }\n\n var c = this.pow(z, q);\n var r = this.pow(a, q.addn(1).iushrn(1));\n var t = this.pow(a, q);\n var m = s;\n while (t.cmp(one) !== 0) {\n var tmp = t;\n for (var i = 0; tmp.cmp(one) !== 0; i++) {\n tmp = tmp.redSqr();\n }\n assert(i < m);\n var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n r = r.redMul(b);\n c = b.redSqr();\n t = t.redMul(c);\n m = i;\n }\n\n return r;\n };\n\n Red.prototype.invm = function invm (a) {\n var inv = a._invmp(this.m);\n if (inv.negative !== 0) {\n inv.negative = 0;\n return this.imod(inv).redNeg();\n } else {\n return this.imod(inv);\n }\n };\n\n Red.prototype.pow = function pow (a, num) {\n if (num.isZero()) return new BN(1).toRed(this);\n if (num.cmpn(1) === 0) return a.clone();\n\n var windowSize = 4;\n var wnd = new Array(1 << windowSize);\n wnd[0] = new BN(1).toRed(this);\n wnd[1] = a;\n for (var i = 2; i < wnd.length; i++) {\n wnd[i] = this.mul(wnd[i - 1], a);\n }\n\n var res = wnd[0];\n var current = 0;\n var currentLen = 0;\n var start = num.bitLength() % 26;\n if (start === 0) {\n start = 26;\n }\n\n for (i = num.length - 1; i >= 0; i--) {\n var word = num.words[i];\n for (var j = start - 1; j >= 0; j--) {\n var bit = (word >> j) & 1;\n if (res !== wnd[0]) {\n res = this.sqr(res);\n }\n\n if (bit === 0 && current === 0) {\n currentLen = 0;\n continue;\n }\n\n current <<= 1;\n current |= bit;\n currentLen++;\n if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n res = this.mul(res, wnd[current]);\n currentLen = 0;\n current = 0;\n }\n start = 26;\n }\n\n return res;\n };\n\n Red.prototype.convertTo = function convertTo (num) {\n var r = num.umod(this.m);\n\n return r === num ? r.clone() : r;\n };\n\n Red.prototype.convertFrom = function convertFrom (num) {\n var res = num.clone();\n res.red = null;\n return res;\n };\n\n //\n // Montgomery method engine\n //\n\n BN.mont = function mont (num) {\n return new Mont(num);\n };\n\n function Mont (m) {\n Red.call(this, m);\n\n this.shift = this.m.bitLength();\n if (this.shift % 26 !== 0) {\n this.shift += 26 - (this.shift % 26);\n }\n\n this.r = new BN(1).iushln(this.shift);\n this.r2 = this.imod(this.r.sqr());\n this.rinv = this.r._invmp(this.m);\n\n this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n this.minv = this.minv.umod(this.r);\n this.minv = this.r.sub(this.minv);\n }\n inherits(Mont, Red);\n\n Mont.prototype.convertTo = function convertTo (num) {\n return this.imod(num.ushln(this.shift));\n };\n\n Mont.prototype.convertFrom = function convertFrom (num) {\n var r = this.imod(num.mul(this.rinv));\n r.red = null;\n return r;\n };\n\n Mont.prototype.imul = function imul (a, b) {\n if (a.isZero() || b.isZero()) {\n a.words[0] = 0;\n a.length = 1;\n return a;\n }\n\n var t = a.imul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.mul = function mul (a, b) {\n if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n var t = a.mul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.invm = function invm (a) {\n // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n var res = this.imod(a._invmp(this.m).mul(this.r2));\n return res._forceRed(this);\n };\n})(typeof module === 'undefined' || module, this);\n","'use strict';\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar codes = {};\n\nfunction createErrorType(code, message, Base) {\n if (!Base) {\n Base = Error;\n }\n\n function getMessage(arg1, arg2, arg3) {\n if (typeof message === 'string') {\n return message;\n } else {\n return message(arg1, arg2, arg3);\n }\n }\n\n var NodeError =\n /*#__PURE__*/\n function (_Base) {\n _inheritsLoose(NodeError, _Base);\n\n function NodeError(arg1, arg2, arg3) {\n return _Base.call(this, getMessage(arg1, arg2, arg3)) || this;\n }\n\n return NodeError;\n }(Base);\n\n NodeError.prototype.name = Base.name;\n NodeError.prototype.code = code;\n codes[code] = NodeError;\n} // https://github.com/nodejs/node/blob/v10.8.0/lib/internal/errors.js\n\n\nfunction oneOf(expected, thing) {\n if (Array.isArray(expected)) {\n var len = expected.length;\n expected = expected.map(function (i) {\n return String(i);\n });\n\n if (len > 2) {\n return \"one of \".concat(thing, \" \").concat(expected.slice(0, len - 1).join(', '), \", or \") + expected[len - 1];\n } else if (len === 2) {\n return \"one of \".concat(thing, \" \").concat(expected[0], \" or \").concat(expected[1]);\n } else {\n return \"of \".concat(thing, \" \").concat(expected[0]);\n }\n } else {\n return \"of \".concat(thing, \" \").concat(String(expected));\n }\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith\n\n\nfunction startsWith(str, search, pos) {\n return str.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith\n\n\nfunction endsWith(str, search, this_len) {\n if (this_len === undefined || this_len > str.length) {\n this_len = str.length;\n }\n\n return str.substring(this_len - search.length, this_len) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes\n\n\nfunction includes(str, search, start) {\n if (typeof start !== 'number') {\n start = 0;\n }\n\n if (start + search.length > str.length) {\n return false;\n } else {\n return str.indexOf(search, start) !== -1;\n }\n}\n\ncreateErrorType('ERR_INVALID_OPT_VALUE', function (name, value) {\n return 'The value \"' + value + '\" is invalid for option \"' + name + '\"';\n}, TypeError);\ncreateErrorType('ERR_INVALID_ARG_TYPE', function (name, expected, actual) {\n // determiner: 'must be' or 'must not be'\n var determiner;\n\n if (typeof expected === 'string' && startsWith(expected, 'not ')) {\n determiner = 'must not be';\n expected = expected.replace(/^not /, '');\n } else {\n determiner = 'must be';\n }\n\n var msg;\n\n if (endsWith(name, ' argument')) {\n // For cases like 'first argument'\n msg = \"The \".concat(name, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n } else {\n var type = includes(name, '.') ? 'property' : 'argument';\n msg = \"The \\\"\".concat(name, \"\\\" \").concat(type, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n }\n\n msg += \". Received type \".concat(typeof actual);\n return msg;\n}, TypeError);\ncreateErrorType('ERR_STREAM_PUSH_AFTER_EOF', 'stream.push() after EOF');\ncreateErrorType('ERR_METHOD_NOT_IMPLEMENTED', function (name) {\n return 'The ' + name + ' method is not implemented';\n});\ncreateErrorType('ERR_STREAM_PREMATURE_CLOSE', 'Premature close');\ncreateErrorType('ERR_STREAM_DESTROYED', function (name) {\n return 'Cannot call ' + name + ' after a stream was destroyed';\n});\ncreateErrorType('ERR_MULTIPLE_CALLBACK', 'Callback called multiple times');\ncreateErrorType('ERR_STREAM_CANNOT_PIPE', 'Cannot pipe, not readable');\ncreateErrorType('ERR_STREAM_WRITE_AFTER_END', 'write after end');\ncreateErrorType('ERR_STREAM_NULL_VALUES', 'May not write null values to stream', TypeError);\ncreateErrorType('ERR_UNKNOWN_ENCODING', function (arg) {\n return 'Unknown encoding: ' + arg;\n}, TypeError);\ncreateErrorType('ERR_STREAM_UNSHIFT_AFTER_END_EVENT', 'stream.unshift() after end event');\nmodule.exports.codes = codes;\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// a duplex stream is just a stream that is both readable and writable.\n// Since JS doesn't have multiple prototypal inheritance, this class\n// prototypally inherits from Readable, and then parasitically from\n// Writable.\n\n'use strict';\n\n/**/\nvar objectKeys = Object.keys || function (obj) {\n var keys = [];\n for (var key in obj) keys.push(key);\n return keys;\n};\n/**/\n\nmodule.exports = Duplex;\nvar Readable = require('./_stream_readable');\nvar Writable = require('./_stream_writable');\nrequire('inherits')(Duplex, Readable);\n{\n // Allow the keys array to be GC'ed.\n var keys = objectKeys(Writable.prototype);\n for (var v = 0; v < keys.length; v++) {\n var method = keys[v];\n if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];\n }\n}\nfunction Duplex(options) {\n if (!(this instanceof Duplex)) return new Duplex(options);\n Readable.call(this, options);\n Writable.call(this, options);\n this.allowHalfOpen = true;\n if (options) {\n if (options.readable === false) this.readable = false;\n if (options.writable === false) this.writable = false;\n if (options.allowHalfOpen === false) {\n this.allowHalfOpen = false;\n this.once('end', onend);\n }\n }\n}\nObject.defineProperty(Duplex.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.highWaterMark;\n }\n});\nObject.defineProperty(Duplex.prototype, 'writableBuffer', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState && this._writableState.getBuffer();\n }\n});\nObject.defineProperty(Duplex.prototype, 'writableLength', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.length;\n }\n});\n\n// the no-half-open enforcer\nfunction onend() {\n // If the writable side ended, then we're ok.\n if (this._writableState.ended) return;\n\n // no more data can be written.\n // But allow more writes to happen in this tick.\n process.nextTick(onEndNT, this);\n}\nfunction onEndNT(self) {\n self.end();\n}\nObject.defineProperty(Duplex.prototype, 'destroyed', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n if (this._readableState === undefined || this._writableState === undefined) {\n return false;\n }\n return this._readableState.destroyed && this._writableState.destroyed;\n },\n set: function set(value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (this._readableState === undefined || this._writableState === undefined) {\n return;\n }\n\n // backward compatibility, the user is explicitly\n // managing destroyed\n this._readableState.destroyed = value;\n this._writableState.destroyed = value;\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// a passthrough stream.\n// basically just the most minimal sort of Transform stream.\n// Every written chunk gets output as-is.\n\n'use strict';\n\nmodule.exports = PassThrough;\nvar Transform = require('./_stream_transform');\nrequire('inherits')(PassThrough, Transform);\nfunction PassThrough(options) {\n if (!(this instanceof PassThrough)) return new PassThrough(options);\n Transform.call(this, options);\n}\nPassThrough.prototype._transform = function (chunk, encoding, cb) {\n cb(null, chunk);\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\nmodule.exports = Readable;\n\n/**/\nvar Duplex;\n/**/\n\nReadable.ReadableState = ReadableState;\n\n/**/\nvar EE = require('events').EventEmitter;\nvar EElistenerCount = function EElistenerCount(emitter, type) {\n return emitter.listeners(type).length;\n};\n/**/\n\n/**/\nvar Stream = require('./internal/streams/stream');\n/**/\n\nvar Buffer = require('buffer').Buffer;\nvar OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\n/**/\nvar debugUtil = require('util');\nvar debug;\nif (debugUtil && debugUtil.debuglog) {\n debug = debugUtil.debuglog('stream');\n} else {\n debug = function debug() {};\n}\n/**/\n\nvar BufferList = require('./internal/streams/buffer_list');\nvar destroyImpl = require('./internal/streams/destroy');\nvar _require = require('./internal/streams/state'),\n getHighWaterMark = _require.getHighWaterMark;\nvar _require$codes = require('../errors').codes,\n ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n ERR_STREAM_PUSH_AFTER_EOF = _require$codes.ERR_STREAM_PUSH_AFTER_EOF,\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_STREAM_UNSHIFT_AFTER_END_EVENT = _require$codes.ERR_STREAM_UNSHIFT_AFTER_END_EVENT;\n\n// Lazy loaded to improve the startup performance.\nvar StringDecoder;\nvar createReadableStreamAsyncIterator;\nvar from;\nrequire('inherits')(Readable, Stream);\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\nvar kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];\nfunction prependListener(emitter, event, fn) {\n // Sadly this is not cacheable as some libraries bundle their own\n // event emitter implementation with them.\n if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn);\n\n // This is a hack to make sure that our error handler is attached before any\n // userland ones. NEVER DO THIS. This is here only because this code needs\n // to continue to work with older versions of Node.js that do not include\n // the prependListener() method. The goal is to eventually remove this hack.\n if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (Array.isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];\n}\nfunction ReadableState(options, stream, isDuplex) {\n Duplex = Duplex || require('./_stream_duplex');\n options = options || {};\n\n // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream.\n // These options can be provided separately as readableXXX and writableXXX.\n if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex;\n\n // object stream flag. Used to make read(n) ignore n and to\n // make all the buffer merging and length checks go away\n this.objectMode = !!options.objectMode;\n if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode;\n\n // the point at which it stops calling _read() to fill the buffer\n // Note: 0 is a valid value, means \"don't call _read preemptively ever\"\n this.highWaterMark = getHighWaterMark(this, options, 'readableHighWaterMark', isDuplex);\n\n // A linked list is used to store data chunks instead of an array because the\n // linked list can remove elements from the beginning faster than\n // array.shift()\n this.buffer = new BufferList();\n this.length = 0;\n this.pipes = null;\n this.pipesCount = 0;\n this.flowing = null;\n this.ended = false;\n this.endEmitted = false;\n this.reading = false;\n\n // a flag to be able to tell if the event 'readable'/'data' is emitted\n // immediately, or on a later tick. We set this to true at first, because\n // any actions that shouldn't happen until \"later\" should generally also\n // not happen before the first read call.\n this.sync = true;\n\n // whenever we return null, then we set a flag to say\n // that we're awaiting a 'readable' event emission.\n this.needReadable = false;\n this.emittedReadable = false;\n this.readableListening = false;\n this.resumeScheduled = false;\n this.paused = true;\n\n // Should close be emitted on destroy. Defaults to true.\n this.emitClose = options.emitClose !== false;\n\n // Should .destroy() be called after 'end' (and potentially 'finish')\n this.autoDestroy = !!options.autoDestroy;\n\n // has it been destroyed\n this.destroyed = false;\n\n // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n // the number of writers that are awaiting a drain event in .pipe()s\n this.awaitDrain = 0;\n\n // if true, a maybeReadMore has been scheduled\n this.readingMore = false;\n this.decoder = null;\n this.encoding = null;\n if (options.encoding) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n this.decoder = new StringDecoder(options.encoding);\n this.encoding = options.encoding;\n }\n}\nfunction Readable(options) {\n Duplex = Duplex || require('./_stream_duplex');\n if (!(this instanceof Readable)) return new Readable(options);\n\n // Checking for a Stream.Duplex instance is faster here instead of inside\n // the ReadableState constructor, at least with V8 6.5\n var isDuplex = this instanceof Duplex;\n this._readableState = new ReadableState(options, this, isDuplex);\n\n // legacy\n this.readable = true;\n if (options) {\n if (typeof options.read === 'function') this._read = options.read;\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n }\n Stream.call(this);\n}\nObject.defineProperty(Readable.prototype, 'destroyed', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n if (this._readableState === undefined) {\n return false;\n }\n return this._readableState.destroyed;\n },\n set: function set(value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._readableState) {\n return;\n }\n\n // backward compatibility, the user is explicitly\n // managing destroyed\n this._readableState.destroyed = value;\n }\n});\nReadable.prototype.destroy = destroyImpl.destroy;\nReadable.prototype._undestroy = destroyImpl.undestroy;\nReadable.prototype._destroy = function (err, cb) {\n cb(err);\n};\n\n// Manually shove something into the read() buffer.\n// This returns true if the highWaterMark has not been hit yet,\n// similar to how Writable.write() returns true if you should\n// write() some more.\nReadable.prototype.push = function (chunk, encoding) {\n var state = this._readableState;\n var skipChunkCheck;\n if (!state.objectMode) {\n if (typeof chunk === 'string') {\n encoding = encoding || state.defaultEncoding;\n if (encoding !== state.encoding) {\n chunk = Buffer.from(chunk, encoding);\n encoding = '';\n }\n skipChunkCheck = true;\n }\n } else {\n skipChunkCheck = true;\n }\n return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);\n};\n\n// Unshift should *always* be something directly out of read()\nReadable.prototype.unshift = function (chunk) {\n return readableAddChunk(this, chunk, null, true, false);\n};\nfunction readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {\n debug('readableAddChunk', chunk);\n var state = stream._readableState;\n if (chunk === null) {\n state.reading = false;\n onEofChunk(stream, state);\n } else {\n var er;\n if (!skipChunkCheck) er = chunkInvalid(state, chunk);\n if (er) {\n errorOrDestroy(stream, er);\n } else if (state.objectMode || chunk && chunk.length > 0) {\n if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n if (addToFront) {\n if (state.endEmitted) errorOrDestroy(stream, new ERR_STREAM_UNSHIFT_AFTER_END_EVENT());else addChunk(stream, state, chunk, true);\n } else if (state.ended) {\n errorOrDestroy(stream, new ERR_STREAM_PUSH_AFTER_EOF());\n } else if (state.destroyed) {\n return false;\n } else {\n state.reading = false;\n if (state.decoder && !encoding) {\n chunk = state.decoder.write(chunk);\n if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);\n } else {\n addChunk(stream, state, chunk, false);\n }\n }\n } else if (!addToFront) {\n state.reading = false;\n maybeReadMore(stream, state);\n }\n }\n\n // We can push more data if we are below the highWaterMark.\n // Also, if we have no data yet, we can stand some more bytes.\n // This is to work around cases where hwm=0, such as the repl.\n return !state.ended && (state.length < state.highWaterMark || state.length === 0);\n}\nfunction addChunk(stream, state, chunk, addToFront) {\n if (state.flowing && state.length === 0 && !state.sync) {\n state.awaitDrain = 0;\n stream.emit('data', chunk);\n } else {\n // update the buffer info.\n state.length += state.objectMode ? 1 : chunk.length;\n if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);\n if (state.needReadable) emitReadable(stream);\n }\n maybeReadMore(stream, state);\n}\nfunction chunkInvalid(state, chunk) {\n var er;\n if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer', 'Uint8Array'], chunk);\n }\n return er;\n}\nReadable.prototype.isPaused = function () {\n return this._readableState.flowing === false;\n};\n\n// backwards compatibility.\nReadable.prototype.setEncoding = function (enc) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n var decoder = new StringDecoder(enc);\n this._readableState.decoder = decoder;\n // If setEncoding(null), decoder.encoding equals utf8\n this._readableState.encoding = this._readableState.decoder.encoding;\n\n // Iterate over current buffer to convert already stored Buffers:\n var p = this._readableState.buffer.head;\n var content = '';\n while (p !== null) {\n content += decoder.write(p.data);\n p = p.next;\n }\n this._readableState.buffer.clear();\n if (content !== '') this._readableState.buffer.push(content);\n this._readableState.length = content.length;\n return this;\n};\n\n// Don't raise the hwm > 1GB\nvar MAX_HWM = 0x40000000;\nfunction computeNewHighWaterMark(n) {\n if (n >= MAX_HWM) {\n // TODO(ronag): Throw ERR_VALUE_OUT_OF_RANGE.\n n = MAX_HWM;\n } else {\n // Get the next highest power of 2 to prevent increasing hwm excessively in\n // tiny amounts\n n--;\n n |= n >>> 1;\n n |= n >>> 2;\n n |= n >>> 4;\n n |= n >>> 8;\n n |= n >>> 16;\n n++;\n }\n return n;\n}\n\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction howMuchToRead(n, state) {\n if (n <= 0 || state.length === 0 && state.ended) return 0;\n if (state.objectMode) return 1;\n if (n !== n) {\n // Only flow one buffer at a time\n if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;\n }\n // If we're asking for more than the current hwm, then raise the hwm.\n if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);\n if (n <= state.length) return n;\n // Don't have enough\n if (!state.ended) {\n state.needReadable = true;\n return 0;\n }\n return state.length;\n}\n\n// you can override either this method, or the async _read(n) below.\nReadable.prototype.read = function (n) {\n debug('read', n);\n n = parseInt(n, 10);\n var state = this._readableState;\n var nOrig = n;\n if (n !== 0) state.emittedReadable = false;\n\n // if we're doing read(0) to trigger a readable event, but we\n // already have a bunch of data in the buffer, then just trigger\n // the 'readable' event and move on.\n if (n === 0 && state.needReadable && ((state.highWaterMark !== 0 ? state.length >= state.highWaterMark : state.length > 0) || state.ended)) {\n debug('read: emitReadable', state.length, state.ended);\n if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);\n return null;\n }\n n = howMuchToRead(n, state);\n\n // if we've ended, and we're now clear, then finish it up.\n if (n === 0 && state.ended) {\n if (state.length === 0) endReadable(this);\n return null;\n }\n\n // All the actual chunk generation logic needs to be\n // *below* the call to _read. The reason is that in certain\n // synthetic stream cases, such as passthrough streams, _read\n // may be a completely synchronous operation which may change\n // the state of the read buffer, providing enough data when\n // before there was *not* enough.\n //\n // So, the steps are:\n // 1. Figure out what the state of things will be after we do\n // a read from the buffer.\n //\n // 2. If that resulting state will trigger a _read, then call _read.\n // Note that this may be asynchronous, or synchronous. Yes, it is\n // deeply ugly to write APIs this way, but that still doesn't mean\n // that the Readable class should behave improperly, as streams are\n // designed to be sync/async agnostic.\n // Take note if the _read call is sync or async (ie, if the read call\n // has returned yet), so that we know whether or not it's safe to emit\n // 'readable' etc.\n //\n // 3. Actually pull the requested chunks out of the buffer and return.\n\n // if we need a readable event, then we need to do some reading.\n var doRead = state.needReadable;\n debug('need readable', doRead);\n\n // if we currently have less than the highWaterMark, then also read some\n if (state.length === 0 || state.length - n < state.highWaterMark) {\n doRead = true;\n debug('length less than watermark', doRead);\n }\n\n // however, if we've ended, then there's no point, and if we're already\n // reading, then it's unnecessary.\n if (state.ended || state.reading) {\n doRead = false;\n debug('reading or ended', doRead);\n } else if (doRead) {\n debug('do read');\n state.reading = true;\n state.sync = true;\n // if the length is currently zero, then we *need* a readable event.\n if (state.length === 0) state.needReadable = true;\n // call internal read method\n this._read(state.highWaterMark);\n state.sync = false;\n // If _read pushed data synchronously, then `reading` will be false,\n // and we need to re-evaluate how much data we can return to the user.\n if (!state.reading) n = howMuchToRead(nOrig, state);\n }\n var ret;\n if (n > 0) ret = fromList(n, state);else ret = null;\n if (ret === null) {\n state.needReadable = state.length <= state.highWaterMark;\n n = 0;\n } else {\n state.length -= n;\n state.awaitDrain = 0;\n }\n if (state.length === 0) {\n // If we have nothing in the buffer, then we want to know\n // as soon as we *do* get something into the buffer.\n if (!state.ended) state.needReadable = true;\n\n // If we tried to read() past the EOF, then emit end on the next tick.\n if (nOrig !== n && state.ended) endReadable(this);\n }\n if (ret !== null) this.emit('data', ret);\n return ret;\n};\nfunction onEofChunk(stream, state) {\n debug('onEofChunk');\n if (state.ended) return;\n if (state.decoder) {\n var chunk = state.decoder.end();\n if (chunk && chunk.length) {\n state.buffer.push(chunk);\n state.length += state.objectMode ? 1 : chunk.length;\n }\n }\n state.ended = true;\n if (state.sync) {\n // if we are sync, wait until next tick to emit the data.\n // Otherwise we risk emitting data in the flow()\n // the readable code triggers during a read() call\n emitReadable(stream);\n } else {\n // emit 'readable' now to make sure it gets picked up.\n state.needReadable = false;\n if (!state.emittedReadable) {\n state.emittedReadable = true;\n emitReadable_(stream);\n }\n }\n}\n\n// Don't emit readable right away in sync mode, because this can trigger\n// another read() call => stack overflow. This way, it might trigger\n// a nextTick recursion warning, but that's not so bad.\nfunction emitReadable(stream) {\n var state = stream._readableState;\n debug('emitReadable', state.needReadable, state.emittedReadable);\n state.needReadable = false;\n if (!state.emittedReadable) {\n debug('emitReadable', state.flowing);\n state.emittedReadable = true;\n process.nextTick(emitReadable_, stream);\n }\n}\nfunction emitReadable_(stream) {\n var state = stream._readableState;\n debug('emitReadable_', state.destroyed, state.length, state.ended);\n if (!state.destroyed && (state.length || state.ended)) {\n stream.emit('readable');\n state.emittedReadable = false;\n }\n\n // The stream needs another readable event if\n // 1. It is not flowing, as the flow mechanism will take\n // care of it.\n // 2. It is not ended.\n // 3. It is below the highWaterMark, so we can schedule\n // another readable later.\n state.needReadable = !state.flowing && !state.ended && state.length <= state.highWaterMark;\n flow(stream);\n}\n\n// at this point, the user has presumably seen the 'readable' event,\n// and called read() to consume some data. that may have triggered\n// in turn another _read(n) call, in which case reading = true if\n// it's in progress.\n// However, if we're not ended, or reading, and the length < hwm,\n// then go ahead and try to read some more preemptively.\nfunction maybeReadMore(stream, state) {\n if (!state.readingMore) {\n state.readingMore = true;\n process.nextTick(maybeReadMore_, stream, state);\n }\n}\nfunction maybeReadMore_(stream, state) {\n // Attempt to read more data if we should.\n //\n // The conditions for reading more data are (one of):\n // - Not enough data buffered (state.length < state.highWaterMark). The loop\n // is responsible for filling the buffer with enough data if such data\n // is available. If highWaterMark is 0 and we are not in the flowing mode\n // we should _not_ attempt to buffer any extra data. We'll get more data\n // when the stream consumer calls read() instead.\n // - No data in the buffer, and the stream is in flowing mode. In this mode\n // the loop below is responsible for ensuring read() is called. Failing to\n // call read here would abort the flow and there's no other mechanism for\n // continuing the flow if the stream consumer has just subscribed to the\n // 'data' event.\n //\n // In addition to the above conditions to keep reading data, the following\n // conditions prevent the data from being read:\n // - The stream has ended (state.ended).\n // - There is already a pending 'read' operation (state.reading). This is a\n // case where the the stream has called the implementation defined _read()\n // method, but they are processing the call asynchronously and have _not_\n // called push() with new data. In this case we skip performing more\n // read()s. The execution ends in this method again after the _read() ends\n // up calling push() with more data.\n while (!state.reading && !state.ended && (state.length < state.highWaterMark || state.flowing && state.length === 0)) {\n var len = state.length;\n debug('maybeReadMore read 0');\n stream.read(0);\n if (len === state.length)\n // didn't get any data, stop spinning.\n break;\n }\n state.readingMore = false;\n}\n\n// abstract method. to be overridden in specific implementation classes.\n// call cb(er, data) where data is <= n in length.\n// for virtual (non-string, non-buffer) streams, \"length\" is somewhat\n// arbitrary, and perhaps not very meaningful.\nReadable.prototype._read = function (n) {\n errorOrDestroy(this, new ERR_METHOD_NOT_IMPLEMENTED('_read()'));\n};\nReadable.prototype.pipe = function (dest, pipeOpts) {\n var src = this;\n var state = this._readableState;\n switch (state.pipesCount) {\n case 0:\n state.pipes = dest;\n break;\n case 1:\n state.pipes = [state.pipes, dest];\n break;\n default:\n state.pipes.push(dest);\n break;\n }\n state.pipesCount += 1;\n debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);\n var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;\n var endFn = doEnd ? onend : unpipe;\n if (state.endEmitted) process.nextTick(endFn);else src.once('end', endFn);\n dest.on('unpipe', onunpipe);\n function onunpipe(readable, unpipeInfo) {\n debug('onunpipe');\n if (readable === src) {\n if (unpipeInfo && unpipeInfo.hasUnpiped === false) {\n unpipeInfo.hasUnpiped = true;\n cleanup();\n }\n }\n }\n function onend() {\n debug('onend');\n dest.end();\n }\n\n // when the dest drains, it reduces the awaitDrain counter\n // on the source. This would be more elegant with a .once()\n // handler in flow(), but adding and removing repeatedly is\n // too slow.\n var ondrain = pipeOnDrain(src);\n dest.on('drain', ondrain);\n var cleanedUp = false;\n function cleanup() {\n debug('cleanup');\n // cleanup event handlers once the pipe is broken\n dest.removeListener('close', onclose);\n dest.removeListener('finish', onfinish);\n dest.removeListener('drain', ondrain);\n dest.removeListener('error', onerror);\n dest.removeListener('unpipe', onunpipe);\n src.removeListener('end', onend);\n src.removeListener('end', unpipe);\n src.removeListener('data', ondata);\n cleanedUp = true;\n\n // if the reader is waiting for a drain event from this\n // specific writer, then it would cause it to never start\n // flowing again.\n // So, if this is awaiting a drain, then we just call it now.\n // If we don't know, then assume that we are waiting for one.\n if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();\n }\n src.on('data', ondata);\n function ondata(chunk) {\n debug('ondata');\n var ret = dest.write(chunk);\n debug('dest.write', ret);\n if (ret === false) {\n // If the user unpiped during `dest.write()`, it is possible\n // to get stuck in a permanently paused state if that write\n // also returned false.\n // => Check whether `dest` is still a piping destination.\n if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {\n debug('false write response, pause', state.awaitDrain);\n state.awaitDrain++;\n }\n src.pause();\n }\n }\n\n // if the dest has an error, then stop piping into it.\n // however, don't suppress the throwing behavior for this.\n function onerror(er) {\n debug('onerror', er);\n unpipe();\n dest.removeListener('error', onerror);\n if (EElistenerCount(dest, 'error') === 0) errorOrDestroy(dest, er);\n }\n\n // Make sure our error handler is attached before userland ones.\n prependListener(dest, 'error', onerror);\n\n // Both close and finish should trigger unpipe, but only once.\n function onclose() {\n dest.removeListener('finish', onfinish);\n unpipe();\n }\n dest.once('close', onclose);\n function onfinish() {\n debug('onfinish');\n dest.removeListener('close', onclose);\n unpipe();\n }\n dest.once('finish', onfinish);\n function unpipe() {\n debug('unpipe');\n src.unpipe(dest);\n }\n\n // tell the dest that it's being piped to\n dest.emit('pipe', src);\n\n // start the flow if it hasn't been started already.\n if (!state.flowing) {\n debug('pipe resume');\n src.resume();\n }\n return dest;\n};\nfunction pipeOnDrain(src) {\n return function pipeOnDrainFunctionResult() {\n var state = src._readableState;\n debug('pipeOnDrain', state.awaitDrain);\n if (state.awaitDrain) state.awaitDrain--;\n if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {\n state.flowing = true;\n flow(src);\n }\n };\n}\nReadable.prototype.unpipe = function (dest) {\n var state = this._readableState;\n var unpipeInfo = {\n hasUnpiped: false\n };\n\n // if we're not piping anywhere, then do nothing.\n if (state.pipesCount === 0) return this;\n\n // just one destination. most common case.\n if (state.pipesCount === 1) {\n // passed in one, but it's not the right one.\n if (dest && dest !== state.pipes) return this;\n if (!dest) dest = state.pipes;\n\n // got a match.\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n if (dest) dest.emit('unpipe', this, unpipeInfo);\n return this;\n }\n\n // slow case. multiple pipe destinations.\n\n if (!dest) {\n // remove all.\n var dests = state.pipes;\n var len = state.pipesCount;\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n for (var i = 0; i < len; i++) dests[i].emit('unpipe', this, {\n hasUnpiped: false\n });\n return this;\n }\n\n // try to find the right one.\n var index = indexOf(state.pipes, dest);\n if (index === -1) return this;\n state.pipes.splice(index, 1);\n state.pipesCount -= 1;\n if (state.pipesCount === 1) state.pipes = state.pipes[0];\n dest.emit('unpipe', this, unpipeInfo);\n return this;\n};\n\n// set up data events if they are asked for\n// Ensure readable listeners eventually get something\nReadable.prototype.on = function (ev, fn) {\n var res = Stream.prototype.on.call(this, ev, fn);\n var state = this._readableState;\n if (ev === 'data') {\n // update readableListening so that resume() may be a no-op\n // a few lines down. This is needed to support once('readable').\n state.readableListening = this.listenerCount('readable') > 0;\n\n // Try start flowing on next tick if stream isn't explicitly paused\n if (state.flowing !== false) this.resume();\n } else if (ev === 'readable') {\n if (!state.endEmitted && !state.readableListening) {\n state.readableListening = state.needReadable = true;\n state.flowing = false;\n state.emittedReadable = false;\n debug('on readable', state.length, state.reading);\n if (state.length) {\n emitReadable(this);\n } else if (!state.reading) {\n process.nextTick(nReadingNextTick, this);\n }\n }\n }\n return res;\n};\nReadable.prototype.addListener = Readable.prototype.on;\nReadable.prototype.removeListener = function (ev, fn) {\n var res = Stream.prototype.removeListener.call(this, ev, fn);\n if (ev === 'readable') {\n // We need to check if there is someone still listening to\n // readable and reset the state. However this needs to happen\n // after readable has been emitted but before I/O (nextTick) to\n // support once('readable', fn) cycles. This means that calling\n // resume within the same tick will have no\n // effect.\n process.nextTick(updateReadableListening, this);\n }\n return res;\n};\nReadable.prototype.removeAllListeners = function (ev) {\n var res = Stream.prototype.removeAllListeners.apply(this, arguments);\n if (ev === 'readable' || ev === undefined) {\n // We need to check if there is someone still listening to\n // readable and reset the state. However this needs to happen\n // after readable has been emitted but before I/O (nextTick) to\n // support once('readable', fn) cycles. This means that calling\n // resume within the same tick will have no\n // effect.\n process.nextTick(updateReadableListening, this);\n }\n return res;\n};\nfunction updateReadableListening(self) {\n var state = self._readableState;\n state.readableListening = self.listenerCount('readable') > 0;\n if (state.resumeScheduled && !state.paused) {\n // flowing needs to be set to true now, otherwise\n // the upcoming resume will not flow.\n state.flowing = true;\n\n // crude way to check if we should resume\n } else if (self.listenerCount('data') > 0) {\n self.resume();\n }\n}\nfunction nReadingNextTick(self) {\n debug('readable nexttick read 0');\n self.read(0);\n}\n\n// pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\nReadable.prototype.resume = function () {\n var state = this._readableState;\n if (!state.flowing) {\n debug('resume');\n // we flow only if there is no one listening\n // for readable, but we still have to call\n // resume()\n state.flowing = !state.readableListening;\n resume(this, state);\n }\n state.paused = false;\n return this;\n};\nfunction resume(stream, state) {\n if (!state.resumeScheduled) {\n state.resumeScheduled = true;\n process.nextTick(resume_, stream, state);\n }\n}\nfunction resume_(stream, state) {\n debug('resume', state.reading);\n if (!state.reading) {\n stream.read(0);\n }\n state.resumeScheduled = false;\n stream.emit('resume');\n flow(stream);\n if (state.flowing && !state.reading) stream.read(0);\n}\nReadable.prototype.pause = function () {\n debug('call pause flowing=%j', this._readableState.flowing);\n if (this._readableState.flowing !== false) {\n debug('pause');\n this._readableState.flowing = false;\n this.emit('pause');\n }\n this._readableState.paused = true;\n return this;\n};\nfunction flow(stream) {\n var state = stream._readableState;\n debug('flow', state.flowing);\n while (state.flowing && stream.read() !== null);\n}\n\n// wrap an old-style stream as the async data source.\n// This is *not* part of the readable stream interface.\n// It is an ugly unfortunate mess of history.\nReadable.prototype.wrap = function (stream) {\n var _this = this;\n var state = this._readableState;\n var paused = false;\n stream.on('end', function () {\n debug('wrapped end');\n if (state.decoder && !state.ended) {\n var chunk = state.decoder.end();\n if (chunk && chunk.length) _this.push(chunk);\n }\n _this.push(null);\n });\n stream.on('data', function (chunk) {\n debug('wrapped data');\n if (state.decoder) chunk = state.decoder.write(chunk);\n\n // don't skip over falsy values in objectMode\n if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;\n var ret = _this.push(chunk);\n if (!ret) {\n paused = true;\n stream.pause();\n }\n });\n\n // proxy all the other methods.\n // important when wrapping filters and duplexes.\n for (var i in stream) {\n if (this[i] === undefined && typeof stream[i] === 'function') {\n this[i] = function methodWrap(method) {\n return function methodWrapReturnFunction() {\n return stream[method].apply(stream, arguments);\n };\n }(i);\n }\n }\n\n // proxy certain important events.\n for (var n = 0; n < kProxyEvents.length; n++) {\n stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));\n }\n\n // when we try to consume some more bytes, simply unpause the\n // underlying stream.\n this._read = function (n) {\n debug('wrapped _read', n);\n if (paused) {\n paused = false;\n stream.resume();\n }\n };\n return this;\n};\nif (typeof Symbol === 'function') {\n Readable.prototype[Symbol.asyncIterator] = function () {\n if (createReadableStreamAsyncIterator === undefined) {\n createReadableStreamAsyncIterator = require('./internal/streams/async_iterator');\n }\n return createReadableStreamAsyncIterator(this);\n };\n}\nObject.defineProperty(Readable.prototype, 'readableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState.highWaterMark;\n }\n});\nObject.defineProperty(Readable.prototype, 'readableBuffer', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState && this._readableState.buffer;\n }\n});\nObject.defineProperty(Readable.prototype, 'readableFlowing', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState.flowing;\n },\n set: function set(state) {\n if (this._readableState) {\n this._readableState.flowing = state;\n }\n }\n});\n\n// exposed for testing purposes only.\nReadable._fromList = fromList;\nObject.defineProperty(Readable.prototype, 'readableLength', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState.length;\n }\n});\n\n// Pluck off n bytes from an array of buffers.\n// Length is the combined lengths of all the buffers in the list.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromList(n, state) {\n // nothing buffered\n if (state.length === 0) return null;\n var ret;\n if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {\n // read it all, truncate the list\n if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.first();else ret = state.buffer.concat(state.length);\n state.buffer.clear();\n } else {\n // read part of list\n ret = state.buffer.consume(n, state.decoder);\n }\n return ret;\n}\nfunction endReadable(stream) {\n var state = stream._readableState;\n debug('endReadable', state.endEmitted);\n if (!state.endEmitted) {\n state.ended = true;\n process.nextTick(endReadableNT, state, stream);\n }\n}\nfunction endReadableNT(state, stream) {\n debug('endReadableNT', state.endEmitted, state.length);\n\n // Check that we didn't get one last unshift.\n if (!state.endEmitted && state.length === 0) {\n state.endEmitted = true;\n stream.readable = false;\n stream.emit('end');\n if (state.autoDestroy) {\n // In case of duplex streams we need a way to detect\n // if the writable side is ready for autoDestroy as well\n var wState = stream._writableState;\n if (!wState || wState.autoDestroy && wState.finished) {\n stream.destroy();\n }\n }\n }\n}\nif (typeof Symbol === 'function') {\n Readable.from = function (iterable, opts) {\n if (from === undefined) {\n from = require('./internal/streams/from');\n }\n return from(Readable, iterable, opts);\n };\n}\nfunction indexOf(xs, x) {\n for (var i = 0, l = xs.length; i < l; i++) {\n if (xs[i] === x) return i;\n }\n return -1;\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// a transform stream is a readable/writable stream where you do\n// something with the data. Sometimes it's called a \"filter\",\n// but that's not a great name for it, since that implies a thing where\n// some bits pass through, and others are simply ignored. (That would\n// be a valid example of a transform, of course.)\n//\n// While the output is causally related to the input, it's not a\n// necessarily symmetric or synchronous transformation. For example,\n// a zlib stream might take multiple plain-text writes(), and then\n// emit a single compressed chunk some time in the future.\n//\n// Here's how this works:\n//\n// The Transform stream has all the aspects of the readable and writable\n// stream classes. When you write(chunk), that calls _write(chunk,cb)\n// internally, and returns false if there's a lot of pending writes\n// buffered up. When you call read(), that calls _read(n) until\n// there's enough pending readable data buffered up.\n//\n// In a transform stream, the written data is placed in a buffer. When\n// _read(n) is called, it transforms the queued up data, calling the\n// buffered _write cb's as it consumes chunks. If consuming a single\n// written chunk would result in multiple output chunks, then the first\n// outputted bit calls the readcb, and subsequent chunks just go into\n// the read buffer, and will cause it to emit 'readable' if necessary.\n//\n// This way, back-pressure is actually determined by the reading side,\n// since _read has to be called to start processing a new chunk. However,\n// a pathological inflate type of transform can cause excessive buffering\n// here. For example, imagine a stream where every byte of input is\n// interpreted as an integer from 0-255, and then results in that many\n// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in\n// 1kb of data being output. In this case, you could write a very small\n// amount of input, and end up with a very large amount of output. In\n// such a pathological inflating mechanism, there'd be no way to tell\n// the system to stop doing the transform. A single 4MB write could\n// cause the system to run out of memory.\n//\n// However, even in such a pathological case, only a single written chunk\n// would be consumed, and then the rest would wait (un-transformed) until\n// the results of the previous transformed chunk were consumed.\n\n'use strict';\n\nmodule.exports = Transform;\nvar _require$codes = require('../errors').codes,\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,\n ERR_TRANSFORM_ALREADY_TRANSFORMING = _require$codes.ERR_TRANSFORM_ALREADY_TRANSFORMING,\n ERR_TRANSFORM_WITH_LENGTH_0 = _require$codes.ERR_TRANSFORM_WITH_LENGTH_0;\nvar Duplex = require('./_stream_duplex');\nrequire('inherits')(Transform, Duplex);\nfunction afterTransform(er, data) {\n var ts = this._transformState;\n ts.transforming = false;\n var cb = ts.writecb;\n if (cb === null) {\n return this.emit('error', new ERR_MULTIPLE_CALLBACK());\n }\n ts.writechunk = null;\n ts.writecb = null;\n if (data != null)\n // single equals check for both `null` and `undefined`\n this.push(data);\n cb(er);\n var rs = this._readableState;\n rs.reading = false;\n if (rs.needReadable || rs.length < rs.highWaterMark) {\n this._read(rs.highWaterMark);\n }\n}\nfunction Transform(options) {\n if (!(this instanceof Transform)) return new Transform(options);\n Duplex.call(this, options);\n this._transformState = {\n afterTransform: afterTransform.bind(this),\n needTransform: false,\n transforming: false,\n writecb: null,\n writechunk: null,\n writeencoding: null\n };\n\n // start out asking for a readable event once data is transformed.\n this._readableState.needReadable = true;\n\n // we have implemented the _read method, and done the other things\n // that Readable wants before the first _read call, so unset the\n // sync guard flag.\n this._readableState.sync = false;\n if (options) {\n if (typeof options.transform === 'function') this._transform = options.transform;\n if (typeof options.flush === 'function') this._flush = options.flush;\n }\n\n // When the writable side finishes, then flush out anything remaining.\n this.on('prefinish', prefinish);\n}\nfunction prefinish() {\n var _this = this;\n if (typeof this._flush === 'function' && !this._readableState.destroyed) {\n this._flush(function (er, data) {\n done(_this, er, data);\n });\n } else {\n done(this, null, null);\n }\n}\nTransform.prototype.push = function (chunk, encoding) {\n this._transformState.needTransform = false;\n return Duplex.prototype.push.call(this, chunk, encoding);\n};\n\n// This is the part where you do stuff!\n// override this function in implementation classes.\n// 'chunk' is an input chunk.\n//\n// Call `push(newChunk)` to pass along transformed output\n// to the readable side. You may call 'push' zero or more times.\n//\n// Call `cb(err)` when you are done with this chunk. If you pass\n// an error, then that'll put the hurt on the whole operation. If you\n// never call cb(), then you'll never get another chunk.\nTransform.prototype._transform = function (chunk, encoding, cb) {\n cb(new ERR_METHOD_NOT_IMPLEMENTED('_transform()'));\n};\nTransform.prototype._write = function (chunk, encoding, cb) {\n var ts = this._transformState;\n ts.writecb = cb;\n ts.writechunk = chunk;\n ts.writeencoding = encoding;\n if (!ts.transforming) {\n var rs = this._readableState;\n if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);\n }\n};\n\n// Doesn't matter what the args are here.\n// _transform does all the work.\n// That we got here means that the readable side wants more data.\nTransform.prototype._read = function (n) {\n var ts = this._transformState;\n if (ts.writechunk !== null && !ts.transforming) {\n ts.transforming = true;\n this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);\n } else {\n // mark that we need a transform, so that any data that comes in\n // will get processed, now that we've asked for it.\n ts.needTransform = true;\n }\n};\nTransform.prototype._destroy = function (err, cb) {\n Duplex.prototype._destroy.call(this, err, function (err2) {\n cb(err2);\n });\n};\nfunction done(stream, er, data) {\n if (er) return stream.emit('error', er);\n if (data != null)\n // single equals check for both `null` and `undefined`\n stream.push(data);\n\n // TODO(BridgeAR): Write a test for these two error cases\n // if there's nothing in the write buffer, then that means\n // that nothing more will ever be provided\n if (stream._writableState.length) throw new ERR_TRANSFORM_WITH_LENGTH_0();\n if (stream._transformState.transforming) throw new ERR_TRANSFORM_ALREADY_TRANSFORMING();\n return stream.push(null);\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// A bit simpler than readable streams.\n// Implement an async ._write(chunk, encoding, cb), and it'll handle all\n// the drain event emission and buffering.\n\n'use strict';\n\nmodule.exports = Writable;\n\n/* */\nfunction WriteReq(chunk, encoding, cb) {\n this.chunk = chunk;\n this.encoding = encoding;\n this.callback = cb;\n this.next = null;\n}\n\n// It seems a linked list but it is not\n// there will be only 2 of these for each stream\nfunction CorkedRequest(state) {\n var _this = this;\n this.next = null;\n this.entry = null;\n this.finish = function () {\n onCorkedFinish(_this, state);\n };\n}\n/* */\n\n/**/\nvar Duplex;\n/**/\n\nWritable.WritableState = WritableState;\n\n/**/\nvar internalUtil = {\n deprecate: require('util-deprecate')\n};\n/**/\n\n/**/\nvar Stream = require('./internal/streams/stream');\n/**/\n\nvar Buffer = require('buffer').Buffer;\nvar OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\nvar destroyImpl = require('./internal/streams/destroy');\nvar _require = require('./internal/streams/state'),\n getHighWaterMark = _require.getHighWaterMark;\nvar _require$codes = require('../errors').codes,\n ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,\n ERR_STREAM_CANNOT_PIPE = _require$codes.ERR_STREAM_CANNOT_PIPE,\n ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED,\n ERR_STREAM_NULL_VALUES = _require$codes.ERR_STREAM_NULL_VALUES,\n ERR_STREAM_WRITE_AFTER_END = _require$codes.ERR_STREAM_WRITE_AFTER_END,\n ERR_UNKNOWN_ENCODING = _require$codes.ERR_UNKNOWN_ENCODING;\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\nrequire('inherits')(Writable, Stream);\nfunction nop() {}\nfunction WritableState(options, stream, isDuplex) {\n Duplex = Duplex || require('./_stream_duplex');\n options = options || {};\n\n // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream,\n // e.g. options.readableObjectMode vs. options.writableObjectMode, etc.\n if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex;\n\n // object stream flag to indicate whether or not this stream\n // contains buffers or objects.\n this.objectMode = !!options.objectMode;\n if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode;\n\n // the point at which write() starts returning false\n // Note: 0 is a valid value, means that we always return false if\n // the entire buffer is not flushed immediately on write()\n this.highWaterMark = getHighWaterMark(this, options, 'writableHighWaterMark', isDuplex);\n\n // if _final has been called\n this.finalCalled = false;\n\n // drain event flag.\n this.needDrain = false;\n // at the start of calling end()\n this.ending = false;\n // when end() has been called, and returned\n this.ended = false;\n // when 'finish' is emitted\n this.finished = false;\n\n // has it been destroyed\n this.destroyed = false;\n\n // should we decode strings into buffers before passing to _write?\n // this is here so that some node-core streams can optimize string\n // handling at a lower level.\n var noDecode = options.decodeStrings === false;\n this.decodeStrings = !noDecode;\n\n // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n // not an actual buffer we keep track of, but a measurement\n // of how much we're waiting to get pushed to some underlying\n // socket or file.\n this.length = 0;\n\n // a flag to see when we're in the middle of a write.\n this.writing = false;\n\n // when true all writes will be buffered until .uncork() call\n this.corked = 0;\n\n // a flag to be able to tell if the onwrite cb is called immediately,\n // or on a later tick. We set this to true at first, because any\n // actions that shouldn't happen until \"later\" should generally also\n // not happen before the first write call.\n this.sync = true;\n\n // a flag to know if we're processing previously buffered items, which\n // may call the _write() callback in the same tick, so that we don't\n // end up in an overlapped onwrite situation.\n this.bufferProcessing = false;\n\n // the callback that's passed to _write(chunk,cb)\n this.onwrite = function (er) {\n onwrite(stream, er);\n };\n\n // the callback that the user supplies to write(chunk,encoding,cb)\n this.writecb = null;\n\n // the amount that is being written when _write is called.\n this.writelen = 0;\n this.bufferedRequest = null;\n this.lastBufferedRequest = null;\n\n // number of pending user-supplied write callbacks\n // this must be 0 before 'finish' can be emitted\n this.pendingcb = 0;\n\n // emit prefinish if the only thing we're waiting for is _write cbs\n // This is relevant for synchronous Transform streams\n this.prefinished = false;\n\n // True if the error was already emitted and should not be thrown again\n this.errorEmitted = false;\n\n // Should close be emitted on destroy. Defaults to true.\n this.emitClose = options.emitClose !== false;\n\n // Should .destroy() be called after 'finish' (and potentially 'end')\n this.autoDestroy = !!options.autoDestroy;\n\n // count buffered requests\n this.bufferedRequestCount = 0;\n\n // allocate the first CorkedRequest, there is always\n // one allocated and free to use, and we maintain at most two\n this.corkedRequestsFree = new CorkedRequest(this);\n}\nWritableState.prototype.getBuffer = function getBuffer() {\n var current = this.bufferedRequest;\n var out = [];\n while (current) {\n out.push(current);\n current = current.next;\n }\n return out;\n};\n(function () {\n try {\n Object.defineProperty(WritableState.prototype, 'buffer', {\n get: internalUtil.deprecate(function writableStateBufferGetter() {\n return this.getBuffer();\n }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')\n });\n } catch (_) {}\n})();\n\n// Test _writableState for inheritance to account for Duplex streams,\n// whose prototype chain only points to Readable.\nvar realHasInstance;\nif (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {\n realHasInstance = Function.prototype[Symbol.hasInstance];\n Object.defineProperty(Writable, Symbol.hasInstance, {\n value: function value(object) {\n if (realHasInstance.call(this, object)) return true;\n if (this !== Writable) return false;\n return object && object._writableState instanceof WritableState;\n }\n });\n} else {\n realHasInstance = function realHasInstance(object) {\n return object instanceof this;\n };\n}\nfunction Writable(options) {\n Duplex = Duplex || require('./_stream_duplex');\n\n // Writable ctor is applied to Duplexes, too.\n // `realHasInstance` is necessary because using plain `instanceof`\n // would return false, as no `_writableState` property is attached.\n\n // Trying to use the custom `instanceof` for Writable here will also break the\n // Node.js LazyTransform implementation, which has a non-trivial getter for\n // `_writableState` that would lead to infinite recursion.\n\n // Checking for a Stream.Duplex instance is faster here instead of inside\n // the WritableState constructor, at least with V8 6.5\n var isDuplex = this instanceof Duplex;\n if (!isDuplex && !realHasInstance.call(Writable, this)) return new Writable(options);\n this._writableState = new WritableState(options, this, isDuplex);\n\n // legacy.\n this.writable = true;\n if (options) {\n if (typeof options.write === 'function') this._write = options.write;\n if (typeof options.writev === 'function') this._writev = options.writev;\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n if (typeof options.final === 'function') this._final = options.final;\n }\n Stream.call(this);\n}\n\n// Otherwise people can pipe Writable streams, which is just wrong.\nWritable.prototype.pipe = function () {\n errorOrDestroy(this, new ERR_STREAM_CANNOT_PIPE());\n};\nfunction writeAfterEnd(stream, cb) {\n var er = new ERR_STREAM_WRITE_AFTER_END();\n // TODO: defer error events consistently everywhere, not just the cb\n errorOrDestroy(stream, er);\n process.nextTick(cb, er);\n}\n\n// Checks that a user-supplied chunk is valid, especially for the particular\n// mode the stream is in. Currently this means that `null` is never accepted\n// and undefined/non-string values are only allowed in object mode.\nfunction validChunk(stream, state, chunk, cb) {\n var er;\n if (chunk === null) {\n er = new ERR_STREAM_NULL_VALUES();\n } else if (typeof chunk !== 'string' && !state.objectMode) {\n er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer'], chunk);\n }\n if (er) {\n errorOrDestroy(stream, er);\n process.nextTick(cb, er);\n return false;\n }\n return true;\n}\nWritable.prototype.write = function (chunk, encoding, cb) {\n var state = this._writableState;\n var ret = false;\n var isBuf = !state.objectMode && _isUint8Array(chunk);\n if (isBuf && !Buffer.isBuffer(chunk)) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;\n if (typeof cb !== 'function') cb = nop;\n if (state.ending) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {\n state.pendingcb++;\n ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);\n }\n return ret;\n};\nWritable.prototype.cork = function () {\n this._writableState.corked++;\n};\nWritable.prototype.uncork = function () {\n var state = this._writableState;\n if (state.corked) {\n state.corked--;\n if (!state.writing && !state.corked && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);\n }\n};\nWritable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {\n // node::ParseEncoding() requires lower case.\n if (typeof encoding === 'string') encoding = encoding.toLowerCase();\n if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new ERR_UNKNOWN_ENCODING(encoding);\n this._writableState.defaultEncoding = encoding;\n return this;\n};\nObject.defineProperty(Writable.prototype, 'writableBuffer', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState && this._writableState.getBuffer();\n }\n});\nfunction decodeChunk(state, chunk, encoding) {\n if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {\n chunk = Buffer.from(chunk, encoding);\n }\n return chunk;\n}\nObject.defineProperty(Writable.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.highWaterMark;\n }\n});\n\n// if we're already writing something, then just put this\n// in the queue, and wait our turn. Otherwise, call _write\n// If we return false, then we need a drain event, so set that flag.\nfunction writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {\n if (!isBuf) {\n var newChunk = decodeChunk(state, chunk, encoding);\n if (chunk !== newChunk) {\n isBuf = true;\n encoding = 'buffer';\n chunk = newChunk;\n }\n }\n var len = state.objectMode ? 1 : chunk.length;\n state.length += len;\n var ret = state.length < state.highWaterMark;\n // we must ensure that previous needDrain will not be reset to false.\n if (!ret) state.needDrain = true;\n if (state.writing || state.corked) {\n var last = state.lastBufferedRequest;\n state.lastBufferedRequest = {\n chunk: chunk,\n encoding: encoding,\n isBuf: isBuf,\n callback: cb,\n next: null\n };\n if (last) {\n last.next = state.lastBufferedRequest;\n } else {\n state.bufferedRequest = state.lastBufferedRequest;\n }\n state.bufferedRequestCount += 1;\n } else {\n doWrite(stream, state, false, len, chunk, encoding, cb);\n }\n return ret;\n}\nfunction doWrite(stream, state, writev, len, chunk, encoding, cb) {\n state.writelen = len;\n state.writecb = cb;\n state.writing = true;\n state.sync = true;\n if (state.destroyed) state.onwrite(new ERR_STREAM_DESTROYED('write'));else if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);\n state.sync = false;\n}\nfunction onwriteError(stream, state, sync, er, cb) {\n --state.pendingcb;\n if (sync) {\n // defer the callback if we are being called synchronously\n // to avoid piling up things on the stack\n process.nextTick(cb, er);\n // this can emit finish, and it will always happen\n // after error\n process.nextTick(finishMaybe, stream, state);\n stream._writableState.errorEmitted = true;\n errorOrDestroy(stream, er);\n } else {\n // the caller expect this to happen before if\n // it is async\n cb(er);\n stream._writableState.errorEmitted = true;\n errorOrDestroy(stream, er);\n // this can emit finish, but finish must\n // always follow error\n finishMaybe(stream, state);\n }\n}\nfunction onwriteStateUpdate(state) {\n state.writing = false;\n state.writecb = null;\n state.length -= state.writelen;\n state.writelen = 0;\n}\nfunction onwrite(stream, er) {\n var state = stream._writableState;\n var sync = state.sync;\n var cb = state.writecb;\n if (typeof cb !== 'function') throw new ERR_MULTIPLE_CALLBACK();\n onwriteStateUpdate(state);\n if (er) onwriteError(stream, state, sync, er, cb);else {\n // Check if we're actually ready to finish, but don't emit yet\n var finished = needFinish(state) || stream.destroyed;\n if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {\n clearBuffer(stream, state);\n }\n if (sync) {\n process.nextTick(afterWrite, stream, state, finished, cb);\n } else {\n afterWrite(stream, state, finished, cb);\n }\n }\n}\nfunction afterWrite(stream, state, finished, cb) {\n if (!finished) onwriteDrain(stream, state);\n state.pendingcb--;\n cb();\n finishMaybe(stream, state);\n}\n\n// Must force callback to be called on nextTick, so that we don't\n// emit 'drain' before the write() consumer gets the 'false' return\n// value, and has a chance to attach a 'drain' listener.\nfunction onwriteDrain(stream, state) {\n if (state.length === 0 && state.needDrain) {\n state.needDrain = false;\n stream.emit('drain');\n }\n}\n\n// if there's something in the buffer waiting, then process it\nfunction clearBuffer(stream, state) {\n state.bufferProcessing = true;\n var entry = state.bufferedRequest;\n if (stream._writev && entry && entry.next) {\n // Fast case, write everything using _writev()\n var l = state.bufferedRequestCount;\n var buffer = new Array(l);\n var holder = state.corkedRequestsFree;\n holder.entry = entry;\n var count = 0;\n var allBuffers = true;\n while (entry) {\n buffer[count] = entry;\n if (!entry.isBuf) allBuffers = false;\n entry = entry.next;\n count += 1;\n }\n buffer.allBuffers = allBuffers;\n doWrite(stream, state, true, state.length, buffer, '', holder.finish);\n\n // doWrite is almost always async, defer these to save a bit of time\n // as the hot path ends with doWrite\n state.pendingcb++;\n state.lastBufferedRequest = null;\n if (holder.next) {\n state.corkedRequestsFree = holder.next;\n holder.next = null;\n } else {\n state.corkedRequestsFree = new CorkedRequest(state);\n }\n state.bufferedRequestCount = 0;\n } else {\n // Slow case, write chunks one-by-one\n while (entry) {\n var chunk = entry.chunk;\n var encoding = entry.encoding;\n var cb = entry.callback;\n var len = state.objectMode ? 1 : chunk.length;\n doWrite(stream, state, false, len, chunk, encoding, cb);\n entry = entry.next;\n state.bufferedRequestCount--;\n // if we didn't call the onwrite immediately, then\n // it means that we need to wait until it does.\n // also, that means that the chunk and cb are currently\n // being processed, so move the buffer counter past them.\n if (state.writing) {\n break;\n }\n }\n if (entry === null) state.lastBufferedRequest = null;\n }\n state.bufferedRequest = entry;\n state.bufferProcessing = false;\n}\nWritable.prototype._write = function (chunk, encoding, cb) {\n cb(new ERR_METHOD_NOT_IMPLEMENTED('_write()'));\n};\nWritable.prototype._writev = null;\nWritable.prototype.end = function (chunk, encoding, cb) {\n var state = this._writableState;\n if (typeof chunk === 'function') {\n cb = chunk;\n chunk = null;\n encoding = null;\n } else if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);\n\n // .end() fully uncorks\n if (state.corked) {\n state.corked = 1;\n this.uncork();\n }\n\n // ignore unnecessary end() calls.\n if (!state.ending) endWritable(this, state, cb);\n return this;\n};\nObject.defineProperty(Writable.prototype, 'writableLength', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.length;\n }\n});\nfunction needFinish(state) {\n return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;\n}\nfunction callFinal(stream, state) {\n stream._final(function (err) {\n state.pendingcb--;\n if (err) {\n errorOrDestroy(stream, err);\n }\n state.prefinished = true;\n stream.emit('prefinish');\n finishMaybe(stream, state);\n });\n}\nfunction prefinish(stream, state) {\n if (!state.prefinished && !state.finalCalled) {\n if (typeof stream._final === 'function' && !state.destroyed) {\n state.pendingcb++;\n state.finalCalled = true;\n process.nextTick(callFinal, stream, state);\n } else {\n state.prefinished = true;\n stream.emit('prefinish');\n }\n }\n}\nfunction finishMaybe(stream, state) {\n var need = needFinish(state);\n if (need) {\n prefinish(stream, state);\n if (state.pendingcb === 0) {\n state.finished = true;\n stream.emit('finish');\n if (state.autoDestroy) {\n // In case of duplex streams we need a way to detect\n // if the readable side is ready for autoDestroy as well\n var rState = stream._readableState;\n if (!rState || rState.autoDestroy && rState.endEmitted) {\n stream.destroy();\n }\n }\n }\n }\n return need;\n}\nfunction endWritable(stream, state, cb) {\n state.ending = true;\n finishMaybe(stream, state);\n if (cb) {\n if (state.finished) process.nextTick(cb);else stream.once('finish', cb);\n }\n state.ended = true;\n stream.writable = false;\n}\nfunction onCorkedFinish(corkReq, state, err) {\n var entry = corkReq.entry;\n corkReq.entry = null;\n while (entry) {\n var cb = entry.callback;\n state.pendingcb--;\n cb(err);\n entry = entry.next;\n }\n\n // reuse the free corkReq.\n state.corkedRequestsFree.next = corkReq;\n}\nObject.defineProperty(Writable.prototype, 'destroyed', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n if (this._writableState === undefined) {\n return false;\n }\n return this._writableState.destroyed;\n },\n set: function set(value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._writableState) {\n return;\n }\n\n // backward compatibility, the user is explicitly\n // managing destroyed\n this._writableState.destroyed = value;\n }\n});\nWritable.prototype.destroy = destroyImpl.destroy;\nWritable.prototype._undestroy = destroyImpl.undestroy;\nWritable.prototype._destroy = function (err, cb) {\n cb(err);\n};","'use strict';\n\nvar _Object$setPrototypeO;\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nvar finished = require('./end-of-stream');\nvar kLastResolve = Symbol('lastResolve');\nvar kLastReject = Symbol('lastReject');\nvar kError = Symbol('error');\nvar kEnded = Symbol('ended');\nvar kLastPromise = Symbol('lastPromise');\nvar kHandlePromise = Symbol('handlePromise');\nvar kStream = Symbol('stream');\nfunction createIterResult(value, done) {\n return {\n value: value,\n done: done\n };\n}\nfunction readAndResolve(iter) {\n var resolve = iter[kLastResolve];\n if (resolve !== null) {\n var data = iter[kStream].read();\n // we defer if data is null\n // we can be expecting either 'end' or\n // 'error'\n if (data !== null) {\n iter[kLastPromise] = null;\n iter[kLastResolve] = null;\n iter[kLastReject] = null;\n resolve(createIterResult(data, false));\n }\n }\n}\nfunction onReadable(iter) {\n // we wait for the next tick, because it might\n // emit an error with process.nextTick\n process.nextTick(readAndResolve, iter);\n}\nfunction wrapForNext(lastPromise, iter) {\n return function (resolve, reject) {\n lastPromise.then(function () {\n if (iter[kEnded]) {\n resolve(createIterResult(undefined, true));\n return;\n }\n iter[kHandlePromise](resolve, reject);\n }, reject);\n };\n}\nvar AsyncIteratorPrototype = Object.getPrototypeOf(function () {});\nvar ReadableStreamAsyncIteratorPrototype = Object.setPrototypeOf((_Object$setPrototypeO = {\n get stream() {\n return this[kStream];\n },\n next: function next() {\n var _this = this;\n // if we have detected an error in the meanwhile\n // reject straight away\n var error = this[kError];\n if (error !== null) {\n return Promise.reject(error);\n }\n if (this[kEnded]) {\n return Promise.resolve(createIterResult(undefined, true));\n }\n if (this[kStream].destroyed) {\n // We need to defer via nextTick because if .destroy(err) is\n // called, the error will be emitted via nextTick, and\n // we cannot guarantee that there is no error lingering around\n // waiting to be emitted.\n return new Promise(function (resolve, reject) {\n process.nextTick(function () {\n if (_this[kError]) {\n reject(_this[kError]);\n } else {\n resolve(createIterResult(undefined, true));\n }\n });\n });\n }\n\n // if we have multiple next() calls\n // we will wait for the previous Promise to finish\n // this logic is optimized to support for await loops,\n // where next() is only called once at a time\n var lastPromise = this[kLastPromise];\n var promise;\n if (lastPromise) {\n promise = new Promise(wrapForNext(lastPromise, this));\n } else {\n // fast path needed to support multiple this.push()\n // without triggering the next() queue\n var data = this[kStream].read();\n if (data !== null) {\n return Promise.resolve(createIterResult(data, false));\n }\n promise = new Promise(this[kHandlePromise]);\n }\n this[kLastPromise] = promise;\n return promise;\n }\n}, _defineProperty(_Object$setPrototypeO, Symbol.asyncIterator, function () {\n return this;\n}), _defineProperty(_Object$setPrototypeO, \"return\", function _return() {\n var _this2 = this;\n // destroy(err, cb) is a private API\n // we can guarantee we have that here, because we control the\n // Readable class this is attached to\n return new Promise(function (resolve, reject) {\n _this2[kStream].destroy(null, function (err) {\n if (err) {\n reject(err);\n return;\n }\n resolve(createIterResult(undefined, true));\n });\n });\n}), _Object$setPrototypeO), AsyncIteratorPrototype);\nvar createReadableStreamAsyncIterator = function createReadableStreamAsyncIterator(stream) {\n var _Object$create;\n var iterator = Object.create(ReadableStreamAsyncIteratorPrototype, (_Object$create = {}, _defineProperty(_Object$create, kStream, {\n value: stream,\n writable: true\n }), _defineProperty(_Object$create, kLastResolve, {\n value: null,\n writable: true\n }), _defineProperty(_Object$create, kLastReject, {\n value: null,\n writable: true\n }), _defineProperty(_Object$create, kError, {\n value: null,\n writable: true\n }), _defineProperty(_Object$create, kEnded, {\n value: stream._readableState.endEmitted,\n writable: true\n }), _defineProperty(_Object$create, kHandlePromise, {\n value: function value(resolve, reject) {\n var data = iterator[kStream].read();\n if (data) {\n iterator[kLastPromise] = null;\n iterator[kLastResolve] = null;\n iterator[kLastReject] = null;\n resolve(createIterResult(data, false));\n } else {\n iterator[kLastResolve] = resolve;\n iterator[kLastReject] = reject;\n }\n },\n writable: true\n }), _Object$create));\n iterator[kLastPromise] = null;\n finished(stream, function (err) {\n if (err && err.code !== 'ERR_STREAM_PREMATURE_CLOSE') {\n var reject = iterator[kLastReject];\n // reject if we are waiting for data in the Promise\n // returned by next() and store the error\n if (reject !== null) {\n iterator[kLastPromise] = null;\n iterator[kLastResolve] = null;\n iterator[kLastReject] = null;\n reject(err);\n }\n iterator[kError] = err;\n return;\n }\n var resolve = iterator[kLastResolve];\n if (resolve !== null) {\n iterator[kLastPromise] = null;\n iterator[kLastResolve] = null;\n iterator[kLastReject] = null;\n resolve(createIterResult(undefined, true));\n }\n iterator[kEnded] = true;\n });\n stream.on('readable', onReadable.bind(null, iterator));\n return iterator;\n};\nmodule.exports = createReadableStreamAsyncIterator;","'use strict';\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nvar _require = require('buffer'),\n Buffer = _require.Buffer;\nvar _require2 = require('util'),\n inspect = _require2.inspect;\nvar custom = inspect && inspect.custom || 'inspect';\nfunction copyBuffer(src, target, offset) {\n Buffer.prototype.copy.call(src, target, offset);\n}\nmodule.exports = /*#__PURE__*/function () {\n function BufferList() {\n _classCallCheck(this, BufferList);\n this.head = null;\n this.tail = null;\n this.length = 0;\n }\n _createClass(BufferList, [{\n key: \"push\",\n value: function push(v) {\n var entry = {\n data: v,\n next: null\n };\n if (this.length > 0) this.tail.next = entry;else this.head = entry;\n this.tail = entry;\n ++this.length;\n }\n }, {\n key: \"unshift\",\n value: function unshift(v) {\n var entry = {\n data: v,\n next: this.head\n };\n if (this.length === 0) this.tail = entry;\n this.head = entry;\n ++this.length;\n }\n }, {\n key: \"shift\",\n value: function shift() {\n if (this.length === 0) return;\n var ret = this.head.data;\n if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;\n --this.length;\n return ret;\n }\n }, {\n key: \"clear\",\n value: function clear() {\n this.head = this.tail = null;\n this.length = 0;\n }\n }, {\n key: \"join\",\n value: function join(s) {\n if (this.length === 0) return '';\n var p = this.head;\n var ret = '' + p.data;\n while (p = p.next) ret += s + p.data;\n return ret;\n }\n }, {\n key: \"concat\",\n value: function concat(n) {\n if (this.length === 0) return Buffer.alloc(0);\n var ret = Buffer.allocUnsafe(n >>> 0);\n var p = this.head;\n var i = 0;\n while (p) {\n copyBuffer(p.data, ret, i);\n i += p.data.length;\n p = p.next;\n }\n return ret;\n }\n\n // Consumes a specified amount of bytes or characters from the buffered data.\n }, {\n key: \"consume\",\n value: function consume(n, hasStrings) {\n var ret;\n if (n < this.head.data.length) {\n // `slice` is the same for buffers and strings.\n ret = this.head.data.slice(0, n);\n this.head.data = this.head.data.slice(n);\n } else if (n === this.head.data.length) {\n // First chunk is a perfect match.\n ret = this.shift();\n } else {\n // Result spans more than one buffer.\n ret = hasStrings ? this._getString(n) : this._getBuffer(n);\n }\n return ret;\n }\n }, {\n key: \"first\",\n value: function first() {\n return this.head.data;\n }\n\n // Consumes a specified amount of characters from the buffered data.\n }, {\n key: \"_getString\",\n value: function _getString(n) {\n var p = this.head;\n var c = 1;\n var ret = p.data;\n n -= ret.length;\n while (p = p.next) {\n var str = p.data;\n var nb = n > str.length ? str.length : n;\n if (nb === str.length) ret += str;else ret += str.slice(0, n);\n n -= nb;\n if (n === 0) {\n if (nb === str.length) {\n ++c;\n if (p.next) this.head = p.next;else this.head = this.tail = null;\n } else {\n this.head = p;\n p.data = str.slice(nb);\n }\n break;\n }\n ++c;\n }\n this.length -= c;\n return ret;\n }\n\n // Consumes a specified amount of bytes from the buffered data.\n }, {\n key: \"_getBuffer\",\n value: function _getBuffer(n) {\n var ret = Buffer.allocUnsafe(n);\n var p = this.head;\n var c = 1;\n p.data.copy(ret);\n n -= p.data.length;\n while (p = p.next) {\n var buf = p.data;\n var nb = n > buf.length ? buf.length : n;\n buf.copy(ret, ret.length - n, 0, nb);\n n -= nb;\n if (n === 0) {\n if (nb === buf.length) {\n ++c;\n if (p.next) this.head = p.next;else this.head = this.tail = null;\n } else {\n this.head = p;\n p.data = buf.slice(nb);\n }\n break;\n }\n ++c;\n }\n this.length -= c;\n return ret;\n }\n\n // Make sure the linked list only shows the minimal necessary information.\n }, {\n key: custom,\n value: function value(_, options) {\n return inspect(this, _objectSpread(_objectSpread({}, options), {}, {\n // Only inspect one level.\n depth: 0,\n // It should not recurse.\n customInspect: false\n }));\n }\n }]);\n return BufferList;\n}();","'use strict';\n\n// undocumented cb() API, needed for core, not for public API\nfunction destroy(err, cb) {\n var _this = this;\n var readableDestroyed = this._readableState && this._readableState.destroyed;\n var writableDestroyed = this._writableState && this._writableState.destroyed;\n if (readableDestroyed || writableDestroyed) {\n if (cb) {\n cb(err);\n } else if (err) {\n if (!this._writableState) {\n process.nextTick(emitErrorNT, this, err);\n } else if (!this._writableState.errorEmitted) {\n this._writableState.errorEmitted = true;\n process.nextTick(emitErrorNT, this, err);\n }\n }\n return this;\n }\n\n // we set destroyed to true before firing error callbacks in order\n // to make it re-entrance safe in case destroy() is called within callbacks\n\n if (this._readableState) {\n this._readableState.destroyed = true;\n }\n\n // if this is a duplex stream mark the writable part as destroyed as well\n if (this._writableState) {\n this._writableState.destroyed = true;\n }\n this._destroy(err || null, function (err) {\n if (!cb && err) {\n if (!_this._writableState) {\n process.nextTick(emitErrorAndCloseNT, _this, err);\n } else if (!_this._writableState.errorEmitted) {\n _this._writableState.errorEmitted = true;\n process.nextTick(emitErrorAndCloseNT, _this, err);\n } else {\n process.nextTick(emitCloseNT, _this);\n }\n } else if (cb) {\n process.nextTick(emitCloseNT, _this);\n cb(err);\n } else {\n process.nextTick(emitCloseNT, _this);\n }\n });\n return this;\n}\nfunction emitErrorAndCloseNT(self, err) {\n emitErrorNT(self, err);\n emitCloseNT(self);\n}\nfunction emitCloseNT(self) {\n if (self._writableState && !self._writableState.emitClose) return;\n if (self._readableState && !self._readableState.emitClose) return;\n self.emit('close');\n}\nfunction undestroy() {\n if (this._readableState) {\n this._readableState.destroyed = false;\n this._readableState.reading = false;\n this._readableState.ended = false;\n this._readableState.endEmitted = false;\n }\n if (this._writableState) {\n this._writableState.destroyed = false;\n this._writableState.ended = false;\n this._writableState.ending = false;\n this._writableState.finalCalled = false;\n this._writableState.prefinished = false;\n this._writableState.finished = false;\n this._writableState.errorEmitted = false;\n }\n}\nfunction emitErrorNT(self, err) {\n self.emit('error', err);\n}\nfunction errorOrDestroy(stream, err) {\n // We have tests that rely on errors being emitted\n // in the same tick, so changing this is semver major.\n // For now when you opt-in to autoDestroy we allow\n // the error to be emitted nextTick. In a future\n // semver major update we should change the default to this.\n\n var rState = stream._readableState;\n var wState = stream._writableState;\n if (rState && rState.autoDestroy || wState && wState.autoDestroy) stream.destroy(err);else stream.emit('error', err);\n}\nmodule.exports = {\n destroy: destroy,\n undestroy: undestroy,\n errorOrDestroy: errorOrDestroy\n};","// Ported from https://github.com/mafintosh/end-of-stream with\n// permission from the author, Mathias Buus (@mafintosh).\n\n'use strict';\n\nvar ERR_STREAM_PREMATURE_CLOSE = require('../../../errors').codes.ERR_STREAM_PREMATURE_CLOSE;\nfunction once(callback) {\n var called = false;\n return function () {\n if (called) return;\n called = true;\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n callback.apply(this, args);\n };\n}\nfunction noop() {}\nfunction isRequest(stream) {\n return stream.setHeader && typeof stream.abort === 'function';\n}\nfunction eos(stream, opts, callback) {\n if (typeof opts === 'function') return eos(stream, null, opts);\n if (!opts) opts = {};\n callback = once(callback || noop);\n var readable = opts.readable || opts.readable !== false && stream.readable;\n var writable = opts.writable || opts.writable !== false && stream.writable;\n var onlegacyfinish = function onlegacyfinish() {\n if (!stream.writable) onfinish();\n };\n var writableEnded = stream._writableState && stream._writableState.finished;\n var onfinish = function onfinish() {\n writable = false;\n writableEnded = true;\n if (!readable) callback.call(stream);\n };\n var readableEnded = stream._readableState && stream._readableState.endEmitted;\n var onend = function onend() {\n readable = false;\n readableEnded = true;\n if (!writable) callback.call(stream);\n };\n var onerror = function onerror(err) {\n callback.call(stream, err);\n };\n var onclose = function onclose() {\n var err;\n if (readable && !readableEnded) {\n if (!stream._readableState || !stream._readableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();\n return callback.call(stream, err);\n }\n if (writable && !writableEnded) {\n if (!stream._writableState || !stream._writableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();\n return callback.call(stream, err);\n }\n };\n var onrequest = function onrequest() {\n stream.req.on('finish', onfinish);\n };\n if (isRequest(stream)) {\n stream.on('complete', onfinish);\n stream.on('abort', onclose);\n if (stream.req) onrequest();else stream.on('request', onrequest);\n } else if (writable && !stream._writableState) {\n // legacy streams\n stream.on('end', onlegacyfinish);\n stream.on('close', onlegacyfinish);\n }\n stream.on('end', onend);\n stream.on('finish', onfinish);\n if (opts.error !== false) stream.on('error', onerror);\n stream.on('close', onclose);\n return function () {\n stream.removeListener('complete', onfinish);\n stream.removeListener('abort', onclose);\n stream.removeListener('request', onrequest);\n if (stream.req) stream.req.removeListener('finish', onfinish);\n stream.removeListener('end', onlegacyfinish);\n stream.removeListener('close', onlegacyfinish);\n stream.removeListener('finish', onfinish);\n stream.removeListener('end', onend);\n stream.removeListener('error', onerror);\n stream.removeListener('close', onclose);\n };\n}\nmodule.exports = eos;","module.exports = function () {\n throw new Error('Readable.from is not available in the browser')\n};\n","// Ported from https://github.com/mafintosh/pump with\n// permission from the author, Mathias Buus (@mafintosh).\n\n'use strict';\n\nvar eos;\nfunction once(callback) {\n var called = false;\n return function () {\n if (called) return;\n called = true;\n callback.apply(void 0, arguments);\n };\n}\nvar _require$codes = require('../../../errors').codes,\n ERR_MISSING_ARGS = _require$codes.ERR_MISSING_ARGS,\n ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED;\nfunction noop(err) {\n // Rethrow the error if it exists to avoid swallowing it\n if (err) throw err;\n}\nfunction isRequest(stream) {\n return stream.setHeader && typeof stream.abort === 'function';\n}\nfunction destroyer(stream, reading, writing, callback) {\n callback = once(callback);\n var closed = false;\n stream.on('close', function () {\n closed = true;\n });\n if (eos === undefined) eos = require('./end-of-stream');\n eos(stream, {\n readable: reading,\n writable: writing\n }, function (err) {\n if (err) return callback(err);\n closed = true;\n callback();\n });\n var destroyed = false;\n return function (err) {\n if (closed) return;\n if (destroyed) return;\n destroyed = true;\n\n // request.destroy just do .end - .abort is what we want\n if (isRequest(stream)) return stream.abort();\n if (typeof stream.destroy === 'function') return stream.destroy();\n callback(err || new ERR_STREAM_DESTROYED('pipe'));\n };\n}\nfunction call(fn) {\n fn();\n}\nfunction pipe(from, to) {\n return from.pipe(to);\n}\nfunction popCallback(streams) {\n if (!streams.length) return noop;\n if (typeof streams[streams.length - 1] !== 'function') return noop;\n return streams.pop();\n}\nfunction pipeline() {\n for (var _len = arguments.length, streams = new Array(_len), _key = 0; _key < _len; _key++) {\n streams[_key] = arguments[_key];\n }\n var callback = popCallback(streams);\n if (Array.isArray(streams[0])) streams = streams[0];\n if (streams.length < 2) {\n throw new ERR_MISSING_ARGS('streams');\n }\n var error;\n var destroys = streams.map(function (stream, i) {\n var reading = i < streams.length - 1;\n var writing = i > 0;\n return destroyer(stream, reading, writing, function (err) {\n if (!error) error = err;\n if (err) destroys.forEach(call);\n if (reading) return;\n destroys.forEach(call);\n callback(error);\n });\n });\n return streams.reduce(pipe);\n}\nmodule.exports = pipeline;","'use strict';\n\nvar ERR_INVALID_OPT_VALUE = require('../../../errors').codes.ERR_INVALID_OPT_VALUE;\nfunction highWaterMarkFrom(options, isDuplex, duplexKey) {\n return options.highWaterMark != null ? options.highWaterMark : isDuplex ? options[duplexKey] : null;\n}\nfunction getHighWaterMark(state, options, duplexKey, isDuplex) {\n var hwm = highWaterMarkFrom(options, isDuplex, duplexKey);\n if (hwm != null) {\n if (!(isFinite(hwm) && Math.floor(hwm) === hwm) || hwm < 0) {\n var name = isDuplex ? duplexKey : 'highWaterMark';\n throw new ERR_INVALID_OPT_VALUE(name, hwm);\n }\n return Math.floor(hwm);\n }\n\n // Default value\n return state.objectMode ? 16 : 16 * 1024;\n}\nmodule.exports = {\n getHighWaterMark: getHighWaterMark\n};","module.exports = require('events').EventEmitter;\n","exports = module.exports = require('./lib/_stream_readable.js');\nexports.Stream = exports;\nexports.Readable = exports;\nexports.Writable = require('./lib/_stream_writable.js');\nexports.Duplex = require('./lib/_stream_duplex.js');\nexports.Transform = require('./lib/_stream_transform.js');\nexports.PassThrough = require('./lib/_stream_passthrough.js');\nexports.finished = require('./lib/internal/streams/end-of-stream.js');\nexports.pipeline = require('./lib/internal/streams/pipeline.js');\n"],"names":["asn1","exports","bignum","define","base","constants","decoders","encoders","inherits","Entity","name","body","this","prototype","_createNamed","Base","Generated","entity","_initNamed","call","_getDecoder","enc","hasOwnProperty","decode","data","options","_getEncoder","encode","reporter","Reporter","Buffer","DecoderBuffer","isBuffer","offset","length","error","EncoderBuffer","value","Array","isArray","map","item","isEncoderBuffer","byteLength","isDecoderBuffer","constructor","save","restore","isEmpty","readUInt8","skip","raw","res","fail","bytes","_reporterState","slice","join","out","alloc","forEach","write","copy","Node","assert","tags","methods","concat","parent","state","_baseState","children","tag","args","reverseArgs","choice","optional","any","obj","use","useDecoder","key","explicit","implicit","contains","_wrap","module","stateProps","clone","cstate","prop","method","push","apply","arguments","_init","filter","child","equal","_useArgs","arg","Object","keys","Error","def","val","num","newKey","_decode","input","wrapResult","prevObj","result","present","prevKey","enterKey","_peekTag","isError","_decodeGeneric","_decodeChoice","e","enterObject","_decodeTag","start","track","path","_getUse","leaveObject","exitKey","leaveKey","_decodeList","test","_decodeStr","_decodeObjid","_decodeTime","_decodeNull","_decodeBool","_decodeInt","_use","match","some","node","type","_createEncoderBuffer","_encode","_encodeValue","undefined","_skipDefault","content","primitive","_encodeChoice","_encodePrimitive","cls","_encodeComposite","JSON","stringify","_encodeStr","_encodeObjid","_encodeTime","_encodeNull","_encodeInt","_encodeBool","_isNumstr","str","_isPrintstr","errors","ReporterError","msg","rethrow","pathLen","index","prev","now","err","inherited","elem","message","stack","partial","captureStackTrace","reverse","tagClass","tagClassByName","tagByName","_reverse","der","DERDecoder","tree","DERNode","derDecodeTag","buf","oct","tagStr","derDecodeLen","len","i","j","buffer","decodedTag","_skipUntilEnd","decoder","possibleEnd","unused","String","fromCharCode","readUInt16BE","numstr","toString","printstr","values","relative","identifiers","ident","subident","first","second","tmp","year","mon","day","hour","min","sec","Date","UTC","pem","PEMDecoder","lines","split","label","toUpperCase","re","end","base64","replace","from","DEREncoder","two","encodedTag","encodeTag","header","lenOctets","writeUInt16BE","charCodeAt","id","splice","size","objid","time","date","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","numArray","toArray","sign","unshift","dataBuffer","defaultBuffer","PEMEncoder","p","b64","lens","getLens","validLen","placeHoldersLen","toByteArray","arr","Arr","_byteLength","curByte","revLookup","fromByteArray","uint8","extraBytes","parts","maxChunkLength","len2","encodeChunk","lookup","Uint8Array","code","indexOf","output","ctor","superCtor","super_","TempCtor","BN","number","endian","isBN","negative","words","red","wordSize","window","parseHex4Bits","string","c","parseHexByte","lowerBound","r","parseBase","mul","Math","max","left","right","cmp","_initNumber","_initArray","_parseHex","_parseBase","ceil","w","off","strip","limbLen","limbPow","total","mod","word","imuln","_iaddn","pow","dest","_expand","_normSign","inspect","zeros","groupSizes","groupBases","smallMulTo","self","a","b","lo","carry","k","ncarry","rword","maxJ","padding","groupSize","groupBase","isZero","modn","idivn","toNumber","ret","toJSON","toBuffer","toArrayLike","ArrayType","reqLength","littleEndian","q","andln","iushrn","clz32","_countBits","t","_zeroBits","bitLength","hi","zeroBits","toTwos","width","abs","inotn","iaddn","fromTwos","testn","notn","ineg","isNeg","neg","iuor","ior","or","uor","iuand","iand","and","uand","iuxor","ixor","xor","uxor","bytesNeeded","bitsLeft","setn","bit","wbit","iadd","isub","add","sub","comb10MulTo","mid","o","a0","al0","ah0","a1","al1","ah1","a2","al2","ah2","a3","al3","ah3","a4","al4","ah4","a5","al5","ah5","a6","al6","ah6","a7","al7","ah7","a8","al8","ah8","a9","al9","ah9","b0","bl0","bh0","b1","bl1","bh1","b2","bl2","bh2","b3","bl3","bh3","b4","bl4","bh4","b5","bl5","bh5","b6","bl6","bh6","b7","bl7","bh7","b8","bl8","bh8","b9","bl9","bh9","w0","imul","w1","w2","w3","w4","w5","w6","w7","w8","w9","w10","w11","w12","w13","w14","w15","w16","w17","w18","jumboMulTo","FFTM","mulp","x","y","mulTo","hncarry","bigMulTo","makeRBT","N","l","revBin","rb","permute","rbt","rws","iws","rtws","itws","transform","s","rtwdf","cos","PI","itwdf","sin","rtwdf_","itwdf_","ie","ro","io","rx","guessLen13b","n","m","odd","conjugate","normalize13b","ws","round","convert13b","stub","ph","_","rwst","iwst","nrws","nrwst","niwst","rmws","mulf","muln","sqr","isqr","toBitArray","iushln","bits","carryMask","newCarry","ishln","hint","extended","h","mask","maskedWords","ishrn","shln","ushln","shrn","ushrn","imaskn","maskn","isubn","addn","subn","iabs","_ishlnsubmul","shift","_wordDiv","mode","bhi","diff","qj","div","divmod","positive","divn","umod","divRound","dm","half","r2","acc","egcd","A","B","C","D","g","isEven","yp","xp","im","isOdd","jm","gcd","_invmp","x1","x2","delta","cmpn","invm","bincn","ucmp","gtn","gt","gten","gte","ltn","lt","lten","lte","eqn","eq","Red","toRed","ctx","convertTo","_forceRed","fromRed","convertFrom","forceRed","redAdd","redIAdd","redSub","redISub","redShl","shl","redMul","_verify2","redIMul","redSqr","_verify1","redISqr","redSqrt","sqrt","redInvm","redNeg","redPow","primes","k256","p224","p192","p25519","MPrime","_tmp","K256","P224","P192","P25519","prime","_prime","Mont","imod","rinv","minv","ireduce","rlen","imulK","_strip","outLen","next","mod3","one","nOne","lpow","z","inv","wnd","current","currentLen","mont","u","Rand","rand","generate","_rand","getBytes","getByte","crypto","getRandomValues","msCrypto","randomBytes","asUInt32Array","readUInt32BE","scrubVec","v","cryptBlock","M","keySchedule","SUB_MIX","SBOX","nRounds","t0","t1","t2","t3","SUB_MIX0","SUB_MIX1","SUB_MIX2","SUB_MIX3","s0","s1","s2","s3","ksRow","RCON","G","d","INV_SBOX","INV_SUB_MIX","xi","sx","x4","x8","AES","_key","_reset","blockSize","keySize","keyWords","ksRows","invKeySchedule","ik","ksR","tt","_nRounds","_keySchedule","_invKeySchedule","encryptBlockRaw","encryptBlock","allocUnsafe","writeUInt32BE","decryptBlock","m1","scrub","aes","Transform","GHASH","incr32","StreamCipher","iv","decrypt","_cipher","ck","_ghash","_finID","ghash","toPad","update","ivBits","tail","writeUIntBE","calcIv","_prev","_cache","_secCache","_decrypt","_alen","_len","_mode","_authTag","_called","_update","chunk","rump","encrypt","_final","final","xorTest","getAuthTag","setAuthTag","setAAD","ciphers","deciphers","modes","createCipher","Cipher","createCipheriv","Cipheriv","createDecipher","Decipher","createDecipheriv","Decipheriv","listCiphers","getCiphers","AuthCipher","MODES","ebtk","Splitter","_last","_autopadding","cache","suite","password","config","toLowerCase","TypeError","thing","get","flush","last","padded","unpad","setAutoPadding","setTo","autoPadding","PADDING","equals","padBuff","writeUInt8","ZEROES","fromArray","block","_multiply","lsbVi","Vi","Zi","abl","bl","pad","encryptStart","encryptByte","byteParam","shiftIn","getBlock","chunkNum","modeModules","ECB","CBC","CFB","CFB8","CFB1","OFB","CTR","GCM","DES","aesModes","desModes","keyLen","ivLen","CipherBase","des","instantiate","EDE","opts","modeName","_des","create","des3","getr","priv","modulus","prime1","prime2","crt","blinds","blinder","publicExponent","unblinder","blind","blinded","c1","c2","qinv","coefficient","exponent1","m2","exponent2","move","src","_move","Symbol","for","modrn","allocate","_toArrayLikeLE","position","_toArrayLikeBE","isNegNum","createHash","stream","verify","algorithms","Sign","algorithm","Writable","_hashType","hash","_hash","_tag","_signType","Verify","createSign","createVerify","_write","done","digest","sig","createHmac","EC","parseKeys","curves","getKey","algo","hlen","hbits","bits2int","bits2octets","fill","obits","makeKey","kv","makeR","hashType","signType","curve","curveId","keyFromPrivate","privateKey","toDER","ecSign","params","priv_key","H","dsaSign","checkValue","pub","pubkey","subjectPrivateKey","ecVerify","pub_key","unpacked","signature","montp","dsaVerify","padNum","codes","createErrorType","NodeError","_Base","subClass","superClass","arg1","arg2","arg3","getMessage","__proto__","oneOf","expected","actual","determiner","search","substr","this_len","substring","endsWith","objectKeys","Duplex","Readable","allowHalfOpen","readable","writable","once","onend","_writableState","ended","process","nextTick","onEndNT","defineProperty","enumerable","highWaterMark","getBuffer","_readableState","destroyed","set","PassThrough","_transform","encoding","cb","ReadableState","debug","EElistenerCount","emitter","listeners","Stream","OurUint8Array","debugUtil","debuglog","StringDecoder","createReadableStreamAsyncIterator","BufferList","destroyImpl","getHighWaterMark","_require$codes","ERR_INVALID_ARG_TYPE","ERR_STREAM_PUSH_AFTER_EOF","ERR_METHOD_NOT_IMPLEMENTED","ERR_STREAM_UNSHIFT_AFTER_END_EVENT","errorOrDestroy","kProxyEvents","isDuplex","objectMode","readableObjectMode","pipes","pipesCount","flowing","endEmitted","reading","sync","needReadable","emittedReadable","readableListening","resumeScheduled","paused","emitClose","autoDestroy","defaultEncoding","awaitDrain","readingMore","read","_read","destroy","_destroy","readableAddChunk","addToFront","skipChunkCheck","er","emitReadable","emitReadable_","onEofChunk","chunkInvalid","getPrototypeOf","_uint8ArrayToBuffer","addChunk","maybeReadMore","emit","_undestroy","undestroy","isPaused","setEncoding","head","clear","MAX_HWM","howMuchToRead","computeNewHighWaterMark","flow","maybeReadMore_","updateReadableListening","listenerCount","resume","nReadingNextTick","resume_","fromList","consume","endReadable","endReadableNT","wState","finished","xs","parseInt","nOrig","doRead","pipe","pipeOpts","endFn","stdout","stderr","unpipe","on","onunpipe","unpipeInfo","hasUnpiped","removeListener","onclose","onfinish","ondrain","onerror","ondata","cleanedUp","needDrain","pipeOnDrain","pause","event","fn","prependListener","_events","dests","ev","addListener","removeAllListeners","wrap","_this","bind","asyncIterator","_fromList","iterable","ERR_MULTIPLE_CALLBACK","ERR_TRANSFORM_ALREADY_TRANSFORMING","ERR_TRANSFORM_WITH_LENGTH_0","afterTransform","ts","_transformState","transforming","writecb","writechunk","rs","needTransform","writeencoding","_flush","prefinish","err2","CorkedRequest","entry","finish","corkReq","callback","pendingcb","onCorkedFinish","corkedRequestsFree","WritableState","realHasInstance","internalUtil","deprecate","ERR_STREAM_CANNOT_PIPE","ERR_STREAM_DESTROYED","ERR_STREAM_NULL_VALUES","ERR_STREAM_WRITE_AFTER_END","ERR_UNKNOWN_ENCODING","nop","writableObjectMode","finalCalled","ending","noDecode","decodeStrings","writing","corked","bufferProcessing","onwrite","writelen","onwriteStateUpdate","finishMaybe","errorEmitted","onwriteError","needFinish","bufferedRequest","clearBuffer","afterWrite","lastBufferedRequest","prefinished","bufferedRequestCount","writev","_writev","doWrite","onwriteDrain","holder","count","allBuffers","isBuf","callFinal","need","rState","hasInstance","Function","object","writeAfterEnd","validChunk","newChunk","decodeChunk","writeOrBuffer","cork","uncork","setDefaultEncoding","endWritable","_Object$setPrototypeO","_defineProperty","prim","toPrimitive","_toPrimitive","_toPropertyKey","configurable","kLastResolve","kLastReject","kError","kEnded","kLastPromise","kHandlePromise","kStream","createIterResult","readAndResolve","iter","resolve","onReadable","AsyncIteratorPrototype","ReadableStreamAsyncIteratorPrototype","setPrototypeOf","Promise","reject","promise","lastPromise","then","wrapForNext","_this2","_Object$create","iterator","ownKeys","enumerableOnly","getOwnPropertySymbols","symbols","sym","getOwnPropertyDescriptor","_objectSpread","target","source","getOwnPropertyDescriptors","defineProperties","_defineProperties","props","descriptor","custom","instance","Constructor","_classCallCheck","protoProps","hasStrings","_getString","_getBuffer","nb","depth","customInspect","emitErrorAndCloseNT","emitErrorNT","emitCloseNT","readableDestroyed","writableDestroyed","ERR_STREAM_PREMATURE_CLOSE","noop","eos","called","onlegacyfinish","writableEnded","readableEnded","onrequest","req","setHeader","abort","isRequest","ERR_MISSING_ARGS","to","streams","pop","popCallback","destroys","closed","destroyer","reduce","ERR_INVALID_OPT_VALUE","duplexKey","hwm","highWaterMarkFrom","isFinite","floor","pipeline"],"sourceRoot":""}