{"version":3,"file":"82.chunk.js","mappings":";oFAAAA,OAAOC,eAAeC,EAAS,aAAc,CAAEC,OAAO,IACtD,IAAIC,EAAWC,EAAQ,OACnBC,EAAsBD,EAAQ,OAC9BE,EAAiC,WACjC,SAASA,EAAgBC,EAAUC,GAC/BC,KAAKD,QAAUA,EACfC,KAAKC,UAAY,IAAIH,EAASC,EAAQG,QACtCF,KAAKC,UAAUE,UAAUJ,EAAQK,QACjCJ,KAAKK,gBAAmBN,IAAYA,EAAQO,SAAsC,IAA3BP,EAAQO,QAAQC,OAClEP,KAAKK,eAYNL,KAAKQ,SAAW,GAXhBR,KAAKQ,SAAWT,EAAQO,QAAQG,KAAI,SAAUhB,GAC1C,MAAO,CACHiB,OAASjB,EAAMiB,kBAAkBC,SAAY,IAAIlB,EAAMiB,OAAOjB,EAAMS,QAChE,IAAKR,EAASkB,UAAUnB,EAAMiB,QAA9B,CAAuCjB,EAAMS,QACjDA,OAAQT,EAAMS,OACdW,QAASpB,EAAMoB,QACfC,WAAYrB,EAAMqB,eA+ClC,OAvCAxB,OAAOC,eAAeM,EAAgBkB,UAAW,WAAY,CACzDC,IAAK,WACD,OAAOhB,KAAKC,WAEhBgB,YAAY,EACZC,cAAc,IAElBrB,EAAgBkB,UAAUI,OAAS,SAAUC,GACrCpB,KAAKqB,QAAQD,IACbpB,KAAKC,UAAUkB,OAAOC,IAG9BvB,EAAgBkB,UAAUM,QAAU,SAAUD,GAC1C,OAAOpB,KAAKK,gBAAkBL,KAAKsB,SAASF,IAEhDvB,EAAgBkB,UAAUO,SAAW,SAAUF,GAG3C,IAFA,IAAIG,EACAC,EAAQxB,KAAKQ,SAASD,OACjBkB,EAAI,EAAGA,EAAID,EAAOC,IAEvB,IADAF,EAAOvB,KAAKQ,SAASiB,IACXf,OAAOW,QAAQD,GAQpB,CACD,GAAIG,EAAKV,UAAYjB,EAAoB8B,gBAAgBC,KACrD,OAAO,EAEN,GAAIJ,EAAKV,UAAYjB,EAAoB8B,gBAAgBE,MAC1D,OAAO,MAbkB,CAC7B,GAAIL,EAAKT,aAAelB,EAAoB8B,gBAAgBC,KACxD,OAAO,EAEN,GAAIJ,EAAKT,aAAelB,EAAoB8B,gBAAgBE,MAC7D,OAAO,EAYnB,OAAO,GAEJ/B,EA5D0B,GA8DrCL,EAAQK,gBAAkBA,yBCjE1B,IAAIgC,EAAa7B,MAAQA,KAAK6B,WAAe,WACzC,IAAIC,EAAgB,SAAUC,EAAGC,GAI7B,OAHAF,EAAgBxC,OAAO2C,gBAClB,CAAEC,UAAW,cAAgBC,OAAS,SAAUJ,EAAGC,GAAKD,EAAEG,UAAYF,IACvE,SAAUD,EAAGC,GAAK,IAAK,IAAII,KAAKJ,EAAOA,EAAEK,eAAeD,KAAIL,EAAEK,GAAKJ,EAAEI,KAClEN,EAAcC,EAAGC,IAE5B,OAAO,SAAUD,EAAGC,GAEhB,SAASM,IAAOtC,KAAKuC,YAAcR,EADnCD,EAAcC,EAAGC,GAEjBD,EAAEhB,UAAkB,OAANiB,EAAa1C,OAAOkD,OAAOR,IAAMM,EAAGvB,UAAYiB,EAAEjB,UAAW,IAAIuB,IAV1C,GAazCG,EAAczC,MAAQA,KAAKyC,YAAe,SAAUC,EAAYC,EAAQC,EAAKC,GAC7E,IAA2Hd,EAAvHe,EAAIC,UAAUxC,OAAQyC,EAAIF,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOvD,OAAO2D,yBAAyBN,EAAQC,GAAOC,EACrH,GAAuB,kBAAZK,SAAoD,oBAArBA,QAAQC,SAAyBH,EAAIE,QAAQC,SAAST,EAAYC,EAAQC,EAAKC,QACpH,IAAK,IAAIpB,EAAIiB,EAAWnC,OAAS,EAAGkB,GAAK,EAAGA,KAASM,EAAIW,EAAWjB,MAAIuB,GAAKF,EAAI,EAAIf,EAAEiB,GAAKF,EAAI,EAAIf,EAAEY,EAAQC,EAAKI,GAAKjB,EAAEY,EAAQC,KAASI,GAChJ,OAAOF,EAAI,GAAKE,GAAK1D,OAAOC,eAAeoD,EAAQC,EAAKI,GAAIA,GAEhE1D,OAAOC,eAAeC,EAAS,aAAc,CAAEC,OAAO,IACtD,IAAI2D,EAAczD,EAAQ,OACtB0D,EAAa1D,EAAQ,OACrB2D,EAAoB3D,EAAQ,OAE5B4D,EAAiC,SAAUC,GAE3C,SAASD,IACL,OAAkB,OAAXC,GAAmBA,EAAOC,MAAMzD,KAAM+C,YAAc/C,KAkD/D,OApDA6B,EAAU0B,EAAiBC,GAQ3BD,EAAgBxC,UAAUI,OAAS,SAAUuC,GACrCA,EAASC,OAAS3D,KAAK4D,eACvB5D,KAAK6D,iBAAiBH,IAS9BH,EAAgBxC,UAAU8C,iBAAmB,SAAUH,GACnD,IAAII,EAAU9D,KAAK+D,OAAOL,GAC1B,OAAQA,EAASC,OACb,KAAKP,EAAYY,SAASC,MAC1B,KAAKb,EAAYY,SAASE,MAClBR,EAASS,MACTb,EAAkBc,oBAAoBD,MAAML,EAASJ,EAASS,OAG9Db,EAAkBc,oBAAoBD,MAAML,GAEhD,MAEJ,KAAKV,EAAYY,SAASK,KACtBf,EAAkBc,oBAAoBE,KAAKR,GAC3C,MAEJ,KAAKV,EAAYY,SAASO,KACtBjB,EAAkBc,oBAAoBI,KAAKV,GAC3C,MAEJ,KAAKV,EAAYY,SAASS,MAC1B,KAAKrB,EAAYY,SAASU,MACtBpB,EAAkBc,oBAAoBO,MAAMb,KAOxDP,EAAkBd,EAAW,CACzBY,EAAWuB,SAAS,YACrBrB,GApD8B,CADhB5D,EAAQ,OAuDZkF,aACjBrF,EAAQ+D,gBAAkBA,yBC/E1BjE,OAAOC,eAAeC,EAAS,aAAc,CAAEC,OAAO,IACtD,IAAIqF,EAAYnF,EAAQ,MACpBoF,EAAqBpF,EAAQ,OAC7BqF,EAAiBrF,EAAQ,OACzBsF,EAAmB,IAAIC,IAC3BD,EAAiBE,IAAI,UACrBF,EAAiBE,IAAI,YACrBF,EAAiBE,IAAI,eACrBF,EAAiBE,IAAI,aACrBF,EAAiBE,IAAI,aACrBF,EAAiBE,IAAI,UACrB,IAAIC,EAAa,IAAIC,IACjBC,EAA6B,IAAID,IAuBrC7F,EAAQ+F,gBAAkB,SAAUzF,GAAY,OAAOA,EAAS0F,MAAQV,EAAUW,gBAAgB3F,IASlGN,EAAQkG,YAAc,SAAU5F,EAAU0F,IAtBlB,SAAU1F,GAGxBA,aAAoBkF,EAAeH,aAIzCI,EAAiBU,SAAQ,SAAUC,GAC/B,IAAK9F,EAASiB,UAAU6E,MAAc9F,EAASiB,UAAU6E,aAAoBjF,UACzE,MAAM,IAAIkF,MAAM,6CAA+CD,MAcvEE,CAAkBhG,GAClB,IAAIiG,EAAeP,GAAQhG,EAAQ+F,gBAAgBzF,GAKnD,OAHKsF,EAAWY,IAAID,IAChBX,EAAWa,IAAIF,EAAcjG,GAE1BA,GAOXN,EAAQ0G,iBAAmB,SAAUpG,GACjC,IAAI0F,EAAOhG,EAAQ+F,gBAAgBzF,GAKnC,OAJIsF,EAAWY,IAAIR,IACfhG,EAAQkG,YAAY5F,GAExBsF,EAAWa,IAAIT,EAAM1F,GACdA,GAOXN,EAAQ2G,YAAc,SAAUX,GAAQ,OAAOJ,EAAWpE,IAAIwE,IAM9DhG,EAAQ4G,2BAA6B,SAAUC,GAC3C,GAAIA,GAAaA,EAAU9F,OAAS,EAChC,OAAO8F,EAAU5F,KAAI,SAAUhB,GAC3B,GAAI6F,EAA2BU,IAAIvG,GAAQ,CACvC,IAAI6G,EAAiBhB,EAA2BtE,IAAIvB,GACpD,OAAO,IAAIsF,EAAmBlF,gBAAgByG,EAAexG,SAAUwG,GAE3E,MAAM,IAAIT,MAAM,+BAAiCpG,EAAQ,QAI7D,IAAI8G,EAAW,GAIf,OAHAjB,EAA2BK,SAAQ,SAAUW,GACzC,OAAOC,EAASC,KAAK,IAAIzB,EAAmBlF,gBAAgByG,EAAexG,SAAUwG,OAElFC,GASf/G,EAAQiH,wBAA0B,SAAUV,EAAc7F,GACtDoF,EAA2BW,IAAIF,EAAc7F,2BCtGjDZ,OAAOC,eAAeC,EAAS,aAAc,CAAEC,OAAO,IACtD,IAAIiH,EAAc/G,EAAQ,OACtBkF,EAA6B,WAC7B,SAASA,EAAY3E,IAoDrB,OA7CA2E,EAAY9D,UAAU4F,SAAW,WAC7B,OAAuB,IAAhB3G,KAAK4G,QAMhB/B,EAAY9D,UAAUI,OAAS,SAAUuC,KAOzCmB,EAAY9D,UAAU6C,YAAc,WAChC,OAAO5D,KAAK6G,UAMhBhC,EAAY9D,UAAU+F,YAAc,SAAUD,GAC1C7G,KAAK6G,SAAWA,GAMpBhC,EAAY9D,UAAUZ,UAAY,SAAUC,GACxCJ,KAAKI,OAASA,GAMlByE,EAAY9D,UAAUgG,UAAY,WAC9B,OAAO/G,KAAKI,QAMhByE,EAAY9D,UAAUgD,OAAS,SAAUL,GACrC,OAAOgD,EAAY3C,OAAO/D,KAAK+G,YAAarD,IAEzCmB,EArDsB,GAuDjCrF,EAAQqF,YAAcA,uBCzDtBvF,OAAOC,eAAeC,EAAS,aAAc,CAAEC,OAAO,IAEtD,SAAWuE,GACPA,EAASA,EAAQ,IAAU,GAAK,MAChCA,EAASA,EAAQ,MAAY,KAAO,QACpCA,EAASA,EAAQ,MAAY,KAAO,QACpCA,EAASA,EAAQ,KAAW,KAAO,OACnCA,EAASA,EAAQ,KAAW,KAAO,OACnCA,EAASA,EAAQ,MAAY,KAAO,QACpCA,EAASA,EAAQ,MAAY,KAAO,QACpCA,EAASA,EAAQ,IAAU,YAAc,MAR7C,CAScxE,EAAQwE,WAAaxE,EAAQwE,SAAW,4BCXtD1E,OAAOC,eAAeC,EAAS,aAAc,CAAEC,OAAO,IACtD,IAAI4D,EAAa1D,EAAQ,OAYzBH,EAAQoF,SANR,SAAkBY,GACd,OAAO,SAAU7C,GAEb,OADAU,EAAWqC,YAAY/C,EAAQ6C,GACxB7C,0BCVfrD,OAAOC,eAAeC,EAAS,aAAc,CAAEC,OAAO,IACtD,IAAIC,EAAWC,EAAQ,OAWvBH,EAAQwH,OANR,SAAgBxB,GACZ,OAAO,SAAU7C,GAEb,OADAjD,EAASuH,UAAUtE,EAAQ6C,GACpB7C,0BCTfrD,OAAOC,eAAeC,EAAS,aAAc,CAAEC,OAAO,IACtD,IAAIyH,EAAMvH,EAAQ,OAClBA,EAAQ,OACR,IAAIwH,EAAYC,OAAO,aAavB5H,EAAQ6H,UALR,SAAmBC,GACf,OAAO,SAAU3E,EAAQC,GACrBM,QAAQqE,eAAeJ,EAAWG,EAAQ3E,EAAQC,KAwC1DpD,EAAQgI,IAzBR,SAAa7D,EAAOG,GAEhB,IADA,IAAI2D,EAAU,GACLC,EAAK,EAAGA,EAAK3E,UAAUxC,OAAQmH,IACpCD,EAAQC,EAAK,GAAK3E,UAAU2E,GAEhC,OAAO,SAAU/E,EAAQC,EAAK+E,GAC1B,IAAIC,EAAiBD,EAAWlI,MAgBhC,OAfAkI,EAAWlI,MAAQ,WAEf,IADA,IAAIoI,EAAO,GACFH,EAAK,EAAGA,EAAK3E,UAAUxC,OAAQmH,IACpCG,EAAKH,GAAM3E,UAAU2E,GAEzB,IAAIJ,EAASpE,QAAQ4E,eAAeX,EAAWxE,EAAQC,GACnDmF,EAASb,EAAIc,UAAUrF,GAO3B,OANI2E,EACAS,EAAOE,IAAIxE,MAAMsE,EAAQ,CAACpE,EAAO2D,EAAQxD,GAASoE,OAAOT,IAGzDM,EAAOE,IAAIxE,MAAMsE,EAAQ,CAACpE,EAAOG,GAASoE,OAAOT,IAE9CG,EAAeO,KAAKnI,KAAM6H,IAE9BF,2BClDfrI,OAAOC,eAAeC,EAAS,aAAc,CAAEC,OAAO,IACtD,IAAIyH,EAAMvH,EAAQ,OACdyI,EAAiB,IAAIlD,IACzBkD,EAAejD,IAAI,WACnB,IAAI3E,EAAW,IAAI6E,IAyBnB7F,EAAQyH,UAAY,SAAUvG,EAAQ8E,GAMlC,OArBkB,SAAU9E,GAG5B,GAAMA,aAAkBwG,EAAImB,UAA5B,CAIA,IAAIC,EAAY,IAAI5H,EAEpB0H,EAAezC,SAAQ,SAAUC,GAC7B,IAAK0C,EAAU1C,MAAc0C,EAAU1C,aAAoBjF,UACvD,MAAM,IAAIkF,MAAM,2CAA6CD,OAKrE2C,CAAgB7H,GAEXF,EAASwF,IAAIR,IACdhF,EAASyF,IAAIT,EAAM9E,GAEhBA,GAEXlB,EAAQoB,UAAY,SAAU4E,GAAQ,OAAOhF,EAASQ,IAAIwE,yBCrC1DlG,OAAOC,eAAeC,EAAS,aAAc,CAAEC,OAAO,IAEtD,SAAWiC,GACPA,EAAe,MAAY,QAC3BA,EAAe,QAAc,UAC7BA,EAAe,KAAW,OAH9B,CAIqBlC,EAAQkC,kBAAoBlC,EAAQkC,gBAAkB,0BCN3EpC,OAAOC,eAAeC,EAAS,aAAc,CAAEC,OAAO,IACtD,IAAI4I,EACA,SAAmBG,GACfxI,KAAKwI,cAAgBA,GAI7BhJ,EAAQ6I,UAAYA,yBCPpB,IAAIxG,EAAa7B,MAAQA,KAAK6B,WAAe,WACzC,IAAIC,EAAgB,SAAUC,EAAGC,GAI7B,OAHAF,EAAgBxC,OAAO2C,gBAClB,CAAEC,UAAW,cAAgBC,OAAS,SAAUJ,EAAGC,GAAKD,EAAEG,UAAYF,IACvE,SAAUD,EAAGC,GAAK,IAAK,IAAII,KAAKJ,EAAOA,EAAEK,eAAeD,KAAIL,EAAEK,GAAKJ,EAAEI,KAClEN,EAAcC,EAAGC,IAE5B,OAAO,SAAUD,EAAGC,GAEhB,SAASM,IAAOtC,KAAKuC,YAAcR,EADnCD,EAAcC,EAAGC,GAEjBD,EAAEhB,UAAkB,OAANiB,EAAa1C,OAAOkD,OAAOR,IAAMM,EAAGvB,UAAYiB,EAAEjB,UAAW,IAAIuB,IAV1C,GAazCG,EAAczC,MAAQA,KAAKyC,YAAe,SAAUC,EAAYC,EAAQC,EAAKC,GAC7E,IAA2Hd,EAAvHe,EAAIC,UAAUxC,OAAQyC,EAAIF,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOvD,OAAO2D,yBAAyBN,EAAQC,GAAOC,EACrH,GAAuB,kBAAZK,SAAoD,oBAArBA,QAAQC,SAAyBH,EAAIE,QAAQC,SAAST,EAAYC,EAAQC,EAAKC,QACpH,IAAK,IAAIpB,EAAIiB,EAAWnC,OAAS,EAAGkB,GAAK,EAAGA,KAASM,EAAIW,EAAWjB,MAAIuB,GAAKF,EAAI,EAAIf,EAAEiB,GAAKF,EAAI,EAAIf,EAAEY,EAAQC,EAAKI,GAAKjB,EAAEY,EAAQC,KAASI,GAChJ,OAAOF,EAAI,GAAKE,GAAK1D,OAAOC,eAAeoD,EAAQC,EAAKI,GAAIA,GAEhE1D,OAAOC,eAAeC,EAAS,aAAc,CAAEC,OAAO,IACtD,IAAIC,EAAWC,EAAQ,MAEnB8I,EAA8B,SAAUjF,GAExC,SAASiF,IACL,OAAkB,OAAXjF,GAAmBA,EAAOC,MAAMzD,KAAM+C,YAAc/C,KAqC/D,OAvCA6B,EAAU4G,EAAcjF,GASxBiF,EAAa1H,UAAUM,QAAU,SAAUqC,GACvC,QAAKA,EAAS4D,SAIH5D,EAAS4D,OAAO9B,OAASxF,KAAKwI,cAAclB,QAAUtH,KAAK0I,qBAAqBhF,EAAS4D,UAWxGmB,EAAa1H,UAAU2H,qBAAuB,SAAUpB,GACpD,IAAIqB,EAAQ3I,KACZ,QAAKsH,EAAOsB,cAIDtB,EAAOuB,aAAaC,OAAM,SAAUC,GACvC,OAAQA,EAAOvD,OAASmD,EAAMH,cAAclB,QAAUqB,EAAMD,qBAAqBK,OAI7FN,EAAehG,EAAW,CACtB/C,EAASsH,OAAO,WACjByB,GAvC2B,CADf9I,EAAQ,OA0CZ0I,WACf7I,EAAQiJ,aAAeA,yBChEvB,IAAI5G,EAAa7B,MAAQA,KAAK6B,WAAe,WACzC,IAAIC,EAAgB,SAAUC,EAAGC,GAI7B,OAHAF,EAAgBxC,OAAO2C,gBAClB,CAAEC,UAAW,cAAgBC,OAAS,SAAUJ,EAAGC,GAAKD,EAAEG,UAAYF,IACvE,SAAUD,EAAGC,GAAK,IAAK,IAAII,KAAKJ,EAAOA,EAAEK,eAAeD,KAAIL,EAAEK,GAAKJ,EAAEI,KAClEN,EAAcC,EAAGC,IAE5B,OAAO,SAAUD,EAAGC,GAEhB,SAASM,IAAOtC,KAAKuC,YAAcR,EADnCD,EAAcC,EAAGC,GAEjBD,EAAEhB,UAAkB,OAANiB,EAAa1C,OAAOkD,OAAOR,IAAMM,EAAGvB,UAAYiB,EAAEjB,UAAW,IAAIuB,IAV1C,GAazCG,EAAczC,MAAQA,KAAKyC,YAAe,SAAUC,EAAYC,EAAQC,EAAKC,GAC7E,IAA2Hd,EAAvHe,EAAIC,UAAUxC,OAAQyC,EAAIF,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOvD,OAAO2D,yBAAyBN,EAAQC,GAAOC,EACrH,GAAuB,kBAAZK,SAAoD,oBAArBA,QAAQC,SAAyBH,EAAIE,QAAQC,SAAST,EAAYC,EAAQC,EAAKC,QACpH,IAAK,IAAIpB,EAAIiB,EAAWnC,OAAS,EAAGkB,GAAK,EAAGA,KAASM,EAAIW,EAAWjB,MAAIuB,GAAKF,EAAI,EAAIf,EAAEiB,GAAKF,EAAI,EAAIf,EAAEY,EAAQC,EAAKI,GAAKjB,EAAEY,EAAQC,KAASI,GAChJ,OAAOF,EAAI,GAAKE,GAAK1D,OAAOC,eAAeoD,EAAQC,EAAKI,GAAIA,GAEhE1D,OAAOC,eAAeC,EAAS,aAAc,CAAEC,OAAO,IACtD,IAAIC,EAAWC,EAAQ,MAEnBqJ,EAAiC,SAAUxF,GAE3C,SAASwF,IACL,OAAkB,OAAXxF,GAAmBA,EAAOC,MAAMzD,KAAM+C,YAAc/C,KAQ/D,OAVA6B,EAAUmH,EAAiBxF,GAI3BwF,EAAgBjI,UAAUM,QAAU,SAAUqC,GAC1C,OAAOA,EAASC,OAAS3D,KAAKwI,cAAc7E,OAEhDqF,EAAkBvG,EAAW,CACzB/C,EAASsH,OAAO,cACjBgC,GAV8B,CADlBrJ,EAAQ,OAaZ0I,WACf7I,EAAQwJ,gBAAkBA,yBChC1B1J,OAAOC,eAAeC,EAAS,aAAc,CAAEC,OAAO,IACtDE,EAAQ,OAJR,SAAkBsJ,GACd,IAAK,IAAI7G,KAAK6G,EAAQzJ,EAAQ6C,eAAeD,KAAI5C,EAAQ4C,GAAK6G,EAAE7G,IAIpE8G,CAASvJ,EAAQ,QACjB,IAAIwJ,EAAWxJ,EAAQ,OACvBH,EAAQ4J,OAASD,EAASC,OAC1B,IAAIhG,EAAczD,EAAQ,OAC1BH,EAAQwE,SAAWZ,EAAYY,SAC/B,IAAIgB,EAAiBrF,EAAQ,OAC7BH,EAAQqF,YAAcG,EAAeH,YACrC,IAAIwE,EAAqB1J,EAAQ,OACjCH,EAAQ+D,gBAAkB8F,EAAmB9F,gBAC7C,IAAI+F,EAAW3J,EAAQ,OACvBH,EAAQ+J,OAASD,EAASC,OAC1B,IAAIlG,EAAa1D,EAAQ,OACzBH,EAAQoF,SAAWvB,EAAWuB,SAC9B,IAAIlF,EAAWC,EAAQ,MACvBH,EAAQwH,OAAStH,EAASsH,OAC1B,IAAIwC,EAAQ7J,EAAQ,MACpBH,EAAQgI,IAAMgC,EAAMhC,IACpBhI,EAAQ6H,UAAYmC,EAAMnC,UAC1B,IAAIzH,EAAsBD,EAAQ,OAClCH,EAAQkC,gBAAkB9B,EAAoB8B,gBAC9C,IAAI+H,EAAe9J,EAAQ,OAC3BH,EAAQ6I,UAAYoB,EAAapB,UACjC,IAAIqB,EAAkB/J,EAAQ,OAC9BH,EAAQiJ,aAAeiB,EAAgBjB,aACvC,IAAIkB,EAAqBhK,EAAQ,OACjCH,EAAQwJ,gBAAkBW,EAAmBX,qCC7B7C1J,OAAOC,eAAeC,EAAS,aAAc,CAAEC,OAAO,IAEtD,IAmBImK,EAnBAC,EAAW,uIACXC,EAAgB,cAUpBtK,EAAQuK,QAAU,SAAUtK,EAAOc,EAAQyJ,QACrB,IAAdA,IAAwBA,EAAY,KAExC,IADA,IAAIC,EAAWC,OAAOzK,GACfwK,EAAS1J,OAASA,GACrB0J,EAAWD,EAAYC,EAE3B,OAAOA,GAGX,SAAWL,GACPA,EAAc,QAAc,wBAC5BA,EAAc,SAAe,aAC7BA,EAAc,QAAc,kBAC5BA,EAAc,KAAW,yBACzBA,EAAc,QAAc,wBAC5BA,EAAc,cAAoB,oBANtC,CAOGA,EAAiBpK,EAAQoK,iBAAmBpK,EAAQoK,eAAiB,KACxE,IAAIO,EAAQ,CACRpI,EAAG,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,SAAU,SAC3D,UAAW,YAAa,WAAY,SAAU,YAClDkH,EAAG,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACxD,MAAO,MAAO,MAAO,UAAW,WAAY,QAAS,QAAS,MAAO,OACrE,OAAQ,SAAU,YAAa,UAAW,WAAY,aAE1DmB,EAAa,GACbC,EAAS,CACTtI,EAAG,SAAUuI,GAAQ,OAAOA,EAAKC,WACjCC,GAAI,SAAUF,GAAQ,OAAO9K,EAAQuK,QAAQO,EAAKC,UAAW,EAAG,MAChEE,IAAK,SAAUH,GAAQ,OAAOH,EAAMpI,EAAEuI,EAAKI,WAC3CC,KAAM,SAAUL,GAAQ,OAAOH,EAAMpI,EAAEuI,EAAKI,SAAW,IACvDE,EAAG,SAAUN,GAAQ,OAAOA,EAAKO,WAAa,GAC9CC,GAAI,SAAUR,GAAQ,OAAO9K,EAAQuK,QAAQO,EAAKO,WAAa,EAAG,EAAG,MACrEE,IAAK,SAAUT,GAAQ,OAAOH,EAAMlB,EAAEqB,EAAKO,aAC3CG,KAAM,SAAUV,GAAQ,OAAOH,EAAMlB,EAAEqB,EAAKO,WAAa,KACzDI,GAAI,SAAUX,EAAMY,GAAS,OAAOhB,OAAOgB,EAAQZ,EAAKa,cAAgBb,EAAKc,kBAAkBC,MAAM,IACrGC,KAAM,SAAUhB,EAAMY,GAAS,OAAOA,EAAQZ,EAAKa,cAAgBb,EAAKc,kBACxEG,EAAG,SAAUjB,GAAQ,OAAOA,EAAKkB,WAAa,IAAM,IACpDC,GAAI,SAAUnB,GAAQ,OAAO9K,EAAQuK,QAAQO,EAAKkB,WAAa,IAAM,GAAI,EAAG,MAC5EE,EAAG,SAAUpB,GAAQ,OAAOA,EAAKkB,YACjCG,GAAI,SAAUrB,GAAQ,OAAO9K,EAAQuK,QAAQO,EAAKkB,WAAY,EAAG,MACjEvC,EAAG,SAAUqB,GAAQ,OAAOA,EAAKsB,cACjCC,GAAI,SAAUvB,GAAQ,OAAO9K,EAAQuK,QAAQO,EAAKsB,aAAc,EAAG,MACnEE,EAAG,SAAUxB,GAAQ,OAAOA,EAAKyB,cACjCC,GAAI,SAAU1B,GAAQ,OAAO9K,EAAQuK,QAAQO,EAAKyB,aAAc,EAAG,MACnEE,EAAG,SAAU3B,GAAQ,OAAO9K,EAAQuK,QAAQO,EAAK4B,kBAAmB,IACpEC,EAAG,SAAU7B,GAAQ,OAAOA,EAAKkB,WAAa,GAAK,IAAM,KACzDY,GAAI,SAAU9B,GAAQ,OAAOA,EAAKkB,WAAa,GAAK,KAAO,MAC3Da,EAAG,SAAU/B,GAAQ,OAAOA,EAAKkB,WAAa,GAAK,IAAM,KACzDc,GAAI,SAAUhC,GAAQ,OAAOA,EAAKkB,WAAa,GAAK,KAAO,MAC3De,EAAG,SAAUjC,EAAMY,GAAS,OAAOA,EAAQ,MAAShB,OAAOI,GAAMkC,MAAM3C,GAAW4C,MAAMC,QAAQ5C,EAAe,KAC/G6C,EAAG,SAAUrC,EAAMY,GACf,IAAI0B,EAAS1B,EAAQ,EAAIZ,EAAKuC,oBAC9B,OAAQD,EAAS,EAAI,IAAM,KAAOpN,EAAQuK,QAA4C,IAApC+C,KAAKC,MAAMD,KAAKE,IAAIJ,GAAU,IAAYE,KAAKE,IAAIJ,GAAU,GAAI,EAAG,OA2B9HpN,EAAQyN,WAAa,SAAU3C,EAAM4C,GAC3B5C,aAAgB6C,OAClB7C,EAAO,IAAI6C,KAAK7C,IAGpB,IAAIY,EAA8B,UADlCgC,EAAOhD,OAAOgD,GAAQtD,EAAewD,UACnB/B,MAAM,EAAG,GAI3B,OAHIH,IACAgC,EAAOA,EAAK7B,MAAM,IA/B1B,SAAqB6B,GACjB,GAAI9C,EAAW8C,aAAiB/K,MAC5B,OAAOiI,EAAW8C,GAQtB,IANA,IAGIV,EACA/M,EAJA4N,EAAY,GACZC,EAAQ,aACRC,EAAUL,EAIPV,EAAQe,EAAQf,MAAMc,IACzB7N,EAAQ+M,EAAM,GACda,EAAU7G,KAAK6D,EAAO5K,IAAUA,GAChC8N,EAAUA,EAAQC,UAAU/N,EAAMc,QAGtC,OADA6J,EAAW8C,GAAQG,EACZA,EAiBAI,CAAYP,GAAMzM,KAAI,SAAUhB,GACnC,OAAOA,aAAiBkB,SAAWlB,EAAM6K,EAAMY,GAASzL,KACzDiO,KAAK,4BCxGZpO,OAAOC,eAAeC,EAAS,aAAc,CAAEC,OAAO,IACtD,IAAI2D,EAAczD,EAAQ,OACtBmF,EAAYnF,EAAQ,MACpBgO,EAAmBhO,EAAQ,OAa/BH,EAAQuE,OAHR,SAAgB3D,EAAQsD,GACpB,OAmWJ,SAAyBkK,EAAWlK,GAIhC,IAHA,IAAImK,EACA/J,EAAU,GACVtC,EAAQoM,EAAUrN,OACbkB,EAAI,EAAGA,EAAID,EAAOC,IACF,OAAjBmM,EAAUnM,KACNmM,EAAUnM,aAAcnC,OAER,OADhBuO,EAAWD,EAAUnM,GAAGmM,UAAUlK,EAAUkK,EAAUnM,GAAGqM,WAErDhK,GAAW+J,GAIf/J,GAAW8J,EAAUnM,IAIjC,OAAOqC,EAAQiK,OApXRC,CA8PX,SAA4B5N,GACxB,GAAI6N,EAAiBjI,IAAI5F,GACrB,OAAO6N,EAAiBjN,IAAIZ,GAEhC,OAYJ,SAAwBA,GACpB,IAAI8N,EAAc9N,EAAOoM,MAAM,wBAC1B/L,KAAI,SAAUhB,GAAS,OAahC,SAA6B0O,GACzB,IAAIC,EAAS,yBAAyBC,KAAKF,GAC3C,GAAc,MAAVC,EACA,OAAOD,EAEN,GAAIC,EAAO7N,OAAS,EACrB,MAAO,CACHqN,UAAWU,EAAsBF,EAAO,IACxCN,OAAQ,IAIZ,IAAIF,EAAYU,EAAsBF,EAAO,IAC7C,OAAKR,EAIE,CACHA,UAAWA,EACXE,QAqCiBS,EAxCYH,EAAO,IAyCzBG,EAAQC,MAAM,KAAO,IA3CzB,KA0CnB,IAA6BD,EArEUE,CAAoBhP,MAGvD,OADAwO,EAAiBhI,IAAI7F,EAAQ8N,GACtBA,EAjBAQ,CAAetO,GAlQCuO,CAAmBvO,GAASsD,IAIvD,IAAIuK,EAAmB,IAAI5I,IACvBuJ,EAAc,CACd,WAwBJ,SAAuBlL,GACnB,OAAOA,EAASqE,QAxBhB,SAmCJ,SAAqBrE,EAAUoK,GAC3B,OAAOH,EAAiBV,WAAWvJ,EAAS4G,KAAMqD,EAAiB/D,eAAekE,EAAO,KAAOA,EAAO,KAnCvG,yBA6CJ,SAA0BpK,GACtB,IAAII,EAAU,GACd,GAAsB,MAAlBJ,EAASS,MACT,GAAIT,EAASS,MAAM0K,MAAO,CACtB,IAAIC,EAASpL,EAASS,MAAM0K,MAAML,MAAM,OACxC1K,GAAWgL,EAAOC,QAAO,SAAUC,EAAavP,GAAS,OAAOuP,EAAe,KAAOvP,EAAQ,aAE/D,MAA1BiE,EAASS,MAAML,SAA8C,KAA3BJ,EAASS,MAAML,UACtDA,GAAW,KAAOJ,EAASS,MAAMqB,KAAO,KAAO9B,EAASS,MAAML,QAAU,MAGhF,OAAOA,GAvDP,SAkEJ,SAAqBJ,GACZA,EAASuL,MACVC,EAAgBxL,GAEpB,OAAOA,EAASuL,MArEhB,YA4GJ,SAA2BvL,EAAUoK,GACjC,IAAIhK,EAAU,KACd,GAAIJ,EAASyL,WAAY,CAErB,IAAK,IAAIvM,KADTkB,EAAU,GACMJ,EAASyL,WACjBrB,EAAO,GACHA,EAAO,KAAOlL,GACdkB,EAAQ0C,KAAK9C,EAASyL,WAAWvM,IAIrCkB,EAAQ0C,KAAK,IAAM5D,EAAM,IAAMc,EAASyL,WAAWvM,GAAO,KAGlE,MAAO,IAAMkB,EAAQ4J,KAAK,KAAO,IAErC,OAAO5J,GA3HP,SA8EJ,SAA2BJ,GAClBA,EAAS0L,YACVF,EAAgBxL,GAEpB,MAAO,GAAKA,EAAS0L,YAjFrB,OA2FJ,SAAuB1L,GACdA,EAAS2L,QACVH,EAAgBxL,GAEpB,MAAO,GAAKA,EAAS2L,QA9FrB,gBAmIJ,SAA2B3L,GACvB,OAAOA,EAASI,SAnIhB,WA2KJ,SAA2BJ,GACvB,OAAOoB,EAAUW,gBAAgB/B,EAAS4L,SA3K1C,OAoJJ,SAAuB5L,GACnB,OAAQA,EAAS4D,OAAUiI,EAAuB7L,EAAS4D,QAAU,IApJrE,iBA8JJ,SAA6B5D,GACzB,OAAQA,EAAS4D,OAAU5D,EAAS4D,OAAO9B,KAAO,IA9JlD,EAgLJ,WACI,MAAO,MAhLP,UA0LJ,SAAsB9B,GAClB,OAAQA,EAASC,OACb,KAAKP,EAAYY,SAASC,MACtB,MAAO,QACX,KAAKb,EAAYY,SAASE,MACtB,MAAO,QACX,KAAKd,EAAYY,SAASK,KACtB,MAAO,OACX,KAAKjB,EAAYY,SAASO,KACtB,MAAO,OACX,KAAKnB,EAAYY,SAASS,MACtB,MAAO,QACX,KAAKrB,EAAYY,SAASU,MAC1B,QACI,MAAO,UAvMf,aAkNJ,SAAyBhB,GACrB,MAAO,GAAKA,EAAS8L,UAlNrB,oBA4NJ,SAA+B9L,GAC3B,MAAO,GAAKA,EAAS+L,WA9FzB,SAASF,EAAuBjI,GAC5B,GAAIA,EAAOsB,aAAc,CACrB,IAAI8G,EAAYpI,EAAOuB,aAAapI,KAAI,SAAUsI,GAAU,OAAOwG,EAAuBxG,MAC1F,OAAOzB,EAAO9B,KAAO,KAAOkK,EAAY,KAGxC,MAAO,GAAKpI,EAAO9B,KAqK3B,SAAS8I,EAAsBC,GAE3B,IAAK,IAAI3L,KAAOgM,EACZ,GAAIA,EAAYvM,eAAeO,IACnB,IAAI+M,OAAO,KAAO/M,EAAM,MACtByL,KAAKE,GACX,OAAOK,EAAYhM,GAI/B,OAAO,KAsDX,SAASsM,EAAgBxL,GACrB,GAAIA,EAASkM,cAAe,CACxB,IACIX,EADQvL,EAASkM,cAAcf,MAAML,MAAM,OAC9B,GAIbqB,GADJZ,GADAA,GADAA,EAAOA,EAAKvC,QAAQ,yCAA0C,KAClDA,QAAQ,IAAK,KACbA,QAA6B,qBAAboD,SAA4BA,SAASC,KAAO,GAAI,IAAIhC,QAC3DS,MAAM,MAC3B9K,EAAS2L,OAASQ,EAAUpD,MAC5B/I,EAAS0L,WAAaS,EAAUpD,MAE5B,IACIuD,EADOrQ,EAAQ,OACDsQ,QAAQtQ,EAAAA,EAAAA,EAAAA,GAAauQ,UAClCL,EAAU,IAAOA,EAAU,GAAGM,WAAWH,KAC1CA,EAAS,IAEbtM,EAASwM,SAAWL,EAAUnC,KAAK,KAAKhB,QAAQsD,EAAQ,IAAItD,QAAQ,YAAa,SAOrFhJ,EAAS2L,OAAS,IAClB3L,EAASwM,SAAW,YACpBxM,EAAS0L,WAAa,IAE1B1L,EAASuL,KAAOvL,EAASwM,iCCva7B,IAAIE,EAAYpQ,MAAQA,KAAKoQ,UAAa,WAStC,OARAA,EAAW9Q,OAAO+Q,QAAU,SAASC,GACjC,IAAK,IAAIxE,EAAGrK,EAAI,EAAG8O,EAAIxN,UAAUxC,OAAQkB,EAAI8O,EAAG9O,IAE5C,IAAK,IAAIW,KADT0J,EAAI/I,UAAUtB,GACOnC,OAAOyB,UAAUsB,eAAe8F,KAAK2D,EAAG1J,KACzDkO,EAAElO,GAAK0J,EAAE1J,IAEjB,OAAOkO,GAEJF,EAAS3M,MAAMzD,KAAM+C,YAEhCzD,OAAOC,eAAeC,EAAS,aAAc,CAAEC,OAAO,IACtD,IAAI4D,EAAa1D,EAAQ,OACrB0J,EAAqB1J,EAAQ,OAC7ByD,EAAczD,EAAQ,OACtBwJ,EAAWxJ,EAAQ,OACnB6Q,EAAW7Q,EAAQ,OACnBmF,EAAYnF,EAAQ,MACpB2D,EAAoB3D,EAAQ,OAK5B8Q,EACO,CAACpH,EAAmB9F,iBAE3BmN,EAA0B,kBAM1BC,EAAyC,CACzCtK,UAAWoK,EACXG,QAAS,CAAC,CACFjN,MAAOP,EAAYY,SAASE,QAEpC9D,OAAQ,mBAGRyQ,EAAiB,KAWjBC,EAAyB,SAAUC,GACnC,IAAIC,EAAe,GAMnB,OALA3N,EAAW+C,2BAA2B2K,EAAU1K,WAAWV,SAAQ,SAAUsL,GACzEA,EAAgBnR,SAASgH,YAAYiK,EAAUpN,OAC/CsN,EAAgBnR,SAASK,UAAU4Q,EAAU3Q,QAC7C4Q,EAAaxK,KAAKyK,MAEfD,GA6FX,SAASE,EAAUhR,GAEVA,EAAOE,SACRF,EAAOE,OAASsQ,GAKpBxQ,EA3FoB,SAAUA,GAC9B,IAAI0Q,EAAU1Q,EAAO0Q,QACjBO,GAAU,EAgBd,GAfIrM,EAAUsM,QAAQR,GAClBA,EAAQjL,SAAQ,SAAUoC,GACtBA,EAAOsJ,IAAMtJ,EAAOsJ,KAAOlI,EAASmI,YACpCH,EAAUA,GAAWpJ,EAAOsJ,MAAQlI,EAASmI,YACxCvJ,EAAO3H,QAAmC,kBAAlB2H,EAAO3H,SAChC2H,EAAO3H,OAASF,EAAOE,QAE3B2H,EAAO3H,OAAS2H,EAAO3H,QAAUsQ,EACjC3I,EAAOpE,MAAQoE,EAAOpE,OAASzD,EAAOyD,OAASP,EAAYY,SAASE,MACpEiF,EAASoI,UAAUxJ,EAAOsJ,IAAK,IAAIb,EAASpH,OAAOrB,EAAOsJ,IAAKP,EAAuB/I,QAI1F6I,EAAU,IAETO,EAAS,CACV,IAAIK,EAAmB,CACnBH,IAAKlI,EAASmI,YACd3N,MAAOzD,EAAOyD,OAASP,EAAYY,SAASE,MAC5C9D,OAAQF,EAAOE,QAAUsQ,GAE7BE,EAAQpK,KAAKgL,GACbrI,EAASoI,UAAUpI,EAASmI,YAAa,IAAId,EAASpH,OAAOD,EAASmI,YAAaR,EAAuBU,KAE9G,OAAOpB,EAAS,GAAIlQ,EAAQ,CAAE0Q,QAASA,IAgE9Ba,CAFTvR,EApDsB,SAAUA,GAChC,IAAImG,EAAYnG,EAAOmG,UAClBvB,EAAUsM,QAAQ/K,KACnBA,EAAYoK,GAEhB,IAAIrC,EAAS/H,EACR5F,KAAI,SAAUhB,GACf,IAAIK,EACAwG,EACJ,GAAqB,kBAAV7G,EACPK,EAAWuD,EAAW8C,YAAY1G,GAClC6G,EAAiB,CACbd,KAAMnC,EAAWkC,gBAAgBzF,GACjCA,SAAUA,QAGb,GAAIL,EAAMK,SAEPA,EAD0B,kBAAnBL,EAAMK,SACFuD,EAAW8C,YAAY1G,EAAMK,UAG7BuD,EAAW6C,iBAAiBzG,EAAMK,UAEjDwG,EAAiB8J,EAAS,GAAI3Q,EAAO,CAAE+F,KAAM/F,EAAM+F,MAAQnC,EAAWkC,gBAAgBzF,GAAWA,SAAUA,QAE1G,KAAIL,EAAMsB,UAAUI,OAQrB,MAAM,IAAI0E,MAAM,sBAAyBpG,EAAQ,KAPjDK,EAAWuD,EAAW6C,iBAAiBzG,GACvC6G,EAAiB,CACbd,KAAMnC,EAAWkC,gBAAgBzF,GACjCA,SAAUA,GAOlB,OADAuD,EAAWoD,wBAAwBH,EAAed,KAAMc,GACjDA,KAEX,OAAO8J,EAAS,GAAIlQ,EAAQ,CAAEmG,UAAW+H,IAchCsD,CAAoBxR,IAG7B2Q,EAAiB3Q,GACa,IAA1BA,EAAOyR,eACPrO,EAAkBc,kBAAkB+E,EAASnB,UAAUmB,EAASmI,YAAaM,EAAwBzI,EAASmI,eAG9GhO,EAAkBuO,mBAAkB,GAY5C,SAASD,EAAwBE,GAC7B,OAAOjB,EAAeD,QAAQlQ,QAAO,SAAUjB,GAAS,OAAOA,EAAM4R,MAAQS,KAAY,GAV7FtS,EAAQ0R,UAAYA,EACpB1R,EAAQwI,UAAY,SAAU8J,GACrBjB,GACDK,EAAUP,GAEd,IAAIoB,EAOR,SAA2BD,GAEvB,GAAuB,kBAAZA,EACP,OAAOA,EAEX,MAAuB,oBAAZA,EACAhN,EAAUW,gBAAgBqM,GAET,kBAAZA,EAEI,YADhBA,EAAUhN,EAAUW,gBAAgBqM,EAAQvP,cAEjC,YAGAuP,EAIJ3I,EAASmI,YAzBHU,CAAkBF,GAC/BG,EAAeL,EAAwBG,IAAeH,EAAwBzI,EAASmI,aAC3F,OAAOnI,EAASnB,UAAU+J,EAAYE,2BC/K1C3S,OAAOC,eAAeC,EAAS,aAAc,CAAEC,OAAO,IACtD,IAAI4D,EAAa1D,EAAQ,OACrBwJ,EAAWxJ,EAAQ,OAKvBH,EAAQ8R,YAAc,OAItB,IAAIY,EAAW,IAAI7M,IACnB7F,EAAQ+R,UAAY,SAAUF,EAAKtJ,GAC/BmK,EAASjM,IAAIoL,EAAKtJ,IAWtBvI,EAAQwI,UAAY,SAAU8J,EAAS5R,GACnC,GAAIgS,EAASlM,IAAI8L,GACb,OAAOI,EAASlR,IAAI8Q,GAGpB,IAAIzL,EAAYhD,EAAW+C,2BAA2BlG,EAAOmG,WACxD5F,KAAI,SAAUwQ,GAGf,OAFAA,EAAgBnR,SAASgH,YAAY5G,EAAOyD,OAC5CsN,EAAgBnR,SAASK,UAAUD,EAAOE,QACnC6Q,KAEX,OAAO,IAAI9H,EAASC,OAAO0I,EAASzL,2BCnC5C/G,OAAOC,eAAeC,EAAS,aAAc,CAAEC,OAAO,IACtD,IAAIyH,EAAMvH,EAAQ,OACd2J,EAAW3J,EAAQ,OACnByJ,EAAwB,WACxB,SAASA,EAAO0I,EAAS1M,GACrBpF,KAAKoF,WAAaA,EAClBpF,KAAKmS,YAAcL,EACnB9R,KAAKoS,aAAe,EACpBpS,KAAKqS,WAAa,IAAIlF,MAAQmF,UAmJlC,OAjJAlJ,EAAOrI,UAAUkH,IAAM,SAAUtE,EAAO2D,GAGpC,IAFA,IAAIqB,EAAQ3I,KACR6H,EAAO,GACFH,EAAK,EAAGA,EAAK3E,UAAUxC,OAAQmH,IACpCG,EAAKH,EAAK,GAAK3E,UAAU2E,GAE7B,IAAI6K,EAASxP,UACb/C,KAAKoF,WAAWO,SAAQ,SAAU7F,GAC9B,OAAOA,EAASqB,OAAOwH,EAAM6J,mBAAmB7O,EAAO4O,EAAQ,QAGvEnJ,EAAOrI,UAAU0R,MAAQ,SAAUnL,GAG/B,IAFA,IAAIqB,EAAQ3I,KACR6H,EAAO,GACFH,EAAK,EAAGA,EAAK3E,UAAUxC,OAAQmH,IACpCG,EAAKH,EAAK,GAAK3E,UAAU2E,GAE7B,IAAI6K,EAASxP,UACb/C,KAAKoF,WAAWO,SAAQ,SAAU7F,GAC9B,OAAOA,EAASqB,OAAOwH,EAAM6J,mBAAmBtL,EAAIlD,SAASC,MAAOsO,QAG5EnJ,EAAOrI,UAAUoD,MAAQ,SAAUmD,GAG/B,IAFA,IAAIqB,EAAQ3I,KACR6H,EAAO,GACFH,EAAK,EAAGA,EAAK3E,UAAUxC,OAAQmH,IACpCG,EAAKH,EAAK,GAAK3E,UAAU2E,GAE7B,IAAI6K,EAASxP,UACb/C,KAAKoF,WAAWO,SAAQ,SAAU7F,GAC9B,OAAOA,EAASqB,OAAOwH,EAAM6J,mBAAmBtL,EAAIlD,SAASE,MAAOqO,QAG5EnJ,EAAOrI,UAAUuD,KAAO,SAAUgD,GAG9B,IAFA,IAAIqB,EAAQ3I,KACR6H,EAAO,GACFH,EAAK,EAAGA,EAAK3E,UAAUxC,OAAQmH,IACpCG,EAAKH,EAAK,GAAK3E,UAAU2E,GAE7B,IAAI6K,EAASxP,UACb/C,KAAKoF,WAAWO,SAAQ,SAAU7F,GAC9B,OAAOA,EAASqB,OAAOwH,EAAM6J,mBAAmBtL,EAAIlD,SAASK,KAAMkO,QAG3EnJ,EAAOrI,UAAUyD,KAAO,SAAU8C,GAG9B,IAFA,IAAIqB,EAAQ3I,KACR6H,EAAO,GACFH,EAAK,EAAGA,EAAK3E,UAAUxC,OAAQmH,IACpCG,EAAKH,EAAK,GAAK3E,UAAU2E,GAE7B,IAAI6K,EAASxP,UACb/C,KAAKoF,WAAWO,SAAQ,SAAU7F,GAC9B,OAAOA,EAASqB,OAAOwH,EAAM6J,mBAAmBtL,EAAIlD,SAASO,KAAMgO,QAG3EnJ,EAAOrI,UAAU4D,MAAQ,SAAU2C,GAG/B,IAFA,IAAIqB,EAAQ3I,KACR6H,EAAO,GACFH,EAAK,EAAGA,EAAK3E,UAAUxC,OAAQmH,IACpCG,EAAKH,EAAK,GAAK3E,UAAU2E,GAE7B,IAAI6K,EAASxP,UACb/C,KAAKoF,WAAWO,SAAQ,SAAU7F,GAC9B,OAAOA,EAASqB,OAAOwH,EAAM6J,mBAAmBtL,EAAIlD,SAASS,MAAO8N,QAG5EnJ,EAAOrI,UAAU2R,MAAQ,SAAUpL,GAG/B,IAFA,IAAIqB,EAAQ3I,KACR6H,EAAO,GACFH,EAAK,EAAGA,EAAK3E,UAAUxC,OAAQmH,IACpCG,EAAKH,EAAK,GAAK3E,UAAU2E,GAE7B,IAAI6K,EAASxP,UACb/C,KAAKoF,WAAWO,SAAQ,SAAU7F,GAC9B,OAAOA,EAASqB,OAAOwH,EAAM6J,mBAAmBtL,EAAIlD,SAASU,MAAO6N,QAY5EnJ,EAAOrI,UAAUyR,mBAAqB,SAAU7O,EAAOkE,EAAM+E,QAC1C,IAAXA,IAAqBA,EAAS,GAClC,IAAI+F,EAAU,IAAIxF,KACdhJ,EAAQ,KAEZ,IACI,MAAM,IAAI0B,MAEd,MAAO+M,GACHzO,EAAQyO,EAiBZ,IAfA,IAAIlP,EAAW,CACX4G,KAAMqI,EACNxO,MAAO,KACPyL,cAAezL,EACf8K,KAAM,KACNtL,MAAOA,EACPyL,WAAY,KACZrH,OAAQ/H,KAAKmS,YACbrO,QAAS,GACTwL,OAAQtP,KAAK6S,eAAiBhL,EAAKiL,OAAOC,OAAS,EACnD5D,gBAAY6D,EACZxD,SAAUmD,EAAQL,UAAYtS,KAAKqS,UACnC5C,SAAUzP,KAAKoS,gBAEf9E,EAAQ,QACH7L,EAAImL,EAAQnL,EAAIoG,EAAKtH,OAAQkB,IAC9BA,IAAMmL,GAAWnL,IAAMmL,EAAS,GAAKlJ,EAAS4D,OAC1CO,EAAKpG,aAAc6H,EAASC,OAC5B7F,EAAS4D,OAASO,EAAKpG,GAGvBiC,EAASI,QAAU+D,EAAKpG,GAGvB6L,EAAMe,KAAK3K,EAASI,SACzBJ,EAASI,QAAUJ,EAASI,QAAQ4I,QAAQ,OAAQ7E,EAAKpG,IAEpDoG,EAAKpG,aAAcoE,MACxBnC,EAASS,MAAQ0D,EAAKpG,GAGtBiC,EAASyL,WAAatH,EAAKpG,GAGnC,OAAOiC,GAUX0F,EAAOrI,UAAU8R,aAAe,WAE5B,OADY7S,MAGToJ,EAxJiB,GA0J5B5J,EAAQ4J,OAASA,uBC7JjB9J,OAAOC,eAAeC,EAAS,aAAc,CAAEC,OAAO,IACtD,IAAI8J,EAAwB,WAKxB,SAASA,EAAO/D,GACZxF,KAAKiT,SAAW,IAAI/N,IACpBlF,KAAKkT,MAAQ1N,EAgEjB,OAzDA+D,EAAO4J,UAAY,SAAU3N,GAIzB,OAHK+D,EAAO6J,SAAS/Q,eAAemD,KAChC+D,EAAO6J,SAAS5N,GAAQ,IAAI+D,EAAO/D,IAEhC+D,EAAO6J,SAAS5N,IAE3BlG,OAAOC,eAAegK,EAAOxI,UAAW,OAAQ,CAK5CC,IAAK,WACD,OAAOhB,KAAKkT,OAEhBjS,YAAY,EACZC,cAAc,IAMlBqI,EAAOxI,UAAU8H,WAAa,WAC1B,IAAIuF,EAAS,GAEb,OADApO,KAAKiT,SAAStN,SAAQ,SAAU2B,GAAU,OAAO8G,EAAO5H,KAAKc,MACtD8G,GAMX7E,EAAOxI,UAAU6H,WAAa,WAC1B,OAAO5I,KAAKiT,SAASI,KAAO,GAMhC9J,EAAOxI,UAAUuS,OAAS,SAAUhM,GAEhC,OADAtH,KAAKiT,SAASM,OAAOjM,GACdtH,MAMXuJ,EAAOxI,UAAUyS,WAAa,WAE1B,IADA,IAAIC,EAAU,GACL/L,EAAK,EAAGA,EAAK3E,UAAUxC,OAAQmH,IACpC+L,EAAQ/L,GAAM3E,UAAU2E,GAG5B,IADA,IAAIgM,EAAQD,EAAQlT,OACbmT,KACH1T,KAAKiT,SAAS9N,IAAIsO,EAAQC,IAE9B,OAAO1T,MAEXuJ,EAAO6J,SAAW,GACX7J,EAvEiB,GAyE5B/J,EAAQ+J,OAASA,sBC1EjBjK,OAAOC,eAAeC,EAAS,aAAc,CAAEC,OAAO,IAStDD,EAAQiG,gBAAkB,SAAUkO,GAChC,GAAkB,KAAdA,EAAKnO,KACL,OAAOmO,EAAKnO,KAIZ,IAAIoO,EAASD,EAAKE,WAAWrG,UAAU,YAAYjN,QAGnD,OAFAqT,EAASA,EAAOpG,UAAU,EAAGoG,EAAOE,QAAQ,QAE1BF,EAAO7F,OAAU6F,EAAS,aASpDpU,EAAQ4R,QAAU,SAAU3R,GACxB,MAAyB,kBAAVA,GAAsBA,aAAiB0C,4BC1B1D,IAAI4R,EAFJzU,OAAOC,eAAeC,EAAS,aAAc,CAAEC,OAAO,IAGtD,IAAIuU,GAAuB,EAC3BxU,EAAQqS,kBAAoB,SAAUoC,GAClCD,EAAuBC,GAE3BzU,EAAQ4E,kBAAoB,SAAU2D,GAClC,IAAKiM,EACD,OAAOE,QAEX,IAAIC,EAA8B,WAC9B,SAASA,IACLnU,KAAKoU,WAAY,EACjBpU,KAAKqU,OAAS,GAuJlB,OArJAF,EAAapT,UAAUuT,OAAS,SAAUC,EAAWzQ,GAEjD,IADA,IAAI0Q,EAAO,GACF9M,EAAK,EAAGA,EAAK3E,UAAUxC,OAAQmH,IACpC8M,EAAK9M,EAAK,GAAK3E,UAAU2E,GAE7BqM,EAAgBO,OAAOnM,KAAKpF,YAEhCoR,EAAapT,UAAU0T,MAAQ,WAC3BV,EAAgBU,SAEpBN,EAAapT,UAAUS,MAAQ,SAAUkT,GACrCX,EAAgBvS,MAAMkT,IAE1BP,EAAapT,UAAU4T,IAAM,SAAUlV,GAEnC,IADA,IAAImV,EAAiB,GACZlN,EAAK,EAAGA,EAAK3E,UAAUxC,OAAQmH,IACpCkN,EAAelN,EAAK,GAAK3E,UAAU2E,GAEvCqM,EAAgBY,IAAIlR,MAAMsQ,EAAiB,CAACtU,GAAOyI,OAAO0M,KAE9DT,EAAapT,UAAU8T,OAAS,SAAUpV,GACtCsU,EAAgBc,OAAOpV,IAE3B0U,EAAapT,UAAU+T,MAAQ,SAAUC,GAErC,IADA,IAAIH,EAAiB,GACZlN,EAAK,EAAGA,EAAK3E,UAAUxC,OAAQmH,IACpCkN,EAAelN,EAAK,GAAK3E,UAAU2E,GAEvCqM,EAAgBe,MAAMrR,MAAMsQ,EAAiB,CAACgB,GAAY7M,OAAO0M,KAErET,EAAapT,UAAUiU,eAAiB,SAAUD,GAE9C,IADA,IAAIH,EAAiB,GACZlN,EAAK,EAAGA,EAAK3E,UAAUxC,OAAQmH,IACpCkN,EAAelN,EAAK,GAAK3E,UAAU2E,GAEvCqM,EAAgBiB,eAAevR,MAAMsQ,EAAiB,CAACgB,GAAY7M,OAAO0M,KAE9ET,EAAapT,UAAUkU,SAAW,WAC9BlB,EAAgBkB,YAEpBd,EAAapT,UAAUmU,aAAe,SAAUR,GACA,oBAAjCX,EAAgBmB,cACvBnB,EAAgBmB,aAAaR,IAGrCP,EAAapT,UAAUoU,0BAA4B,SAAUvP,GACzD,GAAyD,oBAA9CmO,EAAgBoB,0BACvB,OAAOpB,EAAgBoB,0BAA0BvP,IAGzDuO,EAAapT,UAAUqU,QAAU,SAAUC,GACA,oBAA5BtB,EAAgBqB,SACvBrB,EAAgBqB,QAAQC,IAGhClB,EAAapT,UAAUuU,WAAa,WACU,oBAA/BvB,EAAgBuB,YACvBvB,EAAgBuB,cAGxBnB,EAAapT,UAAUwU,MAAQ,WAE3B,IADA,IAAIC,EAAc,GACT9N,EAAK,EAAGA,EAAK3E,UAAUxC,OAAQmH,IACpC8N,EAAY9N,GAAM3E,UAAU2E,GAEhCqM,EAAgBwB,MAAM9R,MAAMsQ,EAAiByB,IAEjDrB,EAAapT,UAAU0U,KAAO,SAAUf,GACpCX,EAAgB0B,KAAKf,IAEzBP,EAAapT,UAAU2U,QAAU,SAAUhB,GACA,oBAA5BX,EAAgB2B,SACvB3B,EAAgB2B,QAAQhB,IAGhCP,EAAapT,UAAU4U,UAAY,SAAUjB,GACA,oBAA9BX,EAAgB4B,WACvB5B,EAAgB4B,UAAUjB,IAGlCP,EAAapT,UAAU6U,SAAW,SAAUlB,GACA,oBAA7BX,EAAgB6B,UACvB7B,EAAgB6B,SAASlB,IAGjCP,EAAapT,UAAU8U,YAAc,SAAUnB,GACA,oBAAhCX,EAAgB8B,aACvB9B,EAAgB8B,YAAYnB,IAGpCP,EAAapT,UAAU4D,MAAQ,SAAUb,GAErC,IADA,IAAI8Q,EAAiB,GACZlN,EAAK,EAAGA,EAAK3E,UAAUxC,OAAQmH,IACpCkN,EAAelN,EAAK,GAAK3E,UAAU2E,GAEvCK,EAAOpD,MAAMlB,MAAMsE,EAAQ,CAACjE,GAASoE,OAAO0M,KAEhDT,EAAapT,UAAUoD,MAAQ,SAAUL,GAErC,IADA,IAAI8Q,EAAiB,GACZlN,EAAK,EAAGA,EAAK3E,UAAUxC,OAAQmH,IACpCkN,EAAelN,EAAK,GAAK3E,UAAU2E,GAEvCK,EAAO5D,MAAMV,MAAMsE,EAAQ,CAACjE,GAASoE,OAAO0M,KAEhDT,EAAapT,UAAU+U,UAAY,SAAUhS,GAEzC,IADA,IAAI8Q,EAAiB,GACZlN,EAAK,EAAGA,EAAK3E,UAAUxC,OAAQmH,IACpCkN,EAAelN,EAAK,GAAK3E,UAAU2E,GAEvCK,EAAO5D,MAAMV,MAAMsE,EAAQ,CAACjE,GAASoE,OAAO0M,KAEhDT,EAAapT,UAAUyD,KAAO,SAAUV,GAEpC,IADA,IAAI8Q,EAAiB,GACZlN,EAAK,EAAGA,EAAK3E,UAAUxC,OAAQmH,IACpCkN,EAAelN,EAAK,GAAK3E,UAAU2E,GAEvCK,EAAOvD,KAAKf,MAAMsE,EAAQ,CAACjE,GAASoE,OAAO0M,KAE/CT,EAAapT,UAAUkH,IAAM,SAAUnE,GAEnC,IADA,IAAI8Q,EAAiB,GACZlN,EAAK,EAAGA,EAAK3E,UAAUxC,OAAQmH,IACpCkN,EAAelN,EAAK,GAAK3E,UAAU2E,GAEvCK,EAAOpD,MAAMlB,MAAMsE,EAAQ,CAACjE,GAASoE,OAAO0M,KAEhDT,EAAapT,UAAU2R,MAAQ,SAAU5O,GAErC,IADA,IAAI8Q,EAAiB,GACZlN,EAAK,EAAGA,EAAK3E,UAAUxC,OAAQmH,IACpCkN,EAAelN,EAAK,GAAK3E,UAAU2E,GAEvCK,EAAO2K,MAAMjP,MAAMsE,EAAQ,CAACjE,GAASoE,OAAO0M,KAEhDT,EAAapT,UAAUuD,KAAO,SAAUR,GAEpC,IADA,IAAI8Q,EAAiB,GACZlN,EAAK,EAAGA,EAAK3E,UAAUxC,OAAQmH,IACpCkN,EAAelN,EAAK,GAAK3E,UAAU2E,GAEvCK,EAAOzD,KAAKb,MAAMsE,EAAQ,CAACjE,GAASoE,OAAO0M,KAE/CT,EAAapT,UAAUgV,WAAa,SAAUrB,GAC1CX,EAAgBgC,WAAWrB,IAE/BP,EAAapT,UAAUiV,QAAU,SAAUtB,GAEvC,IADA,IAAIF,EAAO,GACF9M,EAAK,EAAGA,EAAK3E,UAAUxC,OAAQmH,IACpC8M,EAAK9M,EAAK,GAAK3E,UAAU2E,GAE7BqM,EAAgBiC,QAAQvS,MAAMsQ,EAAiB,CAACW,GAAOxM,OAAOsM,KAE3DL,EA1JuB,GAgKlC,OAJKJ,IACDA,EAAkBG,QAClBA,QAAU,IAAIC,GAEXJ,uHCzKLkC,EAAAA,WAYF,6BACIjW,KAAKkW,eAAgB,IAAIC,EAAAA,UAAWC,2DAGjC,WACH,OAAOpW,KAAKkW,2CAfT,WAIH,OAHKD,EAAgBI,WACjBJ,EAAgBI,SAAW,IAAIJ,GAE5BA,EAAgBI,eANzBJ,GCDAK,EAAAA,WAAN,6BAWU,KAAAC,WAAaC,WAAWC,GAAG,EAAK,GAAM,IAAM,IAAM,EAAM,EAAM,EAAM,wDAErE,WACL,IAAIC,GAAY,EAChB,IACE,GAA2B,kBAAhBC,aAA+D,oBAA5BA,YAAYC,YAA4B,CACpF,IAAMC,EAAS,IAAIF,YAAYG,OAAO9W,KAAKuW,YAC3CG,EAAYG,aAAkBF,YAAYG,QACrC,IAAIH,YAAYI,SAASF,aAAmBF,YAAYI,UAE/D,MAAOnE,GACP8D,GAAY,EAEd,OAAOA,+BAtBF,WAIL,OAHKJ,EAAcD,WACjBC,EAAcD,SAAW,IAAIC,GAExBA,EAAcD,eANnBC,GCAAU,EAAAA,uFAcG,WACL,IAAIN,GAAY,EAChB,IACE,IAAMO,EAASC,SAASC,cAAc,UAEtC,GADAF,EAAOG,aAAa,KAAMJ,EAAeK,oBACrCJ,EACmBjX,KAAKsX,gBAAgBL,EAAQ,CAAC,SAAU,QAAS,yBAEpEP,GAAY,GAGhB,MAAO9D,GACP8D,GAAY,EAVd,QAYE,GAAIQ,SAAU,CACZ,IAAMK,EAAkBL,SAASM,eAAeR,EAAeK,oBAC3DE,IACFA,EAAgBE,UAAY,KAIlC,OAAOf,iCAGD,SAAgBO,EAA2BS,GACjD,IAAIC,EADmE,YAE7CD,GAF6C,IAEvE,IAAK,EAAL,qBAAwC,KAA7BE,EAA6B,QAEtC,GADAD,EAAwBV,EAAOY,WAAWD,EAAaZ,EAAec,oBAEpE,OALmE,8BAQvE,OAAOH,+BA5CF,WAIL,OAHKX,EAAeX,WAClBW,EAAeX,SAAW,IAAIW,GAEzBA,EAAeX,eANpBW,GAWWA,EAAAA,mBAAqB,yBACrBA,EAAAA,mBAA6C,CAAEe,OAAO,EAAMC,oBAAoB,OCR3FC,EAAAA,2FAWG,WACL,OAAOjY,KAAKkY,0BAA4BlY,KAAKmY,mEAGxC,WACL,IAAIC,EACJ,IAEIA,EADEpY,KAAKkY,yBACwBG,UAAUC,aAAaC,mBACnDC,MAAK,SAACC,GAAD,OAAaA,EAAQC,MAAK,SAACC,GAAD,MAA4B,eAAhBA,EAAOC,WAC5C5Y,KAAKmY,wBACiBU,QAAQC,SAAQ,GAEhBD,QAAQC,SAAQ,GAEjD,MAAOlG,GACPwF,EAA+BS,QAAQC,SAAQ,GAEjD,OAAOV,wCAGD,WACN,MAA0C,kBAA3BC,UAAUC,cAA8E,oBAAxCD,UAAUC,aAAaS,kDAGhF,WACN,MAE2B,kBAAlBC,OAAOC,QAC4B,kBAAnCD,OAAOC,OAAOC,iBACoC,kBAAlDF,OAAOC,OAAOC,gBAAgBC,4CAvClC,WAIL,OAHKlB,EAAgB5B,WACnB4B,EAAgB5B,SAAW,IAAI4B,GAE1BA,EAAgB5B,eANrB4B,GCAAmB,EAAAA,WAIF,6BACIpZ,KAAKqZ,OAASpD,EAAgBqD,cAAcC,8DAGzC,WACH,IAAIC,GAAU,EAcd,OAbIxZ,KAAKqZ,OAAOI,IAAMzZ,KAAKqZ,OAAOI,GAAGjU,MAAgC,QAAxBxF,KAAKqZ,OAAOI,GAAGjU,KACpDxF,KAAKqZ,OAAOI,GAAGC,SAAW1Z,KAAKqZ,OAAOI,GAAGC,QAAQvJ,WAAW,QAC5DqJ,GAAU,EAEVtF,QAAQ1P,KAAK,4BAEVxE,KAAK2Z,aACZH,GAAU,EAEVtF,QAAQ1P,KAAK,4BAEb0P,QAAQ5P,KAAK,uFAEVkV,uBAGJ,WACH,OAASxZ,KAAKqZ,OAAOI,IAAMzZ,KAAKqZ,OAAOI,GAAGjU,MAAgC,QAAxBxF,KAAKqZ,OAAOI,GAAGjU,MAAmBxF,KAAK2Z,mCAKtF,WACH,IAAMC,EAAU5Z,KAAKqZ,OAAOI,IAAMzZ,KAAKqZ,OAAOI,GAAGjU,MAAQxF,KAAKqZ,OAAOI,GAAGjU,WAASwN,EAC3E6G,OAAgC7G,IAAvBgG,OAAOc,aAAwC,WAAXF,EACnD,MAAkB,QAAXA,GAAoBC,kCAGxB,WACH,OAAO7Z,KAAKqZ,gCAGT,WACH,IAAIU,GAAY,EAQhB,OAPI/Z,KAAKqZ,OAAOI,IAAMzZ,KAAKqZ,OAAOI,GAAGjU,MAAgC,QAAxBxF,KAAKqZ,OAAOI,GAAGjU,MACpDxF,KAAKqZ,OAAOW,QAAUha,KAAKqZ,OAAOW,OAAOxU,MAAoC,WAA5BxF,KAAKqZ,OAAOW,OAAOxU,MAChExF,KAAKqZ,OAAOY,SAAWja,KAAKqZ,OAAOY,QAAQzU,MAAqC,WAA7BxF,KAAKqZ,OAAOY,QAAQzU,OACvEuU,GAAY,GAIjBA,kCAGJ,WACH,IAAIG,GAAmB,EAQvB,OAPIla,KAAKqZ,OAAOI,IAAMzZ,KAAKqZ,OAAOI,GAAGjU,MAAgC,QAAxBxF,KAAKqZ,OAAOI,GAAGjU,MACpDxF,KAAKqZ,OAAOW,QAAUha,KAAKqZ,OAAOW,OAAOxU,MAAoC,WAA5BxF,KAAKqZ,OAAOW,OAAOxU,MAChExF,KAAKqZ,OAAOY,SAAWja,KAAKqZ,OAAOY,QAAQzU,MAAqC,kBAA7BxF,KAAKqZ,OAAOY,QAAQzU,OACvE0U,GAAmB,GAIxBA,wCAGJ,WACH,OAAO5D,EAAcgD,cAAca,6DAGhC,WACH,OAAOlC,EAAgBqB,cAAcc,kEAGlC,WACH,OAAOnC,EAAgBqB,cAAce,8DAGlC,WACH,OAAOrD,EAAesC,cAAcgB,yBA/EtClB,qGCFFmB,wFACAC,EAAQ,IAAIhE,WAAW,IACZ,SAASiE,IAEtB,IAAKF,KAGHA,EAAoC,qBAAXG,QAA0BA,OAAOH,iBAAmBG,OAAOH,gBAAgBI,KAAKD,SAA+B,qBAAbE,UAAgE,oBAA7BA,SAASL,iBAAkCK,SAASL,gBAAgBI,KAAKC,WAGrO,MAAM,IAAI/U,MAAM,4GAIpB,OAAO0U,EAAgBC,GCjBzB,4HCQA,ICFA,MAJA,SAAkBK,GAChB,MAAuB,kBAATA,GAAqBC,EAAAA,KAAWD,IDG5CE,EAAY,GAEPtZ,EAAI,EAAGA,EAAI,MAAOA,EACzBsZ,EAAUvU,MAAM/E,EAAI,KAAOoS,SAAS,IAAImH,OAAO,IAoBjD,MAjBA,SAAmBC,GACjB,IAAIrO,EAAS7J,UAAUxC,OAAS,QAAsByS,IAAjBjQ,UAAU,GAAmBA,UAAU,GAAK,EAG7E8X,GAAQE,EAAUE,EAAIrO,EAAS,IAAMmO,EAAUE,EAAIrO,EAAS,IAAMmO,EAAUE,EAAIrO,EAAS,IAAMmO,EAAUE,EAAIrO,EAAS,IAAM,IAAMmO,EAAUE,EAAIrO,EAAS,IAAMmO,EAAUE,EAAIrO,EAAS,IAAM,IAAMmO,EAAUE,EAAIrO,EAAS,IAAMmO,EAAUE,EAAIrO,EAAS,IAAM,IAAMmO,EAAUE,EAAIrO,EAAS,IAAMmO,EAAUE,EAAIrO,EAAS,IAAM,IAAMmO,EAAUE,EAAIrO,EAAS,KAAOmO,EAAUE,EAAIrO,EAAS,KAAOmO,EAAUE,EAAIrO,EAAS,KAAOmO,EAAUE,EAAIrO,EAAS,KAAOmO,EAAUE,EAAIrO,EAAS,KAAOmO,EAAUE,EAAIrO,EAAS,MAAMsO,cAMzf,IAAKC,EAASN,GACZ,MAAMO,UAAU,+BAGlB,OAAOP,GEHT,MApBA,SAAYpT,EAAS4T,EAAKzO,GAExB,IAAI0O,GADJ7T,EAAUA,GAAW,IACF8T,SAAW9T,EAAQgT,KAAOA,KAK7C,GAHAa,EAAK,GAAe,GAAVA,EAAK,GAAY,GAC3BA,EAAK,GAAe,GAAVA,EAAK,GAAY,IAEvBD,EAAK,CACPzO,EAASA,GAAU,EAEnB,IAAK,IAAInL,EAAI,EAAGA,EAAI,KAAMA,EACxB4Z,EAAIzO,EAASnL,GAAK6Z,EAAK7Z,GAGzB,OAAO4Z,EAGT,OAAOG,EAAUF,uCCpBNG,EAAAA,WAOX,WAAY9X,EAAe+X,EAAiB5X,IAAe,eAFpD,KAAAwG,MAAe,IAAI6C,MAAOwO,cAG/B3b,KAAK2D,MAAQA,EACb3D,KAAK8D,QAAUA,EACf9D,KAAK0b,QAAUA,yCAGV,WACL,OAAO1b,KAAK2D,gCAGP,WACL,OAAO3D,KAAK0b,kCAGP,WACL,OAAO1b,KAAK8D,+BAGP,WACL,OAAO9D,KAAKsK,WA1BHmR,GCIPG,EAAAA,WAYJ,6BACE5b,KAAK6b,GAAKC,IAAAA,eAA2B,CAAEtW,KAf5B,qDAkBN,WACL,OAAOxF,KAAK6b,mCAGP,WACL,MAAO,oCAnBF,WAIL,OAHKD,EAAmBvF,WACtBuF,EAAmBvF,SAAW,IAAIuF,GAE7BA,EAAmBvF,eANxBuF,GCFAG,EAAAA,WAAN,6BAEU,KAAAC,iBAAmB,0EACnB,KAAAC,gBAAkBjD,OAAOlJ,SAASoM,wDAEnC,WAAgB,WACrB,OAAO,IAAIrD,SACT,SAACC,GACCqD,MAAM,EAAKH,iBACT,CACEI,QAAS,CAAE,OAAU,mBAAoB,kBAAmB,QAC5D9M,OAAQ,QAEVkJ,MAAK,SAAC6D,GACN,GAAIA,EAAIC,GACN,OAAOD,EAAIE,OAEXzD,EAAQ,EAAK0D,2BAGfhE,MAAK,SAAC+D,GACN,GAAIA,EAAK,EAAKN,iBAAkB,CAC9B,IAAM/b,EAA6B,CACjCuc,uBAAwBF,EAAK,EAAKN,iBAAiBQ,uBACnDC,uBAAwBH,EAAK,EAAKN,iBAAiBS,uBACnDC,kBAAmBJ,EAAK,EAAKN,iBAAiBU,kBAC9CC,kBAAmBL,EAAK,EAAKN,iBAAiBW,kBAC9CC,uBAAwBN,EAAK,EAAKN,iBAAiBY,wBAErD/D,EAAQ5Y,QAER4Y,EAAQ,EAAK0D,2BAGfM,OAAM,SAAClK,GACPkG,EAAQ,EAAK0D,kEAMb,WACN,MAAO,CACLC,wBAAwB,EACxBC,wBAAwB,EACxBC,mBAAmB,EACnBC,mBAAmB,EACnBC,wBAAwB,SA/CxBd,GCAAgB,EAAAA,WAmBJ,wCAFQ,KAAAvU,eAAgB,IAAIuT,GAA6BiB,mBAGvDhd,KAAKid,qBAAuB,IAAIpE,SAAQ,SAACC,GACvC,EAAKtQ,cACFgQ,MAAK,SAAC0E,GACLpE,EAAQoE,EAAIT,2BAEbK,OAAM,SAACK,GACNrE,GAAQ,SAGd9Y,KAAKod,qBAAuB,IAAIvE,SAAQ,SAACC,GACvC,EAAKtQ,cACFgQ,MAAK,SAAC0E,GACLpE,EAAQoE,EAAIR,2BAEbI,OAAM,SAACK,GACNrE,GAAQ,SAGd9Y,KAAKqd,qBAAuB,IAAIxE,SAAQ,SAACC,GACvC,EAAKtQ,cACFgQ,MAAK,SAAC0E,GACLpE,EAAQoE,EAAIL,2BAEbC,OAAM,SAACK,GACNrE,GAAQ,SAGd9Y,KAAKsd,gBAAkB,IAAIzE,SAAQ,SAACC,GAClC,EAAKtQ,cACFgQ,MAAK,SAAC0E,GACLpE,EAAQoE,EAAIP,sBAEbG,OAAM,SAACK,GACNrE,GAAQ,SAGd9Y,KAAKud,gBAAkB,IAAI1E,SAAQ,SAACC,GAClC,EAAKtQ,cACFgQ,MAAK,SAAC0E,GACLpE,EAAQoE,EAAIN,sBAEbE,OAAM,SAACK,GACNrE,GAAQ,iGAKT,uGACE9Y,KAAKid,sBADP,6KAIA,uGACEjd,KAAKod,sBADP,6KAIA,uGACEpd,KAAKqd,sBADP,wKAIA,uGACErd,KAAKud,iBADP,wKAIA,uGACEvd,KAAKsd,iBADP,iIAjFA,WAIL,OAHKP,EAAW1G,WACd0G,EAAW1G,SAAW,IAAI0G,GAErBA,EAAW1G,eANhB0G,GCGAS,EAAAA,0EAEG,SAAI1Z,GAAmB,WAC5BiZ,EAAWzD,cAAcmE,oBAAoBjF,MAAK,SAAC7R,GAC7CA,GACF,EAAK+W,aAAa5Z,kCAKhB,SAAa6Z,GACnB3d,KAAK4d,aAAaC,QAAQC,QAAQjD,IAAQ,CACxCvQ,KAAMqT,EAAWpT,UACjB5G,MAAOga,EAAWI,WAClBrC,QAASiC,EAAWK,aACpBla,QAAS6Z,EAAWM,yCAIhB,WACN,OAAOrC,EAAmBtC,oBApBxBkE,GCAAU,EAAiB,0CAAvB,qEAEUC,WAAa,IAAIX,EAF3B,EAAuB,qCAQd,SAAO9Z,GACRA,GAAYA,EAASC,OAASD,EAASC,OAAS3D,KAAK4D,eACvD5D,KAAKiI,IAAIvE,KAVQ,iBAcb,SAAIA,GACV,OAAQA,EAASC,OACf,KAAKK,EAAAA,SAAAA,MACL,KAAKA,EAAAA,SAAAA,MACCN,EAASS,MACXnE,KAAKme,WAAWlW,IAAIjI,KAAKoe,cAAc,IAAK1a,IAI9C,MAEF,KAAKM,EAAAA,SAAAA,KACHhE,KAAKme,WAAWlW,IAAIjI,KAAKoe,cAAc,IAAK1a,IAC5C,MAEF,KAAKM,EAAAA,SAAAA,KACHhE,KAAKme,WAAWlW,IAAIjI,KAAKoe,cAAc,IAAK1a,IAG9C,KAAKM,EAAAA,SAAAA,MACL,KAAKA,EAAAA,SAAAA,UAlCY,2BA0Cb,SAAc6C,EAAkBnD,GACtC,OAAO,IAAI+X,EAAW5U,EAAUnD,EAASqE,QAAU,GAAIrE,EAASI,SAAW,OA3CxD,yBAId,WACL,MAAO,wBALY,GAASe,EAAAA,aAA1BqZ,uUAAiB,GADtBtZ,EAAAA,EAAAA,UAAS,sBACJsZ,GCAN,IAAMG,EAAyB,iCACzBC,EAAuB,uBAEvBC,EAAeva,EAAAA,SAAAA,MAEfwa,EAAgB,kBAEhBC,EAAAA,WAoBJ,6BATQ,KAAAC,QAAU1F,OAAO2F,aACjB,KAAAC,YAAa,EAEb,KAAAC,YAAsB,GAO5B7e,KAAK8e,kBACL9e,KAAK+e,eAAeR,GACnBvF,OAAegG,qBAAuBhb,EAAAA,SACtCgV,OAAeiG,uBAAyBX,0CAGpC,SAAUY,EAAoBC,EAAuBC,GAC1D,OAAOpX,EAAAA,EAAAA,WAAU,CAACkX,EAAYC,EAAeC,GAAY1R,KAAK,mCAGzD,SAAcwR,EAAoBC,EAAuBC,GAC9D,OAAOpX,EAAAA,EAAAA,WAAU,CAACkX,EAAYC,EAAeC,GAAY1R,KAAK,+BAGhE,WACE,OAAO1N,KAAK6e,0CAGN,SAAehY,GAAkB,WACjCwY,EAAcrf,KAAK0e,QAAQY,QAAQhB,GACzC,GAAoB,OAAhBe,EAAsB,CACxB,IAAME,EAAmBF,EAEzBnL,QAAQ5P,KAAK,+CAAgDib,GAC7Dvf,KAAKwf,iBAAiB,CAAC,UAAWtB,GAAoBqB,QAEtD,IACE,IAAM5Y,EAAWoW,EAAWzD,cAAcmG,oBAC1Czf,KAAKwf,iBAAiB,CAAC,UAAWtB,GAAoBla,EAAAA,SAAAA,MACtD2C,EAAS6R,MAAK,SAAC/Y,GACb,EAAK+f,iBAAiB,CAAC,UAAWtB,GAAoBze,EAAQuE,EAAAA,SAAAA,KAAgBA,EAAAA,SAAAA,OAC9E,EAAK4a,YAAa,KACjB9B,OAAM,SAAClK,GAERsB,QAAQ/P,MAAMyO,MAEhB,MAAOA,GAEPsB,QAAQ/P,MAAMyO,GACd5S,KAAKwf,iBAAiB,CAAC,UAAWtB,GAAoBK,oCAKpD,SAAiBmB,EAAkD7Y,GAAkB,WAC3F,IAAK7G,KAAK4e,WAAY,EACpB1N,EAAAA,EAAAA,WAAU,CACR7K,UAAWqZ,EACXtf,OAAQoe,EACR7a,MAAOkD,EACP8K,eA1EsB,QA4ExB,IAAMtL,EAAYqZ,EAAajf,KAAI,SAACX,GAAD,OAAc,EAAK6f,gBAAgB7f,MAEtEoU,QAAQvP,MAAR,4BAAmC0B,EAAnC,+BACcmY,EADd,+BAEc3X,EAFd,+BA9EwB,wCAqFpB,SAAgB/G,GACtB,IAAI0F,EAAO,MACX,cAAe1F,GACb,IAAK,SACH0F,EAAO,UACP,MACF,IAAK,WACHA,EAAO,oBACP,MACF,QACEA,EAAO,eAAiB1F,EAAW,IAGvC,OAAO0F,iCAGD,WACN,IAAIoa,EAAc5f,KAAK0e,QAAQY,QAAQjB,GACvC,IAAKuB,EAAa,CAChB,IAAMC,EAAUhF,IACZgF,IACF7f,KAAK0e,QAAQZ,QAAQO,EAAwBwB,GAC7CD,EAAcC,GAGlB7f,KAAK6e,YAAce,GAAe,8CAzG7B,WAIL,OAHKnB,EAAgBpI,WACnBoI,EAAgBpI,SAAW,IAAIoI,GAE1BA,EAAgBpI,wCAUlB,WACL,OAAOgI,QAjBLI,yCCRAqB,EAAAA,WAYJ,6BACE9f,KAAK6b,GAAKC,IAAAA,eAA2B,CAAEtW,KAf5B,0DAkBN,WACL,OAAOxF,KAAK6b,mCAGP,WACL,MAAO,oCAnBF,WAIL,OAHKiE,EAAwBzJ,WAC3ByJ,EAAwBzJ,SAAW,IAAIyJ,GAElCA,EAAwBzJ,eAN7ByJ,GCDA/X,EAAS0W,EAAgBnF,cAAcyG,cAAcva,EAAMkU,EAAS,wBAE7DsG,EAAAA,WAAb,6BAEU,KAAAC,SAAW,oCACX,KAAAC,SAAW,+BACX,KAAAC,kBAAoB,sBACpB,KAAAC,kBAAoB,sBACpB,KAAAC,kBAAoB,sBACpB,KAAAC,aAAe,iBACf,KAAArE,gBAAkBjD,OAAOlJ,SAASoM,+DAE1C,WACE,OAAOlc,KAAKugB,cAAgBvgB,KAAKmgB,yDAGnC,WACE,OAAOngB,KAAKugB,cAAgBvgB,KAAKogB,yDAGnC,WACE,OAAOpgB,KAAKugB,cAAgBvgB,KAAKqgB,oDAGnC,WACE,OAAOrgB,KAAKugB,cAAgBvgB,KAAKsgB,wCAG3B,WACN,IAAMvQ,EAAO/P,KAAKwgB,mBAAqBxgB,KAAKigB,SAAWjgB,KAAKkgB,SAE5D,OADAnY,EAAOpD,MAAM,6BAA8BoL,GACpCA,kCAGD,WACN,IAAM0Q,EAAiC,cAAzBzgB,KAAKic,gBAEnB,OADAlU,EAAOpD,MAAM,yBAA0B8b,GAChCA,QAnCET,GCLPU,EAAiB,SACrBpR,EACAqR,EACAC,EACAC,GAGsE,IAFtEC,EAEsE,uDAF1C,GAC5BrZ,EACsE,uDADpC,GAClCsZ,EAAsE,uCAEtE,OAAO,IAAIlI,SAAQ,SAACC,EAASkI,GAC3B,IAAMC,EAAM,IAAIC,eAGhB,IAAK,IAAMC,KAFXF,EAAIG,KAAK9R,GAAU,MAAOqR,GAC1BM,EAAIJ,aAAeA,EACEpZ,EACfA,EAAQ0Z,IACVF,EAAII,iBAAiBF,EAAQ1Z,EAAQ0Z,IAIzCF,EAAIK,OAAS,SAAC1O,GACZ,GAAIqO,EAAIM,QAAU,KAAON,EAAIM,OAAS,IAAK,CAEzC,IAAMC,EAAmD,GACzDV,EAAgBnb,SAAQ,SAACwb,GACvB,IAAMM,EAAsBR,EAAIS,kBAAkBP,GACtB,OAAxBM,QAAwDzO,IAAxByO,IAClCD,EAAqBL,GAAUM,MAInC3I,EAAQ,CACNyI,OAAQN,EAAIM,OACZI,WAAYV,EAAIU,WAChB9T,SAAUoT,EAAIpT,SACduO,QAASoF,SAGXR,EAAO,CACLO,OAAQN,EAAIM,OACZI,WAAYV,EAAIU,WAChB9T,SAAUoT,EAAIpT,YAKpBoT,EAAIW,QAAU,SAAChP,GACboO,EAAO,CACLO,OAAQN,EAAIM,OACZI,WAAYV,EAAIU,WAChB9T,SAAUoT,EAAIpT,YAIdoT,EAAIY,QAAUd,IAChBE,EAAIY,OAAOC,WAAaf,GAE1BE,EAAIc,KAAKnB,OClDP7Y,EAAS0W,EAAgBnF,cAAcyG,cAAcva,EAAMkU,EAAS,yBAEpEsI,EAAAA,WAAN,6BAEU,KAAA9hB,OAAS,IAAI8f,oCAEd,SAAIlc,GACT,IAAMme,EAAYxD,EAAgBnF,cAAcsG,YAChD,GAAIqC,EAAW,CACb,IAAMC,EAAWC,KAAK3G,UAAU,CAC9B4G,mBAAoBH,EACpB3X,MAAM,IAAI6C,MAAOwO,cACjB0G,WAAYve,EAAQue,WACpBV,WAAY7d,EAAQ6d,aAGhBW,EAAatiB,KAAKE,OAAOqiB,0BAC/B,OAAO7B,EACL,OACA4B,EACAJ,EACA,GACA,GACA,CACE,OAAU,mBACV,eAAgB,qBAGlBpF,OAAM,SAAClK,GACP,OAAOiG,QAAQmI,OAAOpO,MAKxB,OADA7K,EAAOzD,KAAK,2BACLuU,QAAQmI,eAhCfgB,GCFAja,EAAS0W,EAAgBnF,cAAcyG,cAAcva,EAAMkU,EAAS,0BAUpE8I,EAAgB,WACpB,IAAMC,EARC3C,EAAwBxG,cAQJuE,QAE3B4E,EAAMC,SAAQ,SACZjjB,EACAmD,IARK,IAAIof,GAaQ/Z,IAAI,CACnBoa,WAAY5iB,EAAM4iB,WAClBV,WAAYliB,EAAMkiB,aACjBnJ,MAAK,WAGN,OAFAzQ,EAAOpD,MAAM,kCAAmCwd,KAAK3G,UAAU/b,IAExDgjB,EAAME,WAAW/f,MACvBka,OAAM,kBAGRtE,MAAK,WACNzQ,EAAOpD,MAAM,4CAIXie,EAAAA,8EACG,WACL,IAAMC,EAAQ7J,OAAO8J,YAAYC,MACjCP,IACA,IAAMQ,EAAQhK,OAAO8J,YAAYC,MACjChb,EAAOpD,MAAM,yBAA0Bqe,EAAQH,SAL7CD,GCrCA7a,EAAS0W,EAAgBnF,cAAcyG,cAAcva,EAAMkU,EAAS,6BAEpEuJ,EAAAA,WAaJ,6BAHQ,KAAAC,SAAmB,EAIzBnb,EAAOpD,MAAM,uEAGR,YACgB,IAAjB3E,KAAKkjB,QACPnb,EAAOpD,MAAM,oBAEboD,EAAOpD,MAAM,yBACb3E,KAAKkjB,SAAU,EACfljB,KAAKmjB,iBAAmBnK,OAAOoK,aAAY,IAAIR,GAAyBS,QAAS,0BAI9E,WACDrjB,KAAKmjB,kBACPnK,OAAOsK,cAActjB,KAAKmjB,+CA3BvB,WAIL,OAHKF,EAA0B5M,WAC7B4M,EAA0B5M,SAAW,IAAI4M,GAEpCA,EAA0B5M,eAN/B4M,GCFAM,EAAAA,WAYJ,6BACEvjB,KAAK6b,GAAKC,IAAAA,eAA2B,CAAEtW,KAf5B,0DAkBN,WACL,OAAOxF,KAAK6b,mCAGP,WACL,MAAO,oCAnBF,WAIL,OAHK0H,EAAwBlN,WAC3BkN,EAAwBlN,SAAW,IAAIkN,GAElCA,EAAwBlN,eAN7BkN,GCGAxb,EAAS0W,EAAgBnF,cAAcyG,cAAcva,EAAMkU,EAAS,yBAEpE8J,EAAyB/E,EAAgBgF,kBAAoB,QAC7DC,EAAyBjF,EAAgBgF,kBAAoB,QAE7DE,EAAAA,WAAN,6BAEU,KAAAzjB,OAAS,IAAI8f,EACb,KAAAtB,QAAU1F,OAAO2F,+CAElB,SAAI7a,GAA8B,WACjC8f,EAAmC,IAAIxK,EAAAA,EACvClD,EAAgB0N,EAAgBrK,mBAChCsK,EAAuB7jB,KAAK0e,QAAQY,QAAQkE,GAC5CM,EAAuBrF,EAAgBnF,cAAcsG,YAE3D,GAAIiE,EAEF,OADA9b,EAAOvD,KAAK,qCACLqU,QAAQC,SAAQ,GAEvB,GAAIgL,EAAsB,CACxB,IAAM5B,EAAWC,KAAK3G,UAAU,CAC9B4G,mBAAoB0B,EACpBxZ,KAAMxG,EAAQwG,KACdqO,OAAQ,CACNoL,gBAAiB7N,EAAc8N,IAAIC,aACnCC,MAAOhO,EAAcyC,OAAOuL,MAC5BC,WAAY,CACVC,IAAKtgB,EAAQugB,iBAAiBD,IAC9B7Y,EAAGzH,EAAQugB,iBAAiB9Y,EAC5B+Y,EAAGxgB,EAAQugB,iBAAiBC,GAE9BC,KAAMrO,EAAcyC,OAAO4L,KAC3BC,OAAQtO,EAAcyC,OAAO6L,OAC7BC,OAAQ,CACNC,aAAc,kBAAmB1L,OACjC2L,WAAY,eAAgBtM,UAC5BuM,cAAe,kBAAmBvM,UAClCwM,MAAO,UAAWxM,UAClByM,WAAY,WAAY5N,UAE1B6N,OAAQ,CACNC,UAAWlhB,EAAQmhB,aAAaC,QAChCC,YAAarhB,EAAQmhB,aAAad,YAEpCiB,MAAO,CACL1L,QAAS5V,EAAQuhB,YAAY3L,UAGjCD,GAAI,CACFjU,KAAM0Q,EAAcuD,GAAGjU,KACvBkU,QAAS4L,WAAWpP,EAAcuD,GAAGC,UAEvC6L,UAAW,CACTC,kBAAmBtP,EAAc8D,OAAOxU,KACxCigB,qBAAsBH,WAAWpP,EAAc8D,OAAON,SACtDgM,YAAaxP,EAAc+D,QAAQzU,KACnCmgB,eAAgBL,WAAWpP,EAAc+D,QAAQP,SACjDkM,QAAShC,EAAgB7J,eAIvBuI,EAAatiB,KAAKE,OAAO2lB,0BAC/B,OAAOnF,EACL,OACA4B,EACAJ,EACA,GACA,CAAC,QACD,CACE,OAAU,mBACV,eAAgB,qBAGlB1J,MAAK,SAAC3K,GACN,IAAMiY,EAAgBjY,EAASuO,QAAQ2J,KAGvC,OAFA,EAAKrH,QAAQZ,QAAQ0F,EAAwB,QAC7C,EAAK9E,QAAQZ,QAAQ4F,EAAwBoC,EAAgBA,EAAcza,OAAO,EAAG,GAAK,SACnF,KACNyR,OAAM,SAAClK,GACR,OAAOiG,QAAQmI,OAAOpO,MAKxB,OADA7K,EAAOzD,KAAK,yCACLuU,QAAQmI,OAAO,+CAhFxB2C,GCNA5b,EAAS0W,EAAgBnF,cAAcyG,cAAcva,EAAMkU,EAAS,0BAUpE8I,EAAgB,WACpB,IAAMC,EARCc,EAAwBjK,cAQJuE,QAE3B4E,EAAMC,SAAQ,SACZjjB,EACAmD,IARK,IAAI+gB,GAaQ1b,IAAI,CACnBqC,KAAM7K,EAAM6K,KACZ+Z,iBAAkB5kB,EAAM4kB,iBACxBY,aAAcxlB,EAAMwlB,aACpBI,YAAa5lB,EAAM4lB,cAClB7M,MAAK,WAGN,OAFAzQ,EAAOpD,MAAM,kCAAmCwd,KAAK3G,UAAU/b,IAExDgjB,EAAME,WAAW/f,MACvBka,OAAM,kBAGRtE,MAAK,WACNzQ,EAAOpD,MAAM,4CAIXqhB,GAAAA,8EAEG,WACL,IAAMnD,EAAQ7J,OAAO8J,YAAYC,MACjCP,IACA,IAAMQ,EAAQhK,OAAO8J,YAAYC,MACjChb,EAAOpD,MAAM,yBAA0Bqe,EAAQH,SAN7CmD,GCvCAje,GAAS0W,EAAgBnF,cAAcyG,cAAcva,EAAMkU,EAAS,6BAEpEuM,GAAAA,WAaJ,6BAHQ,KAAA/C,SAAmB,EAIzBnb,GAAOpD,MAAM,uEAGR,YACgB,IAAjB3E,KAAKkjB,QACPnb,GAAOpD,MAAM,oBAEboD,GAAOpD,MAAM,yBACb3E,KAAKkjB,SAAU,EACfljB,KAAKmjB,iBAAmBnK,OAAOoK,aAAY,IAAI4C,IAAyB3C,QAAS,0BAI9E,WACDrjB,KAAKmjB,kBACPnK,OAAOsK,cAActjB,KAAKmjB,+CA3BvB,WAIL,OAHK8C,EAA0B5P,WAC7B4P,EAA0B5P,SAAW,IAAI4P,GAEpCA,EAA0B5P,eAN/B4P,GCEAC,IAFSzH,EAAgBnF,cAAcyG,cAAcva,EAAMkU,EAAS,oBAEpEwM,WAAN,6BAEU,KAAAhmB,OAAS,IAAI8f,oCAEd,SAAIrC,GACT,IACE,IAAMsE,EAAYxD,EAAgBnF,cAAcsG,YAChD,GAAIqC,EAAW,CACb,IAAMC,EAAWC,KAAK3G,UAAU,CAC9B4G,mBAAoBH,EACpB3X,MAAM,IAAI6C,MAAOwO,cACjBhY,MAAOga,EAAWI,WAClBrC,QAASiC,EAAWK,aACpBla,QAAS6Z,EAAWM,eAGhBqE,EAAatiB,KAAKE,OAAOimB,qBAE/B,OAAOzF,EACL,OACA4B,EACAJ,EACA,GACA,GACA,CACE,OAAU,mBACV,eAAgB,qBAGlBpF,OAAM,SAAClK,GACP,OAAOiG,QAAQmI,OAAOpO,MAKxB,OADAsB,QAAQ5P,KAAK,2BACNuU,QAAQmI,OAAO,2BAExB,MAAOpO,GACP,OAAOiG,QAAQmI,OAAOpO,UAtCtBsT,ICFAne,GAAS0W,EAAgBnF,cAAcyG,cAAcva,EAAMkU,EAAS,qBAUpE8I,GAAgB,WACpB,IAAMC,EARC7G,EAAmBtC,cAQCuE,QAE3B4E,EAAMC,SAAQ,SACZjjB,EACAmD,IARK,IAAIsjB,IAaQje,IACf,IAAIwT,EAAWhc,EAAMkE,MAAOlE,EAAMic,QAASjc,EAAMqE,UACjD0U,MAAK,WAGL,OAFAzQ,GAAOpD,MAAM,kCAAmCwd,KAAK3G,UAAU/b,IAExDgjB,EAAME,WAAW/f,MACvBka,OAAM,kBAGRtE,MAAK,WACNzQ,GAAOpD,MAAM,4CAIXyhB,GAAAA,8EAEG,WACL,IAAMvD,EAAQ7J,OAAO8J,YAAYC,MACjCP,KACA,IAAMQ,EAAQhK,OAAO8J,YAAYC,MACjChb,GAAOpD,MAAM,yBAA0Bqe,EAAQH,SAN7CuD,GCpCAre,GAAS0W,EAAgBnF,cAAcyG,cAAcva,EAAMkU,EAAS,wBAEpE2M,GAAAA,WAaJ,6BAHQ,KAAAnD,SAAmB,EAIzBnb,GAAOpD,MAAM,uEAGR,YACgB,IAAjB3E,KAAKkjB,QACPnb,GAAOpD,MAAM,oBAEboD,GAAOpD,MAAM,yBACb3E,KAAKkjB,SAAU,EACfljB,KAAKmjB,iBAAmBnK,OAAOoK,aAAY,IAAIgD,IAAoB/C,QAAS,0BAIzE,WACDrjB,KAAKmjB,kBACPnK,OAAOsK,cAActjB,KAAKmjB,+CA3BvB,WAIL,OAHKkD,EAAqBhQ,WACxBgQ,EAAqBhQ,SAAW,IAAIgQ,GAE/BA,EAAqBhQ,eAN1BgQ,GCFAC,GAAAA,WAYJ,6BACEtmB,KAAK6b,GAAKC,IAAAA,eAA2B,CAAEtW,KAf5B,0DAkBN,WACL,OAAOxF,KAAK6b,mCAGP,WACL,MAAO,oCAnBF,WAIL,OAHKyK,EAAwBjQ,WAC3BiQ,EAAwBjQ,SAAW,IAAIiQ,GAElCA,EAAwBjQ,eAN7BiQ,GCIAC,IAFS9H,EAAgBnF,cAAcyG,cAAcva,EAAMkU,EAAS,yBAEpE6M,WAAN,6BAEU,KAAArmB,OAAS,IAAI8f,oCAEd,SAAIlc,GACT,IAAMme,EAAYxD,EAAgBnF,cAAcsG,YAChD,GAAIqC,EAAW,CACb,IAAIC,EAEFA,EADEpe,EAAQ0iB,IACCrE,KAAK3G,UAAU,CACxB4G,mBAAoBH,EACpB3X,MAAM,IAAI6C,MAAOwO,cACjB6K,IAAK1iB,EAAQ0iB,MAGJrE,KAAK3G,UAAU,CACxB4G,mBAAoBH,EACpB3X,MAAM,IAAI6C,MAAOwO,cACjB8K,aAAc3iB,EAAQ2iB,aACtBC,aAAc5iB,EAAQ4iB,eAG1B,IAAMpE,EAAatiB,KAAKE,OAAOymB,0BAE/B,OAAOjG,EACL,OACA4B,EACAJ,EACA,GACA,GACA,CACE,OAAU,mBACV,eAAgB,qBAGlBpF,OAAM,SAAClK,GACP,OAAOiG,QAAQmI,OAAOpO,MAKxB,OADAsB,QAAQ5P,KAAK,2BACNuU,QAAQmI,OAAO,iCAzCtBuF,ICFAxe,GAAS0W,EAAgBnF,cAAcyG,cAAcva,EAAMkU,EAAS,0BAUpE8I,GAAgB,WACpB,IAAMC,EARC6D,GAAwBhN,cAQJuE,QAE3B4E,EAAMC,SAAQ,SACZjjB,EACAmD,IARK,IAAI2jB,IAaQte,IAAI,CACnBue,IAAK/mB,EAAM+mB,IACXC,aAAchnB,EAAMgnB,aACpBC,aAAcjnB,EAAMinB,eACnBlO,MAAK,WAGN,OAFAzQ,GAAOpD,MAAM,kCAAmCwd,KAAK3G,UAAU/b,IAExDgjB,EAAME,WAAW/f,MACvBka,OAAM,kBAGRtE,MAAK,WACNzQ,GAAOpD,MAAM,4CAIXiiB,GAAAA,8EAEG,WACL,IAAM/D,EAAQ7J,OAAO8J,YAAYC,MACjCP,KACA,IAAMQ,EAAQhK,OAAO8J,YAAYC,MACjChb,GAAOpD,MAAM,yBAA0Bqe,EAAQH,SAN7C+D,GCtCA7e,GAAS0W,EAAgBnF,cAAcyG,cAAcva,EAAMkU,EAAS,6BAEpEmN,GAAAA,WAaJ,6BAHQ,KAAA3D,SAAmB,EAIzBnb,GAAOpD,MAAM,uEAGR,YACgB,IAAjB3E,KAAKkjB,QACPnb,GAAOpD,MAAM,oBAEboD,GAAOpD,MAAM,yBACb3E,KAAKkjB,SAAU,EACfljB,KAAKmjB,iBAAmBnK,OAAOoK,aAAY,IAAIwD,IAAyBvD,QAAS,0BAI9E,WACDrjB,KAAKmjB,kBACPnK,OAAOsK,cAActjB,KAAKmjB,+CA3BvB,WAIL,OAHK0D,EAA0BxQ,WAC7BwQ,EAA0BxQ,SAAW,IAAIwQ,GAEpCA,EAA0BxQ,eAN/BwQ,GCDAC,GAAAA,WAWJ,6BACE9mB,KAAK+mB,sDAGC,WACNd,GAA0B3M,cAAc0N,QACxC/D,EAA0B3J,cAAc0N,QACxCH,GAA0BvN,cAAc0N,QACxCX,GAAqB/M,cAAc0N,qCAjB9B,WAIL,OAHKF,EAAYzQ,WACfyQ,EAAYzQ,SAAW,IAAIyQ,GAEtBA,EAAYzQ,eANjByQ,GCAAG,GAAAA,0EAEG,SAAInjB,GAA8B,WACjCojB,EAAYlnB,KAAK+iB,MACvBhG,EAAWzD,cAAc6N,yBAAyB3O,MAAK,SAAC7R,GAClDA,GACF,EAAK+W,aAAa5Z,EAASojB,kCAKzB,SAAapjB,EAAgCojB,GACnDlnB,KAAK4d,aAAaC,QAAQC,QAAQjD,IAAQ,CACxCvQ,KAAM4c,EACN7E,WAAYve,EAAQue,WACpBV,WAAY7d,EAAQ6d,uCAIhB,WACN,OAAO7B,EAAwBxG,iCAGzB,WACN,OAAO,IAAInM,MAAOwO,oBAxBhBsL,GCAAG,GAAAA,0EAEG,SAAItjB,GAA8B,WACjCojB,EAAYlnB,KAAK+iB,MACvBhG,EAAWzD,cAAc+N,yBAAyB7O,MAAK,SAAC7R,GAClDA,GACF,EAAK+W,aAAa5Z,EAASojB,kCAKzB,SAAapjB,EAAgCojB,GACnDlnB,KAAK4d,aAAaC,QAAQC,QAAQjD,IAAQ,CACxCvQ,KAAM4c,EACN7C,iBAAkBvgB,EAAQugB,iBAC1BY,aAAcnhB,EAAQmhB,aACtBI,YAAavhB,EAAQuhB,wCAIjB,WACN,OAAO9B,EAAwBjK,iCAGzB,WACN,OAAO,IAAInM,MAAOwO,oBAzBhByL,GCAAE,GAAAA,0EAEG,SAAIxjB,GAA8B,WACjCojB,EAAYlnB,KAAK+iB,MACvBhG,EAAWzD,cAAciO,yBAAyB/O,MAAK,SAAC7R,GAClDA,GACF,EAAK+W,aAAa5Z,EAASojB,kCAKzB,SAAapjB,EAAgCojB,GACnDlnB,KAAK4d,aAAaC,QAAQC,QAAQjD,IAAQ,CACxCvQ,KAAM4c,EACNV,IAAK1iB,EAAQ0iB,IACbC,aAAc3iB,EAAQ2iB,aACtBC,aAAc5iB,EAAQ4iB,yCAIlB,WACN,OAAOJ,GAAwBhN,iCAGzB,WACN,OAAO,IAAInM,MAAOwO,oBAzBhB2L,GCMAE,GAAAA,WAMJ,6BAJQ,KAAAC,sBAAwB,IAAIL,GAC5B,KAAAM,sBAAwB,IAAIT,GAC5B,KAAAU,sBAAwB,IAAIL,GAGlCR,GAAYxN,+DAGP,SAAmBsO,GACxB5nB,KAAKynB,sBAAsBxf,IAAI2f,qCAG1B,WAA6D,kCAAvCC,EAAuC,yBAAvCA,EAAuC,gBAClEA,EAAeliB,SAAQ,SAACpE,GACtB,EAAKmmB,sBAAsBzf,IAAI1G,kCAI5B,WAAuD,kCAAvCumB,EAAuC,yBAAvCA,EAAuC,gBAC5DA,EAAeniB,SAAQ,SAACpE,GACtB,EAAKomB,sBAAsB1f,IAAI1G,6BAI5B,WAAkD,kCAAvCumB,EAAuC,yBAAvCA,EAAuC,gBACvDA,EAAeniB,SAAQ,SAACpE,GACtB,EAAKomB,sBAAsB1f,IAAI1G,YA5B/BimB,0BCLkE3Q,EAAOrX,QAAqS,SAASoT,EAAEtC,EAAEC,EAAEvN,GAAG,SAAS8I,EAAEa,EAAEob,GAAG,IAAIxX,EAAE5D,GAAG,CAAC,IAAI2D,EAAE3D,GAAG,CAAmE,GAAGlL,EAAE,OAAOA,EAAEkL,GAAE,GAAI,IAAIqb,EAAE,IAAIniB,MAAM,uBAAuB8G,EAAE,KAAK,MAAOqb,EAAEC,KAAK,mBAAoBD,EAAG,IAAIE,EAAE3X,EAAE5D,GAAG,CAACnN,QAAQ,IAAI8Q,EAAE3D,GAAG,GAAGxE,KAAK+f,EAAE1oB,SAAQ,SAASoT,GAAG,IAAIrC,EAAED,EAAE3D,GAAG,GAAGiG,GAAG,OAAO9G,EAAEyE,GAAIqC,KAAIsV,EAAEA,EAAE1oB,QAAQoT,EAAEtC,EAAEC,EAAEvN,GAAG,OAAOuN,EAAE5D,GAAGnN,QAAkD,IAA1C,IAAIiC,OAAE,EAA4CkL,EAAE,EAAEA,EAAE3J,EAAEzC,OAAOoM,IAAIb,EAAE9I,EAAE2J,IAAI,OAAOb,EAAzb,CAA6b,CAAC,EAAE,CAAC,SAASqc,EAAQtR,EAAOrX,IAC70B,SAAW4oB,GACX,aACA,IAEIC,EAyCAC,EA3CAC,EAAWH,EAAOI,kBAAoBJ,EAAOK,uBAK/C,GAAIF,EAAU,CACZ,IAAIG,EAAS,EACTC,EAAW,IAAIJ,EAASK,GACxBhjB,EAAUwiB,EAAOlR,SAAS2R,eAAe,IAC7CF,EAASG,QAAQljB,EAAS,CACxBmjB,eAAe,IAEjBV,EAAgB,WACdziB,EAAQ4O,KAAQkU,IAAWA,EAAS,QAEjC,GAAKN,EAAOY,cAAiD,qBAA1BZ,EAAOa,eAO/CZ,EADS,aAAcD,GAAU,uBAAwBA,EAAOlR,SAASC,cAAc,UACvE,WAId,IAAI+R,EAAWd,EAAOlR,SAASC,cAAc,UAC7C+R,EAASC,mBAAqB,WAC5BP,IAEAM,EAASC,mBAAqB,KAC9BD,EAASE,WAAWC,YAAYH,GAChCA,EAAW,MAEbd,EAAOlR,SAASoS,gBAAgBC,YAAYL,IAG9B,WACdM,WAAWZ,EAAU,QAvBwD,CAC/E,IAAIa,EAAU,IAAIrB,EAAOa,eACzBQ,EAAQC,MAAMC,UAAYf,EAC1BP,EAAgB,WACdoB,EAAQG,MAAMC,YAAY,IAyBhC,IAAIC,EAAQ,GAEZ,SAASlB,IAEP,IAAInnB,EAAGsoB,EADPzB,GAAW,EAGX,IADA,IAAI0B,EAAMF,EAAMvpB,OACTypB,GAAK,CAIV,IAHAD,EAAWD,EACXA,EAAQ,GACRroB,GAAK,IACIA,EAAIuoB,GACXD,EAAStoB,KAEXuoB,EAAMF,EAAMvpB,OAEd+nB,GAAW,EAIb,SAAS2B,EAAUC,GACQ,IAArBJ,EAAMtjB,KAAK0jB,IAAgB5B,GAC7BD,IAHJxR,EAAOrX,QAAUyqB,IAOd9hB,KAAKnI,KAAuB,qBAAXooB,EAAAA,EAAyBA,EAAAA,EAAyB,qBAAT+B,KAAuBA,KAAyB,qBAAXnR,OAAyBA,OAAS,KAClI,IAAI,EAAE,CAAC,SAASmP,EAAQtR,EAAOrX,GACjC,aACA,IAAIyqB,EAAY9B,EAAQ,GAGxB,SAASiC,KAET,IAAIC,EAAW,GAEXC,EAAW,CAAC,YACZC,EAAY,CAAC,aACbC,EAAU,CAAC,WAIf,SAAS3R,EAAQ4R,GACf,GAAwB,oBAAbA,EACT,MAAM,IAAIrP,UAAU,+BAEtBpb,KAAKiU,MAAQuW,EACbxqB,KAAK8pB,MAAQ,GACb9pB,KAAK0qB,aAAU,EACXD,IAAaL,GACfO,EAAsB3qB,KAAMyqB,GAsBhC,SAASG,EAAUC,EAASC,EAAaC,GACvC/qB,KAAK6qB,QAAUA,EACY,oBAAhBC,IACT9qB,KAAK8qB,YAAcA,EACnB9qB,KAAKgrB,cAAgBhrB,KAAKirB,oBAEF,oBAAfF,IACT/qB,KAAK+qB,WAAaA,EAClB/qB,KAAKkrB,aAAelrB,KAAKmrB,mBAgB7B,SAASC,EAAOP,EAASlX,EAAMlU,GAC7BwqB,GAAU,WACR,IAAIoB,EACJ,IACEA,EAAc1X,EAAKlU,GACnB,MAAOmT,GACP,OAAOyX,EAASrJ,OAAO6J,EAASjY,GAE9ByY,IAAgBR,EAClBR,EAASrJ,OAAO6J,EAAS,IAAIzP,UAAU,uCAEvCiP,EAASvR,QAAQ+R,EAASQ,MAoChC,SAASC,EAAQC,GAEf,IAAI/S,EAAO+S,GAAOA,EAAI/S,KACtB,GAAI+S,IAAuB,kBAARA,GAAmC,oBAARA,IAAuC,oBAAT/S,EAC1E,OAAO,WACLA,EAAK/U,MAAM8nB,EAAKxoB,YAKtB,SAAS4nB,EAAsBR,EAAMqB,GAEnC,IAAI9C,GAAS,EACb,SAAS+C,EAAQhsB,GACXipB,IAGJA,GAAS,EACT2B,EAASrJ,OAAOmJ,EAAM1qB,IAGxB,SAASisB,EAAUjsB,GACbipB,IAGJA,GAAS,EACT2B,EAASvR,QAAQqR,EAAM1qB,IAGzB,SAASksB,IACPH,EAASE,EAAWD,GAGtB,IAAIrd,EAASwd,EAASD,GACA,UAAlBvd,EAAOmT,QACTkK,EAAQrd,EAAO3O,OAInB,SAASmsB,EAASjY,EAAMlU,GACtB,IAAIosB,EAAM,GACV,IACEA,EAAIpsB,MAAQkU,EAAKlU,GACjBosB,EAAItK,OAAS,UACb,MAAO3O,GACPiZ,EAAItK,OAAS,QACbsK,EAAIpsB,MAAQmT,EAEd,OAAOiZ,EAIT,SAAS/S,EAAQrZ,GACf,OAAIA,aAAiBO,KACZP,EAEF4qB,EAASvR,QAAQ,IAAI9Y,KAAKoqB,GAAW3qB,GAI9C,SAASuhB,EAAO7D,GACd,IAAI0N,EAAU,IAAI7qB,KAAKoqB,GACvB,OAAOC,EAASrJ,OAAO6J,EAAS1N,GAIlC,SAAS2O,EAAIC,GACX,IAAI5B,EAAOnqB,KACX,GAAiD,mBAA7CV,OAAOyB,UAAU8S,SAAS1L,KAAK4jB,GACjC,OAAO/rB,KAAKghB,OAAO,IAAI5F,UAAU,qBAGnC,IAAI4O,EAAM+B,EAASxrB,OACfmoB,GAAS,EACb,IAAKsB,EACH,OAAOhqB,KAAK8Y,QAAQ,IAQtB,IALA,IAAIkT,EAAS,IAAI7pB,MAAM6nB,GACnBiC,EAAW,EACXxqB,GAAK,EACLopB,EAAU,IAAI7qB,KAAKoqB,KAEd3oB,EAAIuoB,GACXkC,EAAYH,EAAStqB,GAAIA,GAE3B,OAAOopB,EACP,SAASqB,EAAYzsB,EAAOgC,GAO1B,SAAS0qB,EAAeC,GACtBJ,EAAOvqB,GAAK2qB,IACNH,IAAajC,GAAQtB,IACzBA,GAAS,EACT2B,EAASvR,QAAQ+R,EAASmB,IAV9B7B,EAAKrR,QAAQrZ,GAAO+Y,KAAK2T,GAAgB,SAAUhoB,GAC5CukB,IACHA,GAAS,EACT2B,EAASrJ,OAAO6J,EAAS1mB,QAcjC,SAASkoB,EAAKN,GACZ,IAAI5B,EAAOnqB,KACX,GAAiD,mBAA7CV,OAAOyB,UAAU8S,SAAS1L,KAAK4jB,GACjC,OAAO/rB,KAAKghB,OAAO,IAAI5F,UAAU,qBAGnC,IAAI4O,EAAM+B,EAASxrB,OACfmoB,GAAS,EACb,IAAKsB,EACH,OAAOhqB,KAAK8Y,QAAQ,IAMtB,IAHA,IAAIrX,GAAK,EACLopB,EAAU,IAAI7qB,KAAKoqB,KAEd3oB,EAAIuoB,GACXS,EAASsB,EAAStqB,IAEpB,OAAOopB,EACP,SAASJ,EAAShrB,GAChB0qB,EAAKrR,QAAQrZ,GAAO+Y,MAAK,SAAU3K,GAC5B6a,IACHA,GAAS,EACT2B,EAASvR,QAAQ+R,EAAShd,OAE3B,SAAU1J,GACNukB,IACHA,GAAS,EACT2B,EAASrJ,OAAO6J,EAAS1mB,QA5OjC0S,EAAOrX,QAAUqZ,EAcjBA,EAAQ9X,UAAR,MAA6B,SAAUgqB,GACrC,OAAO/qB,KAAKwY,KAAK,KAAMuS,IAEzBlS,EAAQ9X,UAAUyX,KAAO,SAAUsS,EAAaC,GAC9C,GAA2B,oBAAhBD,GAA8B9qB,KAAKiU,QAAUsW,GAChC,oBAAfQ,GAA6B/qB,KAAKiU,QAAUqW,EACnD,OAAOtqB,KAET,IAAI6qB,EAAU,IAAI7qB,KAAKuC,YAAY6nB,GAQnC,OAPIpqB,KAAKiU,QAAUuW,EAEjBY,EAAOP,EADQ7qB,KAAKiU,QAAUsW,EAAYO,EAAcC,EAC9B/qB,KAAK0qB,SAE/B1qB,KAAK8pB,MAAMtjB,KAAK,IAAIokB,EAAUC,EAASC,EAAaC,IAG/CF,GAaTD,EAAU7pB,UAAUiqB,cAAgB,SAAUvrB,GAC5C4qB,EAASvR,QAAQ9Y,KAAK6qB,QAASprB,IAEjCmrB,EAAU7pB,UAAUkqB,mBAAqB,SAAUxrB,GACjD2rB,EAAOprB,KAAK6qB,QAAS7qB,KAAK8qB,YAAarrB,IAEzCmrB,EAAU7pB,UAAUmqB,aAAe,SAAUzrB,GAC3C4qB,EAASrJ,OAAOhhB,KAAK6qB,QAASprB,IAEhCmrB,EAAU7pB,UAAUoqB,kBAAoB,SAAU1rB,GAChD2rB,EAAOprB,KAAK6qB,QAAS7qB,KAAK+qB,WAAYtrB,IAmBxC4qB,EAASvR,QAAU,SAAUqR,EAAM1qB,GACjC,IAAI2O,EAASwd,EAASN,EAAS7rB,GAC/B,GAAsB,UAAlB2O,EAAOmT,OACT,OAAO8I,EAASrJ,OAAOmJ,EAAM/b,EAAO3O,OAEtC,IAAI+rB,EAAWpd,EAAO3O,MAEtB,GAAI+rB,EACFb,EAAsBR,EAAMqB,OACvB,CACLrB,EAAKlW,MAAQsW,EACbJ,EAAKO,QAAUjrB,EAGf,IAFA,IAAIgC,GAAK,EACLuoB,EAAMG,EAAKL,MAAMvpB,SACZkB,EAAIuoB,GACXG,EAAKL,MAAMroB,GAAGupB,cAAcvrB,GAGhC,OAAO0qB,GAETE,EAASrJ,OAAS,SAAUmJ,EAAMhmB,GAChCgmB,EAAKlW,MAAQqW,EACbH,EAAKO,QAAUvmB,EAGf,IAFA,IAAI1C,GAAK,EACLuoB,EAAMG,EAAKL,MAAMvpB,SACZkB,EAAIuoB,GACXG,EAAKL,MAAMroB,GAAGypB,aAAa/mB,GAE7B,OAAOgmB,GAsDTtR,EAAQC,QAAUA,EAQlBD,EAAQmI,OAASA,EAMjBnI,EAAQiT,IAAMA,EAuCdjT,EAAQwT,KAAOA,GAmCb,CAAC,EAAI,IAAI,EAAE,CAAC,SAASlE,EAAQtR,EAAOrX,IACtC,SAAW4oB,GACX,aAC8B,oBAAnBA,EAAOvP,UAChBuP,EAAOvP,QAAUsP,EAAQ,MAGxBhgB,KAAKnI,KAAuB,qBAAXooB,EAAAA,EAAyBA,EAAAA,EAAyB,qBAAT+B,KAAuBA,KAAyB,qBAAXnR,OAAyBA,OAAS,KAClI,CAAC,EAAI,IAAI,EAAE,CAAC,SAASmP,EAAQtR,EAAOrX,GACtC,aAEA,IAAI8sB,EAA4B,oBAAXllB,QAAoD,kBAApBA,OAAOmlB,SAAwB,SAAUhB,GAAO,cAAcA,GAAS,SAAUA,GAAO,OAAOA,GAAyB,oBAAXnkB,QAAyBmkB,EAAIhpB,cAAgB6E,QAAUmkB,IAAQnkB,OAAOrG,UAAY,gBAAkBwqB,GAEtQ,SAASiB,EAAgBnW,EAAUoW,GAAe,KAAMpW,aAAoBoW,GAAgB,MAAM,IAAIrR,UAAU,qCAEhH,SAASsR,IAEL,IACI,GAAyB,qBAAdC,UACP,OAAOA,UAEX,GAA+B,qBAApBC,gBACP,OAAOA,gBAEX,GAA4B,qBAAjBC,aACP,OAAOA,aAEX,GAA0B,qBAAfC,WACP,OAAOA,WAEX,GAA2B,qBAAhBC,YACP,OAAOA,YAEb,MAAOna,GACL,QAIR,IAAIoa,EAAMN,IAEV,SAASO,IACL,IAGI,IAAKD,IAAQA,EAAI5L,KACb,OAAO,EAMX,IAAI8L,EAAmC,qBAAjBC,cAAgC,4BAA4BC,KAAK/U,UAAUkN,aAAe,SAAS6H,KAAK/U,UAAUkN,aAAe,aAAa6H,KAAK/U,UAAUgV,UAE/KC,EAA4B,oBAAVnR,QAAsE,IAA9CA,MAAMtI,WAAWC,QAAQ,gBAQvE,QAASoZ,GAAYI,IAAkC,qBAAdX,WAKlB,qBAAhBY,YACT,MAAO3a,GACL,OAAO,GAUf,SAAS4a,EAAWC,EAAOte,GAEvBse,EAAQA,GAAS,GACjBte,EAAaA,GAAc,GAC3B,IACI,OAAO,IAAIue,KAAKD,EAAOte,GACzB,MAAOyD,GACL,GAAe,cAAXA,EAAEpN,KACF,MAAMoN,EAIV,IAFA,IACI+a,EAAU,IADuB,qBAAhBC,YAA8BA,YAAuC,qBAAlBC,cAAgCA,cAA0C,qBAAnBC,eAAiCA,eAAiBC,mBAExKtsB,EAAI,EAAGA,EAAIgsB,EAAMltB,OAAQkB,GAAK,EACnCksB,EAAQxsB,OAAOssB,EAAMhsB,IAEzB,OAAOksB,EAAQK,QAAQ7e,EAAWoV,OAMnB,qBAAZ1L,SAGPsP,EAAQ,GAEZ,IAAI8F,EAAYpV,QAEhB,SAASqV,EAAgBrD,EAASsD,GAC1BA,GACAtD,EAAQrS,MAAK,SAAUpK,GACnB+f,EAAS,KAAM/f,MAChB,SAAUjK,GACTgqB,EAAShqB,MAKrB,SAASiqB,EAAoBvD,EAASsD,EAAUE,GACpB,oBAAbF,GACPtD,EAAQrS,KAAK2V,GAGY,oBAAlBE,GACPxD,EAAO,MAAUwD,GAIzB,SAASC,EAAa1rB,GAOlB,MALmB,kBAARA,IACPsR,QAAQ5P,KAAK1B,EAAM,2CACnBA,EAAMsH,OAAOtH,IAGVA,EAGX,SAAS2rB,IACL,GAAIxrB,UAAUxC,QAAqD,oBAApCwC,UAAUA,UAAUxC,OAAS,GACxD,OAAOwC,UAAUA,UAAUxC,OAAS,GAO5C,IAAIiuB,EAA4B,mCAC5BC,OAAgB,EAChBC,EAAa,GACb7a,EAAWvU,OAAOyB,UAAU8S,SAG5B8a,EAAY,WACZC,EAAa,YAOjB,SAASC,EAAwBC,GAI7B,IAHA,IAAIvuB,EAASuuB,EAAIvuB,OACb8a,EAAM,IAAI0T,YAAYxuB,GACtB0a,EAAM,IAAIzE,WAAW6E,GAChB5Z,EAAI,EAAGA,EAAIlB,EAAQkB,IACxBwZ,EAAIxZ,GAAKqtB,EAAIE,WAAWvtB,GAE5B,OAAO4Z,EAkBX,SAAS4T,EAAgCjC,GACrC,OAAO,IAAIiB,GAAU,SAAUnV,GAC3B,IAAIoW,EAAMlC,EAAImC,YAAYX,EAA2BI,GACjDQ,EAAO5B,EAAW,CAAC,KACvB0B,EAAIG,YAAYb,GAA2Bc,IAAIF,EAAM,OAErDF,EAAIK,QAAU,SAAU3c,GAGpBA,EAAE4c,iBACF5c,EAAE6c,kBACF3W,GAAQ,IAGZoW,EAAIQ,WAAa,WACb,IAAIC,EAAgBtX,UAAUkN,UAAU/Y,MAAM,iBAC1CojB,EAAcvX,UAAUkN,UAAU/Y,MAAM,UAG5CsM,EAAQ8W,IAAgBD,GAAiBE,SAASF,EAAc,GAAI,KAAO,QAlB5E,OAoBK,WACR,OAAO,KAIf,SAASG,EAAkB9C,GACvB,MAA6B,mBAAlByB,EACAR,EAAUnV,QAAQ2V,GAEtBQ,EAAgCjC,GAAKxU,MAAK,SAAU/Y,GAEvD,OADAgvB,EAAgBhvB,KAKxB,SAASswB,EAAgBC,GACrB,IAAIC,EAAYvB,EAAWsB,EAAOxqB,MAG9B0qB,EAAoB,GAExBA,EAAkBrF,QAAU,IAAIoD,GAAU,SAAUnV,EAASkI,GACzDkP,EAAkBpX,QAAUA,EAC5BoX,EAAkBlP,OAASA,KAI/BiP,EAAUE,mBAAmB3pB,KAAK0pB,GAG7BD,EAAUG,QAGXH,EAAUG,QAAUH,EAAUG,QAAQ5X,MAAK,WACvC,OAAO0X,EAAkBrF,WAH7BoF,EAAUG,QAAUF,EAAkBrF,QAQ9C,SAASwF,EAAkBL,GACvB,IAGIE,EAHYxB,EAAWsB,EAAOxqB,MAGA2qB,mBAAmB1jB,MAIrD,GAAIyjB,EAEA,OADAA,EAAkBpX,UACXoX,EAAkBrF,QAIjC,SAASyF,EAAiBN,EAAQO,GAC9B,IAGIL,EAHYxB,EAAWsB,EAAOxqB,MAGA2qB,mBAAmB1jB,MAIrD,GAAIyjB,EAEA,OADAA,EAAkBlP,OAAOuP,GAClBL,EAAkBrF,QAIjC,SAAS2F,EAAeR,EAAQS,GAC5B,OAAO,IAAIxC,GAAU,SAAUnV,EAASkI,GAGpC,GAFA0N,EAAWsB,EAAOxqB,MAAQkpB,EAAWsB,EAAOxqB,OAASkrB,IAEjDV,EAAOnU,GAAI,CACX,IAAI4U,EAIA,OAAO3X,EAAQkX,EAAOnU,IAHtBkU,EAAgBC,GAChBA,EAAOnU,GAAG8U,QAMlB,IAAIC,EAAS,CAACZ,EAAOxqB,MAEjBirB,GACAG,EAAOpqB,KAAKwpB,EAAOtW,SAGvB,IAAImX,EAAU7D,EAAI5L,KAAK3d,MAAMupB,EAAK4D,GAE9BH,IACAI,EAAQC,gBAAkB,SAAUle,GAChC,IAAIiJ,EAAKgV,EAAQziB,OACjB,IACIyN,EAAGkV,kBAAkBf,EAAOgB,WACxBpe,EAAEqe,YAAc,GAEhBpV,EAAGkV,kBAAkBvC,GAE3B,MAAO0C,GACL,GAAgB,oBAAZA,EAAG1rB,KAGH,MAAM0rB,EAFNhd,QAAQ5P,KAAK,iBAAmB0rB,EAAOxqB,KAA1B,oCAA4EoN,EAAEqe,WAAa,eAAiBre,EAAEue,WAAa,sBAAwBnB,EAAOgB,UAAY,wBAQnMH,EAAQjP,QAAU,SAAUhP,GACxBA,EAAE4c,iBACFxO,EAAO6P,EAAQ1sB,QAGnB0sB,EAAQO,UAAY,WAChBtY,EAAQ+X,EAAQziB,QAChBiiB,EAAkBL,OAK9B,SAASqB,EAAuBrB,GAC5B,OAAOQ,EAAeR,GAAQ,GAGlC,SAASsB,EAAuBtB,GAC5B,OAAOQ,EAAeR,GAAQ,GAGlC,SAASuB,EAAiBvB,EAAQwB,GAC9B,IAAKxB,EAAOnU,GACR,OAAO,EAGX,IAAI4V,GAAczB,EAAOnU,GAAG6V,iBAAiBC,SAAS3B,EAAOgB,WACzDY,EAAc5B,EAAOtW,QAAUsW,EAAOnU,GAAGnC,QACzCmY,EAAY7B,EAAOtW,QAAUsW,EAAOnU,GAAGnC,QAY3C,GAVIkY,IAGI5B,EAAOtW,UAAY8X,GACnBtd,QAAQ5P,KAAK,iBAAmB0rB,EAAOxqB,KAA1B,uCAA8EwqB,EAAOnU,GAAGnC,QAAU,eAAiBsW,EAAOtW,QAAU,KAGrJsW,EAAOtW,QAAUsW,EAAOnU,GAAGnC,SAG3BmY,GAAaJ,EAAY,CAIzB,GAAIA,EAAY,CACZ,IAAIK,EAAa9B,EAAOnU,GAAGnC,QAAU,EACjCoY,EAAa9B,EAAOtW,UACpBsW,EAAOtW,QAAUoY,GAIzB,OAAO,EAGX,OAAO,EAIX,SAASC,EAAY3C,GACjB,OAAO,IAAInB,GAAU,SAAUnV,EAASkI,GACpC,IAAIgR,EAAS,IAAIC,WACjBD,EAAOpQ,QAAUZ,EACjBgR,EAAOE,UAAY,SAAUtf,GACzB,IAAIuf,EAASC,KAAKxf,EAAEjQ,OAAOyL,QAAU,IACrC0K,EAAQ,CACJuZ,6BAA6B,EAC7B7d,KAAM2d,EACN5N,KAAM6K,EAAK7K,QAGnByN,EAAOM,mBAAmBlD,MAKlC,SAASmD,EAAYC,GAEjB,OAAOhF,EAAW,CADFqB,EAAwB4D,KAAKD,EAAYhe,QAC1B,CAAE+P,KAAMiO,EAAYjO,OAIvD,SAASmO,EAAejzB,GACpB,OAAOA,GAASA,EAAM4yB,4BAO1B,SAASM,EAAYxE,GACjB,IAAIhE,EAAOnqB,KAEP6qB,EAAUV,EAAKyI,aAAapa,MAAK,WACjC,IAAIyX,EAAYvB,EAAWvE,EAAK0I,QAAQrtB,MAExC,GAAIyqB,GAAaA,EAAUG,QACvB,OAAOH,EAAUG,WAKzB,OADAhC,EAAoBvD,EAASsD,EAAUA,GAChCtD,EAMX,SAASiI,EAAc9C,GACnBD,EAAgBC,GAKhB,IAHA,IAAIC,EAAYvB,EAAWsB,EAAOxqB,MAC9ButB,EAAU9C,EAAU8C,QAEftxB,EAAI,EAAGA,EAAIsxB,EAAQxyB,OAAQkB,IAAK,CACrC,IAAIuxB,EAASD,EAAQtxB,GACjBuxB,EAAOH,QAAQhX,KACfmX,EAAOH,QAAQhX,GAAG8U,QAClBqC,EAAOH,QAAQhX,GAAK,MAK5B,OAFAmU,EAAOnU,GAAK,KAELwV,EAAuBrB,GAAQxX,MAAK,SAAUqD,GAEjD,OADAmU,EAAOnU,GAAKA,EACR0V,EAAiBvB,GAEVsB,EAAuBtB,GAE3BnU,KACRrD,MAAK,SAAUqD,GAGdmU,EAAOnU,GAAKoU,EAAUpU,GAAKA,EAC3B,IAAK,IAAIpa,EAAI,EAAGA,EAAIsxB,EAAQxyB,OAAQkB,IAChCsxB,EAAQtxB,GAAGoxB,QAAQhX,GAAKA,KAZzB,OAcK,SAAU0U,GAElB,MADAD,EAAiBN,EAAQO,GACnBA,KAMd,SAAS0C,EAAkBjD,EAAQkD,EAAM/E,EAAUgF,QAC/BngB,IAAZmgB,IACAA,EAAU,GAGd,IACI,IAAIC,EAAKpD,EAAOnU,GAAGsT,YAAYa,EAAOgB,UAAWkC,GACjD/E,EAAS,KAAMiF,GACjB,MAAO7C,GACL,GAAI4C,EAAU,KAAOnD,EAAOnU,IAAmB,sBAAb0U,EAAI/qB,MAA6C,kBAAb+qB,EAAI/qB,MACtE,OAAOyoB,EAAUnV,UAAUN,MAAK,WAC5B,IAAKwX,EAAOnU,IAAmB,kBAAb0U,EAAI/qB,OAA6BwqB,EAAOnU,GAAG6V,iBAAiBC,SAAS3B,EAAOgB,YAAchB,EAAOtW,SAAWsW,EAAOnU,GAAGnC,QAMpI,OAJIsW,EAAOnU,KACPmU,EAAOtW,QAAUsW,EAAOnU,GAAGnC,QAAU,GAGlC4X,EAAuBtB,MAEnCxX,MAAK,WACJ,OAAOsa,EAAc9C,GAAQxX,MAAK,WAC9Bya,EAAkBjD,EAAQkD,EAAM/E,EAAUgF,EAAU,SAXrD,MAaKhF,GAGhBA,EAASoC,IAIjB,SAASG,IACL,MAAO,CAEHqC,QAAS,GAETlX,GAAI,KAEJuU,QAAS,KAETD,mBAAoB,IAM5B,SAASkD,EAAa5rB,GAClB,IAAI0iB,EAAOnqB,KACPgwB,EAAS,CACTnU,GAAI,MAGR,GAAIpU,EACA,IAAK,IAAIhG,KAAKgG,EACVuoB,EAAOvuB,GAAKgG,EAAQhG,GAK5B,IAAIwuB,EAAYvB,EAAWsB,EAAOxqB,MAG7ByqB,IACDA,EAAYS,IAEZhC,EAAWsB,EAAOxqB,MAAQyqB,GAI9BA,EAAU8C,QAAQvsB,KAAK2jB,GAGlBA,EAAKyI,aACNzI,EAAKyI,WAAazI,EAAKmJ,MACvBnJ,EAAKmJ,MAAQX,GAIjB,IAAIY,EAAe,GAEnB,SAASC,IAGL,OAAOvF,EAAUnV,UAGrB,IAAK,IAAI2a,EAAI,EAAGA,EAAIxD,EAAU8C,QAAQxyB,OAAQkzB,IAAK,CAC/C,IAAIT,EAAS/C,EAAU8C,QAAQU,GAC3BT,IAAW7I,GAEXoJ,EAAa/sB,KAAKwsB,EAAOJ,aAAP,MAA6BY,IAKvD,IAAIT,EAAU9C,EAAU8C,QAAQ1nB,MAAM,GAItC,OAAO4iB,EAAUnC,IAAIyH,GAAc/a,MAAK,WAGpC,OAFAwX,EAAOnU,GAAKoU,EAAUpU,GAEfwV,EAAuBrB,MAC/BxX,MAAK,SAAUqD,GAEd,OADAmU,EAAOnU,GAAKA,EACR0V,EAAiBvB,EAAQ7F,EAAKuJ,eAAeha,SAEtC4X,EAAuBtB,GAE3BnU,KACRrD,MAAK,SAAUqD,GACdmU,EAAOnU,GAAKoU,EAAUpU,GAAKA,EAC3BsO,EAAK0I,QAAU7C,EAEf,IAAK,IAAI2D,EAAI,EAAGA,EAAIZ,EAAQxyB,OAAQozB,IAAK,CACrC,IAAIX,EAASD,EAAQY,GACjBX,IAAW7I,IAEX6I,EAAOH,QAAQhX,GAAKmU,EAAOnU,GAC3BmX,EAAOH,QAAQnZ,QAAUsW,EAAOtW,aAMhD,SAAS4F,EAAQ1c,EAAKurB,GAClB,IAAIhE,EAAOnqB,KAEX4C,EAAM0rB,EAAa1rB,GAEnB,IAAIioB,EAAU,IAAIoD,GAAU,SAAUnV,EAASkI,GAC3CmJ,EAAKmJ,QAAQ9a,MAAK,WACdya,EAAkB9I,EAAK0I,QAASlE,GAAW,SAAU4B,EAAKpB,GACtD,GAAIoB,EACA,OAAOvP,EAAOuP,GAGlB,IACI,IACIqD,EADQzE,EAAYE,YAAYlF,EAAK0I,QAAQ7B,WACjChwB,IAAI4B,GAEpBgxB,EAAIxC,UAAY,WACZ,IAAI3xB,EAAQm0B,EAAIxlB,YACF4E,IAAVvT,IACAA,EAAQ,MAERizB,EAAejzB,KACfA,EAAQ8yB,EAAY9yB,IAExBqZ,EAAQrZ,IAGZm0B,EAAIhS,QAAU,WACVZ,EAAO4S,EAAIzvB,QAEjB,MAAOyO,GACLoO,EAAOpO,UAzBnB,MA4BYoO,MAIhB,OADAkN,EAAgBrD,EAASsD,GAClBtD,EAIX,SAASnI,EAAQ6J,EAAU4B,GACvB,IAAIhE,EAAOnqB,KAEP6qB,EAAU,IAAIoD,GAAU,SAAUnV,EAASkI,GAC3CmJ,EAAKmJ,QAAQ9a,MAAK,WACdya,EAAkB9I,EAAK0I,QAASlE,GAAW,SAAU4B,EAAKpB,GACtD,GAAIoB,EACA,OAAOvP,EAAOuP,GAGlB,IACI,IACIqD,EADQzE,EAAYE,YAAYlF,EAAK0I,QAAQ7B,WACjC6C,aACZC,EAAkB,EAEtBF,EAAIxC,UAAY,WACZ,IAAI2C,EAASH,EAAIxlB,OAEjB,GAAI2lB,EAAQ,CACR,IAAIt0B,EAAQs0B,EAAOt0B,MACfizB,EAAejzB,KACfA,EAAQ8yB,EAAY9yB,IAExB,IAAI2O,EAASme,EAAS9sB,EAAOs0B,EAAOnxB,IAAKkxB,UAK1B,IAAX1lB,EACA0K,EAAQ1K,GAER2lB,EAAM,gBAGVjb,KAIR8a,EAAIhS,QAAU,WACVZ,EAAO4S,EAAIzvB,QAEjB,MAAOyO,GACLoO,EAAOpO,UAtCnB,MAyCYoO,MAKhB,OAFAkN,EAAgBrD,EAASsD,GAElBtD,EAGX,SAAS/M,EAAQlb,EAAKnD,EAAO0uB,GACzB,IAAIhE,EAAOnqB,KAEX4C,EAAM0rB,EAAa1rB,GAEnB,IAAIioB,EAAU,IAAIoD,GAAU,SAAUnV,EAASkI,GAC3C,IAAIgP,EACJ7F,EAAKmJ,QAAQ9a,MAAK,WAEd,OADAwX,EAAS7F,EAAK0I,QACe,kBAAzBhf,EAAS1L,KAAK1I,GACPqwB,EAAkBE,EAAOnU,IAAIrD,MAAK,SAAUwb,GAC/C,OAAIA,EACOv0B,EAEJsyB,EAAYtyB,MAGpBA,KACR+Y,MAAK,SAAU/Y,GACdwzB,EAAkB9I,EAAK0I,QAASjE,GAAY,SAAU2B,EAAKpB,GACvD,GAAIoB,EACA,OAAOvP,EAAOuP,GAGlB,IACI,IAAI0D,EAAQ9E,EAAYE,YAAYlF,EAAK0I,QAAQ7B,WAMnC,OAAVvxB,IACAA,OAAQuT,GAGZ,IAAI4gB,EAAMK,EAAM3E,IAAI7vB,EAAOmD,GAE3BusB,EAAYO,WAAa,gBAOP1c,IAAVvT,IACAA,EAAQ,MAGZqZ,EAAQrZ,IAEZ0vB,EAAYI,QAAUJ,EAAYvN,QAAU,WACxC,IAAI2O,EAAMqD,EAAIzvB,MAAQyvB,EAAIzvB,MAAQyvB,EAAIzE,YAAYhrB,MAClD6c,EAAOuP,IAEb,MAAO3d,GACLoO,EAAOpO,UAhDnB,MAmDYoO,MAIhB,OADAkN,EAAgBrD,EAASsD,GAClBtD,EAGX,SAASlI,EAAW/f,EAAKurB,GACrB,IAAIhE,EAAOnqB,KAEX4C,EAAM0rB,EAAa1rB,GAEnB,IAAIioB,EAAU,IAAIoD,GAAU,SAAUnV,EAASkI,GAC3CmJ,EAAKmJ,QAAQ9a,MAAK,WACdya,EAAkB9I,EAAK0I,QAASjE,GAAY,SAAU2B,EAAKpB,GACvD,GAAIoB,EACA,OAAOvP,EAAOuP,GAGlB,IACI,IAMIqD,EANQzE,EAAYE,YAAYlF,EAAK0I,QAAQ7B,WAMlC,OAAWpuB,GAC1BusB,EAAYO,WAAa,WACrB5W,KAGJqW,EAAYvN,QAAU,WAClBZ,EAAO4S,EAAIzvB,QAKfgrB,EAAYI,QAAU,WAClB,IAAIgB,EAAMqD,EAAIzvB,MAAQyvB,EAAIzvB,MAAQyvB,EAAIzE,YAAYhrB,MAClD6c,EAAOuP,IAEb,MAAO3d,GACLoO,EAAOpO,UA7BnB,MAgCYoO,MAIhB,OADAkN,EAAgBrD,EAASsD,GAClBtD,EAGX,SAASpW,EAAM0Z,GACX,IAAIhE,EAAOnqB,KAEP6qB,EAAU,IAAIoD,GAAU,SAAUnV,EAASkI,GAC3CmJ,EAAKmJ,QAAQ9a,MAAK,WACdya,EAAkB9I,EAAK0I,QAASjE,GAAY,SAAU2B,EAAKpB,GACvD,GAAIoB,EACA,OAAOvP,EAAOuP,GAGlB,IACI,IACIqD,EADQzE,EAAYE,YAAYlF,EAAK0I,QAAQ7B,WACjCvc,QAEhB0a,EAAYO,WAAa,WACrB5W,KAGJqW,EAAYI,QAAUJ,EAAYvN,QAAU,WACxC,IAAI2O,EAAMqD,EAAIzvB,MAAQyvB,EAAIzvB,MAAQyvB,EAAIzE,YAAYhrB,MAClD6c,EAAOuP,IAEb,MAAO3d,GACLoO,EAAOpO,UAnBnB,MAsBYoO,MAIhB,OADAkN,EAAgBrD,EAASsD,GAClBtD,EAGX,SAAStqB,EAAO4tB,GACZ,IAAIhE,EAAOnqB,KAEP6qB,EAAU,IAAIoD,GAAU,SAAUnV,EAASkI,GAC3CmJ,EAAKmJ,QAAQ9a,MAAK,WACdya,EAAkB9I,EAAK0I,QAASlE,GAAW,SAAU4B,EAAKpB,GACtD,GAAIoB,EACA,OAAOvP,EAAOuP,GAGlB,IACI,IACIqD,EADQzE,EAAYE,YAAYlF,EAAK0I,QAAQ7B,WACjCxvB,QAEhBoyB,EAAIxC,UAAY,WACZtY,EAAQ8a,EAAIxlB,SAGhBwlB,EAAIhS,QAAU,WACVZ,EAAO4S,EAAIzvB,QAEjB,MAAOyO,GACLoO,EAAOpO,UAlBnB,MAqBYoO,MAIhB,OADAkN,EAAgBrD,EAASsD,GAClBtD,EAGX,SAASjoB,EAAI2N,EAAG4d,GACZ,IAAIhE,EAAOnqB,KAEP6qB,EAAU,IAAIoD,GAAU,SAAUnV,EAASkI,GACvCzQ,EAAI,EACJuI,EAAQ,MAKZqR,EAAKmJ,QAAQ9a,MAAK,WACdya,EAAkB9I,EAAK0I,QAASlE,GAAW,SAAU4B,EAAKpB,GACtD,GAAIoB,EACA,OAAOvP,EAAOuP,GAGlB,IACI,IAAI0D,EAAQ9E,EAAYE,YAAYlF,EAAK0I,QAAQ7B,WAC7CkD,GAAW,EACXN,EAAMK,EAAME,gBAEhBP,EAAIxC,UAAY,WACZ,IAAI2C,EAASH,EAAIxlB,OACZ2lB,EAOK,IAANxjB,GAKK2jB,EAFLpb,EAAQib,EAAOnxB,MAKXsxB,GAAW,EACXH,EAAOK,QAAQ7jB,IAdnBuI,EAAQ,OAsBhB8a,EAAIhS,QAAU,WACVZ,EAAO4S,EAAIzvB,QAEjB,MAAOyO,GACLoO,EAAOpO,UAzCnB,MA4CYoO,MAIhB,OADAkN,EAAgBrD,EAASsD,GAClBtD,EAGX,SAASwJ,EAAKlG,GACV,IAAIhE,EAAOnqB,KAEP6qB,EAAU,IAAIoD,GAAU,SAAUnV,EAASkI,GAC3CmJ,EAAKmJ,QAAQ9a,MAAK,WACdya,EAAkB9I,EAAK0I,QAASlE,GAAW,SAAU4B,EAAKpB,GACtD,GAAIoB,EACA,OAAOvP,EAAOuP,GAGlB,IACI,IACIqD,EADQzE,EAAYE,YAAYlF,EAAK0I,QAAQ7B,WACjCmD,gBACZE,EAAO,GAEXT,EAAIxC,UAAY,WACZ,IAAI2C,EAASH,EAAIxlB,OAEZ2lB,GAKLM,EAAK7tB,KAAKutB,EAAOnxB,KACjBmxB,EAAM,YALFjb,EAAQub,IAQhBT,EAAIhS,QAAU,WACVZ,EAAO4S,EAAIzvB,QAEjB,MAAOyO,GACLoO,EAAOpO,UA3BnB,MA8BYoO,MAIhB,OADAkN,EAAgBrD,EAASsD,GAClBtD,EAGX,SAASyJ,EAAa7sB,EAAS0mB,GAC3BA,EAAWI,EAAY9qB,MAAMzD,KAAM+C,WAEnC,IAAIwxB,EAAgBv0B,KAAKE,UACzBuH,EAA6B,oBAAZA,GAA0BA,GAAW,IACzCjC,OACTiC,EAAQjC,KAAOiC,EAAQjC,MAAQ+uB,EAAc/uB,KAC7CiC,EAAQupB,UAAYvpB,EAAQupB,WAAauD,EAAcvD,WAG3D,IACInG,EADAV,EAAOnqB,KAEX,GAAKyH,EAAQjC,KAEN,CACH,IAEIgvB,EAFc/sB,EAAQjC,OAAS+uB,EAAc/uB,MAAQ2kB,EAAK0I,QAAQhX,GAExCoS,EAAUnV,QAAQqR,EAAK0I,QAAQhX,IAAMwV,EAAuB5pB,GAAS+Q,MAAK,SAAUqD,GAC9G,IAAIoU,EAAYvB,EAAWjnB,EAAQjC,MAC/ButB,EAAU9C,EAAU8C,QACxB9C,EAAUpU,GAAKA,EACf,IAAK,IAAIpa,EAAI,EAAGA,EAAIsxB,EAAQxyB,OAAQkB,IAChCsxB,EAAQtxB,GAAGoxB,QAAQhX,GAAKA,EAE5B,OAAOA,KAgDPgP,EA7CCpjB,EAAQupB,UA6CCwD,EAAUhc,MAAK,SAAUqD,GAC/B,GAAKA,EAAG6V,iBAAiBC,SAASlqB,EAAQupB,WAA1C,CAIA,IAAIG,EAAatV,EAAGnC,QAAU,EAE9BqW,EAAgBtoB,GAEhB,IAAIwoB,EAAYvB,EAAWjnB,EAAQjC,MAC/ButB,EAAU9C,EAAU8C,QAExBlX,EAAG8U,QACH,IAAK,IAAIlvB,EAAI,EAAGA,EAAIsxB,EAAQxyB,OAAQkB,IAAK,CACrC,IAAIuxB,EAASD,EAAQtxB,GACrBuxB,EAAOH,QAAQhX,GAAK,KACpBmX,EAAOH,QAAQnZ,QAAUyX,EAG7B,IAAIsD,EAAoB,IAAIxG,GAAU,SAAUnV,EAASkI,GACrD,IAAI4S,EAAM5G,EAAI5L,KAAK3Z,EAAQjC,KAAM2rB,GAEjCyC,EAAIhS,QAAU,SAAU2O,GACXqD,EAAIxlB,OACVuiB,QACH3P,EAAOuP,IAGXqD,EAAI9C,gBAAkB,WACT8C,EAAIxlB,OACVsmB,kBAAkBjtB,EAAQupB,YAGjC4C,EAAIxC,UAAY,WACZ,IAAIvV,EAAK+X,EAAIxlB,OACbyN,EAAG8U,QACH7X,EAAQ+C,OAIhB,OAAO4Y,EAAkBjc,MAAK,SAAUqD,GACpCoU,EAAUpU,GAAKA,EACf,IAAK,IAAI4X,EAAI,EAAGA,EAAIV,EAAQxyB,OAAQkzB,IAAK,CACrC,IAAIkB,EAAW5B,EAAQU,GACvBkB,EAAS9B,QAAQhX,GAAKA,EACtBwU,EAAkBsE,EAAS9B,aAL5B,OAOK,SAAUtC,GAElB,MADCD,EAAiB7oB,EAAS8oB,IAAQtC,EAAUnV,WAA7C,OAAiE,eAC3DyX,SA7FJiE,EAAUhc,MAAK,SAAUqD,GAC/BkU,EAAgBtoB,GAEhB,IAAIwoB,EAAYvB,EAAWjnB,EAAQjC,MAC/ButB,EAAU9C,EAAU8C,QAExBlX,EAAG8U,QACH,IAAK,IAAIlvB,EAAI,EAAGA,EAAIsxB,EAAQxyB,OAAQkB,IACnBsxB,EAAQtxB,GACdoxB,QAAQhX,GAAK,KAGxB,IAAI+Y,EAAgB,IAAI3G,GAAU,SAAUnV,EAASkI,GACjD,IAAI4S,EAAM5G,EAAI6H,eAAeptB,EAAQjC,MAErCouB,EAAIhS,QAAUgS,EAAIkB,UAAY,SAAUvE,GACpC,IAAI1U,EAAK+X,EAAIxlB,OACTyN,GACAA,EAAG8U,QAEP3P,EAAOuP,IAGXqD,EAAIxC,UAAY,WACZ,IAAIvV,EAAK+X,EAAIxlB,OACTyN,GACAA,EAAG8U,QAEP7X,EAAQ+C,OAIhB,OAAO+Y,EAAcpc,MAAK,SAAUqD,GAChCoU,EAAUpU,GAAKA,EACf,IAAK,IAAIpa,EAAI,EAAGA,EAAIsxB,EAAQxyB,OAAQkB,IAEhC4uB,EADc0C,EAAQtxB,GACIoxB,YAJ3B,OAMK,SAAUtC,GAElB,MADCD,EAAiB7oB,EAAS8oB,IAAQtC,EAAUnV,WAA7C,OAAiE,eAC3DyX,aAvDlB1F,EAAUoD,EAAUjN,OAAO,qBAmH/B,OADAkN,EAAgBrD,EAASsD,GAClBtD,EAGX,IAAIkK,EAAe,CACfC,QAAS,eACT3B,aAAcA,EACd4B,SAAUhI,IACVvK,QAASA,EACTpD,QAASA,EACTxB,QAASA,EACT6E,WAAYA,EACZlO,MAAOA,EACPlU,OAAQA,EACRqC,IAAKA,EACLyxB,KAAMA,EACNC,aAAcA,GAGlB,SAASY,IACL,MAA+B,oBAAjB/H,aAMlB,IAAIgI,EAAa,mEAEbC,EAAmB,uBACnBC,EAAyB,gCAEzBC,EAAoB,YACpBC,EAA2BD,EAAkB/0B,OAG7Ci1B,GAAmB,OACnBC,GAAY,OACZC,GAAiB,OACjBC,GAAkB,OAClBC,GAAyB,OACzBC,GAAkB,OAClBC,GAAkB,OAClBC,GAAmB,OACnBC,GAAmB,OACnBC,GAAoB,OACpBC,GAAoB,OACpBC,GAAgCZ,EAA2BC,GAAiBj1B,OAE5E61B,GAAa92B,OAAOyB,UAAU8S,SAElC,SAASwiB,GAAeC,GAEpB,IAEI70B,EAEA80B,EAAUC,EAAUC,EAAUC,EAJ9BC,EAAyC,IAA1BL,EAAiB/1B,OAChCypB,EAAMsM,EAAiB/1B,OAEvB6B,EAAI,EAG8C,MAAlDk0B,EAAiBA,EAAiB/1B,OAAS,KAC3Co2B,IACsD,MAAlDL,EAAiBA,EAAiB/1B,OAAS,IAC3Co2B,KAIR,IAAIC,EAAS,IAAI7H,YAAY4H,GACzBE,EAAQ,IAAIrgB,WAAWogB,GAE3B,IAAKn1B,EAAI,EAAGA,EAAIuoB,EAAKvoB,GAAK,EACtB80B,EAAWpB,EAAWrhB,QAAQwiB,EAAiB70B,IAC/C+0B,EAAWrB,EAAWrhB,QAAQwiB,EAAiB70B,EAAI,IACnDg1B,EAAWtB,EAAWrhB,QAAQwiB,EAAiB70B,EAAI,IACnDi1B,EAAWvB,EAAWrhB,QAAQwiB,EAAiB70B,EAAI,IAGnDo1B,EAAMz0B,KAAOm0B,GAAY,EAAIC,GAAY,EACzCK,EAAMz0B,MAAmB,GAAXo0B,IAAkB,EAAIC,GAAY,EAChDI,EAAMz0B,MAAmB,EAAXq0B,IAAiB,EAAe,GAAXC,EAEvC,OAAOE,EAKX,SAASE,GAAeF,GAEpB,IAEIn1B,EAFAo1B,EAAQ,IAAIrgB,WAAWogB,GACvBG,EAAe,GAGnB,IAAKt1B,EAAI,EAAGA,EAAIo1B,EAAMt2B,OAAQkB,GAAK,EAE/Bs1B,GAAgB5B,EAAW0B,EAAMp1B,IAAM,GACvCs1B,GAAgB5B,GAAuB,EAAX0B,EAAMp1B,KAAW,EAAIo1B,EAAMp1B,EAAI,IAAM,GACjEs1B,GAAgB5B,GAA2B,GAAf0B,EAAMp1B,EAAI,KAAY,EAAIo1B,EAAMp1B,EAAI,IAAM,GACtEs1B,GAAgB5B,EAA0B,GAAf0B,EAAMp1B,EAAI,IASzC,OANIo1B,EAAMt2B,OAAS,IAAM,EACrBw2B,EAAeA,EAAavpB,UAAU,EAAGupB,EAAax2B,OAAS,GAAK,IAC7Ds2B,EAAMt2B,OAAS,IAAM,IAC5Bw2B,EAAeA,EAAavpB,UAAU,EAAGupB,EAAax2B,OAAS,GAAK,MAGjEw2B,EAMX,SAASC,GAAUv3B,EAAO0uB,GACtB,IAAI8I,EAAY,GAShB,GARIx3B,IACAw3B,EAAYb,GAAWjuB,KAAK1I,IAO5BA,IAAwB,yBAAdw3B,GAAwCx3B,EAAMm3B,QAA4C,yBAAlCR,GAAWjuB,KAAK1I,EAAMm3B,SAAqC,CAG7H,IAAIA,EACAtvB,EAASguB,EAET71B,aAAiBsvB,aACjB6H,EAASn3B,EACT6H,GAAUkuB,KAEVoB,EAASn3B,EAAMm3B,OAEG,uBAAdK,EACA3vB,GAAUouB,GACW,wBAAduB,EACP3vB,GAAUquB,GACW,+BAAdsB,EACP3vB,GAAUsuB,GACW,wBAAdqB,EACP3vB,GAAUuuB,GACW,yBAAdoB,EACP3vB,GAAUyuB,GACW,wBAAdkB,EACP3vB,GAAUwuB,GACW,yBAAdmB,EACP3vB,GAAU0uB,GACW,0BAAdiB,EACP3vB,GAAU2uB,GACW,0BAAdgB,EACP3vB,GAAU4uB,GAEV/H,EAAS,IAAItoB,MAAM,wCAI3BsoB,EAAS7mB,EAASwvB,GAAeF,SAC9B,GAAkB,kBAAdK,EAA+B,CAEtC,IAAIC,EAAa,IAAIjF,WAErBiF,EAAW5V,OAAS,WAEhB,IAAI6V,EAAM/B,EAAmB31B,EAAM8kB,KAAO,IAAMuS,GAAe92B,KAAKoO,QAEpE+f,EAASmH,EAAoBG,GAAY0B,IAG7CD,EAAWE,kBAAkB33B,QAE7B,IACI0uB,EAAShM,KAAK3G,UAAU/b,IAC1B,MAAOmT,GACLsB,QAAQ/P,MAAM,8CAA+C1E,GAE7D0uB,EAAS,KAAMvb,IAa3B,SAASykB,GAAY53B,GAIjB,GAAIA,EAAM+N,UAAU,EAAG+nB,KAA8BD,EACjD,OAAOnT,KAAKmV,MAAM73B,GAMtB,IAGI83B,EAHAjB,EAAmB72B,EAAM+N,UAAU2oB,IACnC5R,EAAO9kB,EAAM+N,UAAU+nB,EAA0BY,IAKrD,GAAI5R,IAASkR,IAAaJ,EAAuBjI,KAAKkJ,GAAmB,CACrE,IAAIkB,EAAUlB,EAAiB9pB,MAAM6oB,GACrCkC,EAAWC,EAAQ,GACnBlB,EAAmBA,EAAiB9oB,UAAUgqB,EAAQ,GAAGj3B,QAE7D,IAAIq2B,EAASP,GAAeC,GAI5B,OAAQ/R,GACJ,KAAKiR,GACD,OAAOoB,EACX,KAAKnB,GACD,OAAOjI,EAAW,CAACoJ,GAAS,CAAErS,KAAMgT,IACxC,KAAK7B,GACD,OAAO,IAAI+B,UAAUb,GACzB,KAAKjB,GACD,OAAO,IAAInf,WAAWogB,GAC1B,KAAKhB,GACD,OAAO,IAAI8B,kBAAkBd,GACjC,KAAKf,GACD,OAAO,IAAI8B,WAAWf,GAC1B,KAAKb,GACD,OAAO,IAAI6B,YAAYhB,GAC3B,KAAKd,GACD,OAAO,IAAI+B,WAAWjB,GAC1B,KAAKZ,GACD,OAAO,IAAI8B,YAAYlB,GAC3B,KAAKX,GACD,OAAO,IAAI8B,aAAanB,GAC5B,KAAKV,GACD,OAAO,IAAI8B,aAAapB,GAC5B,QACI,MAAM,IAAI/wB,MAAM,gBAAkB0e,IAI9C,IAAI0T,GAAwB,CACxBjB,UAAWA,GACXK,YAAaA,GACbhB,eAAgBA,GAChBS,eAAgBA,IAapB,SAASoB,GAAc5nB,EAAG0f,EAAQ7B,EAAUE,GACxC/d,EAAE6nB,WAAW,8BAAgCnI,EAAOgB,UAAvC,+CAAwG,GAAI7C,EAAUE,GAKvI,SAAS+J,GAAe3wB,GACpB,IAAI0iB,EAAOnqB,KACPgwB,EAAS,CACTnU,GAAI,MAGR,GAAIpU,EACA,IAAK,IAAIhG,KAAKgG,EACVuoB,EAAOvuB,GAA2B,kBAAfgG,EAAQhG,GAAkBgG,EAAQhG,GAAGoS,WAAapM,EAAQhG,GAIrF,IAAI42B,EAAgB,IAAIpK,GAAU,SAAUnV,EAASkI,GAGjD,IACIgP,EAAOnU,GAAKsR,aAAa6C,EAAOxqB,KAAM0E,OAAO8lB,EAAOtW,SAAUsW,EAAOsI,YAAatI,EAAO3c,MAC3F,MAAOT,GACL,OAAOoO,EAAOpO,GAIlBod,EAAOnU,GAAGsT,aAAY,SAAU7e,GAC5B4nB,GAAc5nB,EAAG0f,GAAQ,WACrB7F,EAAK0I,QAAU7C,EACflX,OACD,SAAUxI,EAAGnM,GACZ6c,EAAO7c,QAEZ6c,MAIP,OADAgP,EAAOuI,WAAaN,GACbI,EAGX,SAASG,GAAcloB,EAAG0f,EAAQyI,EAAc5wB,EAAMsmB,EAAUE,GAC5D/d,EAAE6nB,WAAWM,EAAc5wB,EAAMsmB,GAAU,SAAU7d,EAAGnM,GAChDA,EAAM8jB,OAAS9jB,EAAMu0B,WACrBpoB,EAAE6nB,WAAW,iEAAuE,CAACnI,EAAOgB,YAAY,SAAU1gB,EAAGqoB,GAC5GA,EAAQC,KAAKr4B,OAOd8tB,EAAc/d,EAAGnM,GAJjB+zB,GAAc5nB,EAAG0f,GAAQ,WACrB1f,EAAE6nB,WAAWM,EAAc5wB,EAAMsmB,EAAUE,KAC5CA,KAIRA,GAEHA,EAAc/d,EAAGnM,KAEtBkqB,GAGP,SAASwK,GAAUj2B,EAAKurB,GACpB,IAAIhE,EAAOnqB,KAEX4C,EAAM0rB,EAAa1rB,GAEnB,IAAIioB,EAAU,IAAIoD,GAAU,SAAUnV,EAASkI,GAC3CmJ,EAAKmJ,QAAQ9a,MAAK,WACd,IAAIwX,EAAS7F,EAAK0I,QAClB7C,EAAOnU,GAAGsT,aAAY,SAAU7e,GAC5BkoB,GAAcloB,EAAG0f,EAAQ,iBAAmBA,EAAOgB,UAAY,yBAA0B,CAACpuB,IAAM,SAAU0N,EAAGqoB,GACzG,IAAIvqB,EAASuqB,EAAQC,KAAKr4B,OAASo4B,EAAQC,KAAKr3B,KAAK,GAAG9B,MAAQ,KAI5D2O,IACAA,EAAS4hB,EAAOuI,WAAWlB,YAAYjpB,IAG3C0K,EAAQ1K,MACT,SAAUkC,EAAGnM,GACZ6c,EAAO7c,YAdnB,MAiBY6c,MAIhB,OADAkN,EAAgBrD,EAASsD,GAClBtD,EAGX,SAASiO,GAAUvM,EAAU4B,GACzB,IAAIhE,EAAOnqB,KAEP6qB,EAAU,IAAIoD,GAAU,SAAUnV,EAASkI,GAC3CmJ,EAAKmJ,QAAQ9a,MAAK,WACd,IAAIwX,EAAS7F,EAAK0I,QAElB7C,EAAOnU,GAAGsT,aAAY,SAAU7e,GAC5BkoB,GAAcloB,EAAG0f,EAAQ,iBAAmBA,EAAOgB,UAAW,IAAI,SAAU1gB,EAAGqoB,GAI3E,IAHA,IAAIC,EAAOD,EAAQC,KACfr4B,EAASq4B,EAAKr4B,OAETkB,EAAI,EAAGA,EAAIlB,EAAQkB,IAAK,CAC7B,IAAIF,EAAOq3B,EAAKr3B,KAAKE,GACjB2M,EAAS7M,EAAK9B,MAYlB,GARI2O,IACAA,EAAS4hB,EAAOuI,WAAWlB,YAAYjpB,SAO5B,KAJfA,EAASme,EAASne,EAAQ7M,EAAKqB,IAAKnB,EAAI,IAMpC,YADAqX,EAAQ1K,GAKhB0K,OACD,SAAUxI,EAAGnM,GACZ6c,EAAO7c,YA9BnB,MAiCY6c,MAIhB,OADAkN,EAAgBrD,EAASsD,GAClBtD,EAGX,SAASkO,GAASn2B,EAAKnD,EAAO0uB,EAAU6K,GACpC,IAAI7O,EAAOnqB,KAEX4C,EAAM0rB,EAAa1rB,GAEnB,IAAIioB,EAAU,IAAIoD,GAAU,SAAUnV,EAASkI,GAC3CmJ,EAAKmJ,QAAQ9a,MAAK,gBAIAxF,IAAVvT,IACAA,EAAQ,MAIZ,IAAIw5B,EAAgBx5B,EAEhBuwB,EAAS7F,EAAK0I,QAClB7C,EAAOuI,WAAWvB,UAAUv3B,GAAO,SAAUA,EAAO0E,GAC5CA,EACA6c,EAAO7c,GAEP6rB,EAAOnU,GAAGsT,aAAY,SAAU7e,GAC5BkoB,GAAcloB,EAAG0f,EAAQ,0BAA4BA,EAAOgB,UAAnC,8BAAmF,CAACpuB,EAAKnD,IAAQ,WACtHqZ,EAAQmgB,MACT,SAAU3oB,EAAGnM,GACZ6c,EAAO7c,SAEZ,SAAU+0B,GAGT,GAAIA,EAASjR,OAASiR,EAASC,UAAW,CAQtC,GAAIH,EAAc,EAEd,YADAlgB,EAAQigB,GAASt1B,MAAM0mB,EAAM,CAACvnB,EAAKq2B,EAAe9K,EAAU6K,EAAc,KAG9EhY,EAAOkY,aArC3B,MA0CYlY,MAIhB,OADAkN,EAAgBrD,EAASsD,GAClBtD,EAGX,SAASuO,GAAUx2B,EAAKnD,EAAO0uB,GAC3B,OAAO4K,GAASt1B,MAAMzD,KAAM,CAAC4C,EAAKnD,EAAO0uB,EAAU,IAGvD,SAASkL,GAAaz2B,EAAKurB,GACvB,IAAIhE,EAAOnqB,KAEX4C,EAAM0rB,EAAa1rB,GAEnB,IAAIioB,EAAU,IAAIoD,GAAU,SAAUnV,EAASkI,GAC3CmJ,EAAKmJ,QAAQ9a,MAAK,WACd,IAAIwX,EAAS7F,EAAK0I,QAClB7C,EAAOnU,GAAGsT,aAAY,SAAU7e,GAC5BkoB,GAAcloB,EAAG0f,EAAQ,eAAiBA,EAAOgB,UAAY,iBAAkB,CAACpuB,IAAM,WAClFkW,OACD,SAAUxI,EAAGnM,GACZ6c,EAAO7c,YANnB,MASY6c,MAIhB,OADAkN,EAAgBrD,EAASsD,GAClBtD,EAKX,SAASyO,GAAQnL,GACb,IAAIhE,EAAOnqB,KAEP6qB,EAAU,IAAIoD,GAAU,SAAUnV,EAASkI,GAC3CmJ,EAAKmJ,QAAQ9a,MAAK,WACd,IAAIwX,EAAS7F,EAAK0I,QAClB7C,EAAOnU,GAAGsT,aAAY,SAAU7e,GAC5BkoB,GAAcloB,EAAG0f,EAAQ,eAAiBA,EAAOgB,UAAW,IAAI,WAC5DlY,OACD,SAAUxI,EAAGnM,GACZ6c,EAAO7c,YANnB,MASY6c,MAIhB,OADAkN,EAAgBrD,EAASsD,GAClBtD,EAKX,SAAS0O,GAASpL,GACd,IAAIhE,EAAOnqB,KAEP6qB,EAAU,IAAIoD,GAAU,SAAUnV,EAASkI,GAC3CmJ,EAAKmJ,QAAQ9a,MAAK,WACd,IAAIwX,EAAS7F,EAAK0I,QAClB7C,EAAOnU,GAAGsT,aAAY,SAAU7e,GAE5BkoB,GAAcloB,EAAG0f,EAAQ,+BAAiCA,EAAOgB,UAAW,IAAI,SAAU1gB,EAAGqoB,GACzF,IAAIvqB,EAASuqB,EAAQC,KAAKr3B,KAAK,GAAGuB,EAClCgW,EAAQ1K,MACT,SAAUkC,EAAGnM,GACZ6c,EAAO7c,YARnB,MAWY6c,MAIhB,OADAkN,EAAgBrD,EAASsD,GAClBtD,EAUX,SAAS2O,GAAMjpB,EAAG4d,GACd,IAAIhE,EAAOnqB,KAEP6qB,EAAU,IAAIoD,GAAU,SAAUnV,EAASkI,GAC3CmJ,EAAKmJ,QAAQ9a,MAAK,WACd,IAAIwX,EAAS7F,EAAK0I,QAClB7C,EAAOnU,GAAGsT,aAAY,SAAU7e,GAC5BkoB,GAAcloB,EAAG0f,EAAQ,mBAAqBA,EAAOgB,UAAY,wBAAyB,CAACzgB,EAAI,IAAI,SAAUD,EAAGqoB,GAC5G,IAAIvqB,EAASuqB,EAAQC,KAAKr4B,OAASo4B,EAAQC,KAAKr3B,KAAK,GAAGqB,IAAM,KAC9DkW,EAAQ1K,MACT,SAAUkC,EAAGnM,GACZ6c,EAAO7c,YAPnB,MAUY6c,MAIhB,OADAkN,EAAgBrD,EAASsD,GAClBtD,EAGX,SAAS4O,GAAOtL,GACZ,IAAIhE,EAAOnqB,KAEP6qB,EAAU,IAAIoD,GAAU,SAAUnV,EAASkI,GAC3CmJ,EAAKmJ,QAAQ9a,MAAK,WACd,IAAIwX,EAAS7F,EAAK0I,QAClB7C,EAAOnU,GAAGsT,aAAY,SAAU7e,GAC5BkoB,GAAcloB,EAAG0f,EAAQ,mBAAqBA,EAAOgB,UAAW,IAAI,SAAU1gB,EAAGqoB,GAG7E,IAFA,IAAItE,EAAO,GAEF5yB,EAAI,EAAGA,EAAIk3B,EAAQC,KAAKr4B,OAAQkB,IACrC4yB,EAAK7tB,KAAKmyB,EAAQC,KAAKr3B,KAAKE,GAAGmB,KAGnCkW,EAAQub,MACT,SAAU/jB,EAAGnM,GACZ6c,EAAO7c,YAZnB,MAeY6c,MAIhB,OADAkN,EAAgBrD,EAASsD,GAClBtD,EAKX,SAAS6O,GAAiB7d,GACtB,OAAO,IAAIoS,GAAU,SAAUnV,EAASkI,GACpCnF,EAAGsT,aAAY,SAAU7e,GACrBA,EAAE6nB,WAAW,8FAAoG,IAAI,SAAU7nB,EAAGqoB,GAG9H,IAFA,IAAIgB,EAAa,GAERl4B,EAAI,EAAGA,EAAIk3B,EAAQC,KAAKr4B,OAAQkB,IACrCk4B,EAAWnzB,KAAKmyB,EAAQC,KAAKr3B,KAAKE,GAAG+D,MAGzCsT,EAAQ,CACJ+C,GAAIA,EACJ8d,WAAYA,OAEjB,SAAUrpB,EAAGnM,GACZ6c,EAAO7c,SAEZ,SAAU+0B,GACTlY,EAAOkY,SAKnB,SAASU,GAAenyB,EAAS0mB,GAC7BA,EAAWI,EAAY9qB,MAAMzD,KAAM+C,WAEnC,IAAIwxB,EAAgBv0B,KAAKE,UACzBuH,EAA6B,oBAAZA,GAA0BA,GAAW,IACzCjC,OACTiC,EAAQjC,KAAOiC,EAAQjC,MAAQ+uB,EAAc/uB,KAC7CiC,EAAQupB,UAAYvpB,EAAQupB,WAAauD,EAAcvD,WAG3D,IACInG,EADAV,EAAOnqB,KAsDX,OADAkuB,EAhDIrD,EAHCpjB,EAAQjC,KAGC,IAAIyoB,GAAU,SAAUnV,GAC9B,IAAI+C,EAGAA,EAFApU,EAAQjC,OAAS+uB,EAAc/uB,KAE1B2kB,EAAK0I,QAAQhX,GAEbsR,aAAa1lB,EAAQjC,KAAM,GAAI,GAAI,GAGvCiC,EAAQupB,UAITlY,EAAQ,CACJ+C,GAAIA,EACJ8d,WAAY,CAAClyB,EAAQupB,aAJzBlY,EAAQ4gB,GAAiB7d,OAO9BrD,MAAK,SAAUqhB,GACd,OAAO,IAAI5L,GAAU,SAAUnV,EAASkI,GACpC6Y,EAAche,GAAGsT,aAAY,SAAU7e,GACnC,SAASwpB,EAAU9I,GACf,OAAO,IAAI/C,GAAU,SAAUnV,EAASkI,GACpC1Q,EAAE6nB,WAAW,wBAA0BnH,EAAW,IAAI,WAClDlY,OACD,SAAUxI,EAAGnM,GACZ6c,EAAO7c,SAMnB,IADA,IAAI41B,EAAa,GACRt4B,EAAI,EAAGuoB,EAAM6P,EAAcF,WAAWp5B,OAAQkB,EAAIuoB,EAAKvoB,IAC5Ds4B,EAAWvzB,KAAKszB,EAAUD,EAAcF,WAAWl4B,KAGvDwsB,EAAUnC,IAAIiO,GAAYvhB,MAAK,WAC3BM,OADJ,OAEY,SAAUlG,GAClBoO,EAAOpO,SAEZ,SAAUsmB,GACTlY,EAAOkY,YA5CTjL,EAAUjN,OAAO,qBAkDNmN,GAClBtD,EAGX,IAAImP,GAAgB,CAChBhF,QAAS,gBACT3B,aAAc+E,GACdnD,SAAUC,IACVxS,QAASoW,GACTxZ,QAASuZ,GACT/a,QAASsb,GACTzW,WAAY0W,GACZ5kB,MAAO6kB,GACP/4B,OAAQg5B,GACR32B,IAAK42B,GACLnF,KAAMoF,GACNnF,aAAcsF,IAGlB,SAASK,KACL,IACI,MAA+B,qBAAjBtb,cAAgC,YAAaA,gBAEzDA,aAAab,QACjB,MAAOlL,GACL,OAAO,GAIf,SAASsnB,GAAczyB,EAAS0yB,GAC5B,IAAIC,EAAY3yB,EAAQjC,KAAO,IAK/B,OAHIiC,EAAQupB,YAAcmJ,EAAcnJ,YACpCoJ,GAAa3yB,EAAQupB,UAAY,KAE9BoJ,EAIX,SAASC,KACL,IAAIC,EAAsB,4BAE1B,IAII,OAHA3b,aAAab,QAAQwc,GAAqB,GAC1C3b,aAAagE,WAAW2X,IAEjB,EACT,MAAO1nB,GACL,OAAO,GAQf,SAAS2nB,KACL,OAAQF,MAA+B1b,aAAape,OAAS,EAIjE,SAASi6B,GAAe/yB,GACpB,IAAI0iB,EAAOnqB,KACPgwB,EAAS,GACb,GAAIvoB,EACA,IAAK,IAAIhG,KAAKgG,EACVuoB,EAAOvuB,GAAKgG,EAAQhG,GAM5B,OAFAuuB,EAAOoK,UAAYF,GAAczyB,EAAS0iB,EAAKuJ,gBAE1C6G,MAILpQ,EAAK0I,QAAU7C,EACfA,EAAOuI,WAAaN,GAEbhK,EAAUnV,WANNmV,EAAUjN,SAWzB,SAASyZ,GAAQtM,GACb,IAAIhE,EAAOnqB,KACP6qB,EAAUV,EAAKmJ,QAAQ9a,MAAK,WAG5B,IAFA,IAAI4hB,EAAYjQ,EAAK0I,QAAQuH,UAEpB34B,EAAIkd,aAAape,OAAS,EAAGkB,GAAK,EAAGA,IAAK,CAC/C,IAAImB,EAAM+b,aAAa/b,IAAInB,GAEI,IAA3BmB,EAAIkR,QAAQsmB,IACZzb,aAAagE,WAAW/f,OAMpC,OADAsrB,EAAgBrD,EAASsD,GAClBtD,EAMX,SAAS6P,GAAU93B,EAAKurB,GACpB,IAAIhE,EAAOnqB,KAEX4C,EAAM0rB,EAAa1rB,GAEnB,IAAIioB,EAAUV,EAAKmJ,QAAQ9a,MAAK,WAC5B,IAAIwX,EAAS7F,EAAK0I,QACdzkB,EAASuQ,aAAaW,QAAQ0Q,EAAOoK,UAAYx3B,GAUrD,OAJIwL,IACAA,EAAS4hB,EAAOuI,WAAWlB,YAAYjpB,IAGpCA,KAIX,OADA8f,EAAgBrD,EAASsD,GAClBtD,EAIX,SAAS8P,GAAUpO,EAAU4B,GACzB,IAAIhE,EAAOnqB,KAEP6qB,EAAUV,EAAKmJ,QAAQ9a,MAAK,WAc5B,IAbA,IAAIwX,EAAS7F,EAAK0I,QACduH,EAAYpK,EAAOoK,UACnBQ,EAAkBR,EAAU75B,OAC5BA,EAASoe,aAAape,OAQtBuzB,EAAkB,EAEbryB,EAAI,EAAGA,EAAIlB,EAAQkB,IAAK,CAC7B,IAAImB,EAAM+b,aAAa/b,IAAInB,GAC3B,GAA+B,IAA3BmB,EAAIkR,QAAQsmB,GAAhB,CAGA,IAAI36B,EAAQkf,aAAaW,QAAQ1c,GAYjC,GANInD,IACAA,EAAQuwB,EAAOuI,WAAWlB,YAAY53B,SAK5B,KAFdA,EAAQ8sB,EAAS9sB,EAAOmD,EAAI4K,UAAUotB,GAAkB9G,MAGpD,OAAOr0B,OAMnB,OADAyuB,EAAgBrD,EAASsD,GAClBtD,EAIX,SAASgQ,GAAMtqB,EAAG4d,GACd,IAAIhE,EAAOnqB,KACP6qB,EAAUV,EAAKmJ,QAAQ9a,MAAK,WAC5B,IACIpK,EADA4hB,EAAS7F,EAAK0I,QAElB,IACIzkB,EAASuQ,aAAa/b,IAAI2N,GAC5B,MAAOpM,GACLiK,EAAS,KAQb,OAJIA,IACAA,EAASA,EAAOZ,UAAUwiB,EAAOoK,UAAU75B,SAGxC6N,KAIX,OADA8f,EAAgBrD,EAASsD,GAClBtD,EAGX,SAASiQ,GAAO3M,GACZ,IAAIhE,EAAOnqB,KACP6qB,EAAUV,EAAKmJ,QAAQ9a,MAAK,WAK5B,IAJA,IAAIwX,EAAS7F,EAAK0I,QACdtyB,EAASoe,aAAape,OACtB8zB,EAAO,GAEF5yB,EAAI,EAAGA,EAAIlB,EAAQkB,IAAK,CAC7B,IAAIs5B,EAAUpc,aAAa/b,IAAInB,GACW,IAAtCs5B,EAAQjnB,QAAQkc,EAAOoK,YACvB/F,EAAK7tB,KAAKu0B,EAAQvtB,UAAUwiB,EAAOoK,UAAU75B,SAIrD,OAAO8zB,KAIX,OADAnG,EAAgBrD,EAASsD,GAClBtD,EAIX,SAASmQ,GAAS7M,GACd,IACItD,EADO7qB,KACQq0B,OAAO7b,MAAK,SAAU6b,GACrC,OAAOA,EAAK9zB,UAIhB,OADA2tB,EAAgBrD,EAASsD,GAClBtD,EAIX,SAASoQ,GAAar4B,EAAKurB,GACvB,IAAIhE,EAAOnqB,KAEX4C,EAAM0rB,EAAa1rB,GAEnB,IAAIioB,EAAUV,EAAKmJ,QAAQ9a,MAAK,WAC5B,IAAIwX,EAAS7F,EAAK0I,QAClBlU,aAAagE,WAAWqN,EAAOoK,UAAYx3B,MAI/C,OADAsrB,EAAgBrD,EAASsD,GAClBtD,EAOX,SAASqQ,GAAUt4B,EAAKnD,EAAO0uB,GAC3B,IAAIhE,EAAOnqB,KAEX4C,EAAM0rB,EAAa1rB,GAEnB,IAAIioB,EAAUV,EAAKmJ,QAAQ9a,MAAK,gBAGdxF,IAAVvT,IACAA,EAAQ,MAIZ,IAAIw5B,EAAgBx5B,EAEpB,OAAO,IAAIwuB,GAAU,SAAUnV,EAASkI,GACpC,IAAIgP,EAAS7F,EAAK0I,QAClB7C,EAAOuI,WAAWvB,UAAUv3B,GAAO,SAAUA,EAAO0E,GAChD,GAAIA,EACA6c,EAAO7c,QAEP,IACIwa,aAAab,QAAQkS,EAAOoK,UAAYx3B,EAAKnD,GAC7CqZ,EAAQmgB,GACV,MAAOrmB,GAGU,uBAAXA,EAAEpN,MAA4C,+BAAXoN,EAAEpN,MACrCwb,EAAOpO,GAEXoO,EAAOpO,aAQ3B,OADAsb,EAAgBrD,EAASsD,GAClBtD,EAGX,SAASsQ,GAAe1zB,EAAS0mB,GAI7B,GAHAA,EAAWI,EAAY9qB,MAAMzD,KAAM+C,aAEnC0E,EAA6B,oBAAZA,GAA0BA,GAAW,IACzCjC,KAAM,CACf,IAAI+uB,EAAgBv0B,KAAKE,SACzBuH,EAAQjC,KAAOiC,EAAQjC,MAAQ+uB,EAAc/uB,KAC7CiC,EAAQupB,UAAYvpB,EAAQupB,WAAauD,EAAcvD,UAG3D,IACInG,EADAV,EAAOnqB,KAuBX,OAlBI6qB,EAHCpjB,EAAQjC,KAGC,IAAIyoB,GAAU,SAAUnV,GACzBrR,EAAQupB,UAGTlY,EAAQohB,GAAczyB,EAAS0iB,EAAKuJ,iBAFpC5a,EAAQrR,EAAQjC,KAAO,QAI5BgT,MAAK,SAAU4hB,GACd,IAAK,IAAI34B,EAAIkd,aAAape,OAAS,EAAGkB,GAAK,EAAGA,IAAK,CAC/C,IAAImB,EAAM+b,aAAa/b,IAAInB,GAEI,IAA3BmB,EAAIkR,QAAQsmB,IACZzb,aAAagE,WAAW/f,OAb1BqrB,EAAUjN,OAAO,qBAmB/BkN,EAAgBrD,EAASsD,GAClBtD,EAGX,IAAIuQ,GAAsB,CACtBpG,QAAS,sBACT3B,aAAcmH,GACdvF,SAAUgF,KACVvX,QAASiY,GACTrb,QAASob,GACT5c,QAASod,GACTvY,WAAYsY,GACZxmB,MAAOgmB,GACPl6B,OAAQy6B,GACRp4B,IAAKi4B,GACLxG,KAAMyG,GACNxG,aAAc6G,IAGdE,GAAY,SAAmBC,EAAGC,GAClC,OAAOD,IAAMC,GAAkB,kBAAND,GAA+B,kBAANC,GAAkBC,MAAMF,IAAME,MAAMD,IAGtFE,GAAW,SAAkBC,EAAOC,GAGpC,IAFA,IAAI3R,EAAM0R,EAAMn7B,OACZkB,EAAI,EACDA,EAAIuoB,GAAK,CACZ,GAAIqR,GAAUK,EAAMj6B,GAAIk6B,GACpB,OAAO,EAEXl6B,IAGJ,OAAO,GAGP2P,GAAUjP,MAAMiP,SAAW,SAAUwqB,GACrC,MAA+C,mBAAxCt8B,OAAOyB,UAAU8S,SAAS1L,KAAKyzB,IAKtCC,GAAiB,GAEjBC,GAAgB,GAEhBC,GAAiB,CACjBC,UAAWjH,EACXkH,OAAQjC,GACRkC,aAAcd,IAGde,GAAqB,CAACJ,GAAeC,UAAUhH,QAAS+G,GAAeE,OAAOjH,QAAS+G,GAAeG,aAAalH,SAEnHoH,GAAwB,CAAC,gBAEzBC,GAAiB,CAAC,QAAS,UAAW,UAAW,MAAO,OAAQ,SAAU,aAAc,WAAWn0B,OAAOk0B,IAE1GE,GAAgB,CAChBhE,YAAa,GACbiE,OAAQJ,GAAmB9wB,QAC3B7F,KAAM,cAGN6N,KAAM,QACN2d,UAAW,gBACXtX,QAAS,GAGb,SAAS8iB,GAAcC,EAAqBC,GACxCD,EAAoBC,GAAiB,WACjC,IAAIC,EAAQ55B,UACZ,OAAO05B,EAAoBnJ,QAAQ9a,MAAK,WACpC,OAAOikB,EAAoBC,GAAej5B,MAAMg5B,EAAqBE,OAKjF,SAASC,KACL,IAAK,IAAIn7B,EAAI,EAAGA,EAAIsB,UAAUxC,OAAQkB,IAAK,CACvC,IAAIm6B,EAAM74B,UAAUtB,GAEpB,GAAIm6B,EACA,IAAK,IAAIiB,KAAQjB,EACTA,EAAIv5B,eAAew6B,KACfzrB,GAAQwqB,EAAIiB,IACZ95B,UAAU,GAAG85B,GAAQjB,EAAIiB,GAAMxxB,QAE/BtI,UAAU,GAAG85B,GAAQjB,EAAIiB,IAO7C,OAAO95B,UAAU,GAGrB,IAAI+5B,GAAc,WACd,SAASA,EAAYr1B,GAGjB,IAAK,IAAIs1B,KAFTvQ,EAAgBxsB,KAAM88B,GAEIf,GACtB,GAAIA,GAAe15B,eAAe06B,GAAgB,CAC9C,IAAIR,EAASR,GAAegB,GACxBC,EAAaT,EAAOvH,QACxBh1B,KAAK+8B,GAAiBC,EAEjBnB,GAAemB,IAIhBh9B,KAAKi9B,aAAaV,GAK9Bv8B,KAAK0zB,eAAiBkJ,GAAO,GAAIN,IACjCt8B,KAAKD,QAAU68B,GAAO,GAAI58B,KAAK0zB,eAAgBjsB,GAC/CzH,KAAKk9B,WAAa,KAClBl9B,KAAKm9B,YAAc,KACnBn9B,KAAKo9B,QAAS,EACdp9B,KAAK6yB,QAAU,KAEf7yB,KAAKq9B,+BACLr9B,KAAKs9B,UAAUt9B,KAAKD,QAAQw8B,QAA5B,OAA6C,eA0QjD,OAjQAO,EAAY/7B,UAAUb,OAAS,SAAgBuH,GAI3C,GAA0E,YAAlD,qBAAZA,EAA0B,YAAc6kB,EAAQ7kB,IAAwB,CAGhF,GAAIzH,KAAKo9B,OACL,OAAO,IAAIv3B,MAAM,wDAGrB,IAAK,IAAIpE,KAAKgG,EAAS,CAKnB,GAJU,cAANhG,IACAgG,EAAQhG,GAAKgG,EAAQhG,GAAGiL,QAAQ,MAAO,MAGjC,YAANjL,GAAyC,kBAAfgG,EAAQhG,GAClC,OAAO,IAAIoE,MAAM,sCAGrB7F,KAAKD,QAAQ0B,GAAKgG,EAAQhG,GAK9B,QAAI,WAAYgG,KAAWA,EAAQ80B,QACxBv8B,KAAKs9B,UAAUt9B,KAAKD,QAAQw8B,QAIpC,MAAuB,kBAAZ90B,EACPzH,KAAKD,QAAQ0H,GAEbzH,KAAKD,SAQpB+8B,EAAY/7B,UAAUk8B,aAAe,SAAsBM,EAAcpP,EAAUE,GAC/E,IAAIxD,EAAU,IAAIoD,GAAU,SAAUnV,EAASkI,GAC3C,IACI,IAAIgc,EAAaO,EAAavI,QAC1BwI,EAAkB,IAAI33B,MAAM,wFAIhC,IAAK03B,EAAavI,QAEd,YADAhU,EAAOwc,GAKX,IADA,IAAIC,EAAgBpB,GAAen0B,OAAO,gBACjCzG,EAAI,EAAGuoB,EAAMyT,EAAcl9B,OAAQkB,EAAIuoB,EAAKvoB,IAAK,CACtD,IAAIi8B,EAAmBD,EAAch8B,GAKrC,KADkBg6B,GAASW,GAAuBsB,IAC/BH,EAAaG,KAAgE,oBAAnCH,EAAaG,GAEtE,YADA1c,EAAOwc,GAKf,IAAIG,EAA0B,WAU1B,IATA,IAAIC,EAA8B,SAAqCC,GACnE,OAAO,WACH,IAAI15B,EAAQ,IAAI0B,MAAM,UAAYg4B,EAAa,6CAC3ChT,EAAUoD,EAAUjN,OAAO7c,GAE/B,OADA+pB,EAAgBrD,EAAS9nB,UAAUA,UAAUxC,OAAS,IAC/CsqB,IAINnjB,EAAK,EAAGo2B,EAAO1B,GAAsB77B,OAAQmH,EAAKo2B,EAAMp2B,IAAM,CACnE,IAAIq2B,EAAuB3B,GAAsB10B,GAC5C61B,EAAaQ,KACdR,EAAaQ,GAAwBH,EAA4BG,MAK7EJ,IAEA,IAAIK,EAAmB,SAA0BC,GACzCpC,GAAemB,IACf9oB,QAAQ1P,KAAK,kCAAoCw4B,GAErDnB,GAAemB,GAAcO,EAC7BzB,GAAckB,GAAciB,EAI5BnlB,KAGA,aAAcykB,EACVA,EAAatI,UAA6C,oBAA1BsI,EAAatI,SAC7CsI,EAAatI,WAAWzc,KAAKwlB,EAAkBhd,GAE/Cgd,IAAmBT,EAAatI,UAGpC+I,GAAiB,GAEvB,MAAOprB,GACLoO,EAAOpO,OAKf,OADAwb,EAAoBvD,EAASsD,EAAUE,GAChCxD,GAGXiS,EAAY/7B,UAAUw7B,OAAS,WAC3B,OAAOv8B,KAAKg1B,SAAW,MAG3B8H,EAAY/7B,UAAUm9B,UAAY,SAAmBlB,EAAY7O,EAAUE,GACvE,IAAI8P,EAAmBtC,GAAemB,GAAc/O,EAAUnV,QAAQ+iB,GAAemB,IAAe/O,EAAUjN,OAAO,IAAInb,MAAM,sBAG/H,OADAuoB,EAAoB+P,EAAkBhQ,EAAUE,GACzC8P,GAGXrB,EAAY/7B,UAAUq9B,cAAgB,SAAuBjQ,GACzD,IAAIkQ,EAAoBpQ,EAAUnV,QAAQmf,IAE1C,OADA7J,EAAoBiQ,EAAmBlQ,GAChCkQ,GAGXvB,EAAY/7B,UAAUuyB,MAAQ,SAAenF,GACzC,IAAIhE,EAAOnqB,KAEP6qB,EAAUV,EAAK+S,WAAW1kB,MAAK,WAK/B,OAJoB,OAAhB2R,EAAKiT,SACLjT,EAAKiT,OAASjT,EAAKgT,eAGhBhT,EAAKiT,UAIhB,OADAhP,EAAoBvD,EAASsD,EAAUA,GAChCtD,GAGXiS,EAAY/7B,UAAUu8B,UAAY,SAAmBgB,EAASnQ,EAAUE,GACpE,IAAIlE,EAAOnqB,KAENoR,GAAQktB,KACTA,EAAU,CAACA,IAGf,IAAIC,EAAmBv+B,KAAKw+B,qBAAqBF,GAEjD,SAASG,IACLtU,EAAKpqB,QAAQw8B,OAASpS,EAAKoS,SAG/B,SAASmC,EAAqBnC,GAK1B,OAJApS,EAAKwU,QAAQpC,GACbkC,IAEAtU,EAAKiT,OAASjT,EAAKkJ,aAAalJ,EAAKpqB,SAC9BoqB,EAAKiT,OAGhB,SAASwB,EAAWL,GAChB,OAAO,WACH,IAAIM,EAAqB,EAEzB,SAASC,IACL,KAAOD,EAAqBN,EAAiBh+B,QAAQ,CACjD,IAAIy8B,EAAauB,EAAiBM,GAMlC,OALAA,IAEA1U,EAAK0I,QAAU,KACf1I,EAAKiT,OAAS,KAEPjT,EAAK+T,UAAUlB,GAAYxkB,KAAKkmB,GAAhC,MAA+DI,GAG1EL,IACA,IAAIt6B,EAAQ,IAAI0B,MAAM,sCAEtB,OADAskB,EAAK+S,WAAajP,EAAUjN,OAAO7c,GAC5BgmB,EAAK+S,WAGhB,OAAO4B,KAOf,IAAIC,EAAuC,OAApB/+B,KAAKk9B,WAAsBl9B,KAAKk9B,WAAL,OAAyB,WACvE,OAAOjP,EAAUnV,aAChBmV,EAAUnV,UAqBf,OAnBA9Y,KAAKk9B,WAAa6B,EAAiBvmB,MAAK,WACpC,IAAIwkB,EAAauB,EAAiB,GAIlC,OAHApU,EAAK0I,QAAU,KACf1I,EAAKiT,OAAS,KAEPjT,EAAK+T,UAAUlB,GAAYxkB,MAAK,SAAU+jB,GAC7CpS,EAAK6K,QAAUuH,EAAOvH,QACtByJ,IACAtU,EAAKkT,+BACLlT,EAAKgT,YAAcyB,EAAWL,SATpB,OAWN,WACRE,IACA,IAAIt6B,EAAQ,IAAI0B,MAAM,sCAEtB,OADAskB,EAAK+S,WAAajP,EAAUjN,OAAO7c,GAC5BgmB,EAAK+S,cAGhB9O,EAAoBpuB,KAAKk9B,WAAY/O,EAAUE,GACxCruB,KAAKk9B,YAGhBJ,EAAY/7B,UAAUi+B,SAAW,SAAkBhC,GAC/C,QAASlB,GAAckB,IAG3BF,EAAY/7B,UAAU49B,QAAU,SAAiBM,GAC7CrC,GAAO58B,KAAMi/B,IAGjBnC,EAAY/7B,UAAUy9B,qBAAuB,SAA8BF,GAEvE,IADA,IAAIC,EAAmB,GACd98B,EAAI,EAAGuoB,EAAMsU,EAAQ/9B,OAAQkB,EAAIuoB,EAAKvoB,IAAK,CAChD,IAAIu7B,EAAasB,EAAQ78B,GACrBzB,KAAKg/B,SAAShC,IACduB,EAAiB/3B,KAAKw2B,GAG9B,OAAOuB,GAGXzB,EAAY/7B,UAAUs8B,6BAA+B,WAKjD,IAAK,IAAI57B,EAAI,EAAGuoB,EAAMqS,GAAe97B,OAAQkB,EAAIuoB,EAAKvoB,IAClD+6B,GAAcx8B,KAAMq8B,GAAe56B,KAI3Cq7B,EAAY/7B,UAAUm+B,eAAiB,SAAwBz3B,GAC3D,OAAO,IAAIq1B,EAAYr1B,IAGpBq1B,EArSO,GA4SdqC,GAAiB,IAAIrC,GAEzBjmB,EAAOrX,QAAU2/B,IAEf,CAAC,EAAI,KAAK,GAAG,CAAC,GAzuFoW,CAyuFhW,mCCrtFpB,SAASC,EAAWC,GAClB,GAAoB,kBAATA,EACT,MAAM,IAAIjkB,UAAU,mCAAqC+G,KAAK3G,UAAU6jB,IAK5E,SAASC,EAAqBD,EAAME,GAMlC,IALA,IAIItX,EAJA5L,EAAM,GACNmjB,EAAoB,EACpBC,GAAa,EACbC,EAAO,EAEFj+B,EAAI,EAAGA,GAAK49B,EAAK9+B,SAAUkB,EAAG,CACrC,GAAIA,EAAI49B,EAAK9+B,OACX0nB,EAAOoX,EAAKrQ,WAAWvtB,OACpB,IAAa,KAATwmB,EACP,MAEAA,EAAO,GACT,GAAa,KAATA,EAAmB,CACrB,GAAIwX,IAAch+B,EAAI,GAAc,IAATi+B,QAEpB,GAAID,IAAch+B,EAAI,GAAc,IAATi+B,EAAY,CAC5C,GAAIrjB,EAAI9b,OAAS,GAA2B,IAAtBi/B,GAA8D,KAAnCnjB,EAAI2S,WAAW3S,EAAI9b,OAAS,IAAsD,KAAnC8b,EAAI2S,WAAW3S,EAAI9b,OAAS,GAC1H,GAAI8b,EAAI9b,OAAS,EAAG,CAClB,IAAIo/B,EAAiBtjB,EAAIujB,YAAY,KACrC,GAAID,IAAmBtjB,EAAI9b,OAAS,EAAG,EACb,IAApBo/B,GACFtjB,EAAM,GACNmjB,EAAoB,GAGpBA,GADAnjB,EAAMA,EAAIhR,MAAM,EAAGs0B,IACKp/B,OAAS,EAAI8b,EAAIujB,YAAY,KAEvDH,EAAYh+B,EACZi+B,EAAO,EACP,eAEG,GAAmB,IAAfrjB,EAAI9b,QAA+B,IAAf8b,EAAI9b,OAAc,CAC/C8b,EAAM,GACNmjB,EAAoB,EACpBC,EAAYh+B,EACZi+B,EAAO,EACP,SAGAH,IACEljB,EAAI9b,OAAS,EACf8b,GAAO,MAEPA,EAAM,KACRmjB,EAAoB,QAGlBnjB,EAAI9b,OAAS,EACf8b,GAAO,IAAMgjB,EAAKh0B,MAAMo0B,EAAY,EAAGh+B,GAEvC4a,EAAMgjB,EAAKh0B,MAAMo0B,EAAY,EAAGh+B,GAClC+9B,EAAoB/9B,EAAIg+B,EAAY,EAEtCA,EAAYh+B,EACZi+B,EAAO,OACW,KAATzX,IAA+B,IAAVyX,IAC5BA,EAEFA,GAAQ,EAGZ,OAAOrjB,EAeT,IAAIwjB,EAAQ,CAEV/mB,QAAS,WAKP,IAJA,IAEIgnB,EAFAC,EAAe,GACfC,GAAmB,EAGdv+B,EAAIsB,UAAUxC,OAAS,EAAGkB,IAAM,IAAMu+B,EAAkBv+B,IAAK,CACpE,IAAI49B,EACA59B,GAAK,EACP49B,EAAOt8B,UAAUtB,SAELuR,IAAR8sB,IACFA,EAAMG,QAAQH,OAChBT,EAAOS,GAGTV,EAAWC,GAGS,IAAhBA,EAAK9+B,SAITw/B,EAAeV,EAAO,IAAMU,EAC5BC,EAA0C,KAAvBX,EAAKrQ,WAAW,IASrC,OAFA+Q,EAAeT,EAAqBS,GAAeC,GAE/CA,EACED,EAAax/B,OAAS,EACjB,IAAMw/B,EAEN,IACAA,EAAax/B,OAAS,EACxBw/B,EAEA,KAIXG,UAAW,SAAmBb,GAG5B,GAFAD,EAAWC,GAES,IAAhBA,EAAK9+B,OAAc,MAAO,IAE9B,IAAI4/B,EAAoC,KAAvBd,EAAKrQ,WAAW,GAC7BoR,EAAyD,KAArCf,EAAKrQ,WAAWqQ,EAAK9+B,OAAS,GAQtD,OAHoB,KAFpB8+B,EAAOC,EAAqBD,GAAOc,IAE1B5/B,QAAiB4/B,IAAYd,EAAO,KACzCA,EAAK9+B,OAAS,GAAK6/B,IAAmBf,GAAQ,KAE9Cc,EAAmB,IAAMd,EACtBA,GAGTc,WAAY,SAAoBd,GAE9B,OADAD,EAAWC,GACJA,EAAK9+B,OAAS,GAA4B,KAAvB8+B,EAAKrQ,WAAW,IAG5CthB,KAAM,WACJ,GAAyB,IAArB3K,UAAUxC,OACZ,MAAO,IAET,IADA,IAAI8/B,EACK5+B,EAAI,EAAGA,EAAIsB,UAAUxC,SAAUkB,EAAG,CACzC,IAAIm6B,EAAM74B,UAAUtB,GACpB29B,EAAWxD,GACPA,EAAIr7B,OAAS,SACAyS,IAAXqtB,EACFA,EAASzE,EAETyE,GAAU,IAAMzE,GAGtB,YAAe5oB,IAAXqtB,EACK,IACFR,EAAMK,UAAUG,IAGzB7wB,SAAU,SAAkB8wB,EAAMC,GAIhC,GAHAnB,EAAWkB,GACXlB,EAAWmB,GAEPD,IAASC,EAAI,MAAO,GAKxB,IAHAD,EAAOT,EAAM/mB,QAAQwnB,OACrBC,EAAKV,EAAM/mB,QAAQynB,IAEF,MAAO,GAIxB,IADA,IAAIC,EAAY,EACTA,EAAYF,EAAK//B,QACa,KAA/B+/B,EAAKtR,WAAWwR,KADYA,GASlC,IALA,IAAIC,EAAUH,EAAK//B,OACfmgC,EAAUD,EAAUD,EAGpBG,EAAU,EACPA,EAAUJ,EAAGhgC,QACa,KAA3BggC,EAAGvR,WAAW2R,KADUA,GAW9B,IAPA,IACIC,EADQL,EAAGhgC,OACKogC,EAGhBpgC,EAASmgC,EAAUE,EAAQF,EAAUE,EACrCC,GAAiB,EACjBp/B,EAAI,EACDA,GAAKlB,IAAUkB,EAAG,CACvB,GAAIA,IAAMlB,EAAQ,CAChB,GAAIqgC,EAAQrgC,EAAQ,CAClB,GAAmC,KAA/BggC,EAAGvR,WAAW2R,EAAUl/B,GAG1B,OAAO8+B,EAAGl1B,MAAMs1B,EAAUl/B,EAAI,GACzB,GAAU,IAANA,EAGT,OAAO8+B,EAAGl1B,MAAMs1B,EAAUl/B,QAEnBi/B,EAAUngC,IACoB,KAAnC+/B,EAAKtR,WAAWwR,EAAY/+B,GAG9Bo/B,EAAgBp/B,EACD,IAANA,IAGTo/B,EAAgB,IAGpB,MAEF,IAAIC,EAAWR,EAAKtR,WAAWwR,EAAY/+B,GAE3C,GAAIq/B,IADSP,EAAGvR,WAAW2R,EAAUl/B,GAEnC,MACoB,KAAbq/B,IACPD,EAAgBp/B,GAGpB,IAAIoqB,EAAM,GAGV,IAAKpqB,EAAI++B,EAAYK,EAAgB,EAAGp/B,GAAKg/B,IAAWh/B,EAClDA,IAAMg/B,GAAkC,KAAvBH,EAAKtR,WAAWvtB,KAChB,IAAfoqB,EAAItrB,OACNsrB,GAAO,KAEPA,GAAO,OAMb,OAAIA,EAAItrB,OAAS,EACRsrB,EAAM0U,EAAGl1B,MAAMs1B,EAAUE,IAEhCF,GAAWE,EACoB,KAA3BN,EAAGvR,WAAW2R,MACdA,EACGJ,EAAGl1B,MAAMs1B,KAIpBI,UAAW,SAAmB1B,GAC5B,OAAOA,GAGTpvB,QAAS,SAAiBovB,GAExB,GADAD,EAAWC,GACS,IAAhBA,EAAK9+B,OAAc,MAAO,IAK9B,IAJA,IAAI0nB,EAAOoX,EAAKrQ,WAAW,GACvBgS,EAAmB,KAAT/Y,EACVgZ,GAAO,EACPC,GAAe,EACVz/B,EAAI49B,EAAK9+B,OAAS,EAAGkB,GAAK,IAAKA,EAEtC,GAAa,MADbwmB,EAAOoX,EAAKrQ,WAAWvtB,KAEnB,IAAKy/B,EAAc,CACjBD,EAAMx/B,EACN,YAIJy/B,GAAe,EAInB,OAAa,IAATD,EAAmBD,EAAU,IAAM,IACnCA,GAAmB,IAARC,EAAkB,KAC1B5B,EAAKh0B,MAAM,EAAG41B,IAGvBE,SAAU,SAAkB9B,EAAM+B,GAChC,QAAYpuB,IAARouB,GAAoC,kBAARA,EAAkB,MAAM,IAAIhmB,UAAU,mCACtEgkB,EAAWC,GAEX,IAGI59B,EAHAulB,EAAQ,EACRia,GAAO,EACPC,GAAe,EAGnB,QAAYluB,IAARouB,GAAqBA,EAAI7gC,OAAS,GAAK6gC,EAAI7gC,QAAU8+B,EAAK9+B,OAAQ,CACpE,GAAI6gC,EAAI7gC,SAAW8+B,EAAK9+B,QAAU6gC,IAAQ/B,EAAM,MAAO,GACvD,IAAIgC,EAASD,EAAI7gC,OAAS,EACtB+gC,GAAoB,EACxB,IAAK7/B,EAAI49B,EAAK9+B,OAAS,EAAGkB,GAAK,IAAKA,EAAG,CACrC,IAAIwmB,EAAOoX,EAAKrQ,WAAWvtB,GAC3B,GAAa,KAATwmB,GAGA,IAAKiZ,EAAc,CACjBla,EAAQvlB,EAAI,EACZ,YAGsB,IAAtB6/B,IAGFJ,GAAe,EACfI,EAAmB7/B,EAAI,GAErB4/B,GAAU,IAERpZ,IAASmZ,EAAIpS,WAAWqS,IACR,MAAZA,IAGJJ,EAAMx/B,IAKR4/B,GAAU,EACVJ,EAAMK,IAOd,OADIta,IAAUia,EAAKA,EAAMK,GAAmC,IAATL,IAAYA,EAAM5B,EAAK9+B,QACnE8+B,EAAKh0B,MAAM2b,EAAOia,GAEzB,IAAKx/B,EAAI49B,EAAK9+B,OAAS,EAAGkB,GAAK,IAAKA,EAClC,GAA2B,KAAvB49B,EAAKrQ,WAAWvtB,IAGhB,IAAKy/B,EAAc,CACjBla,EAAQvlB,EAAI,EACZ,YAEgB,IAATw/B,IAGXC,GAAe,EACfD,EAAMx/B,EAAI,GAId,OAAa,IAATw/B,EAAmB,GAChB5B,EAAKh0B,MAAM2b,EAAOia,IAI7BM,QAAS,SAAiBlC,GACxBD,EAAWC,GAQX,IAPA,IAAImC,GAAY,EACZC,EAAY,EACZR,GAAO,EACPC,GAAe,EAGfQ,EAAc,EACTjgC,EAAI49B,EAAK9+B,OAAS,EAAGkB,GAAK,IAAKA,EAAG,CACzC,IAAIwmB,EAAOoX,EAAKrQ,WAAWvtB,GAC3B,GAAa,KAATwmB,GASS,IAATgZ,IAGFC,GAAe,EACfD,EAAMx/B,EAAI,GAEC,KAATwmB,GAEkB,IAAduZ,EACFA,EAAW//B,EACY,IAAhBigC,IACPA,EAAc,IACK,IAAdF,IAGTE,GAAe,QArBb,IAAKR,EAAc,CACjBO,EAAYhgC,EAAI,EAChB,OAuBR,OAAkB,IAAd+/B,IAA4B,IAATP,GAEH,IAAhBS,GAEgB,IAAhBA,GAAqBF,IAAaP,EAAM,GAAKO,IAAaC,EAAY,EACjE,GAEFpC,EAAKh0B,MAAMm2B,EAAUP,IAG9Bl9B,OAAQ,SAAgB49B,GACtB,GAAmB,OAAfA,GAA6C,kBAAfA,EAChC,MAAM,IAAIvmB,UAAU,0EAA4EumB,GAElG,OAvVJ,SAAiBC,EAAKD,GACpB,IAAIhtB,EAAMgtB,EAAWhtB,KAAOgtB,EAAWE,KACnCC,EAAOH,EAAWG,OAASH,EAAWn8B,MAAQ,KAAOm8B,EAAWP,KAAO,IAC3E,OAAKzsB,EAGDA,IAAQgtB,EAAWE,KACdltB,EAAMmtB,EAERntB,EAAMitB,EAAME,EALVA,EAmVAC,CAAQ,IAAKJ,IAGtBrK,MAAO,SAAe+H,GACpBD,EAAWC,GAEX,IAAI2C,EAAM,CAAEH,KAAM,GAAIltB,IAAK,GAAImtB,KAAM,GAAIV,IAAK,GAAI57B,KAAM,IACxD,GAAoB,IAAhB65B,EAAK9+B,OAAc,OAAOyhC,EAC9B,IAEIhb,EAFAiB,EAAOoX,EAAKrQ,WAAW,GACvBmR,EAAsB,KAATlY,EAEbkY,GACF6B,EAAIH,KAAO,IACX7a,EAAQ,GAERA,EAAQ,EAaV,IAXA,IAAIwa,GAAY,EACZC,EAAY,EACZR,GAAO,EACPC,GAAe,EACfz/B,EAAI49B,EAAK9+B,OAAS,EAIlBmhC,EAAc,EAGXjgC,GAAKulB,IAASvlB,EAEnB,GAAa,MADbwmB,EAAOoX,EAAKrQ,WAAWvtB,KAUV,IAATw/B,IAGFC,GAAe,EACfD,EAAMx/B,EAAI,GAEC,KAATwmB,GAEkB,IAAduZ,EAAiBA,EAAW//B,EAA2B,IAAhBigC,IAAmBA,EAAc,IACrD,IAAdF,IAGXE,GAAe,QAlBb,IAAKR,EAAc,CACjBO,EAAYhgC,EAAI,EAChB,MAyCR,OArBkB,IAAd+/B,IAA4B,IAATP,GAEP,IAAhBS,GAEgB,IAAhBA,GAAqBF,IAAaP,EAAM,GAAKO,IAAaC,EAAY,GACvD,IAATR,IACiCe,EAAIF,KAAOE,EAAIx8B,KAAhC,IAAdi8B,GAAmBtB,EAAkCd,EAAKh0B,MAAM,EAAG41B,GAAgC5B,EAAKh0B,MAAMo2B,EAAWR,KAG7G,IAAdQ,GAAmBtB,GACrB6B,EAAIx8B,KAAO65B,EAAKh0B,MAAM,EAAGm2B,GACzBQ,EAAIF,KAAOzC,EAAKh0B,MAAM,EAAG41B,KAEzBe,EAAIx8B,KAAO65B,EAAKh0B,MAAMo2B,EAAWD,GACjCQ,EAAIF,KAAOzC,EAAKh0B,MAAMo2B,EAAWR,IAEnCe,EAAIZ,IAAM/B,EAAKh0B,MAAMm2B,EAAUP,IAG7BQ,EAAY,EAAGO,EAAIrtB,IAAM0qB,EAAKh0B,MAAM,EAAGo2B,EAAY,GAAYtB,IAAY6B,EAAIrtB,IAAM,KAElFqtB,GAGTJ,IAAK,IACLK,UAAW,IACXC,MAAO,KACPrC,MAAO,MAGTA,EAAMA,MAAQA,EAEdhpB,EAAOrX,QAAUqgC,yBClgBjB,IAAI38B,GACJ,SAAWA,IAGP,SAAWi/B,GACP,IAAIN,EAAyB,kBAAXzZ,EAAAA,EAAsBA,EAAAA,EACpB,kBAAT+B,KAAoBA,KACP,kBAATnqB,KAAoBA,KACvBW,SAAS,eAATA,GACRyhC,EAAWC,EAAan/B,GAQ5B,SAASm/B,EAAa1/B,EAAQ2/B,GAC1B,OAAO,SAAU1/B,EAAKnD,GACS,oBAAhBkD,EAAOC,IACdtD,OAAOC,eAAeoD,EAAQC,EAAK,CAAE1B,cAAc,EAAMqhC,UAAU,EAAM9iC,MAAOA,IAEhF6iC,GACAA,EAAS1/B,EAAKnD,IAbE,qBAAjBoiC,EAAK3+B,QACZ2+B,EAAK3+B,QAAUA,EAGfk/B,EAAWC,EAAaR,EAAK3+B,QAASk/B,GAY3C,SAAUA,GACT,IAAII,EAASljC,OAAOyB,UAAUsB,eAE1BogC,EAAmC,oBAAXr7B,OACxBs7B,EAAoBD,GAAgD,qBAAvBr7B,OAAOu7B,YAA8Bv7B,OAAOu7B,YAAc,gBACvGC,EAAiBH,GAA6C,qBAApBr7B,OAAOmlB,SAA2BnlB,OAAOmlB,SAAW,aAC9FsW,EAA0C,oBAAlBvjC,OAAOkD,OAC/BsgC,EAAgB,CAAE5gC,UAAW,cAAgBC,MAC7C4gC,GAAaF,IAAmBC,EAChCE,EAAU,CAEVxgC,OAAQqgC,EACF,WAAc,OAAOI,GAAe3jC,OAAOkD,OAAO,QAClDsgC,EACI,WAAc,OAAOG,GAAe,CAAE/gC,UAAW,QACjD,WAAc,OAAO+gC,GAAe,KAC9Cj9B,IAAK+8B,EACC,SAAUtiC,EAAKmC,GAAO,OAAO4/B,EAAOr6B,KAAK1H,EAAKmC,IAC9C,SAAUnC,EAAKmC,GAAO,OAAOA,KAAOnC,GAC1CO,IAAK+hC,EACC,SAAUtiC,EAAKmC,GAAO,OAAO4/B,EAAOr6B,KAAK1H,EAAKmC,GAAOnC,EAAImC,QAAOoQ,GAChE,SAAUvS,EAAKmC,GAAO,OAAOnC,EAAImC,KAGvCsgC,EAAoB5jC,OAAO6jC,eAAexiC,UAC1CyiC,EAAiC,kBAAZnD,SAAwBA,CAAAA,SAAAA,aAAAA,WAAAA,oCAAAA,qBAAAA,EAAAA,qBAAAA,EAAAA,qBAAAA,EAAAA,cAAAA,EAAAA,iBAAAA,aAAAA,qBAAAA,6BAAAA,iBAAAA,yCAAAA,qBAAAA,0CAAAA,mBAAAA,oCAAAA,sBAAAA,6CAAAA,2BAAAA,uCAAAA,0BAAAA,QAAAA,iCAAAA,UAAoE,SAArDA,CAAAA,SAAAA,aAAAA,WAAAA,oCAAAA,qBAAAA,EAAAA,qBAAAA,EAAAA,qBAAAA,EAAAA,cAAAA,EAAAA,iBAAAA,aAAAA,qBAAAA,6BAAAA,iBAAAA,yCAAAA,qBAAAA,0CAAAA,mBAAAA,oCAAAA,sBAAAA,6CAAAA,2BAAAA,uCAAAA,0BAAAA,QAAAA,iCAAAA,SAAA,kCAC5DoD,EAAQD,GAA8B,oBAAR/9B,KAAuD,oBAA1BA,IAAItE,UAAUuiC,QAA+BC,KAANl+B,IAClGm+B,EAAQJ,GAA8B,oBAARl+B,KAAuD,oBAA1BA,IAAInE,UAAUuiC,QAA+BG,KAANv+B,IAIlGw+B,EAAW,IAHCN,GAAkC,oBAAZO,QAAmCC,KAAVD,SA2C/D,SAASxgC,EAAST,EAAYC,EAAQkhC,EAAaC,GAC/C,GAAKC,EAAYF,GAYZ,CACD,IAAKG,EAAQthC,GACT,MAAM,IAAI0Y,UACd,IAAK6oB,EAActhC,GACf,MAAM,IAAIyY,UACd,OAAO8oB,EAAoBxhC,EAAYC,GAhBvC,IAAKqhC,EAAQthC,GACT,MAAM,IAAI0Y,UACd,IAAK+oB,EAASxhC,GACV,MAAM,IAAIyY,UACd,IAAK+oB,EAASL,KAAgBC,EAAYD,KAAgBM,EAAON,GAC7D,MAAM,IAAI1oB,UAId,OAHIgpB,EAAON,KACPA,OAAa9wB,GAEVqxB,EAAiB3hC,EAAYC,EADpCkhC,EAAcS,EAAcT,GAC6BC,GAqDjE,SAASS,EAASC,EAAaC,GAC3B,SAASC,EAAU/hC,EAAQkhC,GACvB,IAAKM,EAASxhC,GACV,MAAM,IAAIyY,UACd,IAAK2oB,EAAYF,KAAiBc,EAAcd,GAC5C,MAAM,IAAIzoB,UACdwpB,EAA0BJ,EAAaC,EAAe9hC,EAAQkhC,GAElE,OAAOa,EA0CX,SAASn9B,EAAei9B,EAAaC,EAAe9hC,EAAQkhC,GACxD,IAAKM,EAASxhC,GACV,MAAM,IAAIyY,UAGd,OAFK2oB,EAAYF,KACbA,EAAcS,EAAcT,IACzBe,EAA0BJ,EAAaC,EAAe9hC,EAAQkhC,GAqCzE,SAASgB,EAAYL,EAAa7hC,EAAQkhC,GACtC,IAAKM,EAASxhC,GACV,MAAM,IAAIyY,UAGd,OAFK2oB,EAAYF,KACbA,EAAcS,EAAcT,IACzBiB,EAAoBN,EAAa7hC,EAAQkhC,GAqCpD,SAASkB,EAAeP,EAAa7hC,EAAQkhC,GACzC,IAAKM,EAASxhC,GACV,MAAM,IAAIyY,UAGd,OAFK2oB,EAAYF,KACbA,EAAcS,EAAcT,IACzBmB,EAAuBR,EAAa7hC,EAAQkhC,GAqCvD,SAASoB,EAAYT,EAAa7hC,EAAQkhC,GACtC,IAAKM,EAASxhC,GACV,MAAM,IAAIyY,UAGd,OAFK2oB,EAAYF,KACbA,EAAcS,EAAcT,IACzBqB,EAAoBV,EAAa7hC,EAAQkhC,GAqCpD,SAAS/7B,EAAe08B,EAAa7hC,EAAQkhC,GACzC,IAAKM,EAASxhC,GACV,MAAM,IAAIyY,UAGd,OAFK2oB,EAAYF,KACbA,EAAcS,EAAcT,IACzBsB,EAAuBX,EAAa7hC,EAAQkhC,GAoCvD,SAASuB,EAAgBziC,EAAQkhC,GAC7B,IAAKM,EAASxhC,GACV,MAAM,IAAIyY,UAGd,OAFK2oB,EAAYF,KACbA,EAAcS,EAAcT,IACzBwB,EAAqB1iC,EAAQkhC,GAoCxC,SAASyB,EAAmB3iC,EAAQkhC,GAChC,IAAKM,EAASxhC,GACV,MAAM,IAAIyY,UAGd,OAFK2oB,EAAYF,KACbA,EAAcS,EAAcT,IACzB0B,EAAwB5iC,EAAQkhC,GAqC3C,SAAS2B,EAAehB,EAAa7hC,EAAQkhC,GACzC,IAAKM,EAASxhC,GACV,MAAM,IAAIyY,UACT2oB,EAAYF,KACbA,EAAcS,EAAcT,IAChC,IAAI4B,EAAcC,EAAuB/iC,EAAQkhC,GAAwB,GACzE,GAAIE,EAAY0B,GACZ,OAAO,EACX,IAAKA,EAAYlyB,OAAOixB,GACpB,OAAO,EACX,GAAIiB,EAAYpyB,KAAO,EACnB,OAAO,EACX,IAAIsyB,EAAiBjC,EAAS1iC,IAAI2B,GAElC,OADAgjC,EAAepyB,OAAOswB,GAClB8B,EAAetyB,KAAO,GAE1BqwB,EAASnwB,OAAO5Q,IADL,EAKf,SAASuhC,EAAoBxhC,EAAYC,GACrC,IAAK,IAAIlB,EAAIiB,EAAWnC,OAAS,EAAGkB,GAAK,IAAKA,EAAG,CAC7C,IACImkC,GAAYlB,EADAhiC,EAAWjB,IACDkB,GAC1B,IAAKohC,EAAY6B,KAAexB,EAAOwB,GAAY,CAC/C,IAAK3B,EAAc2B,GACf,MAAM,IAAIxqB,UACdzY,EAASijC,GAGjB,OAAOjjC,EAEX,SAAS0hC,EAAiB3hC,EAAYC,EAAQkhC,EAAal8B,GACvD,IAAK,IAAIlG,EAAIiB,EAAWnC,OAAS,EAAGkB,GAAK,IAAKA,EAAG,CAC7C,IACImkC,GAAYlB,EADAhiC,EAAWjB,IACDkB,EAAQkhC,EAAal8B,GAC/C,IAAKo8B,EAAY6B,KAAexB,EAAOwB,GAAY,CAC/C,IAAKzB,EAASyB,GACV,MAAM,IAAIxqB,UACdzT,EAAai+B,GAGrB,OAAOj+B,EAEX,SAAS+9B,EAAuBG,EAAGC,EAAGC,GAClC,IAAIJ,EAAiBjC,EAAS1iC,IAAI6kC,GAClC,GAAI9B,EAAY4B,GAAiB,CAC7B,IAAKI,EACD,OACJJ,EAAiB,IAAItC,EACrBK,EAASz9B,IAAI4/B,EAAGF,GAEpB,IAAIF,EAAcE,EAAe3kC,IAAI8kC,GACrC,GAAI/B,EAAY0B,GAAc,CAC1B,IAAKM,EACD,OACJN,EAAc,IAAIpC,EAClBsC,EAAe1/B,IAAI6/B,EAAGL,GAE1B,OAAOA,EAIX,SAASX,EAAoBkB,EAAaH,EAAGC,GAEzC,GADad,EAAuBgB,EAAaH,EAAGC,GAEhD,OAAO,EACX,IAAI/8B,EAASk9B,EAAuBJ,GACpC,OAAKzB,EAAOr7B,IACD+7B,EAAoBkB,EAAaj9B,EAAQ+8B,GAKxD,SAASd,EAAuBgB,EAAaH,EAAGC,GAC5C,IAAIL,EAAcC,EAAuBG,EAAGC,GAAc,GAC1D,OAAI/B,EAAY0B,IAETS,EAAUT,EAAYz/B,IAAIggC,IAIrC,SAASd,EAAoBc,EAAaH,EAAGC,GAEzC,GADad,EAAuBgB,EAAaH,EAAGC,GAEhD,OAAOX,EAAuBa,EAAaH,EAAGC,GAClD,IAAI/8B,EAASk9B,EAAuBJ,GACpC,OAAKzB,EAAOr7B,QAAZ,EACWm8B,EAAoBc,EAAaj9B,EAAQ+8B,GAKxD,SAASX,EAAuBa,EAAaH,EAAGC,GAC5C,IAAIL,EAAcC,EAAuBG,EAAGC,GAAc,GAC1D,IAAI/B,EAAY0B,GAEhB,OAAOA,EAAYzkC,IAAIglC,GAI3B,SAASpB,EAA0BoB,EAAaG,EAAeN,EAAGC,GAC5CJ,EAAuBG,EAAGC,GAAc,GAC9C7/B,IAAI+/B,EAAaG,GAIjC,SAASd,EAAqBQ,EAAGC,GAC7B,IAAIM,EAAUb,EAAwBM,EAAGC,GACrC/8B,EAASk9B,EAAuBJ,GACpC,GAAe,OAAX98B,EACA,OAAOq9B,EACX,IAAIC,EAAahB,EAAqBt8B,EAAQ+8B,GAC9C,GAAIO,EAAW9lC,QAAU,EACrB,OAAO6lC,EACX,GAAIA,EAAQ7lC,QAAU,EAClB,OAAO8lC,EAGX,IAFA,IAAIpgC,EAAM,IAAIu9B,EACVnP,EAAO,GACF3sB,EAAK,EAAG4+B,EAAYF,EAAS1+B,EAAK4+B,EAAU/lC,OAAQmH,IAAM,CAC/D,IAAI9E,EAAM0jC,EAAU5+B,GACPzB,EAAID,IAAIpD,KAEjBqD,EAAId,IAAIvC,GACRyxB,EAAK7tB,KAAK5D,IAGlB,IAAK,IAAI2jC,EAAK,EAAGC,EAAeH,EAAYE,EAAKC,EAAajmC,OAAQgmC,IAAM,CACpE3jC,EAAM4jC,EAAaD,GACVtgC,EAAID,IAAIpD,KAEjBqD,EAAId,IAAIvC,GACRyxB,EAAK7tB,KAAK5D,IAGlB,OAAOyxB,EAIX,SAASkR,EAAwBM,EAAGC,GAChC,IAAIzR,EAAO,GACPoR,EAAcC,EAAuBG,EAAGC,GAAc,GAC1D,GAAI/B,EAAY0B,GACZ,OAAOpR,EAIX,IAHA,IACI9H,EAAWka,EADDhB,EAAYpR,QAEtBV,EAAI,IACK,CACT,IAAI+S,EAAOC,EAAapa,GACxB,IAAKma,EAED,OADArS,EAAK9zB,OAASozB,EACPU,EAEX,IAAIuS,EAAYC,EAAcH,GAC9B,IACIrS,EAAKV,GAAKiT,EAEd,MAAOh0B,GACH,IACIk0B,EAAcva,GADlB,QAII,MAAM3Z,GAGd+gB,KAKR,SAASoT,EAAKzL,GACV,GAAU,OAANA,EACA,OAAO,EACX,cAAeA,GACX,IAAK,YAAa,OAAO,EACzB,IAAK,UAAW,OAAO,EACvB,IAAK,SAAU,OAAO,EACtB,IAAK,SAAU,OAAO,EACtB,IAAK,SAAU,OAAO,EACtB,IAAK,SAAU,OAAa,OAANA,EAAa,EAAe,EAClD,QAAS,OAAO,GAKxB,SAASyI,EAAYzI,GACjB,YAAatoB,IAANsoB,EAIX,SAAS8I,EAAO9I,GACZ,OAAa,OAANA,EAIX,SAAS0L,EAAS1L,GACd,MAAoB,kBAANA,EAIlB,SAAS6I,EAAS7I,GACd,MAAoB,kBAANA,EAAuB,OAANA,EAA0B,oBAANA,EAMvD,SAAS2L,EAAYC,EAAOC,GACxB,OAAQJ,EAAKG,IACT,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EAAgB,OAAOA,EAEhC,IAAIE,EAAyB,IAAlBD,EAAmC,SAA6B,IAAlBA,EAAmC,SAAW,UACnGE,EAAeC,EAAUJ,EAAOxE,GACpC,QAAqB1vB,IAAjBq0B,EAA4B,CAC5B,IAAIj5B,EAASi5B,EAAal/B,KAAK++B,EAAOE,GACtC,GAAIjD,EAAS/1B,GACT,MAAM,IAAIgN,UACd,OAAOhN,EAEX,OAAOm5B,EAAoBL,EAAgB,YAATE,EAAqB,SAAWA,GAItE,SAASG,EAAoB1B,EAAGuB,GAC5B,GAAa,WAATA,EAAmB,CACnB,IAAII,EAAa3B,EAAEhyB,SACnB,GAAI4zB,EAAWD,GAEX,IAAKrD,EADD/1B,EAASo5B,EAAWr/B,KAAK09B,IAEzB,OAAOz3B,EAGf,GAAIq5B,EADAC,EAAU7B,EAAE6B,SAGZ,IAAKvD,EADD/1B,EAASs5B,EAAQv/B,KAAK09B,IAEtB,OAAOz3B,MAGd,CACD,IAAIs5B,EACJ,GAAID,EADAC,EAAU7B,EAAE6B,SAGZ,IAAKvD,EADD/1B,EAASs5B,EAAQv/B,KAAK09B,IAEtB,OAAOz3B,EAEf,IAEQA,EAFJu5B,EAAa9B,EAAEhyB,SACnB,GAAI4zB,EAAWE,GAEX,IAAKxD,EADD/1B,EAASu5B,EAAWx/B,KAAK09B,IAEzB,OAAOz3B,EAGnB,MAAM,IAAIgN,UAId,SAAS8qB,EAAU0B,GACf,QAASA,EAIb,SAASC,EAASD,GACd,MAAO,GAAKA,EAIhB,SAAStD,EAAcsD,GACnB,IAAIhlC,EAAMqkC,EAAYW,EAAU,GAChC,OAAIZ,EAASpkC,GACFA,EACJilC,EAASjlC,GAMpB,SAASohC,EAAQ4D,GACb,OAAOzlC,MAAMiP,QACPjP,MAAMiP,QAAQw2B,GACdA,aAAoBtoC,OAChBsoC,aAAoBzlC,MACyB,mBAA7C7C,OAAOyB,UAAU8S,SAAS1L,KAAKy/B,GAI7C,SAASH,EAAWG,GAEhB,MAA2B,oBAAbA,EAIlB,SAAS3D,EAAc2D,GAEnB,MAA2B,oBAAbA,EAIlB,SAASjD,EAAciD,GACnB,OAAQb,EAAKa,IACT,KAAK,EACL,KAAK,EAAgB,OAAO,EAC5B,QAAS,OAAO,GAOxB,SAASN,EAAUQ,EAAGhC,GAClB,IAAInyB,EAAOm0B,EAAEhC,GACb,QAAa9yB,IAATW,GAA+B,OAATA,EAA1B,CAEA,IAAK8zB,EAAW9zB,GACZ,MAAM,IAAIyH,UACd,OAAOzH,GAIX,SAAS8yB,EAAYlb,GACjB,IAAIjc,EAASg4B,EAAU/b,EAAKqX,GAC5B,IAAK6E,EAAWn4B,GACZ,MAAM,IAAI8L,UACd,IAAImR,EAAWjd,EAAOnH,KAAKojB,GAC3B,IAAK4Y,EAAS5X,GACV,MAAM,IAAInR,UACd,OAAOmR,EAIX,SAASsa,EAAckB,GACnB,OAAOA,EAAWtoC,MAItB,SAASknC,EAAapa,GAClB,IAAIne,EAASme,EAASma,OACtB,OAAOt4B,EAAO45B,MAAe55B,EAIjC,SAAS04B,EAAcva,GACnB,IAAIvE,EAAIuE,EAAQ,OACZvE,GACAA,EAAE7f,KAAKokB,GAMf,SAAS0Z,EAAuBJ,GAC5B,IAAIoC,EAAQ3oC,OAAO6jC,eAAe0C,GAClC,GAAiB,oBAANA,GAAoBA,IAAM3C,EACjC,OAAO+E,EAQX,GAAIA,IAAU/E,EACV,OAAO+E,EAEX,IAAIlnC,EAAY8kC,EAAE9kC,UACdmnC,EAAiBnnC,GAAazB,OAAO6jC,eAAepiC,GACxD,GAAsB,MAAlBmnC,GAA0BA,IAAmB5oC,OAAOyB,UACpD,OAAOknC,EAEX,IAAI1lC,EAAc2lC,EAAe3lC,YACjC,MAA2B,oBAAhBA,GAGPA,IAAgBsjC,EAFToC,EAKJ1lC,EAGX,SAASghC,KACL,IAAI4E,EAAgB,GAChBC,EAAgB,GAChBC,EAA6B,WAC7B,SAASA,EAAYhU,EAAMrI,EAAQsc,GAC/BtoC,KAAKuoC,OAAS,EACdvoC,KAAKwoC,MAAQnU,EACbr0B,KAAKyoC,QAAUzc,EACfhsB,KAAK0oC,UAAYJ,EAoCrB,OAlCAD,EAAYtnC,UAAU,cAAgB,WAAc,OAAOf,MAC3DqoC,EAAYtnC,UAAU6hC,GAAkB,WAAc,OAAO5iC,MAC7DqoC,EAAYtnC,UAAU2lC,KAAO,WACzB,IAAIhzB,EAAQ1T,KAAKuoC,OACjB,GAAI70B,GAAS,GAAKA,EAAQ1T,KAAKwoC,MAAMjoC,OAAQ,CACzC,IAAI6N,EAASpO,KAAK0oC,UAAU1oC,KAAKwoC,MAAM90B,GAAQ1T,KAAKyoC,QAAQ/0B,IAS5D,OARIA,EAAQ,GAAK1T,KAAKwoC,MAAMjoC,QACxBP,KAAKuoC,QAAU,EACfvoC,KAAKwoC,MAAQJ,EACbpoC,KAAKyoC,QAAUL,GAGfpoC,KAAKuoC,SAEF,CAAE9oC,MAAO2O,EAAQ45B,MAAM,GAElC,MAAO,CAAEvoC,WAAOuT,EAAWg1B,MAAM,IAErCK,EAAYtnC,UAAU4nC,MAAQ,SAAUxkC,GAMpC,MALInE,KAAKuoC,QAAU,IACfvoC,KAAKuoC,QAAU,EACfvoC,KAAKwoC,MAAQJ,EACbpoC,KAAKyoC,QAAUL,GAEbjkC,GAEVkkC,EAAYtnC,UAAU6nC,OAAS,SAAUnpC,GAMrC,OALIO,KAAKuoC,QAAU,IACfvoC,KAAKuoC,QAAU,EACfvoC,KAAKwoC,MAAQJ,EACbpoC,KAAKyoC,QAAUL,GAEZ,CAAE3oC,MAAOA,EAAOuoC,MAAM,IAE1BK,EAzCsB,GA2CjC,OAAsB,WAClB,SAAShjC,IACLrF,KAAKwoC,MAAQ,GACbxoC,KAAKyoC,QAAU,GACfzoC,KAAK6oC,UAAYV,EACjBnoC,KAAK8oC,aAAe,EAyDxB,OAvDAxpC,OAAOC,eAAe8F,EAAItE,UAAW,OAAQ,CACzCC,IAAK,WAAc,OAAOhB,KAAKwoC,MAAMjoC,QACrCU,YAAY,EACZC,cAAc,IAElBmE,EAAItE,UAAUiF,IAAM,SAAUpD,GAAO,OAAO5C,KAAK+oC,MAAMnmC,GAAgB,IAAU,GACjFyC,EAAItE,UAAUC,IAAM,SAAU4B,GAC1B,IAAI8Q,EAAQ1T,KAAK+oC,MAAMnmC,GAAgB,GACvC,OAAO8Q,GAAS,EAAI1T,KAAKyoC,QAAQ/0B,QAASV,GAE9C3N,EAAItE,UAAUkF,IAAM,SAAUrD,EAAKnD,GAC/B,IAAIiU,EAAQ1T,KAAK+oC,MAAMnmC,GAAgB,GAEvC,OADA5C,KAAKyoC,QAAQ/0B,GAASjU,EACfO,MAEXqF,EAAItE,UAAUwS,OAAS,SAAU3Q,GAC7B,IAAI8Q,EAAQ1T,KAAK+oC,MAAMnmC,GAAgB,GACvC,GAAI8Q,GAAS,EAAG,CAEZ,IADA,IAAIL,EAAOrT,KAAKwoC,MAAMjoC,OACbkB,EAAIiS,EAAQ,EAAGjS,EAAI4R,EAAM5R,IAC9BzB,KAAKwoC,MAAM/mC,EAAI,GAAKzB,KAAKwoC,MAAM/mC,GAC/BzB,KAAKyoC,QAAQhnC,EAAI,GAAKzB,KAAKyoC,QAAQhnC,GAQvC,OANAzB,KAAKwoC,MAAMjoC,SACXP,KAAKyoC,QAAQloC,SACTqC,IAAQ5C,KAAK6oC,YACb7oC,KAAK6oC,UAAYV,EACjBnoC,KAAK8oC,aAAe,IAEjB,EAEX,OAAO,GAEXzjC,EAAItE,UAAU0T,MAAQ,WAClBzU,KAAKwoC,MAAMjoC,OAAS,EACpBP,KAAKyoC,QAAQloC,OAAS,EACtBP,KAAK6oC,UAAYV,EACjBnoC,KAAK8oC,aAAe,GAExBzjC,EAAItE,UAAUszB,KAAO,WAAc,OAAO,IAAIgU,EAAYroC,KAAKwoC,MAAOxoC,KAAKyoC,QAASO,IACpF3jC,EAAItE,UAAUirB,OAAS,WAAc,OAAO,IAAIqc,EAAYroC,KAAKwoC,MAAOxoC,KAAKyoC,QAASQ,IACtF5jC,EAAItE,UAAUuiC,QAAU,WAAc,OAAO,IAAI+E,EAAYroC,KAAKwoC,MAAOxoC,KAAKyoC,QAASS,IACvF7jC,EAAItE,UAAU,cAAgB,WAAc,OAAOf,KAAKsjC,WACxDj+B,EAAItE,UAAU6hC,GAAkB,WAAc,OAAO5iC,KAAKsjC,WAC1Dj+B,EAAItE,UAAUgoC,MAAQ,SAAUnmC,EAAKumC,GASjC,OARInpC,KAAK6oC,YAAcjmC,IACnB5C,KAAK8oC,YAAc9oC,KAAKwoC,MAAM10B,QAAQ9T,KAAK6oC,UAAYjmC,IAEvD5C,KAAK8oC,YAAc,GAAKK,IACxBnpC,KAAK8oC,YAAc9oC,KAAKwoC,MAAMjoC,OAC9BP,KAAKwoC,MAAMhiC,KAAK5D,GAChB5C,KAAKyoC,QAAQjiC,UAAKwM,IAEfhT,KAAK8oC,aAETzjC,EA9DJ,GAgEP,SAAS2jC,EAAOpmC,EAAKwmC,GACjB,OAAOxmC,EAEX,SAASqmC,EAASG,EAAG3pC,GACjB,OAAOA,EAEX,SAASypC,EAAStmC,EAAKnD,GACnB,MAAO,CAACmD,EAAKnD,IAIrB,SAASgkC,KACL,OAAsB,WAClB,SAASv+B,IACLlF,KAAKqpC,KAAO,IAAIhG,EAgBpB,OAdA/jC,OAAOC,eAAe2F,EAAInE,UAAW,OAAQ,CACzCC,IAAK,WAAc,OAAOhB,KAAKqpC,KAAKh2B,MACpCpS,YAAY,EACZC,cAAc,IAElBgE,EAAInE,UAAUiF,IAAM,SAAUvG,GAAS,OAAOO,KAAKqpC,KAAKrjC,IAAIvG,IAC5DyF,EAAInE,UAAUoE,IAAM,SAAU1F,GAAS,OAAOO,KAAKqpC,KAAKpjC,IAAIxG,EAAOA,GAAQO,MAC3EkF,EAAInE,UAAUwS,OAAS,SAAU9T,GAAS,OAAOO,KAAKqpC,KAAK91B,OAAO9T,IAClEyF,EAAInE,UAAU0T,MAAQ,WAAczU,KAAKqpC,KAAK50B,SAC9CvP,EAAInE,UAAUszB,KAAO,WAAc,OAAOr0B,KAAKqpC,KAAKhV,QACpDnvB,EAAInE,UAAUirB,OAAS,WAAc,OAAOhsB,KAAKqpC,KAAKrd,UACtD9mB,EAAInE,UAAUuiC,QAAU,WAAc,OAAOtjC,KAAKqpC,KAAK/F,WACvDp+B,EAAInE,UAAU,cAAgB,WAAc,OAAOf,KAAKq0B,QACxDnvB,EAAInE,UAAU6hC,GAAkB,WAAc,OAAO5iC,KAAKq0B,QACnDnvB,EAlBJ,GAsBX,SAAS0+B,KACL,IAAI0F,EAAY,GACZjV,EAAO2O,EAAQxgC,SACf+mC,EAAUC,IACd,OAAsB,WAClB,SAAS7F,IACL3jC,KAAK68B,KAAO2M,IAuBhB,OArBA7F,EAAQ5iC,UAAUiF,IAAM,SAAUrD,GAC9B,IAAI4S,EAAQk0B,EAAwB9mC,GAAmB,GACvD,YAAiBqQ,IAAVuC,GAAsBytB,EAAQh9B,IAAIuP,EAAOvV,KAAK68B,OAEzD8G,EAAQ5iC,UAAUC,IAAM,SAAU2B,GAC9B,IAAI4S,EAAQk0B,EAAwB9mC,GAAmB,GACvD,YAAiBqQ,IAAVuC,EAAsBytB,EAAQhiC,IAAIuU,EAAOvV,KAAK68B,WAAQ7pB,GAEjE2wB,EAAQ5iC,UAAUkF,IAAM,SAAUtD,EAAQlD,GAGtC,OAFYgqC,EAAwB9mC,GAAmB,GACjD3C,KAAK68B,MAAQp9B,EACZO,MAEX2jC,EAAQ5iC,UAAUwS,OAAS,SAAU5Q,GACjC,IAAI4S,EAAQk0B,EAAwB9mC,GAAmB,GACvD,YAAiBqQ,IAAVuC,UAA6BA,EAAMvV,KAAK68B,OAEnD8G,EAAQ5iC,UAAU0T,MAAQ,WAEtBzU,KAAK68B,KAAO2M,KAET7F,EAzBJ,GA2BP,SAAS6F,IACL,IAAI5mC,EACJ,GACIA,EAAM,cAAgB8mC,UACnB1G,EAAQh9B,IAAIquB,EAAMzxB,IAEzB,OADAyxB,EAAKzxB,IAAO,EACLA,EAEX,SAAS6mC,EAAwB9mC,EAAQH,GACrC,IAAKggC,EAAOr6B,KAAKxF,EAAQ4mC,GAAU,CAC/B,IAAK/mC,EACD,OACJlD,OAAOC,eAAeoD,EAAQ4mC,EAAS,CAAE9pC,MAAOujC,EAAQxgC,WAE5D,OAAOG,EAAO4mC,GAElB,SAASI,EAAgB/S,EAAQvjB,GAC7B,IAAK,IAAI5R,EAAI,EAAGA,EAAI4R,IAAQ5R,EACxBm1B,EAAOn1B,GAAqB,IAAhBqL,KAAKyO,SAAkB,EACvC,OAAOqb,EAEX,SAASgT,EAAev2B,GACpB,MAA0B,oBAAfmD,WACe,qBAAXkE,OACAA,OAAOH,gBAAgB,IAAI/D,WAAWnD,IACzB,qBAAbuH,SACAA,SAASL,gBAAgB,IAAI/D,WAAWnD,IAC5Cs2B,EAAgB,IAAInzB,WAAWnD,GAAOA,GAE1Cs2B,EAAgB,IAAIxnC,MAAMkR,GAAOA,GAE5C,SAASq2B,IACL,IAAIl1B,EAAOo1B,EAAeN,GAE1B90B,EAAK,GAAe,GAAVA,EAAK,GAAY,GAC3BA,EAAK,GAAe,IAAVA,EAAK,GAAY,IAE3B,IADA,IAAIpG,EAAS,GACJxB,EAAS,EAAGA,EAAS08B,IAAa18B,EAAQ,CAC/C,IAAIi9B,EAAOr1B,EAAK5H,GACD,IAAXA,GAA2B,IAAXA,GAA2B,IAAXA,IAChCwB,GAAU,KACVy7B,EAAO,KACPz7B,GAAU,KACdA,GAAUy7B,EAAKh2B,SAAS,IAAIqH,cAEhC,OAAO9M,GAIf,SAAS60B,GAAe1X,GAGpB,OAFAA,EAAIjpB,QAAK0Q,SACFuY,EAAIjpB,GACJipB,EAn+BX6W,EAAS,WAAYj/B,GAqDrBi/B,EAAS,WAAYmC,GA+CrBnC,EAAS,iBAAkB76B,GA0C3B66B,EAAS,cAAeyC,GA0CxBzC,EAAS,iBAAkB2C,GA0C3B3C,EAAS,cAAe6C,GA0CxB7C,EAAS,iBAAkBt6B,GAyC3Bs6B,EAAS,kBAAmBgD,GAyC5BhD,EAAS,qBAAsBkD,GAsD/BlD,EAAS,iBAAkBoD,GA1f3BrD,CAAQC,GAZZ,GAHJ,CA2lCGl/B,IAAYA,EAAU,4BC1mCzB,OAUA,SAAW8V,EAAQhG,GAEf,aAOA,IAGI82B,EAAc,WACdC,EAAc,YACdC,EAAc,SACdC,EAAc,SAEdC,EAAc,QACdC,EAAc,OACdC,EAAc,OACdC,EAAc,SACdC,EAAc,UACdC,EAAc,eACdC,EAAc,UACdC,EAAc,SACdC,EAAc,SACdC,EAAc,UACdC,EAAc,WACdC,EAAc,WAGdC,EAAU,SACVC,EAAU,QACVC,EAAU,OACVC,EAAa,aAIbC,EAAU,UACVC,EAAU,SACVC,EAAU,SACVC,EAAU,KACVC,EAAY,YACZC,EAAY,WACZC,EAAU,QACVC,EAAU,UACVC,EAAU,OACVC,EAAU,SACVC,EAAU,QACVC,EAAa,WAiBbC,EAAY,SAAU7wB,GAElB,IADA,IAAI8wB,EAAQ,GACHtqC,EAAE,EAAGA,EAAEwZ,EAAI1a,OAAQkB,IACxBsqC,EAAM9wB,EAAIxZ,GAAGuqC,eAAiB/wB,EAAIxZ,GAEtC,OAAOsqC,GAEX/lC,EAAM,SAAUimC,EAAMC,GAClB,cAAcD,IAAShC,IAAuD,IAA5CkC,EAASD,GAAMp4B,QAAQq4B,EAASF,KAEtEE,EAAW,SAAUhV,GACjB,OAAOA,EAAIjc,eAKfnN,EAAO,SAAUopB,EAAKnN,GAClB,UAAWmN,IAAS8S,EAEhB,OADA9S,EAAMA,EAAIzqB,QAAQ,SA1EZ,IA0E6BA,QAAQ,SA1ErC,WA2EQsd,IAAS+f,EAAa5S,EAAMA,EAAI3pB,UAAU,EAxDhD,MAgEhB4+B,EAAY,SAAUC,EAAIC,GAKtB,IAHA,IAAW7Y,EAAGE,EAAGvxB,EAAGmqC,EAAGC,EAAShgC,EAA5B/K,EAAI,EAGDA,EAAI6qC,EAAO/rC,SAAWisC,GAAS,CAElC,IAAIl/B,EAAQg/B,EAAO7qC,GACfgrC,EAAQH,EAAO7qC,EAAI,GAIvB,IAHAgyB,EAAIE,EAAI,EAGDF,EAAInmB,EAAM/M,SAAWisC,GAIxB,GAFAA,EAAUl/B,EAAMmmB,KAAKplB,KAAKg+B,GAGtB,IAAKjqC,EAAI,EAAGA,EAAIqqC,EAAMlsC,OAAQ6B,IAC1BoK,EAAQggC,IAAU7Y,UAClB4Y,EAAIE,EAAMrqC,MAEO4nC,GAAYuC,EAAEhsC,OAAS,EACnB,IAAbgsC,EAAEhsC,cACSgsC,EAAE,IAAMzC,EAEf9pC,KAAKusC,EAAE,IAAMA,EAAE,GAAGpkC,KAAKnI,KAAMwM,GAG7BxM,KAAKusC,EAAE,IAAMA,EAAE,GAEC,IAAbA,EAAEhsC,cAEEgsC,EAAE,KAAOzC,GAAeyC,EAAE,GAAGl+B,MAAQk+B,EAAE,GAAGnf,KAKjDptB,KAAKusC,EAAE,IAAM//B,EAAQA,EAAME,QAAQ6/B,EAAE,GAAIA,EAAE,IAAMv5B,EAHjDhT,KAAKusC,EAAE,IAAM//B,EAAQ+/B,EAAE,GAAGpkC,KAAKnI,KAAMwM,EAAO+/B,EAAE,IAAMv5B,EAKpC,IAAbu5B,EAAEhsC,SACLP,KAAKusC,EAAE,IAAM//B,EAAQ+/B,EAAE,GAAGpkC,KAAKnI,KAAMwM,EAAME,QAAQ6/B,EAAE,GAAIA,EAAE,KAAOv5B,GAG1EhT,KAAKusC,GAAK//B,GAAgBwG,EAK1CvR,GAAK,IAIbirC,EAAY,SAAUvV,EAAK12B,GAEvB,IAAK,IAAIgB,KAAKhB,EAEV,UAAWA,EAAIgB,KAAOuoC,GAAYvpC,EAAIgB,GAAGlB,OAAS,GAC9C,IAAK,IAAIkzB,EAAI,EAAGA,EAAIhzB,EAAIgB,GAAGlB,OAAQkzB,IAC/B,GAAIztB,EAAIvF,EAAIgB,GAAGgyB,GAAI0D,GACf,MA7IN,MA6Ic11B,EAAiBuR,EAAYvR,OAG1C,GAAIuE,EAAIvF,EAAIgB,GAAI01B,GACnB,MAjJE,MAiJM11B,EAAiBuR,EAAYvR,EAG7C,OAAO01B,GAkBXwV,EAAoB,CAChB,GAAc,OACd,UAAc,SACd,SAAc,QACd,IAAc,SACd,GAAc,CAAC,SAAU,UACzB,MAAc,SACd,EAAc,SACd,EAAc,SACd,IAAc,SACd,GAAc,CAAC,SAAU,WACzB,GAAc,OAOlBC,EAAU,CAEV3yB,QAAU,CAAC,CAEP,gCACG,CAACqwB,EAAS,CAACH,EAAM,WAAY,CAChC,+BACG,CAACG,EAAS,CAACH,EAAM,SAAU,CAG9B,4BACA,mDACA,2CACG,CAACA,EAAMG,GAAU,CACpB,yBACG,CAACA,EAAS,CAACH,EAAMqB,eAAiB,CACrC,qBACG,CAAClB,EAAS,CAACH,EAAMqB,IAAS,CAG7B,uBACA,8DAEA,qDACA,kCACA,2BAGA,oLAEA,uBACG,CAACrB,EAAMG,GAAU,CACpB,qDACG,CAACA,EAAS,CAACH,EAAM,cAAgB,CACpC,wBACG,CAACG,EAAS,CAACH,EAAM,wBAAyB,CAC7C,8BACG,CAACG,EAAS,CAACH,EAAM,WAAY,CAChC,yBACG,CAACG,EAAS,CAACH,EAAM,cAAe,CACnC,+CACG,CAACG,EAAS,CAACH,EAAM,OAAQ,CAC5B,yBACG,CAACG,EAAS,CAACH,EAAM,WAAY,CAChC,2BACG,CAAC,CAACA,EAAM,OAAQ,qBAAuBG,GAAU,CACpD,uBACG,CAACA,EAAS,CAACH,EAAMe,kBAAoB,CACxC,qBACG,CAACZ,EAAS,CAACH,EAAMqB,gBAAkB,CACtC,0BACG,CAAClB,EAAS,CAACH,EAAM,YAAa,CACjC,sBACG,CAACG,EAAS,CAACH,EAAM,YAAa,CACjC,qBACG,CAACG,EAAS,CAACH,EAAMqB,gBAAkB,CACtC,2BACG,CAAClB,EAAS,CAACH,EAAM,iBAAmB,CACvC,sBACG,CAACG,EAAS,CAACH,EAAMe,IAAW,CAC/B,iCACG,CAAC,CAACf,EAAM,gBAAkB,CAC7B,gDACG,CAAC,CAACA,EAAM,OAAQ,cAAgBG,GAAU,CAC7C,+BACG,CAAC,CAACH,EAAM,KAAM,KAAMG,GAAU,CACjC,gCACA,iDACA,0DACG,CAACH,EAAMG,GAAU,CACpB,2BACA,gBACG,CAACH,GAAO,CAGX,+DACG,CAAC,CAACA,EAAM0B,GAAWvB,GAAU,CAChC,4BACA,4BACA,wCACG,CAACH,EAAMG,GAAU,CACpB,gCACG,CAACA,EAAS,CAACH,EAAM,QAAS,CAE7B,oCACG,CAACG,EAAS,CAACH,EAAM0C,oBAAsB,CAE1C,+BACG,CAAC,CAAC1C,EAAM0C,kBAAoBvC,GAAU,CAEzC,2DACG,CAACA,EAAS,CAACH,EAAM,oBAAsB,CAE1C,+DACG,CAACA,EAAMG,GAAU,CAEpB,8CACG,CAACA,EAAS,CAACH,EAAM,kBAAmB,CACvC,iDACG,CAACG,EAASH,GAAO,CACpB,gDACG,CAACA,EAAM,CAACG,EAASoC,EAjIT,CACX,MAAU,KACV,IAAU,KACV,IAAU,KACV,MAAU,OACV,QAAU,OACV,QAAU,OACV,QAAU,OACV,IAAU,OAyHqC,CAE/C,8BACG,CAACvC,EAAMG,GAAU,CAGpB,wCACG,CAAC,CAACH,EAAM,YAAaG,GAAU,CAClC,uCACG,CAACA,EAAS,CAACH,EAAMe,oBAAsB,CAC1C,6BACA,cACA,mGAEA,+FAEA,wBACA,2CAGA,wHAEA,wBACG,CAACf,EAAMG,IAGdtmB,IAAM,CAAC,CAEH,iDACG,CAAC,CAACumB,EAAc,UAAW,CAE9B,gBACG,CAAC,CAACA,EAAc4B,IAAY,CAE/B,0BACG,CAAC,CAAC5B,EAAc,SAAU,CAE7B,oCACG,CAAC,CAACA,EAAc,UAAW,CAE9B,mCACG,CAAC,CAACA,EAAc,UAAW,CAG9B,8BACG,CAAC,CAACA,EAAc,QAAS,CAE5B,0CACG,CAAC,CAACA,EAAc,OA9UT,GA8UwB4B,IAAY,CAE9C,kBACG,CAAC,CAAC5B,EAAc,UAAW,CAE9B,2HAEG,CAAC,CAACA,EAAc4B,KAGvBxzB,OAAS,CAAC,CAQN,kFACG,CAACuxB,EAAO,CAACG,EAAQoB,GAAU,CAACrB,EAAMM,IAAU,CAC/C,0CACA,uBACA,iBACG,CAACR,EAAO,CAACG,EAAQoB,GAAU,CAACrB,EAAMK,IAAU,CAG/C,6BACG,CAACP,EAAO,CAACG,EAAQU,GAAQ,CAACX,EAAMK,IAAU,CAC7C,6BACA,oCACA,kCACG,CAACP,EAAO,CAACG,EAAQU,GAAQ,CAACX,EAAMM,IAAU,CAG7C,+DACG,CAACR,EAAO,CAACG,EAAQe,GAAS,CAAChB,EAAMM,IAAU,CAC9C,kCACA,qEACG,CAACR,EAAO,CAACG,EAAQe,GAAS,CAAChB,EAAMK,IAAU,CAG9C,6BACA,yBACA,uCACA,iDACA,sGACG,CAAC,CAACP,EAAO,KAAM,KAAM,CAACG,EAAQsB,GAAS,CAACvB,EAAMK,IAAU,CAC3D,8CACE,CAAC,CAACP,EAAO,KAAM,KAAM,CAACG,EAAQsB,GAAS,CAACvB,EAAMM,IAAU,CAG1D,sBACA,mEACG,CAACR,EAAO,CAACG,EAAQ,QAAS,CAACD,EAAMK,IAAU,CAG9C,yBACA,oCACG,CAACP,EAAO,CAACG,EAAQ,QAAS,CAACD,EAAMK,IAAU,CAG9C,kCACG,CAACP,EAAO,CAACG,EAAQ,UAAW,CAACD,EAAMK,IAAU,CAGhD,iFACA,4BACA,sDACG,CAACP,EAAO,CAACG,EAAQkB,GAAW,CAACnB,EAAMK,IAAU,CAChD,qCACG,CAACP,EAAO,CAACG,EAAQkB,GAAW,CAACnB,EAAMM,IAAU,CAGhD,iEACG,CAACR,EAAO,CAACG,EAAQgB,GAAK,CAACjB,EAAMM,IAAU,CAC1C,sDACA,oDACA,wBACG,CAACR,EAAO,CAACG,EAAQgB,GAAK,CAACjB,EAAMK,IAAU,CAG1C,oBACA,qEACG,CAACP,EAAO,CAACG,EAAQ,UAAW,CAACD,EAAMM,IAAU,CAGhD,qCACA,0BACG,CAAC,CAACR,EAAO,KAAM,KAAM,CAACG,EAAQ,SAAU,CAACD,EAAMK,IAAU,CAG5D,gBACG,CAACP,EAAO,CAACG,EAAQc,GAAS,CAACf,EAAMM,IAAU,CAC9C,6CACG,CAACR,EAAO,CAACG,EAAQc,GAAS,CAACf,EAAMK,IAAU,CAG9C,2FACG,CAACP,EAAO,CAACG,EAAQqB,GAAO,CAACtB,EAAMK,IAAU,CAC5C,oBACA,iCACG,CAAC,CAACP,EAAO,iBAAkB,CAACG,EAAQqB,GAAO,CAACtB,EAAMM,IAAU,CAG/D,sCACA,0CACG,CAACR,EAAO,CAACG,EAAQ,WAAY,CAACD,EAAMK,IAAU,CAGjD,eACA,2BACA,gCACG,CAACP,EAAO,CAACG,EAAQS,GAAS,CAACV,EAAMM,IAAU,CAC9C,iDACG,CAAC,CAACR,EAAO,QAAS,iBAAkB,CAACG,EAAQS,GAAS,CAACV,EAAMK,IAAU,CAG1E,gCACG,CAACP,EAAOG,EAAQ,CAACD,EAAMM,IAAU,CACpC,gCACA,kBACG,CAACR,EAAO,CAACG,EAAQY,GAAa,CAACb,EAAMK,IAAU,CAGlD,qFACG,CAACP,EAAO,CAACG,EAAQW,GAAO,CAACZ,EAAMM,IAAU,CAC5C,iDACG,CAACR,EAAO,CAACG,EAAQW,GAAO,CAACZ,EAAMK,IAAU,CAG5C,cACG,CAACP,EAAO,CAACG,EAAQ,OAAQ,CAACD,EAAMM,IAAU,CAC7C,2CAGA,oCACA,6DACG,CAACL,EAAQ,CAACH,EAAO,KAAM,KAAM,CAACE,EAAMK,IAAU,CAGjD,uCACG,CAACP,EAAO,CAACG,EAAQ,QAAS,CAACD,EAAMM,IAAU,CAG9C,8BACA,qBACG,CAACR,EAAO,CAACG,EAAQ,SAAU,CAACD,EAAMK,IAAU,CAG/C,iCACG,CAACP,EAAO,CAACG,EAAQ,SAAU,CAACD,EAAMK,IAAU,CAG/C,kGAEA,mBACA,iBACA,8BACA,0BACA,WACA,yBACG,CAACJ,EAAQH,EAAO,CAACE,EAAMK,IAAU,CAEpC,wBACA,uCACA,uBACA,4BACA,iCACA,kCACA,8BACA,gCACA,mCACG,CAACJ,EAAQH,EAAO,CAACE,EAAMM,IAAU,CAEpC,kBACG,CAACR,EAAO,CAACG,EAAQiB,GAAY,CAAClB,EAAMM,IAAU,CACjD,qCACG,CAACR,EAAO,CAACG,EAAQ,aAAc,CAACD,EAAMK,IAAU,CACnD,aACG,CAACP,EAAO,CAACG,EAAQ,QAAS,CAACD,EAAMK,IAAU,CAC9C,gBACG,CAACP,EAAO,CAACG,EAAQ,WAAY,CAACD,EAAMK,IAAU,CACjD,iBACG,CAACP,EAAO,CAACG,EAAQ,OAAQ,CAACD,EAAMM,IAAU,CAC7C,0BACG,CAACR,EAAO,CAACG,EAAQ,QAAS,CAACD,EAAMM,IAAU,CAC9C,wBACG,CAACR,EAAO,CAACG,EAAQ,WAAY,CAACD,EAAMM,IAAU,CACjD,+CACG,CAACR,EAAO,CAACG,EAAQ,kBAAmB,CAACD,EAAMM,IAAU,CACxD,qBACG,CAACR,EAAO,CAACG,EAAQ,YAAa,CAACD,EAAMM,IAAU,CAClD,cACG,CAACR,EAAO,CAACG,EAAQ,OAAQ,CAACD,EAAMM,IAAU,CAC7C,mBACG,CAACR,EAAO,CAACG,EAAQ,OAAQ,CAACD,EAAMK,IAAU,CAC7C,wBACG,CAACP,EAAO,CAACG,EAAQ,SAAU,CAACD,EAAMK,IAAU,CAC/C,mBACG,CAACP,EAAO,CAACG,EAAQ,SAAU,CAACD,EAAMM,IAAU,CAC/C,wBACG,CAACR,EAAO,CAACG,EAAQ,QAAS,CAACD,EAAMM,IAAU,CAC9C,mBACA,sCACG,CAAC,CAACL,EAAQ,gBAAiBH,EAAO,CAACE,EAAMM,IAAU,CACtD,sBACG,CAACR,EAAO,CAACG,EAAQ,YAAa,CAACD,EAAMM,IAAU,CAClD,8BACG,CAACR,EAAO,CAACG,EAAQ,YAAa,CAACD,EAAMM,IAAU,CAClD,oDACG,CAAC,CAACL,EAAQ,SAAUH,EAAO,CAACE,EAAMK,IAAU,CAC/C,2BACG,CAAC,CAACJ,EAAQ,SAAUH,EAAO,CAACE,EAAMK,IAAU,CAC/C,cACG,CAACP,EAAO,CAACG,EAAQ,aAAc,CAACD,EAAMK,IAAU,CACnD,uCACG,CAACP,EAAO,CAACG,EAAQ,WAAY,CAACD,EAAMM,IAAU,CACjD,wBACG,CAACR,EAAO,CAACG,EAAQ,aAAc,CAACD,EAAMM,IAAU,CACnD,kBACG,CAACR,EAAO,CAACG,EAAQ,SAAU,CAACD,EAAMM,IAAU,CAC/C,qBACG,CAACR,EAAO,CAACG,EAAQ,UAAW,CAACD,EAAMM,IAAU,CAChD,mBACG,CAACL,EAAQH,EAAO,CAACE,EAAMK,IAAU,CACpC,sBACG,CAAC,CAACP,EAAO,MAAO,KAAM,CAACG,EAAQiB,GAAY,CAAClB,EAAMK,IAAU,CAC/D,yDACG,CAACP,EAAO,CAACG,EAAQuB,GAAQ,CAACxB,EAAMM,IAAU,CAC7C,yCACG,CAACR,EAAO,CAACG,EAAQuB,GAAQ,CAACxB,EAAMK,IAAU,CAM7C,UACA,8BACG,CAACJ,EAAQH,EAAO,CAACE,EAAMI,IAAW,CACrC,0BACG,CAACN,EAAO,CAACG,EAAQ,UAAW,CAACD,EAAMI,IAAW,CACjD,mCACG,CAACN,EAAO,CAACG,EAAQqB,GAAO,CAACtB,EAAMI,IAAW,CAC7C,sCACG,CAACN,EAAO,CAACG,EAAQiB,GAAY,CAAClB,EAAMI,IAAW,CAMlD,wBACG,CAACH,EAAQ,CAACD,EAAMO,IAAW,CAC9B,uBACG,CAAC,CAACT,EAAO,IAAK,WAAY,CAACG,EAAQoB,GAAU,CAACrB,EAAMO,IAAW,CAClE,8DACG,CAAC,CAACN,EAAQgB,GAAK,CAACjB,EAAMO,IAAW,CACpC,gBACG,CAACN,EAAQ,CAACH,EAAOa,YAAc,CAACX,EAAMO,IAAW,CACpD,UACG,CAAC,CAACT,EAAO2C,cAAgB,CAACxC,EAAQc,GAAS,CAACf,EAAMO,IAAW,CAChE,4BACG,CAACT,EAAO,CAACG,EAAQS,GAAS,CAACV,EAAMO,IAAW,CAC/C,wBACG,CAACT,EAAO,CAACG,EAAQ,SAAU,CAACD,EAAMO,IAAW,CAChD,0CACA,uDACG,CAAC,CAACN,EAAQt8B,GAAO,CAACm8B,EAAOn8B,GAAO,CAACq8B,EAAMO,IAAW,CACrD,mDACG,CAAC,CAACP,EAAMO,IAAW,CAMtB,kBACG,CAACN,EAAQH,EAAO,CAACE,EAAMQ,IAAY,CACtC,wBACG,CAACV,EAAO,CAACG,EAAQc,GAAS,CAACf,EAAMQ,IAAY,CAChD,6BACG,CAACV,EAAO,CAACG,EAAQuB,GAAQ,CAACxB,EAAMQ,IAAY,CAC/C,iBACG,CAACV,EAAO,CAACG,EAAQwB,GAAW,CAACzB,EAAMQ,IAAY,CAMlD,wCACG,CAACP,EAAQ,CAACD,EAAMS,IAAY,CAM/B,2DACG,CAACX,EAAO,CAACE,EAAMK,IAAU,CAC5B,+DACG,CAACP,EAAO,CAACE,EAAMM,IAAU,CAC5B,gDACG,CAAC,CAACN,EAAMM,IAAU,CACrB,wDACG,CAAC,CAACN,EAAMK,IAAU,CACrB,kCACG,CAACP,EAAO,CAACG,EAAQ,aAGxBrwB,OAAS,CAAC,CAEN,8BACG,CAACswB,EAAS,CAACH,EAAM2C,aAAe,CAEnC,6CACG,CAACxC,EAAS,CAACH,EAAM,UAAW,CAE/B,uBACA,sEACA,0BACA,yCACA,+BACG,CAACA,EAAMG,GAAU,CAEpB,iCACG,CAACA,EAASH,IAGjB1wB,GAAK,CAAC,CAGF,mCACG,CAAC0wB,EAAMG,GAAU,CACpB,4BACA,wDACA,8CACG,CAACH,EAAM,CAACG,EAASoC,EAAWC,IAAqB,CACpD,sCACG,CAAC,CAACxC,EAAM,WAAY,CAACG,EAASoC,EAAWC,IAAqB,CAGjE,sDACA,wBACG,CAAC,CAACrC,EAAS,KAAM,KAAM,CAACH,EAAM,QAAS,CAC1C,0BACA,yCACG,CAAC,CAACA,EAAM,UAAW,CAACG,EAAS,KAAM,MAAO,CAG7C,wCACG,CAACA,EAASH,GAAO,CACpB,+EACA,8BACA,+BACA,kBACG,CAACA,EAAMG,GAAU,CACpB,cACG,CAACA,EAAS,CAACH,EAAMc,IAAc,CAClC,6DACG,CAACX,EAAS,CAACH,EAAM,YAAa,CACjC,mFACG,CAACG,EAAS,CAACH,EAAMe,eAAiB,CACrC,kBACA,wCACG,CAACZ,EAAS,CAACH,EAAM,UAAW,CAG/B,qBACG,CAACG,EAAS,CAACH,EAAM0C,eAAiB,CACrC,6BACG,CAAC,CAAC1C,EAAM,eAAgBG,GAAS,CAGpC,mDACA,2BAGA,wCACA,yBACA,4BACA,8SAEA,2BACA,oBACA,6EACA,kBACG,CAACH,EAAMG,GAAU,CACpB,yBACG,CAAC,CAACH,EAAM,WAAYG,GAAU,CACjC,sCACA,kCACA,wDACA,sBACG,CAACH,EAAMG,KAQdn0B,EAAW,SAAXA,EAAqBk2B,EAAIU,GAOzB,UALWV,IAAOrC,IACd+C,EAAaV,EACbA,EAAKr5B,KAGHhT,gBAAgBmW,GAClB,OAAO,IAAIA,EAASk2B,EAAIU,GAAY32B,YAGxC,IAAI42B,EAAMX,WAAerzB,IAAW+wB,GAAc/wB,EAAOX,WAAaW,EAAOX,UAAUkN,UAAavM,EAAOX,UAAUkN,UAvuBvG,IAwuBV0nB,EAAUF,EA3rBL,SAAUH,EAASG,GACxB,IAAIG,EAAgB,GACpB,IAAK,IAAIzrC,KAAKmrC,EACNG,EAAWtrC,IAAMsrC,EAAWtrC,GAAGlB,OAAS,IAAM,EAC9C2sC,EAAczrC,GAAKsrC,EAAWtrC,GAAGyG,OAAO0kC,EAAQnrC,IAEhDyrC,EAAczrC,GAAKmrC,EAAQnrC,GAGnC,OAAOyrC,EAkrBgBtQ,CAAOgQ,EAASG,GAAcH,EAwDzD,OAtDA5sC,KAAKmtC,WAAa,WACd,IAtqBiBzzB,EAsqBb0zB,EAAW,GAKf,OAJAA,EAAQ,KAASp6B,EACjBo6B,EAAQ,QAAYp6B,EACpBo5B,EAAUjkC,KAAKilC,EAAUJ,EAAKC,EAAQhzB,SACtCmzB,EAASC,aA1qBQ3zB,EA0qBS0zB,EAAS1zB,WAzqBRuwB,EAAWvwB,EAAQhN,QAAQ,WAtE5C,IAsE+D8B,MAAM,KAAK,GAAKwE,EA0qBlFo6B,GAEXptC,KAAKstC,OAAS,WACV,IAAIC,EAAO,GAGX,OAFAA,EAAI,aAAiBv6B,EACrBo5B,EAAUjkC,KAAKolC,EAAMP,EAAKC,EAAQjpB,KAC3BupB,GAEXvtC,KAAKwtC,UAAY,WACb,IAAIC,EAAU,GAKd,OAJAA,EAAO,OAAWz6B,EAClBy6B,EAAO,MAAUz6B,EACjBy6B,EAAO,KAASz6B,EAChBo5B,EAAUjkC,KAAKslC,EAAST,EAAKC,EAAQt0B,QAC9B80B,GAEXztC,KAAK0tC,UAAY,WACb,IAAIC,EAAU,GAId,OAHAA,EAAO,KAAS36B,EAChB26B,EAAO,QAAY36B,EACnBo5B,EAAUjkC,KAAKwlC,EAASX,EAAKC,EAAQjzB,QAC9B2zB,GAEX3tC,KAAK4tC,MAAQ,WACT,IAAIC,EAAM,GAIV,OAHAA,EAAG,KAAS76B,EACZ66B,EAAG,QAAY76B,EACfo5B,EAAUjkC,KAAK0lC,EAAKb,EAAKC,EAAQxzB,IAC1Bo0B,GAEX7tC,KAAKoW,UAAY,WACb,MAAO,CACHi2B,GAAUrsC,KAAK8tC,QACf7zB,QAAUja,KAAKmtC,aACfnzB,OAAUha,KAAK0tC,YACfj0B,GAAUzZ,KAAK4tC,QACfj1B,OAAU3Y,KAAKwtC,YACfxpB,IAAUhkB,KAAKstC,WAGvBttC,KAAK8tC,MAAQ,WACT,OAAOd,GAEXhtC,KAAK+tC,MAAQ,SAAU1B,GAEnB,OADAW,SAAcX,IAAOpC,GAAYoC,EAAG9rC,OAzwBxB,IAywBkDwN,EAAKs+B,EAzwBvD,KAywB4EA,EACjFrsC,MAEXA,KAAK+tC,MAAMf,GACJhtC,MAGXmW,EAASm0B,QApyBS,SAqyBlBn0B,EAAS63B,QAAWlC,EAAU,CAAC3B,EAAMG,EA9xBnB,UA+xBlBn0B,EAAS83B,IAAMnC,EAAU,CAACvB,IAC1Bp0B,EAAS+3B,OAASpC,EAAU,CAAC5B,EAAOG,EAAQD,EAAMI,EAASC,EAAQE,EAASD,EAAQE,EAAUC,IAC9F10B,EAASg4B,OAASh4B,EAASi4B,GAAKtC,EAAU,CAAC3B,EAAMG,WAOtC9qC,IAAauqC,GAEgBlzB,EAAOrX,UACvCA,EAAUqX,EAAOrX,QAAU2W,GAE/B3W,EAAQ2W,SAAWA,GAGiBk4B,EAAAA,MAChCA,EAAAA,WACI,OAAOl4B,GADL,yCAGQ6C,IAAW+wB,IAEzB/wB,EAAO7C,SAAWA,GAS1B,IAAIm4B,SAAWt1B,IAAW+wB,IAAe/wB,EAAOu1B,QAAUv1B,EAAOw1B,OACjE,GAAIF,IAAMA,EAAEjC,GAAI,CACZ,IAAIoC,EAAS,IAAIt4B,EACjBm4B,EAAEjC,GAAKoC,EAAOr4B,YACdk4B,EAAEjC,GAAGrrC,IAAM,WACP,OAAOytC,EAAOX,SAElBQ,EAAEjC,GAAGpmC,IAAM,SAAUomC,GACjBoC,EAAOV,MAAM1B,GACb,IAAIj+B,EAASqgC,EAAOr4B,YACpB,IAAK,IAAIs4B,KAAQtgC,EACbkgC,EAAEjC,GAAGqC,GAAQtgC,EAAOsgC,KA11BpC,CA+1BqB,kBAAX11B,OAAsBA,OAAShZ,0CCz2B1B,SAAS2uC,EAAuBxkB,GAC7C,QAAa,IAATA,EACF,MAAM,IAAIykB,eAAe,6DAG3B,OAAOzkB,qHCJM,SAAS0kB,EAA2BliC,EAAGmiC,GACpD,IAAIC,EAAuB,qBAAX3nC,QAA0BuF,EAAEvF,OAAOmlB,WAAa5f,EAAE,cAElE,IAAKoiC,EAAI,CACP,GAAI5sC,MAAMiP,QAAQzE,KAAOoiC,GAAK,OAA2BpiC,KAAOmiC,GAAkBniC,GAAyB,kBAAbA,EAAEpM,OAAqB,CAC/GwuC,IAAIpiC,EAAIoiC,GACZ,IAAIttC,EAAI,EAEJutC,EAAI,aAER,MAAO,CACLljC,EAAGkjC,EACHz+B,EAAG,WACD,OAAI9O,GAAKkL,EAAEpM,OAAe,CACxBynC,MAAM,GAED,CACLA,MAAM,EACNvoC,MAAOkN,EAAElL,OAGbmR,EAAG,SAAWq8B,GACZ,MAAMA,GAERjnB,EAAGgnB,GAIP,MAAM,IAAI5zB,UAAU,yIAGtB,IAEImV,EAFA2e,GAAmB,EACnBC,GAAS,EAEb,MAAO,CACLrjC,EAAG,WACDijC,EAAKA,EAAG5mC,KAAKwE,IAEf4D,EAAG,WACD,IAAI6+B,EAAOL,EAAGrI,OAEd,OADAwI,EAAmBE,EAAKpH,KACjBoH,GAETx8B,EAAG,SAAWy8B,GACZF,GAAS,EACT5e,EAAM8e,GAERrnB,EAAG,WACD,IACOknB,GAAoC,MAAhBH,EAAW,QAAWA,EAAW,SAC1D,QACA,GAAII,EAAQ,MAAM5e,+GCjDX,SAAS+e,EAAaC,GACnC,IAAIC,GAA4B,SAChC,OAAO,WACL,IACIphC,EADAqhC,GAAQ,OAAeF,GAG3B,GAAIC,EAA2B,CAC7B,IAAIE,GAAY,OAAe1vC,MAAMuC,YACrC6L,EAASlL,QAAQysC,UAAUF,EAAO1sC,UAAW2sC,QAE7CthC,EAASqhC,EAAMhsC,MAAMzD,KAAM+C,WAG7B,OAAO,OAA0B/C,KAAMoO,yCChB5B,SAASwhC,EAAgBjjC,GAItC,OAHAijC,EAAkBtwC,OAAO2C,eAAiB3C,OAAO6jC,eAAiB,SAAyBx2B,GACzF,OAAOA,EAAEzK,WAAa5C,OAAO6jC,eAAex2B,IAEvCijC,EAAgBjjC,sHCHV,SAASkjC,EAAUC,EAAUC,GAC1C,GAA0B,oBAAfA,GAA4C,OAAfA,EACtC,MAAM,IAAI30B,UAAU,sDAGtB00B,EAAS/uC,UAAYzB,OAAOkD,OAAOutC,GAAcA,EAAWhvC,UAAW,CACrEwB,YAAa,CACX9C,MAAOqwC,EACPvN,UAAU,EACVrhC,cAAc,KAGlB5B,OAAOC,eAAeuwC,EAAU,YAAa,CAC3CvN,UAAU,IAERwN,IAAY,OAAeD,EAAUC,wCChB5B,SAASC,IACtB,GAAuB,qBAAZ9sC,UAA4BA,QAAQysC,UAAW,OAAO,EACjE,GAAIzsC,QAAQysC,UAAUM,KAAM,OAAO,EACnC,GAAqB,oBAAVC,MAAsB,OAAO,EAExC,IAEE,OADAC,QAAQpvC,UAAU2mC,QAAQv/B,KAAKjF,QAAQysC,UAAUQ,QAAS,IAAI,iBACvD,EACP,MAAOv9B,GACP,OAAO,iICPI,SAASw9B,EAA2BjmB,EAAMhiB,GACvD,GAAIA,IAA2B,YAAlB,OAAQA,IAAsC,oBAATA,GAChD,OAAOA,EACF,QAAa,IAATA,EACT,MAAM,IAAIiT,UAAU,4DAGtB,OAAO,OAAsB+O,wCCThB,SAASkmB,EAAgB1jC,EAAGvK,GAMzC,OALAiuC,EAAkB/wC,OAAO2C,gBAAkB,SAAyB0K,EAAGvK,GAErE,OADAuK,EAAEzK,UAAYE,EACPuK,GAGF0jC,EAAgB1jC,EAAGvK,uECNb,SAASkqB,EAAQf,GAG9B,OAAOe,EAAU,mBAAqBllB,QAAU,iBAAmBA,OAAOmlB,SAAW,SAAUhB,GAC7F,cAAcA,GACZ,SAAUA,GACZ,OAAOA,GAAO,mBAAqBnkB,QAAUmkB,EAAIhpB,cAAgB6E,QAAUmkB,IAAQnkB,OAAOrG,UAAY,gBAAkBwqB,GACvHe,EAAQf,gJCLE,SAAS+kB,EAAWC,EAAQ1oC,EAAM2oC,GAc/C,OAZEF,GADE,EAAAG,EAAA,KACWvtC,QAAQysC,UAER,SAAoBY,EAAQ1oC,EAAM2oC,GAC7C,IAAIrkC,EAAI,CAAC,MACTA,EAAE3F,KAAK/C,MAAM0I,EAAGtE,GAChB,IACIwO,EAAW,IADG1V,SAASga,KAAKlX,MAAM8sC,EAAQpkC,IAG9C,OADIqkC,IAAO,EAAAvuC,EAAA,GAAeoU,EAAUm6B,EAAMzvC,WACnCsV,GAIJi6B,EAAW7sC,MAAM,KAAMV,WCZjB,SAAS2tC,EAAiBF,GACvC,IAAIG,EAAwB,oBAARtrC,IAAqB,IAAIA,SAAQ2N,EA8BrD,OA5BA09B,EAAmB,SAA0BF,GAC3C,GAAc,OAAVA,ICRkCI,EDQEJ,GCPsB,IAAzD7vC,SAASkT,SAAS1L,KAAKyoC,GAAI98B,QAAQ,kBDOQ,OAAO08B,ECR5C,IAA2BI,EDUtC,GAAqB,oBAAVJ,EACT,MAAM,IAAIp1B,UAAU,sDAGtB,GAAsB,qBAAXu1B,EAAwB,CACjC,GAAIA,EAAO3qC,IAAIwqC,GAAQ,OAAOG,EAAO3vC,IAAIwvC,GAEzCG,EAAO1qC,IAAIuqC,EAAOK,GAGpB,SAASA,IACP,OAAO,EAAUL,EAAOztC,WAAW,EAAAogC,EAAA,GAAenjC,MAAMuC,aAW1D,OARAsuC,EAAQ9vC,UAAYzB,OAAOkD,OAAOguC,EAAMzvC,UAAW,CACjDwB,YAAa,CACX9C,MAAOoxC,EACP5vC,YAAY,EACZshC,UAAU,EACVrhC,cAAc,MAGX,EAAAe,EAAA,GAAe4uC,EAASL,IAG1BE,EAAiBF","sources":["../node_modules/@log4js2/core/dist/appender/appender.wrapper.js","../node_modules/@log4js2/core/dist/appender/console.appender.js","../node_modules/@log4js2/core/dist/appender/index.js","../node_modules/@log4js2/core/dist/appender/log.appender.js","../node_modules/@log4js2/core/dist/const/log.level.js","../node_modules/@log4js2/core/dist/decorator/appender.js","../node_modules/@log4js2/core/dist/decorator/filter.js","../node_modules/@log4js2/core/dist/decorator/log.js","../node_modules/@log4js2/core/dist/filter/index.js","../node_modules/@log4js2/core/dist/filter/log.filter.action.js","../node_modules/@log4js2/core/dist/filter/log.filter.js","../node_modules/@log4js2/core/dist/filter/marker.filter.js","../node_modules/@log4js2/core/dist/filter/threshold.filter.js","../node_modules/@log4js2/core/dist/index.js","../node_modules/@log4js2/core/dist/layout/date.formatter.js","../node_modules/@log4js2/core/dist/layout/formatter.js","../node_modules/@log4js2/core/dist/log4js.js","../node_modules/@log4js2/core/dist/logger/index.js","../node_modules/@log4js2/core/dist/logger/logger.js","../node_modules/@log4js2/core/dist/marker.js","../node_modules/@log4js2/core/dist/util/utility.js","../node_modules/@log4js2/core/dist/util/virtual.console.js","../node_modules/@luxottica/vm-devicedetection/src/parser/UserAgentParser.ts","../node_modules/@luxottica/vm-devicedetection/src/wasm/WasmDetection.ts","../node_modules/@luxottica/vm-devicedetection/src/webgl/WebGlDetection.ts","../node_modules/@luxottica/vm-devicedetection/src/webrtc/WebRtcDetection.ts","../node_modules/@luxottica/vm-devicedetection/src/DeviceDetection.ts","../node_modules/@luxottica/vm-remotelog/node_modules/uuid/dist/esm-browser/rng.js","../node_modules/@luxottica/vm-remotelog/node_modules/uuid/dist/esm-browser/regex.js","../node_modules/@luxottica/vm-remotelog/node_modules/uuid/dist/esm-browser/stringify.js","../node_modules/@luxottica/vm-remotelog/node_modules/uuid/dist/esm-browser/validate.js","../node_modules/@luxottica/vm-remotelog/node_modules/uuid/dist/esm-browser/v4.js","../node_modules/@luxottica/vm-remotelog/src/domain/model/LogMessage.ts","../node_modules/@luxottica/vm-remotelog/src/adapter/db/factory/DBRemoteLogFactory.ts","../node_modules/@luxottica/vm-remotelog/src/config/LogsConfigurationRetriever.ts","../node_modules/@luxottica/vm-remotelog/src/config/LogsConfig.ts","../node_modules/@luxottica/vm-remotelog/src/domain/service/log/producer/RemoteLogService.ts","../node_modules/@luxottica/vm-remotelog/src/domain/appender/RemoteLogAppender.ts","../node_modules/@luxottica/vm-remotelog/src/domain/RemoteLogConfig.ts","../node_modules/@luxottica/vm-remotelog/src/adapter/db/factory/DBAppViewSessionFactory.ts","../node_modules/@luxottica/vm-remotelog/src/domain/service/config/VmAnalyticsApiConfig.ts","../node_modules/@luxottica/vm-remotelog/src/helpers/RequestHelper.ts","../node_modules/@luxottica/vm-remotelog/src/adapter/rest/AppViewSessionAdapter.ts","../node_modules/@luxottica/vm-remotelog/src/domain/service/log/consumer/AppViewSessionConsumer.ts","../node_modules/@luxottica/vm-remotelog/src/domain/service/job/AppViewSessionConsumerJob.ts","../node_modules/@luxottica/vm-remotelog/src/adapter/db/factory/DBBrowserSessionFactory.ts","../node_modules/@luxottica/vm-remotelog/src/adapter/rest/BrowserSessionAdapter.ts","../node_modules/@luxottica/vm-remotelog/src/domain/service/log/consumer/BrowserSessionConsumer.ts","../node_modules/@luxottica/vm-remotelog/src/domain/service/job/BrowserSessionConsumerJob.ts","../node_modules/@luxottica/vm-remotelog/src/adapter/rest/RemoteLogAdapter.ts","../node_modules/@luxottica/vm-remotelog/src/domain/service/log/consumer/RemoteLogConsumer.ts","../node_modules/@luxottica/vm-remotelog/src/domain/service/job/RemoteLogConsumerJob.ts","../node_modules/@luxottica/vm-remotelog/src/adapter/db/factory/DBTrackingStatusFactory.ts","../node_modules/@luxottica/vm-remotelog/src/adapter/rest/TrackingStatusAdapter.ts","../node_modules/@luxottica/vm-remotelog/src/domain/service/log/consumer/TrackingStatusConsumer.ts","../node_modules/@luxottica/vm-remotelog/src/domain/service/job/TrackingStatusConsumerJob.ts","../node_modules/@luxottica/vm-remotelog/src/domain/service/job/JobsStarter.ts","../node_modules/@luxottica/vm-remotelog/src/domain/service/log/producer/AppViewSessionService.ts","../node_modules/@luxottica/vm-remotelog/src/domain/service/log/producer/BrowserSessionService.ts","../node_modules/@luxottica/vm-remotelog/src/domain/service/log/producer/TrackingStatusService.ts","../node_modules/@luxottica/vm-remotelog/src/RemoteLog.ts","../node_modules/@luxottica/vm-remotelog/node_modules/localforage/dist/localforage.js","../node_modules/path-browserify/index.js","../node_modules/reflect-metadata/Reflect.js","../node_modules/ua-parser-js/src/ua-parser.js","../node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js","../node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js","../node_modules/@babel/runtime/helpers/esm/createSuper.js","../node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js","../node_modules/@babel/runtime/helpers/esm/inherits.js","../node_modules/@babel/runtime/helpers/esm/isNativeReflectConstruct.js","../node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js","../node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","../node_modules/@babel/runtime/helpers/esm/typeof.js","../node_modules/@babel/runtime/helpers/esm/construct.js","../node_modules/@babel/runtime/helpers/esm/wrapNativeSuper.js","../node_modules/@babel/runtime/helpers/esm/isNativeFunction.js"],"sourcesContent":["Object.defineProperty(exports, \"__esModule\", { value: true });\nvar filter_1 = require(\"../filter\");\nvar log_filter_action_1 = require(\"../filter/log.filter.action\");\nvar AppenderWrapper = /** @class */ (function () {\n function AppenderWrapper(appender, _config) {\n this._config = _config;\n this._appender = new appender(_config.config);\n this._appender.setLayout(_config.layout);\n this._isPassThrough = (!_config || !_config.filters || _config.filters.length === 0);\n if (!this._isPassThrough) {\n this._filters = _config.filters.map(function (value) {\n return {\n filter: (value.filter instanceof Function) ? new value.filter(value.config) :\n new (filter_1.getFilter(value.filter))(value.config),\n config: value.config,\n onMatch: value.onMatch,\n onMismatch: value.onMismatch\n };\n });\n }\n else {\n this._filters = [];\n }\n }\n Object.defineProperty(AppenderWrapper.prototype, \"appender\", {\n get: function () {\n return this._appender;\n },\n enumerable: true,\n configurable: true\n });\n AppenderWrapper.prototype.append = function (event) {\n if (this.isMatch(event)) {\n this._appender.append(event);\n }\n };\n AppenderWrapper.prototype.isMatch = function (event) {\n return this._isPassThrough || this._isMatch(event);\n };\n AppenderWrapper.prototype._isMatch = function (event) {\n var item;\n var count = this._filters.length;\n for (var i = 0; i < count; i++) {\n item = this._filters[i];\n if (!item.filter.isMatch(event)) {\n if (item.onMismatch === log_filter_action_1.LogFilterAction.DENY) {\n return false;\n }\n else if (item.onMismatch === log_filter_action_1.LogFilterAction.ALLOW) {\n return true;\n }\n }\n else {\n if (item.onMatch === log_filter_action_1.LogFilterAction.DENY) {\n return false;\n }\n else if (item.onMatch === log_filter_action_1.LogFilterAction.ALLOW) {\n return true;\n }\n }\n }\n return true;\n };\n return AppenderWrapper;\n}());\nexports.AppenderWrapper = AppenderWrapper;\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar log_level_1 = require(\"../const/log.level\");\nvar appender_1 = require(\"../decorator/appender\");\nvar virtual_console_1 = require(\"../util/virtual.console\");\nvar log_appender_1 = require(\"./log.appender\");\nvar ConsoleAppender = /** @class */ (function (_super) {\n __extends(ConsoleAppender, _super);\n function ConsoleAppender() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Appends the log event\n * @param {ILogEvent} logEvent\n */\n ConsoleAppender.prototype.append = function (logEvent) {\n if (logEvent.level <= this.getLogLevel()) {\n this._appendToConsole(logEvent);\n }\n };\n /**\n * @private\n * @function\n *\n * @param {ILogEvent} logEvent\n */\n ConsoleAppender.prototype._appendToConsole = function (logEvent) {\n var message = this.format(logEvent);\n switch (logEvent.level) {\n case log_level_1.LogLevel.FATAL:\n case log_level_1.LogLevel.ERROR: {\n if (logEvent.error) {\n virtual_console_1.getVirtualConsole().error(message, logEvent.error);\n }\n else {\n virtual_console_1.getVirtualConsole().error(message);\n }\n break;\n }\n case log_level_1.LogLevel.WARN: {\n virtual_console_1.getVirtualConsole().warn(message);\n break;\n }\n case log_level_1.LogLevel.INFO: {\n virtual_console_1.getVirtualConsole().info(message);\n break;\n }\n case log_level_1.LogLevel.DEBUG:\n case log_level_1.LogLevel.TRACE: {\n virtual_console_1.getVirtualConsole().debug(message);\n break;\n }\n default:\n break;\n }\n };\n ConsoleAppender = __decorate([\n appender_1.Appender('Console')\n ], ConsoleAppender);\n return ConsoleAppender;\n}(log_appender_1.LogAppender));\nexports.ConsoleAppender = ConsoleAppender;\n","Object.defineProperty(exports, \"__esModule\", { value: true });\nvar utility_1 = require(\"../util/utility\");\nvar appender_wrapper_1 = require(\"./appender.wrapper\");\nvar log_appender_1 = require(\"./log.appender\");\nvar _appenderMethods = new Set();\n_appenderMethods.add('append');\n_appenderMethods.add('isActive');\n_appenderMethods.add('setLogLevel');\n_appenderMethods.add('setLayout');\n_appenderMethods.add('getLayout');\n_appenderMethods.add('format');\nvar _appenders = new Map();\nvar _registeredLoggerAppenders = new Map();\n/**\n * Validates that the appender\n *\n * @private\n * @function\n *\n * @params {APPENDER} appender\n * @throws {Error} if the appender is invalid\n */\nvar _validateAppender = function (appender) {\n // if we are running ES6, we can make sure it extends LogAppender\n // otherwise, it must be a function\n if (!(appender instanceof log_appender_1.LogAppender)) {\n return;\n }\n // ensure that the appender methods are present (and are functions)\n _appenderMethods.forEach(function (element) {\n if (!appender.prototype[element] || !(appender.prototype[element] instanceof Function)) {\n throw new Error(\"Invalid appender: missing/invalid method: \" + element);\n }\n });\n};\nexports.getAppenderName = function (appender) { return appender.name || utility_1.getFunctionName(appender); };\n/**\n * Adds an appender to the appender queue\n *\n * @function\n *\n * @param {LogAppender} appender\n * @param {string} name\n */\nexports.addAppender = function (appender, name) {\n _validateAppender(appender);\n var appenderName = name || exports.getAppenderName(appender);\n // only put the appender into the set if it doesn't exist already\n if (!_appenders.has(appenderName)) {\n _appenders.set(appenderName, appender);\n }\n return appender;\n};\n/**\n * Registers an appender\n *\n * @param {Newable} appender\n */\nexports.registerAppender = function (appender) {\n var name = exports.getAppenderName(appender);\n if (_appenders.has(name)) {\n exports.addAppender(appender);\n }\n _appenders.set(name, appender);\n return appender;\n};\n/**\n * Gets the appender with the specified name\n *\n * @param name\n */\nexports.getAppender = function (name) { return _appenders.get(name); };\n/**\n * Gets the appender instances. If the appenders parameter is set, then it will only fetch those within the array, otherwise return all\n *\n * @param {string[]} appenders\n */\nexports.getLoggerAppenderInstances = function (appenders) {\n if (appenders && appenders.length > 0) {\n return appenders.map(function (value) {\n if (_registeredLoggerAppenders.has(value)) {\n var appenderConfig = _registeredLoggerAppenders.get(value);\n return new appender_wrapper_1.AppenderWrapper(appenderConfig.appender, appenderConfig);\n }\n throw new Error(\"Invalid appender reference '\" + value + \"'\");\n });\n }\n else {\n var result_1 = [];\n _registeredLoggerAppenders.forEach(function (appenderConfig) {\n return result_1.push(new appender_wrapper_1.AppenderWrapper(appenderConfig.appender, appenderConfig));\n });\n return result_1;\n }\n};\n/**\n * Sets the appender configuration for a specified appender name\n *\n * @param {string} appenderName\n * @param {IAppenderConfiguration} config\n */\nexports.setLoggerAppenderConfig = function (appenderName, config) {\n _registeredLoggerAppenders.set(appenderName, config);\n};\n","Object.defineProperty(exports, \"__esModule\", { value: true });\nvar formatter_1 = require(\"../layout/formatter\");\nvar LogAppender = /** @class */ (function () {\n function LogAppender(config) {\n // do nothing\n }\n /**\n * Returns whether or not the appender is active\n * @returns {boolean}\n */\n LogAppender.prototype.isActive = function () {\n return this.active === true;\n };\n /**\n * Appends the log\n * @param {ILogEvent} logEvent\n */\n LogAppender.prototype.append = function (logEvent) {\n // stub\n };\n /**\n * Gets the current log level\n * @returns {number}\n */\n LogAppender.prototype.getLogLevel = function () {\n return this.logLevel;\n };\n /**\n * Sets the log level of the appender\n * @param {LogLevel} logLevel\n */\n LogAppender.prototype.setLogLevel = function (logLevel) {\n this.logLevel = logLevel;\n };\n /**\n * Sets the layout of the appender\n * @param {string} layout\n */\n LogAppender.prototype.setLayout = function (layout) {\n this.layout = layout;\n };\n /**\n * Gets the layout associated with the appender\n * @returns {string}\n */\n LogAppender.prototype.getLayout = function () {\n return this.layout;\n };\n /**\n * Formats the log event using the layout provided\n * @param {ILogEvent} logEvent\n */\n LogAppender.prototype.format = function (logEvent) {\n return formatter_1.format(this.getLayout(), logEvent);\n };\n return LogAppender;\n}());\nexports.LogAppender = LogAppender;\n","Object.defineProperty(exports, \"__esModule\", { value: true });\nvar LogLevel;\n(function (LogLevel) {\n LogLevel[LogLevel[\"OFF\"] = 0] = \"OFF\";\n LogLevel[LogLevel[\"FATAL\"] = 100] = \"FATAL\";\n LogLevel[LogLevel[\"ERROR\"] = 200] = \"ERROR\";\n LogLevel[LogLevel[\"WARN\"] = 300] = \"WARN\";\n LogLevel[LogLevel[\"INFO\"] = 400] = \"INFO\";\n LogLevel[LogLevel[\"DEBUG\"] = 500] = \"DEBUG\";\n LogLevel[LogLevel[\"TRACE\"] = 600] = \"TRACE\";\n LogLevel[LogLevel[\"ALL\"] = 2147483647] = \"ALL\";\n})(LogLevel = exports.LogLevel || (exports.LogLevel = {}));\n","Object.defineProperty(exports, \"__esModule\", { value: true });\nvar appender_1 = require(\"../appender\");\n/**\n *\n * @returns {(target: Newable) => void}\n * @constructor\n */\nfunction Appender(name) {\n return function (target) {\n appender_1.addAppender(target, name);\n return target;\n };\n}\nexports.Appender = Appender;\n","Object.defineProperty(exports, \"__esModule\", { value: true });\nvar filter_1 = require(\"../filter\");\n/**\n * @returns {(target: Newable) => void}\n * @constructor\n */\nfunction Filter(name) {\n return function (target) {\n filter_1.addFilter(target, name);\n return target;\n };\n}\nexports.Filter = Filter;\n","Object.defineProperty(exports, \"__esModule\", { value: true });\nvar __1 = require(\"../\");\nrequire(\"reflect-metadata\");\nvar logMarker = Symbol('logMarker');\n/**\n * Sets the marker for the @Log decorator\n *\n * @constructor\n *\n * @param {Marker} marker\n */\nfunction LogMarker(marker) {\n return function (target, key) {\n Reflect.defineMetadata(logMarker, marker, target, key);\n };\n}\nexports.LogMarker = LogMarker;\n/**\n * Log an error on function entry\n *\n * @constructor\n *\n * @param {LogLevel} level\n * @param {string} message\n * @param {any[]} options\n *\n * @returns {Function}\n */\nfunction Log(level, message) {\n var options = [];\n for (var _i = 2; _i < arguments.length; _i++) {\n options[_i - 2] = arguments[_i];\n }\n return function (target, key, descriptor) {\n var originalMethod = descriptor.value;\n descriptor.value = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var marker = Reflect.getOwnMetadata(logMarker, target, key);\n var logger = __1.getLogger(target);\n if (marker) {\n logger.log.apply(logger, [level, marker, message].concat(options));\n }\n else {\n logger.log.apply(logger, [level, message].concat(options));\n }\n return originalMethod.call(this, args);\n };\n return descriptor;\n };\n}\nexports.Log = Log;\n","Object.defineProperty(exports, \"__esModule\", { value: true });\nvar __1 = require(\"..\");\nvar _filterMethods = new Set();\n_filterMethods.add('isMatch');\nvar _filters = new Map();\n/**\n * Validates that the appender\n *\n * @private\n * @function\n *\n * @params {APPENDER} appender\n * @throws {Error} if the appender is invalid\n */\nvar _validateFilter = function (filter) {\n // if we are running ES6, we can make sure it extends LogAppender\n // otherwise, it must be a function\n if (!(filter instanceof __1.LogFilter)) {\n return;\n }\n // instantiate the appender function\n var filterObj = new filter();\n // ensure that the appender methods are present (and are functions)\n _filterMethods.forEach(function (element) {\n if (!filterObj[element] || !(filterObj[element] instanceof Function)) {\n throw new Error(\"Invalid filter: missing/invalid method: \" + element);\n }\n });\n};\nexports.addFilter = function (filter, name) {\n _validateFilter(filter);\n // only put the appender into the set if it doesn't exist already\n if (!_filters.has(name)) {\n _filters.set(name, filter);\n }\n return filter;\n};\nexports.getFilter = function (name) { return _filters.get(name); };\n","Object.defineProperty(exports, \"__esModule\", { value: true });\nvar LogFilterAction;\n(function (LogFilterAction) {\n LogFilterAction[\"ALLOW\"] = \"ALLOW\";\n LogFilterAction[\"NEUTRAL\"] = \"NEUTRAL\";\n LogFilterAction[\"DENY\"] = \"DENY\";\n})(LogFilterAction = exports.LogFilterAction || (exports.LogFilterAction = {}));\n","Object.defineProperty(exports, \"__esModule\", { value: true });\nvar LogFilter = /** @class */ (function () {\n function LogFilter(configuration) {\n this.configuration = configuration;\n }\n return LogFilter;\n}());\nexports.LogFilter = LogFilter;\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar filter_1 = require(\"../decorator/filter\");\nvar log_filter_1 = require(\"./log.filter\");\nvar MarkerFilter = /** @class */ (function (_super) {\n __extends(MarkerFilter, _super);\n function MarkerFilter() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Checks to see if the marker matches the filter configuration\n *\n * @param {ILogEvent} logEvent\n */\n MarkerFilter.prototype.isMatch = function (logEvent) {\n if (!logEvent.marker) {\n return false;\n }\n else {\n return logEvent.marker.name === this.configuration.marker || this._isParentMarkerMatch(logEvent.marker);\n }\n };\n /**\n * Checks if the parent markers match the filter criteria\n *\n * @private\n *\n * @param {Marker} marker\n * @return {boolean}\n */\n MarkerFilter.prototype._isParentMarkerMatch = function (marker) {\n var _this = this;\n if (!marker.hasParents()) {\n return false;\n }\n else {\n return marker.getParents().every(function (parent) {\n return (parent.name === _this.configuration.marker || _this._isParentMarkerMatch(parent));\n });\n }\n };\n MarkerFilter = __decorate([\n filter_1.Filter('Marker')\n ], MarkerFilter);\n return MarkerFilter;\n}(log_filter_1.LogFilter));\nexports.MarkerFilter = MarkerFilter;\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar filter_1 = require(\"../decorator/filter\");\nvar log_filter_1 = require(\"./log.filter\");\nvar ThresholdFilter = /** @class */ (function (_super) {\n __extends(ThresholdFilter, _super);\n function ThresholdFilter() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n ThresholdFilter.prototype.isMatch = function (logEvent) {\n return logEvent.level <= this.configuration.level;\n };\n ThresholdFilter = __decorate([\n filter_1.Filter('Threshold')\n ], ThresholdFilter);\n return ThresholdFilter;\n}(log_filter_1.LogFilter));\nexports.ThresholdFilter = ThresholdFilter;\n","function __export(m) {\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n}\nObject.defineProperty(exports, \"__esModule\", { value: true });\nrequire(\"reflect-metadata\");\n__export(require(\"./log4js\"));\nvar logger_1 = require(\"./logger/logger\");\nexports.Logger = logger_1.Logger;\nvar log_level_1 = require(\"./const/log.level\");\nexports.LogLevel = log_level_1.LogLevel;\nvar log_appender_1 = require(\"./appender/log.appender\");\nexports.LogAppender = log_appender_1.LogAppender;\nvar console_appender_1 = require(\"./appender/console.appender\");\nexports.ConsoleAppender = console_appender_1.ConsoleAppender;\nvar marker_1 = require(\"./marker\");\nexports.Marker = marker_1.Marker;\nvar appender_1 = require(\"./decorator/appender\");\nexports.Appender = appender_1.Appender;\nvar filter_1 = require(\"./decorator/filter\");\nexports.Filter = filter_1.Filter;\nvar log_1 = require(\"./decorator/log\");\nexports.Log = log_1.Log;\nexports.LogMarker = log_1.LogMarker;\nvar log_filter_action_1 = require(\"./filter/log.filter.action\");\nexports.LogFilterAction = log_filter_action_1.LogFilterAction;\nvar log_filter_1 = require(\"./filter/log.filter\");\nexports.LogFilter = log_filter_1.LogFilter;\nvar marker_filter_1 = require(\"./filter/marker.filter\");\nexports.MarkerFilter = marker_filter_1.MarkerFilter;\nvar threshold_filter_1 = require(\"./filter/threshold.filter\");\nexports.ThresholdFilter = threshold_filter_1.ThresholdFilter;\n","// tslint:disable:bool-param-default\nObject.defineProperty(exports, \"__esModule\", { value: true });\n// tslint:disable-next-line\nvar TIMEZONE = /\\b(?:[PMCEA][SDP]T|(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time|(?:GMT|UTC)(?:[-+]\\d{4})?)\\b/g;\nvar TIMEZONE_CLIP = /[^-+\\dA-Z]/g;\n/**\n * Pads numbers in the date format\n *\n * @param {string|number} value\n * @param {number} length\n * @param {string} character\n *\n * @returns {string} the padded string\n */\nexports.padLeft = function (value, length, character) {\n if (character === void 0) { character = ' '; }\n var strValue = String(value);\n while (strValue.length < length) {\n strValue = character + strValue;\n }\n return strValue;\n};\nvar DateTimeFormat;\n(function (DateTimeFormat) {\n DateTimeFormat[\"DEFAULT\"] = \"yyyy-MM-dd HH:mm:ss,S\";\n DateTimeFormat[\"ABSOLUTE\"] = \"HH:mm:ss,S\";\n DateTimeFormat[\"COMPACT\"] = \"yyyyMMddHHmmssS\";\n DateTimeFormat[\"DATE\"] = \"dd MMM yyyy HH:mm:ss,S\";\n DateTimeFormat[\"ISO8601\"] = \"yyyy-MM-ddTHH:mm:ss,S\";\n DateTimeFormat[\"ISO8601_BASIC\"] = \"yyyyMMddTHHmmss,S\";\n})(DateTimeFormat = exports.DateTimeFormat || (exports.DateTimeFormat = {}));\nvar _i18n = {\n d: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sunday', 'Monday',\n 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],\n m: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',\n 'Oct', 'Nov', 'Dec', 'January', 'February', 'March', 'April', 'May', 'June',\n 'July', 'August', 'September', 'October', 'November', 'December']\n};\nvar _maskStore = {};\nvar _flags = {\n d: function (date) { return date.getDate(); },\n dd: function (date) { return exports.padLeft(date.getDate(), 2, '0'); },\n ddd: function (date) { return _i18n.d[date.getDay()]; },\n dddd: function (date) { return _i18n.d[date.getDay() + 7]; },\n M: function (date) { return date.getMonth() + 1; },\n MM: function (date) { return exports.padLeft(date.getMonth() + 1, 2, '0'); },\n MMM: function (date) { return _i18n.m[date.getMonth()]; },\n MMMM: function (date) { return _i18n.m[date.getMonth() + 12]; },\n yy: function (date, isUTC) { return String(isUTC ? date.getFullYear() : date.getUTCFullYear()).slice(2); },\n yyyy: function (date, isUTC) { return isUTC ? date.getFullYear() : date.getUTCFullYear(); },\n h: function (date) { return date.getHours() % 12 || 12; },\n hh: function (date) { return exports.padLeft(date.getHours() % 12 || 12, 2, '0'); },\n H: function (date) { return date.getHours(); },\n HH: function (date) { return exports.padLeft(date.getHours(), 2, '0'); },\n m: function (date) { return date.getMinutes(); },\n mm: function (date) { return exports.padLeft(date.getMinutes(), 2, '0'); },\n s: function (date) { return date.getSeconds(); },\n ss: function (date) { return exports.padLeft(date.getSeconds(), 2, '0'); },\n S: function (date) { return exports.padLeft(date.getMilliseconds(), 1); },\n a: function (date) { return date.getHours() < 12 ? 'a' : 'p'; },\n aa: function (date) { return date.getHours() < 12 ? 'am' : 'pm'; },\n A: function (date) { return date.getHours() < 12 ? 'A' : 'P'; },\n AA: function (date) { return date.getHours() < 12 ? 'AM' : 'PM'; },\n Z: function (date, isUTC) { return isUTC ? 'UTC' : (String(date).match(TIMEZONE)).pop().replace(TIMEZONE_CLIP, ''); },\n o: function (date, isUTC) {\n var offset = isUTC ? 0 : date.getTimezoneOffset();\n return (offset > 0 ? '-' : '+') + exports.padLeft(Math.floor(Math.abs(offset) / 60) * 100 + Math.abs(offset) % 60, 4, '0');\n }\n};\nfunction _createMask(mask) {\n if (_maskStore[mask] instanceof Array) {\n return _maskStore[mask];\n }\n var formatMap = [];\n var regex = /(.)\\1+|(.)/;\n var maskStr = mask;\n var match;\n var value;\n // tslint:disable-next-line:no-conditional-assignment\n while (match = maskStr.match(regex)) {\n value = match[0];\n formatMap.push(_flags[value] || value);\n maskStr = maskStr.substring(value.length);\n }\n _maskStore[mask] = formatMap;\n return formatMap;\n}\n/**\n * Converts a date to a formatted string\n * @param {Date | string | number} date\n * @param {string} mask\n * @returns {string}\n */\nexports.formatDate = function (date, mask) {\n if (!(date instanceof Date)) {\n date = new Date(date);\n }\n mask = String(mask || DateTimeFormat.DEFAULT);\n var isUTC = (mask.slice(0, 4) === 'UTC:');\n if (isUTC) {\n mask = mask.slice(4);\n }\n return _createMask(mask).map(function (value) {\n return value instanceof Function ? value(date, isUTC) : value;\n }).join('');\n};\n","Object.defineProperty(exports, \"__esModule\", { value: true });\nvar log_level_1 = require(\"../const/log.level\");\nvar utility_1 = require(\"../util/utility\");\nvar date_formatter_1 = require(\"./date.formatter\");\n/**\n * @function\n * @memberOf formatter\n *\n * @param {string} layout\n * @param {ILogEvent} logEvent\n *\n * @return {string}\n */\nfunction format(layout, logEvent) {\n return _formatLogEvent(_getCompiledLayout(layout), logEvent);\n}\nexports.format = format;\n/** @type {Map} */\nvar _compiledLayouts = new Map();\nvar _formatters = {\n 'c|logger': _formatLogger,\n 'd|date': _formatDate,\n 'ex|exception|throwable': _formatException,\n 'F|file': _formatFile,\n 'K|map|MAP': _formatMapMessage,\n 'L|line': _formatLineNumber,\n 'column': _formatColumn,\n 'm|msg|message': _formatLogMessage,\n 'M|method': _formatMethodName,\n 'marker': _formatMarker,\n 'markerSimpleName': _formatMarkerSimple,\n 'n': _formatLineSeparator,\n 'p|level': _formatLevel,\n 'r|relative': _formatRelative,\n 'sn|sequenceNumber': _formatSequenceNumber\n};\n/**\n * @function\n * @memberOf formatter\n *\n * @param {ILogEvent} logEvent\n *\n * @return {string}\n */\nfunction _formatLogger(logEvent) {\n return logEvent.logger;\n}\n/**\n * @function\n * @memberOf formatter\n *\n * @param {ILogEvent} logEvent\n * @param {Array.} params\n *\n * @return {string}\n */\nfunction _formatDate(logEvent, params) {\n return date_formatter_1.formatDate(logEvent.date, date_formatter_1.DateTimeFormat[params[0]] || params[0]);\n}\n/**\n * @function\n * @memberOf formatter\n *\n * @param {ILogEvent} logEvent\n *\n * @return {string}\n */\nfunction _formatException(logEvent) {\n var message = '';\n if (logEvent.error != null) {\n if (logEvent.error.stack) {\n var stacks = logEvent.error.stack.split(/\\n/g);\n message += stacks.reduce(function (accumulator, value) { return accumulator + (\"\\t\" + value + \"\\n\"); });\n }\n else if (logEvent.error.message != null && logEvent.error.message !== '') {\n message += \"\\t\" + logEvent.error.name + \": \" + logEvent.error.message + \"\\n\";\n }\n }\n return message;\n}\n/**\n * Formats the file (e.g. test.js) to the file\n *\n * @private\n * @function\n * @memberOf formatter\n *\n * @param {ILogEvent} logEvent\n */\nfunction _formatFile(logEvent) {\n if (!logEvent.file) {\n _getFileDetails(logEvent);\n }\n return logEvent.file;\n}\n/**\n * @function\n * @memberOf formatter\n *\n * @param {ILogEvent} logEvent\n *\n * @return {string}\n */\nfunction _formatLineNumber(logEvent) {\n if (!logEvent.lineNumber) {\n _getFileDetails(logEvent);\n }\n return \"\" + logEvent.lineNumber;\n}\n/**\n * @function\n * @memberOf formatter\n *\n * @param {ILogEvent} logEvent\n *\n * @return {string}\n */\nfunction _formatColumn(logEvent) {\n if (!logEvent.column) {\n _getFileDetails(logEvent);\n }\n return \"\" + logEvent.column;\n}\n/**\n * @function\n * @memberOf formatter\n *\n * @param {ILogEvent} logEvent\n * @param {Array.} params\n *\n * @return {string}\n */\nfunction _formatMapMessage(logEvent, params) {\n var message = null;\n if (logEvent.properties) {\n message = [];\n for (var key in logEvent.properties) {\n if (params[0]) {\n if (params[0] === key) {\n message.push(logEvent.properties[key]);\n }\n }\n else {\n message.push('{' + key + ',' + logEvent.properties[key] + '}');\n }\n }\n return '{' + message.join(',') + '}';\n }\n return message;\n}\n/**\n * @function\n * @memberOf formatter\n *\n * @param {ILogEvent} logEvent\n *\n * @return {string}\n */\nfunction _formatLogMessage(logEvent) {\n return logEvent.message;\n}\nfunction _formatMarkerFromEvent(marker) {\n if (marker.hasParents()) {\n var formatted = marker.getParents().map(function (parent) { return _formatMarkerFromEvent(parent); });\n return marker.name + \"[ \" + formatted + \" ]\";\n }\n else {\n return \"\" + marker.name;\n }\n}\n/**\n *\n * @private\n *\n * @param {ILogEvent} logEvent\n * @return {string}\n */\nfunction _formatMarker(logEvent) {\n return (logEvent.marker) ? _formatMarkerFromEvent(logEvent.marker) : '';\n}\n/**\n * Formats just the marker name (no parents)\n *\n * @private\n *\n * @param {ILogEvent} logEvent\n * @return {string}\n */\nfunction _formatMarkerSimple(logEvent) {\n return (logEvent.marker) ? logEvent.marker.name : '';\n}\n/**\n * @function\n * @memberOf formatter\n *\n * @param {ILogEvent} logEvent\n *\n * @return {string}\n */\nfunction _formatMethodName(logEvent) {\n return utility_1.getFunctionName(logEvent.method);\n}\n/**\n * @private\n * @function\n * @memberOf formatter\n */\nfunction _formatLineSeparator() {\n return '\\n';\n}\n/**\n * @function\n * @memberOf formatter\n *\n * @param {ILogEvent} logEvent\n *\n * @return {string}\n */\nfunction _formatLevel(logEvent) {\n switch (logEvent.level) {\n case log_level_1.LogLevel.FATAL:\n return 'FATAL';\n case log_level_1.LogLevel.ERROR:\n return 'ERROR';\n case log_level_1.LogLevel.WARN:\n return 'WARN';\n case log_level_1.LogLevel.INFO:\n return 'INFO';\n case log_level_1.LogLevel.DEBUG:\n return 'DEBUG';\n case log_level_1.LogLevel.TRACE:\n default:\n return 'TRACE';\n }\n}\n/**\n * @function\n * @memberOf formatter\n *\n * @param {ILogEvent} logEvent\n *\n * @return {string}\n */\nfunction _formatRelative(logEvent) {\n return '' + logEvent.relative;\n}\n/**\n * @function\n * @memberOf formatter\n *\n * @param {ILogEvent} logEvent\n *\n * @return {string}\n */\nfunction _formatSequenceNumber(logEvent) {\n return '' + logEvent.sequence;\n}\n/**\n * Get the compiled layout for the specified layout string. If the compiled layout does not\n * exist, then we want to create it.\n *\n * @function\n * @memberOf formatter\n *\n * @param {string} layout\n *\n * @return {Array.}\n */\nfunction _getCompiledLayout(layout) {\n if (_compiledLayouts.has(layout)) {\n return _compiledLayouts.get(layout);\n }\n return _compileLayout(layout);\n}\n/**\n * Compiles a layout into an array. The array contains functions\n *\n * @function\n * @memberOf formatter\n *\n * @param {string} layout\n *\n * @return {Array.}\n */\nfunction _compileLayout(layout) {\n var formatArray = layout.match(/(%\\w+({[\\w-]+}|)|.)/g)\n .map(function (value) { return _getFormatterObject(value); });\n // set the format array to the specified compiled layout\n _compiledLayouts.set(layout, formatArray);\n return formatArray;\n}\n/**\n * @function\n * @memberOf formatter\n *\n * @param {string} formatString\n *\n * @return {Object|string}\n */\nfunction _getFormatterObject(formatString) {\n var result = /%(\\w+)(?:{([\\w-]+)})*/g.exec(formatString);\n if (result == null) {\n return formatString;\n }\n else if (result.length < 3) {\n return {\n formatter: _getFormatterFunction(result[1]),\n params: []\n };\n }\n else {\n var formatter = _getFormatterFunction(result[1]);\n if (!formatter) {\n return null;\n }\n var params = _getLayoutTagParams(result[2]);\n return {\n formatter: formatter,\n params: params\n };\n }\n}\n/**\n * Determines what formatter function has been configured\n *\n * @function\n * @memberOf formatter\n *\n * @param {string} command\n *\n * @return {?string}\n */\nfunction _getFormatterFunction(command) {\n var regex;\n for (var key in _formatters) {\n if (_formatters.hasOwnProperty(key)) {\n regex = new RegExp('^(' + key + ')$');\n if (regex.exec(command)) {\n return _formatters[key];\n }\n }\n }\n return null;\n}\n/**\n * Gets the layout tag params associated with the layout tag. So, for example, '%d{yyyy-MM-dd}`\n * would output an array of ['yyyy-MM-dd']\n *\n * @private\n * @function\n *\n * @param {string} command\n *\n * @return {Array.}\n */\nfunction _getLayoutTagParams(command) {\n return (command) ? command.split(',') : [];\n}\n/**\n * Handles formatting the log event using the specified formatter array\n *\n * @private\n * @function\n *\n * @param {Array.} formatter\n * @param {ILogEvent} logEvent\n *\n * @return {string}\n */\nfunction _formatLogEvent(formatter, logEvent) {\n var response;\n var message = '';\n var count = formatter.length;\n for (var i = 0; i < count; i++) {\n if (formatter[i] !== null) {\n if (formatter[i] instanceof Object) {\n response = formatter[i].formatter(logEvent, formatter[i].params);\n if (response != null) {\n message += response;\n }\n }\n else {\n message += formatter[i];\n }\n }\n }\n return message.trim();\n}\n/**\n *\n * @private\n * @function\n * @memberOf formatter\n *\n * @param {ILogEvent} logEvent\n */\nfunction _getFileDetails(logEvent) {\n if (logEvent.logErrorStack) {\n var parts = logEvent.logErrorStack.stack.split(/\\n/g);\n var file = parts[3];\n file = file.replace(/at (.*\\(|)(file|http|https|)(:|)(\\/|)*/, '');\n file = file.replace(')', '');\n file = file.replace((typeof location !== 'undefined') ? location.host : '', '').trim();\n var fileParts = file.split(/:/g);\n logEvent.column = fileParts.pop();\n logEvent.lineNumber = fileParts.pop();\n if (typeof define !== 'undefined') {\n var path = require('path');\n var appDir = path.dirname(require.main.filename);\n if (!fileParts[0] || !fileParts[0].startsWith(appDir)) {\n appDir = '';\n }\n logEvent.filename = fileParts.join(':').replace(appDir, '').replace(/^([\\\\\\/])/, '');\n }\n else {\n logEvent.filename = fileParts.join(':');\n }\n }\n else {\n logEvent.column = '?';\n logEvent.filename = 'anonymous';\n logEvent.lineNumber = '?';\n }\n logEvent.file = logEvent.filename;\n}\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar appender_1 = require(\"./appender\");\nvar console_appender_1 = require(\"./appender/console.appender\");\nvar log_level_1 = require(\"./const/log.level\");\nvar logger_1 = require(\"./logger\");\nvar logger_2 = require(\"./logger/logger\");\nvar utility_1 = require(\"./util/utility\");\nvar virtual_console_1 = require(\"./util/virtual.console\");\n/**\n * The default appenders that should be included if no appenders are specified\n * @const\n */\nvar _DEFAULT_APPENDERS = (function () {\n return [console_appender_1.ConsoleAppender];\n})();\nvar _DEFAULT_PATTERN_LAYOUT = '%d [%p] %c - %m';\n/**\n * The default configuration for log4js2. If no configuration is specified, then this\n * configuration will be injected\n * @const\n */\nvar _DEFAULT_CONFIG = (function () { return ({\n appenders: _DEFAULT_APPENDERS,\n loggers: [{\n level: log_level_1.LogLevel.ERROR\n }],\n layout: '%d [%p] %c - %m'\n}); })();\n/** @type {?IConfiguration} */\nvar _configuration = null;\n/**\n * Gets the appenders for the level and layout\n *\n * @private\n * @function\n *\n * @param {ILoggerConfiguration} logConfig\n *\n * @returns {Array}\n */\nvar _getAppendersForLogger = function (logConfig) {\n var appenderList = [];\n appender_1.getLoggerAppenderInstances(logConfig.appenders).forEach(function (appenderWrapper) {\n appenderWrapper.appender.setLogLevel(logConfig.level);\n appenderWrapper.appender.setLayout(logConfig.layout);\n appenderList.push(appenderWrapper);\n });\n return appenderList;\n};\n/**\n * Configures the loggers\n *\n * @private\n * @function\n *\n * @param {IConfiguration} config\n */\nvar _configureLoggers = function (config) {\n var loggers = config.loggers;\n var hasMain = false;\n if (utility_1.isArray(loggers)) {\n loggers.forEach(function (logger) {\n logger.tag = logger.tag || logger_1.MAIN_LOGGER;\n hasMain = hasMain || logger.tag === logger_1.MAIN_LOGGER;\n if (!logger.layout || typeof logger.layout !== 'string') {\n logger.layout = config.layout;\n }\n logger.layout = logger.layout || _DEFAULT_PATTERN_LAYOUT;\n logger.level = logger.level || config.level || log_level_1.LogLevel.ERROR;\n logger_1.addLogger(logger.tag, new logger_2.Logger(logger.tag, _getAppendersForLogger(logger)));\n });\n }\n else {\n loggers = [];\n }\n if (!hasMain) {\n var mainLoggerConfig = {\n tag: logger_1.MAIN_LOGGER,\n level: config.level || log_level_1.LogLevel.ERROR,\n layout: config.layout || _DEFAULT_PATTERN_LAYOUT,\n };\n loggers.push(mainLoggerConfig);\n logger_1.addLogger(logger_1.MAIN_LOGGER, new logger_2.Logger(logger_1.MAIN_LOGGER, _getAppendersForLogger(mainLoggerConfig)));\n }\n return __assign({}, config, { loggers: loggers });\n};\n/**\n * Configures appenders\n *\n * @private\n * @function\n *\n * @param {IConfiguration} config\n */\nvar _configureAppenders = function (config) {\n var appenders = config.appenders;\n if (!utility_1.isArray(appenders)) {\n appenders = _DEFAULT_APPENDERS;\n }\n var result = appenders\n .map(function (value) {\n var appender;\n var appenderConfig;\n if (typeof value === 'string') {\n appender = appender_1.getAppender(value);\n appenderConfig = {\n name: appender_1.getAppenderName(appender),\n appender: appender\n };\n }\n else if (value.appender) {\n if (typeof value.appender === 'string') {\n appender = appender_1.getAppender(value.appender);\n }\n else {\n appender = appender_1.registerAppender(value.appender);\n }\n appenderConfig = __assign({}, value, { name: value.name || appender_1.getAppenderName(appender), appender: appender });\n }\n else if (value.prototype.append) {\n appender = appender_1.registerAppender(value);\n appenderConfig = {\n name: appender_1.getAppenderName(appender),\n appender: appender\n };\n }\n else {\n throw new Error('Invalid appender: \\'' + value + '\\'');\n }\n appender_1.setLoggerAppenderConfig(appenderConfig.name, appenderConfig);\n return appenderConfig;\n });\n return __assign({}, config, { appenders: result });\n};\n/**\n * Configures the logger\n *\n * @function\n * @params {IConfiguration} config\n */\nfunction configure(config) {\n // set the default layout\n if (!config.layout) {\n config.layout = _DEFAULT_PATTERN_LAYOUT;\n }\n // configure the appenders\n config = _configureAppenders(config);\n // configure the loggers\n config = _configureLoggers(config);\n _configuration = config;\n if (config.virtualConsole !== false) {\n virtual_console_1.getVirtualConsole(logger_1.getLogger(logger_1.MAIN_LOGGER, _getLoggerConfiguration(logger_1.MAIN_LOGGER)));\n }\n else {\n virtual_console_1.useVirtualConsole(false);\n }\n}\nexports.configure = configure;\nexports.getLogger = function (context) {\n if (!_configuration) {\n configure(_DEFAULT_CONFIG);\n }\n var logContext = _determineContext(context);\n var loggerConfig = _getLoggerConfiguration(logContext) || _getLoggerConfiguration(logger_1.MAIN_LOGGER);\n return logger_1.getLogger(logContext, loggerConfig);\n};\nfunction _getLoggerConfiguration(context) {\n return _configuration.loggers.filter(function (value) { return value.tag === context; })[0];\n}\nfunction _determineContext(context) {\n // determine the context\n if (typeof context === 'string') {\n return context;\n }\n if (typeof context === 'function') {\n return utility_1.getFunctionName(context);\n }\n else if (typeof context === 'object') {\n context = utility_1.getFunctionName(context.constructor);\n if (context === 'Object') {\n return 'anonymous';\n }\n else {\n return context;\n }\n }\n else {\n return logger_1.MAIN_LOGGER;\n }\n}\n","Object.defineProperty(exports, \"__esModule\", { value: true });\nvar appender_1 = require(\"../appender\");\nvar logger_1 = require(\"./logger\");\n/**\n * The name of the main logger. We use this in case no logger is specified\n * @const\n */\nexports.MAIN_LOGGER = 'main';\n/**\n *\n */\nvar _loggers = new Map();\nexports.addLogger = function (tag, logger) {\n _loggers.set(tag, logger);\n};\n/**\n * Handles creating the logger and returning it\n *\n * @function\n *\n * @param {function|string=} context\n * @param {ILoggerConfiguration} config\n * @return {Logger}\n */\nexports.getLogger = function (context, config) {\n if (_loggers.has(context)) {\n return _loggers.get(context);\n }\n else {\n var appenders = appender_1.getLoggerAppenderInstances(config.appenders)\n .map(function (appenderWrapper) {\n appenderWrapper.appender.setLogLevel(config.level);\n appenderWrapper.appender.setLayout(config.layout);\n return appenderWrapper;\n });\n return new logger_1.Logger(context, appenders);\n }\n};\n","Object.defineProperty(exports, \"__esModule\", { value: true });\nvar __1 = require(\"..\");\nvar marker_1 = require(\"../marker\");\nvar Logger = /** @class */ (function () {\n function Logger(context, _appenders) {\n this._appenders = _appenders;\n this._logContext = context;\n this._logSequence = 0;\n this._relative = (new Date()).getTime();\n }\n Logger.prototype.log = function (level, marker) {\n var _this = this;\n var args = [];\n for (var _i = 2; _i < arguments.length; _i++) {\n args[_i - 2] = arguments[_i];\n }\n var passed = arguments;\n this._appenders.forEach(function (appender) {\n return appender.append(_this._constructLogEvent(level, passed, 1));\n });\n };\n Logger.prototype.fatal = function (marker) {\n var _this = this;\n var args = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n var passed = arguments;\n this._appenders.forEach(function (appender) {\n return appender.append(_this._constructLogEvent(__1.LogLevel.FATAL, passed));\n });\n };\n Logger.prototype.error = function (marker) {\n var _this = this;\n var args = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n var passed = arguments;\n this._appenders.forEach(function (appender) {\n return appender.append(_this._constructLogEvent(__1.LogLevel.ERROR, passed));\n });\n };\n Logger.prototype.warn = function (marker) {\n var _this = this;\n var args = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n var passed = arguments;\n this._appenders.forEach(function (appender) {\n return appender.append(_this._constructLogEvent(__1.LogLevel.WARN, passed));\n });\n };\n Logger.prototype.info = function (marker) {\n var _this = this;\n var args = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n var passed = arguments;\n this._appenders.forEach(function (appender) {\n return appender.append(_this._constructLogEvent(__1.LogLevel.INFO, passed));\n });\n };\n Logger.prototype.debug = function (marker) {\n var _this = this;\n var args = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n var passed = arguments;\n this._appenders.forEach(function (appender) {\n return appender.append(_this._constructLogEvent(__1.LogLevel.DEBUG, passed));\n });\n };\n Logger.prototype.trace = function (marker) {\n var _this = this;\n var args = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n var passed = arguments;\n this._appenders.forEach(function (appender) {\n return appender.append(_this._constructLogEvent(__1.LogLevel.TRACE, passed));\n });\n };\n /**\n * @function\n *\n * @param {number} level\n * @param {Array.} args\n * @param {number} offset\n *\n * @return {ILogEvent}\n */\n Logger.prototype._constructLogEvent = function (level, args, offset) {\n if (offset === void 0) { offset = 0; }\n var logTime = new Date();\n var error = null;\n // this looks horrible, but this is the only way to catch the stack for IE to later parse the stack\n try {\n throw new Error();\n }\n catch (e) {\n error = e;\n }\n var logEvent = {\n date: logTime,\n error: null,\n logErrorStack: error,\n file: null,\n level: level,\n lineNumber: null,\n logger: this._logContext,\n message: '',\n method: this._isNotStrict() ? args.callee.caller : 0,\n properties: undefined,\n relative: logTime.getTime() - this._relative,\n sequence: this._logSequence++,\n };\n var regex = /\\{\\}/g;\n for (var i = offset; i < args.length; i++) {\n if (i === offset || (i === offset + 1 && logEvent.marker)) {\n if (args[i] instanceof marker_1.Marker) {\n logEvent.marker = args[i];\n }\n else {\n logEvent.message = args[i];\n }\n }\n else if (regex.exec(logEvent.message)) {\n logEvent.message = logEvent.message.replace(/\\{\\}/, args[i]);\n }\n else if (args[i] instanceof Error) {\n logEvent.error = args[i];\n }\n else {\n logEvent.properties = args[i];\n }\n }\n return logEvent;\n };\n /**\n * Returns whether or not the script is in strict mode\n *\n * @private\n * @function\n *\n * @returns {boolean}\n */\n Logger.prototype._isNotStrict = function () {\n var _this = this;\n return (function () { return !_this; })();\n };\n return Logger;\n}());\nexports.Logger = Logger;\n","Object.defineProperty(exports, \"__esModule\", { value: true });\nvar Marker = /** @class */ (function () {\n /**\n * Hide the constructor. We don't want people to arbitrarily make these without access to Marker#getMarker\n * @param {string} name\n */\n function Marker(name) {\n this._parents = new Set();\n this._name = name;\n }\n /**\n * Gets the marker for the specified name\n * @param {string} name\n * @returns {Marker}\n */\n Marker.getMarker = function (name) {\n if (!Marker._markers.hasOwnProperty(name)) {\n Marker._markers[name] = new Marker(name);\n }\n return Marker._markers[name];\n };\n Object.defineProperty(Marker.prototype, \"name\", {\n /**\n * The name of the marker\n * @returns {string}\n */\n get: function () {\n return this._name;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Gets the parents of the marker. This converts the WeakSet into an array\n * @returns {Marker[]}\n */\n Marker.prototype.getParents = function () {\n var result = [];\n this._parents.forEach(function (marker) { return result.push(marker); });\n return result;\n };\n /**\n * Returns whether or not the marker has parents\n * @returns {boolean}\n */\n Marker.prototype.hasParents = function () {\n return this._parents.size > 0;\n };\n /**\n * Removes the specified marker as a parent\n * @param {Marker} marker\n */\n Marker.prototype.remove = function (marker) {\n this._parents.delete(marker);\n return this;\n };\n /**\n * Sets the parent markers by replacing the current set\n * @param {Marker} markers\n */\n Marker.prototype.setParents = function () {\n var markers = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n markers[_i] = arguments[_i];\n }\n var index = markers.length;\n while (index--) {\n this._parents.add(markers[index]);\n }\n return this;\n };\n Marker._markers = {};\n return Marker;\n}());\nexports.Marker = Marker;\n","Object.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Gets the function name of the specified function\n *\n * @function\n * @param {Function} func\n *\n * @returns {string}\n */\nexports.getFunctionName = function (func) {\n if (func.name !== '') {\n return func.name;\n }\n else {\n // get the name of the function\n var name_1 = func.toString().substring('function '.length);\n name_1 = name_1.substring(0, name_1.indexOf('('));\n // if the string is not empty\n return (name_1 && name_1.trim()) ? name_1 : 'anonymous';\n }\n};\n/**\n * Determines whether or not the value is an array. Return false is null\n *\n * @param {any} value\n * @returns {boolean} true if non-null array, else false\n */\nexports.isArray = function (value) {\n return (typeof value === 'object' && value instanceof Array);\n};\n","Object.defineProperty(exports, \"__esModule\", { value: true });\n// tslint:disable:bool-param-default\nvar _virtualConsole;\nvar _isUseVirtualConsole = true;\nexports.useVirtualConsole = function (state) {\n _isUseVirtualConsole = state;\n};\nexports.getVirtualConsole = function (logger) {\n if (!_isUseVirtualConsole) {\n return console;\n }\n var Log4JConsole = /** @class */ (function () {\n function Log4JConsole() {\n this.isVirtual = true;\n this.memory = {};\n }\n Log4JConsole.prototype.assert = function (condition, message) {\n var data = [];\n for (var _i = 2; _i < arguments.length; _i++) {\n data[_i - 2] = arguments[_i];\n }\n _virtualConsole.assert.call(arguments);\n };\n Log4JConsole.prototype.clear = function () {\n _virtualConsole.clear();\n };\n Log4JConsole.prototype.count = function (label) {\n _virtualConsole.count(label);\n };\n Log4JConsole.prototype.dir = function (value) {\n var optionalParams = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n optionalParams[_i - 1] = arguments[_i];\n }\n _virtualConsole.dir.apply(_virtualConsole, [value].concat(optionalParams));\n };\n Log4JConsole.prototype.dirxml = function (value) {\n _virtualConsole.dirxml(value);\n };\n Log4JConsole.prototype.group = function (groupTitle) {\n var optionalParams = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n optionalParams[_i - 1] = arguments[_i];\n }\n _virtualConsole.group.apply(_virtualConsole, [groupTitle].concat(optionalParams));\n };\n Log4JConsole.prototype.groupCollapsed = function (groupTitle) {\n var optionalParams = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n optionalParams[_i - 1] = arguments[_i];\n }\n _virtualConsole.groupCollapsed.apply(_virtualConsole, [groupTitle].concat(optionalParams));\n };\n Log4JConsole.prototype.groupEnd = function () {\n _virtualConsole.groupEnd();\n };\n Log4JConsole.prototype.markTimeline = function (label) {\n if (typeof _virtualConsole.markTimeline === 'function') {\n _virtualConsole.markTimeline(label);\n }\n };\n Log4JConsole.prototype.msIsIndependentlyComposed = function (element) {\n if (typeof _virtualConsole.msIsIndependentlyComposed === 'function') {\n return _virtualConsole.msIsIndependentlyComposed(element);\n }\n };\n Log4JConsole.prototype.profile = function (reportName) {\n if (typeof _virtualConsole.profile === 'function') {\n _virtualConsole.profile(reportName);\n }\n };\n Log4JConsole.prototype.profileEnd = function () {\n if (typeof _virtualConsole.profileEnd === 'function') {\n _virtualConsole.profileEnd();\n }\n };\n Log4JConsole.prototype.table = function () {\n var tabularData = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n tabularData[_i] = arguments[_i];\n }\n _virtualConsole.table.apply(_virtualConsole, tabularData);\n };\n Log4JConsole.prototype.time = function (label) {\n _virtualConsole.time(label);\n };\n Log4JConsole.prototype.timeEnd = function (label) {\n if (typeof _virtualConsole.timeEnd === 'function') {\n _virtualConsole.timeEnd(label);\n }\n };\n Log4JConsole.prototype.timeStamp = function (label) {\n if (typeof _virtualConsole.timeStamp === 'function') {\n _virtualConsole.timeStamp(label);\n }\n };\n Log4JConsole.prototype.timeline = function (label) {\n if (typeof _virtualConsole.timeline === 'function') {\n _virtualConsole.timeline(label);\n }\n };\n Log4JConsole.prototype.timelineEnd = function (label) {\n if (typeof _virtualConsole.timelineEnd === 'function') {\n _virtualConsole.timelineEnd(label);\n }\n };\n Log4JConsole.prototype.debug = function (message) {\n var optionalParams = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n optionalParams[_i - 1] = arguments[_i];\n }\n logger.debug.apply(logger, [message].concat(optionalParams));\n };\n Log4JConsole.prototype.error = function (message) {\n var optionalParams = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n optionalParams[_i - 1] = arguments[_i];\n }\n logger.error.apply(logger, [message].concat(optionalParams));\n };\n Log4JConsole.prototype.exception = function (message) {\n var optionalParams = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n optionalParams[_i - 1] = arguments[_i];\n }\n logger.error.apply(logger, [message].concat(optionalParams));\n };\n Log4JConsole.prototype.info = function (message) {\n var optionalParams = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n optionalParams[_i - 1] = arguments[_i];\n }\n logger.info.apply(logger, [message].concat(optionalParams));\n };\n Log4JConsole.prototype.log = function (message) {\n var optionalParams = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n optionalParams[_i - 1] = arguments[_i];\n }\n logger.debug.apply(logger, [message].concat(optionalParams));\n };\n Log4JConsole.prototype.trace = function (message) {\n var optionalParams = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n optionalParams[_i - 1] = arguments[_i];\n }\n logger.trace.apply(logger, [message].concat(optionalParams));\n };\n Log4JConsole.prototype.warn = function (message) {\n var optionalParams = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n optionalParams[_i - 1] = arguments[_i];\n }\n logger.warn.apply(logger, [message].concat(optionalParams));\n };\n Log4JConsole.prototype.countReset = function (label) {\n _virtualConsole.countReset(label);\n };\n Log4JConsole.prototype.timeLog = function (label) {\n var data = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n data[_i - 1] = arguments[_i];\n }\n _virtualConsole.timeLog.apply(_virtualConsole, [label].concat(data));\n };\n return Log4JConsole;\n }());\n if (!_virtualConsole) {\n _virtualConsole = console;\n console = new Log4JConsole();\n }\n return _virtualConsole;\n};\n","import { UAParser } from \"ua-parser-js\";\n\nclass UserAgentParser {\n\n public static getInstance() {\n if (!UserAgentParser.instance) {\n UserAgentParser.instance = new UserAgentParser();\n }\n return UserAgentParser.instance;\n }\n\n private static instance: UserAgentParser;\n private userAgentData: IUAParser.IResult;\n\n private constructor() {\n this.userAgentData = new UAParser().getResult();\n }\n\n public getUserAgentData(): IUAParser.IResult {\n return this.userAgentData;\n }\n\n}\n\nexport { UserAgentParser };\n","\nclass WasmDetection {\n\n public static getInstance() {\n if (!WasmDetection.instance) {\n WasmDetection.instance = new WasmDetection();\n }\n return WasmDetection.instance;\n }\n\n private static instance: WasmDetection;\n\n private simplewasm = Uint8Array.of(0x0, 0x61, 0x73, 0x6d, 0x01, 0x00, 0x00, 0x00);\n\n public isWebAssemblySupported(): boolean {\n let supported = false;\n try {\n if (typeof WebAssembly === \"object\" && typeof WebAssembly.instantiate === \"function\") {\n const module = new WebAssembly.Module(this.simplewasm);\n supported = module instanceof WebAssembly.Module\n && new WebAssembly.Instance(module) instanceof WebAssembly.Instance;\n }\n } catch (e) {\n supported = false;\n }\n return supported;\n }\n\n}\n\nexport { WasmDetection };\n","\nclass WebGlDetection {\n\n public static getInstance() {\n if (!WebGlDetection.instance) {\n WebGlDetection.instance = new WebGlDetection();\n }\n return WebGlDetection.instance;\n }\n\n private static instance: WebGlDetection;\n\n private static tmpCanvasElementId = \"canvas-for-webgl-check\";\n private static webglCtxAttributes: WebGLContextAttributes = { depth: true, premultipliedAlpha: false };\n\n public isWebGlSupported(): boolean {\n let supported = false;\n try {\n const canvas = document.createElement(\"canvas\");\n canvas.setAttribute(\"id\", WebGlDetection.tmpCanvasElementId);\n if (canvas) {\n const webglContext = this.getWebglContext(canvas, [\"webgl2\", \"webgl\", \"experimental-webgl\"]);\n if (webglContext) {\n supported = true;\n }\n }\n } catch (e) {\n supported = false;\n } finally {\n if (document) {\n const elementToRemove = document.getElementById(WebGlDetection.tmpCanvasElementId);\n if (elementToRemove) {\n elementToRemove.outerHTML = \"\";\n }\n }\n }\n return supported;\n }\n\n private getWebglContext(canvas: HTMLCanvasElement, webglContext: string[]): WebGLRenderingContext {\n let webglRenderingContext: any;\n for (const contextName of webglContext) {\n webglRenderingContext = canvas.getContext(contextName, WebGlDetection.webglCtxAttributes);\n if (webglRenderingContext) {\n break;\n }\n }\n return webglRenderingContext;\n }\n\n}\n\nexport { WebGlDetection };\n","declare global {\n // tslint:disable-next-line:interface-name\n interface Window { webkit: any; }\n}\n\nclass WebRtcDetection {\n\n public static getInstance() {\n if (!WebRtcDetection.instance) {\n WebRtcDetection.instance = new WebRtcDetection();\n }\n return WebRtcDetection.instance;\n }\n\n private static instance: WebRtcDetection;\n\n public isUserMediaSupported(): boolean {\n return this.isMediaDeviceAvailable() || this.isNativeBridgePresent();\n }\n\n public isVideoInputDeviceAvailable() {\n let videoInputDeviceAvailability: Promise;\n try {\n if (this.isMediaDeviceAvailable()) {\n videoInputDeviceAvailability = navigator.mediaDevices.enumerateDevices()\n .then((devices) => devices.some((device) => device.kind === \"videoinput\"));\n } else if (this.isNativeBridgePresent()) {\n videoInputDeviceAvailability = Promise.resolve(true);\n } else {\n videoInputDeviceAvailability = Promise.resolve(false);\n }\n } catch (e) {\n videoInputDeviceAvailability = Promise.resolve(false);\n }\n return videoInputDeviceAvailability;\n }\n\n private isMediaDeviceAvailable(): boolean {\n return (typeof navigator.mediaDevices === \"object\") && (typeof navigator.mediaDevices.getUserMedia === \"function\");\n }\n\n private isNativeBridgePresent(): boolean {\n return (\n // TODO do we need to create a vm-nativebridge module in order to centralise this check?\n typeof window.webkit === \"object\" &&\n typeof(window.webkit.messageHandlers) === \"object\" &&\n typeof(window.webkit.messageHandlers.startNativeCam) === \"object\"\n );\n }\n}\n\nexport { WebRtcDetection };\n","import { UserAgentParser } from \"./parser/UserAgentParser\";\nimport { WasmDetection } from \"./wasm/WasmDetection\";\nimport { WebGlDetection } from \"./webgl/WebGlDetection\";\nimport { WebRtcDetection } from \"./webrtc/WebRtcDetection\";\n\nclass DeviceDetection {\n\n private uaData: IUAParser.IResult;\n\n constructor() {\n this.uaData = UserAgentParser.getInstance().getUserAgentData();\n }\n\n public isAppleiOS13() {\n let isIOS13 = false;\n if (this.uaData.os && this.uaData.os.name && this.uaData.os.name === \"iOS\") {\n if (this.uaData.os.version && this.uaData.os.version.startsWith(\"13\")) {\n isIOS13 = true;\n // tslint:disable-next-line: no-console\n console.info(\"--- detected iOS 13 ---\");\n }\n } else if (this.isiPadOS()) {\n isIOS13 = true;\n // tslint:disable-next-line: no-console\n console.info(\"--- detected iPad 13 ---\");\n // tslint:disable-next-line: no-console\n console.warn(\"iPad OS detection is still a workaround, Apple does not use a specific UA for iPad\");\n }\n return isIOS13;\n }\n\n public isiOS(): boolean {\n return ((this.uaData.os && this.uaData.os.name && this.uaData.os.name === \"iOS\") || this.isiPadOS());\n }\n\n // Workaround for iPadOS which is currently not detectable via UA\n // https://github.com/faisalman/ua-parser-js/issues/387#issuecomment-579147248\n public isiPadOS() {\n const osName = (this.uaData.os && this.uaData.os.name && this.uaData.os.name) || undefined;\n const iPadOS = window.orientation !== undefined && osName === \"Mac OS\";\n return osName === \"iOS\" || iPadOS;\n }\n\n public getUserAgentData(): IUAParser.IResult {\n return this.uaData;\n }\n\n public isWebView(): boolean {\n let isWebView = false;\n if (this.uaData.os && this.uaData.os.name && this.uaData.os.name === \"iOS\") {\n if (this.uaData.engine && this.uaData.engine.name && this.uaData.engine.name === \"WebKit\") {\n if (this.uaData.browser && this.uaData.browser.name && this.uaData.browser.name === \"WebKit\") {\n isWebView = true;\n }\n }\n }\n return isWebView;\n }\n\n public isWebViewBrowser(): boolean {\n let isWebViewBrowser = false;\n if (this.uaData.os && this.uaData.os.name && this.uaData.os.name === \"iOS\") {\n if (this.uaData.engine && this.uaData.engine.name && this.uaData.engine.name === \"WebKit\") {\n if (this.uaData.browser && this.uaData.browser.name && this.uaData.browser.name !== \"Mobile Safari\") {\n isWebViewBrowser = true;\n }\n }\n }\n return isWebViewBrowser;\n }\n\n public isWebAssemblySupported(): boolean {\n return WasmDetection.getInstance().isWebAssemblySupported();\n }\n\n public isUserMediaSupported(): boolean {\n return WebRtcDetection.getInstance().isUserMediaSupported();\n }\n\n public isVideoInputDeviceAvailable() {\n return WebRtcDetection.getInstance().isVideoInputDeviceAvailable();\n }\n\n public isWebGlSupported() {\n return WebGlDetection.getInstance().isWebGlSupported();\n }\n\n}\n\nexport { DeviceDetection };\n","// Unique ID creation requires a high quality random # generator. In the browser we therefore\n// require the crypto API and do not support built-in fallback to lower quality random number\n// generators (like Math.random()).\nvar getRandomValues;\nvar rnds8 = new Uint8Array(16);\nexport default function rng() {\n // lazy load so that environments that need to polyfill have a chance to do so\n if (!getRandomValues) {\n // getRandomValues needs to be invoked in a context where \"this\" is a Crypto implementation. Also,\n // find the complete implementation of crypto (msCrypto) on IE11.\n getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto) || typeof msCrypto !== 'undefined' && typeof msCrypto.getRandomValues === 'function' && msCrypto.getRandomValues.bind(msCrypto);\n\n if (!getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n }\n\n return getRandomValues(rnds8);\n}","export default /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;","import validate from './validate.js';\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\n\nvar byteToHex = [];\n\nfor (var i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).substr(1));\n}\n\nfunction stringify(arr) {\n var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n // Note: Be careful editing this code! It's been tuned for performance\n // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n var uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one\n // of the following:\n // - One or more input array values don't map to a hex octet (leading to\n // \"undefined\" in the uuid)\n // - Invalid input values for the RFC `version` or `variant` fields\n\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n\n return uuid;\n}\n\nexport default stringify;","import REGEX from './regex.js';\n\nfunction validate(uuid) {\n return typeof uuid === 'string' && REGEX.test(uuid);\n}\n\nexport default validate;","import rng from './rng.js';\nimport stringify from './stringify.js';\n\nfunction v4(options, buf, offset) {\n options = options || {};\n var rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n\n rnds[6] = rnds[6] & 0x0f | 0x40;\n rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided\n\n if (buf) {\n offset = offset || 0;\n\n for (var i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n\n return buf;\n }\n\n return stringify(rnds);\n}\n\nexport default v4;","export class LogMessage {\n\n public level: string;\n public logName: string;\n public message: string;\n public date: string = new Date().toISOString();\n\n constructor(level: string, logName: string, message: string) {\n this.level = level;\n this.message = message;\n this.logName = logName;\n }\n\n public getLevel() {\n return this.level;\n }\n\n public getLogName() {\n return this.logName;\n }\n\n public getMessage() {\n return this.message;\n }\n\n public getDate() {\n return this.date;\n }\n\n}\n","import localforage from \"localforage\";\n\nconst dbName = \"db_remotelog\";\n\nclass DBRemoteLogFactory {\n\n public static getInstance() {\n if (!DBRemoteLogFactory.instance) {\n DBRemoteLogFactory.instance = new DBRemoteLogFactory();\n }\n return DBRemoteLogFactory.instance;\n }\n\n private static instance: DBRemoteLogFactory;\n private db: LocalForage;\n\n private constructor() {\n this.db = localforage.createInstance({ name: dbName });\n }\n\n public getDB(): LocalForage {\n return this.db;\n }\n\n public getLogsTableName() {\n return \"logs\";\n }\n\n}\n\nexport { DBRemoteLogFactory };\n","import { ILogsConfiguration } from \"./LogsConfiguration.js\";\n\nclass LogsConfigurationRetriever {\n\n private configurationUrl = \"https://vmcore.luxottica.com/static/config/remotelog/configuration.json\";\n private currentHostname = window.location.hostname;\n\n public getConfiguration(): Promise {\n return new Promise(\n (resolve) => {\n fetch(this.configurationUrl,\n {\n headers: { \"Accept\": \"application/json\", \"Accept-Encoding\": \"gzip\" },\n method: \"GET\",\n },\n ).then((res) => {\n if (res.ok) {\n return res.json();\n } else {\n resolve(this.defaultConfiguration());\n }\n },\n ).then((json) => {\n if (json[this.currentHostname]) {\n const config: ILogsConfiguration = {\n appviewSessionIsActive: json[this.currentHostname].appviewSessionIsActive,\n browserSessionIsActive: json[this.currentHostname].browserSessionIsActive,\n clientLogIsActive: json[this.currentHostname].clientLogIsActive,\n serverLogIsActive: json[this.currentHostname].serverLogIsActive,\n trackingStatusIsActive: json[this.currentHostname].trackingStatusIsActive,\n };\n resolve(config);\n } else {\n resolve(this.defaultConfiguration());\n }\n },\n ).catch((e) => {\n resolve(this.defaultConfiguration());\n });\n },\n );\n }\n\n private defaultConfiguration(): ILogsConfiguration {\n return {\n appviewSessionIsActive: false,\n browserSessionIsActive: false,\n clientLogIsActive: false,\n serverLogIsActive: false,\n trackingStatusIsActive: false,\n };\n }\n\n}\n\nexport { LogsConfigurationRetriever };\n","import { LogsConfigurationRetriever } from \"./LogsConfigurationRetriever\";\n\nclass LogsConfig {\n\n public static getInstance() {\n if (!LogsConfig.instance) {\n LogsConfig.instance = new LogsConfig();\n }\n return LogsConfig.instance;\n }\n\n private static instance: LogsConfig;\n\n private appViewSessionActive: Promise;\n private browserSessionActive: Promise;\n private trackingStatusActive: Promise;\n private clientLogActive: Promise;\n private serverLogActive: Promise;\n\n private configuration = new LogsConfigurationRetriever().getConfiguration();\n\n public constructor() {\n this.appViewSessionActive = new Promise((resolve) => {\n this.configuration\n .then((cfg) => {\n resolve(cfg.appviewSessionIsActive);\n })\n .catch((reason) => {\n resolve(true);\n });\n });\n this.browserSessionActive = new Promise((resolve) => {\n this.configuration\n .then((cfg) => {\n resolve(cfg.browserSessionIsActive);\n })\n .catch((reason) => {\n resolve(true);\n });\n });\n this.trackingStatusActive = new Promise((resolve) => {\n this.configuration\n .then((cfg) => {\n resolve(cfg.trackingStatusIsActive);\n })\n .catch((reason) => {\n resolve(true);\n });\n });\n this.clientLogActive = new Promise((resolve) => {\n this.configuration\n .then((cfg) => {\n resolve(cfg.clientLogIsActive);\n })\n .catch((reason) => {\n resolve(true);\n });\n });\n this.serverLogActive = new Promise((resolve) => {\n this.configuration\n .then((cfg) => {\n resolve(cfg.serverLogIsActive);\n })\n .catch((reason) => {\n resolve(true);\n });\n });\n }\n\n public async isAppViewSessionActive() {\n return this.appViewSessionActive;\n }\n\n public async isBrowserSessionActive() {\n return this.browserSessionActive;\n }\n\n public async isTrackingStatusActive() {\n return this.trackingStatusActive;\n }\n\n public async isServerLogActive() {\n return this.serverLogActive;\n }\n\n public async isClientLogActive() {\n return this.clientLogActive;\n }\n\n}\n\nexport { LogsConfig };\n","import { v4 as uuid } from \"uuid\";\nimport { DBRemoteLogFactory } from \"../../../../adapter/db/factory/DBRemoteLogFactory\";\nimport { LogsConfig } from \"../../../../config/LogsConfig\";\nimport { LogMessage } from \"../../../model/LogMessage\";\n\nclass RemoteLogService {\n\n public log(message: LogMessage): void {\n LogsConfig.getInstance().isServerLogActive().then((isActive) => {\n if (isActive) {\n this.queueMessage(message);\n }\n });\n }\n\n private queueMessage(logMessage: LogMessage) {\n this.dbInstance().getDB().setItem(uuid(), {\n date: logMessage.getDate(),\n level: logMessage.getLevel(),\n logName: logMessage.getLogName(),\n message: logMessage.getMessage(),\n });\n }\n\n private dbInstance() {\n return DBRemoteLogFactory.getInstance();\n }\n\n}\n\nexport { RemoteLogService };\n","import { Appender, ILogEvent, LogAppender, LogLevel } from \"@log4js2/core\";\nimport { LogMessage } from \"../model/LogMessage\";\nimport { RemoteLogService } from \"../service/log/producer/RemoteLogService\";\n\n@Appender(\"RemoteLogAppender\")\nclass RemoteLogAppender extends LogAppender<{}> {\n\n private logService = new RemoteLogService();\n\n public static get appenderName(): string {\n return \"RemoteLogAppender\";\n }\n\n public append(logEvent: ILogEvent) {\n if (logEvent && logEvent.level && logEvent.level <= this.getLogLevel()) {\n this.log(logEvent);\n }\n }\n\n private log(logEvent: ILogEvent) {\n switch (logEvent.level) {\n case LogLevel.FATAL:\n case LogLevel.ERROR: {\n if (logEvent.error) {\n this.logService.log(this.newLogMessage(\"E\", logEvent));\n } else {\n this.logService.log(this.newLogMessage(\"E\", logEvent));\n }\n break;\n }\n case LogLevel.WARN: {\n this.logService.log(this.newLogMessage(\"W\", logEvent));\n break;\n }\n case LogLevel.INFO: {\n this.logService.log(this.newLogMessage(\"I\", logEvent));\n break;\n }\n case LogLevel.DEBUG:\n case LogLevel.TRACE: {\n break;\n }\n default:\n break;\n }\n }\n\n private newLogMessage(logLevel: string, logEvent: ILogEvent) {\n return new LogMessage(logLevel, logEvent.logger || \"\", logEvent.message || \"\");\n }\n}\n\nexport { RemoteLogAppender };\n","import { configure, getLogger, LogAppender, LogLevel } from \"@log4js2/core\";\nimport { v4 as uuid } from \"uuid\";\nimport { LogsConfig } from \"../config/LogsConfig\";\nimport { RemoteLogAppender } from \"./appender/RemoteLogAppender\";\n\nconst VM_BROWSERSESSION_UUID = \"vm.browsersessionuuid.20200120\";\nconst VM_LOGLEVEL_OVERRIDE = \"vm.loglevel.override\";\n\nconst defaultLevel = LogLevel.DEBUG;\nconst defaultVirtualConsole = false;\nconst defaultLayout = \"%d [%p] %c - %m\";\n\nclass RemoteLogConfig {\n\n public static getInstance() {\n if (!RemoteLogConfig.instance) {\n RemoteLogConfig.instance = new RemoteLogConfig();\n }\n return RemoteLogConfig.instance;\n }\n\n private static instance: RemoteLogConfig;\n\n private storage = window.localStorage;\n private configured = false;\n\n private browserUUID: string = \"\";\n\n public static get storageIdentifier() {\n return VM_BROWSERSESSION_UUID;\n }\n\n private constructor() {\n this.createSessionId();\n this.configureLevel(defaultLevel);\n (window as any).VMAvailableLogLevels = LogLevel;\n (window as any).VMLogLevelsOverrideKey = VM_LOGLEVEL_OVERRIDE;\n }\n\n public getLogger(moduleName: string, moduleVersion: string, loggerName: string) {\n return getLogger([moduleName, moduleVersion, loggerName].join(\".\"));\n }\n\n public getLoggerInfo(moduleName: string, moduleVersion: string, loggerName: string) {\n return getLogger([moduleName, moduleVersion, loggerName].join(\".\"));\n }\n\n public get currentUuid() {\n return this.browserUUID;\n }\n\n private configureLevel(logLevel: LogLevel) {\n const logOverride = this.storage.getItem(VM_LOGLEVEL_OVERRIDE);\n if (logOverride !== null) {\n const logLevelOverride = logOverride as unknown as LogLevel;\n // tslint:disable-next-line: no-console\n console.warn(\"overriding loglevel with localstorage one ->\", logLevelOverride);\n this.configureLog4js2([\"Console\", RemoteLogAppender], logLevelOverride);\n } else {\n try {\n const isActive = LogsConfig.getInstance().isClientLogActive();\n this.configureLog4js2([\"Console\", RemoteLogAppender], LogLevel.INFO);\n isActive.then((value) => {\n this.configureLog4js2([\"Console\", RemoteLogAppender], value ? LogLevel.INFO : LogLevel.ERROR);\n this.configured = true;\n }).catch((e) => {\n // tslint:disable-next-line: no-console\n console.error(e);\n });\n } catch (e) {\n // tslint:disable-next-line: no-console\n console.error(e);\n this.configureLog4js2([\"Console\", RemoteLogAppender], defaultLevel);\n }\n }\n }\n\n private configureLog4js2(logAppenders: Array, logLevel: LogLevel) {\n if (!this.configured) {\n configure({\n appenders: logAppenders,\n layout: defaultLayout,\n level: logLevel,\n virtualConsole: defaultVirtualConsole,\n });\n const appenders = logAppenders.map((appender) => this.logAppenderName(appender));\n // tslint:disable-next-line: no-console\n console.debug(`appenders : ${appenders}\nlayout : ${defaultLayout}\nlevel : ${logLevel}\nvirtual console : ${defaultVirtualConsole}`);\n }\n }\n\n private logAppenderName(appender: string | typeof LogAppender): string {\n let name = \"n.a\";\n switch (typeof appender) {\n case \"string\":\n name = \"Console\";\n break;\n case \"function\":\n name = \"RemoteLogAppender\";\n break;\n default:\n name = \"n.a.[\" + typeof appender + \"]\";\n break;\n }\n return name;\n }\n\n private createSessionId() {\n let currentUuid = this.storage.getItem(VM_BROWSERSESSION_UUID);\n if (!currentUuid) {\n const newUuid = uuid();\n if (newUuid) {\n this.storage.setItem(VM_BROWSERSESSION_UUID, newUuid);\n currentUuid = newUuid;\n }\n }\n this.browserUUID = currentUuid || \"cantcreateuuid\";\n }\n\n}\n\nexport { RemoteLogConfig };\n","import localforage from \"localforage\";\n\nconst dbName = \"db_appviewsession\";\n\nclass DBAppViewSessionFactory {\n\n public static getInstance() {\n if (!DBAppViewSessionFactory.instance) {\n DBAppViewSessionFactory.instance = new DBAppViewSessionFactory();\n }\n return DBAppViewSessionFactory.instance;\n }\n\n private static instance: DBAppViewSessionFactory;\n private db: LocalForage;\n\n private constructor() {\n this.db = localforage.createInstance({ name: dbName });\n }\n\n public getDB(): LocalForage {\n return this.db;\n }\n\n public getLogsTableName() {\n return \"logs\";\n }\n\n}\n\nexport { DBAppViewSessionFactory };\n","import { name, version } from \"../../../../package.json\";\nimport { RemoteLogConfig } from \"../../RemoteLogConfig\";\n\nconst logger = RemoteLogConfig.getInstance().getLoggerInfo(name, version, \"VmAnalyticsApiConfig\");\n\nexport class VmAnalyticsApiConfig {\n\n private hostTest = \"https://vmcore-test.luxottica.com\";\n private hostProd = \"https://vmcore.luxottica.com\";\n private appViewSessionApi = \"/api/appviewsession\";\n private browserSessionApi = \"/api/browsersession\";\n private trackingStatusApi = \"/api/trackingstatus\";\n private remoteLogApi = \"/api/remotelog\";\n private currentHostname = window.location.hostname;\n\n public get appViewSessionApiEndpoint() {\n return this.getHostname() + this.appViewSessionApi;\n }\n\n public get browserSessionApiEndpoint() {\n return this.getHostname() + this.browserSessionApi;\n }\n\n public get trackingStatusApiEndpoint() {\n return this.getHostname() + this.trackingStatusApi;\n }\n\n public get remoteLogApiEndpoint() {\n return this.getHostname() + this.remoteLogApi;\n }\n\n private getHostname() {\n const host = this.isDevEnvironment() ? this.hostTest : this.hostProd;\n logger.debug(\"analytics api hostname: {}\", host);\n return host;\n }\n\n private isDevEnvironment() {\n const isDev = this.currentHostname === \"localhost\";\n logger.debug(\"is dev environment: {}\", isDev);\n return isDev;\n }\n}\n","const sendXhrRequest = (\r\n method: string,\r\n url: string,\r\n body: any,\r\n responseType: XMLHttpRequestResponseType,\r\n responseHeaders: string[] = [],\r\n options: Record = {},\r\n onProgress?: ((this: XMLHttpRequest, ev: ProgressEvent) => any) | null\r\n): Promise => {\r\n return new Promise((resolve, reject) => {\r\n const xhr = new XMLHttpRequest();\r\n xhr.open(method || \"GET\", url);\r\n xhr.responseType = responseType;\r\n for (const header in options) {\r\n if (options[header]) {\r\n xhr.setRequestHeader(header, options[header]);\r\n }\r\n }\r\n\r\n xhr.onload = (e: any) => {\r\n if (xhr.status >= 200 && xhr.status < 300) {\r\n\r\n const responseHeaderValues: {[header: string]: string} = {};\r\n responseHeaders.forEach((header) => {\r\n const responseHeaderValue = xhr.getResponseHeader(header);\r\n if (responseHeaderValue !== null && responseHeaderValue !== undefined) {\r\n responseHeaderValues[header] = responseHeaderValue;\r\n }\r\n });\r\n\r\n resolve({\r\n status: xhr.status,\r\n statusText: xhr.statusText,\r\n response: xhr.response,\r\n headers: responseHeaderValues\r\n });\r\n } else {\r\n reject({\r\n status: xhr.status,\r\n statusText: xhr.statusText,\r\n response: xhr.response\r\n });\r\n }\r\n };\r\n\r\n xhr.onerror = (e) => {\r\n reject({\r\n status: xhr.status,\r\n statusText: xhr.statusText,\r\n response: xhr.response\r\n });\r\n };\r\n\r\n if (xhr.upload && onProgress) {\r\n xhr.upload.onprogress = onProgress;\r\n }\r\n xhr.send(body);\r\n });\r\n};\r\n\r\nexport {\r\n sendXhrRequest\r\n};\r\n","import { name, version } from \"../../../package.json\";\nimport { IRemoteAppViewSession } from \"../../domain/model/IRemoteAppViewSession\";\nimport { RemoteLogConfig } from \"../../domain/RemoteLogConfig\";\nimport { VmAnalyticsApiConfig } from \"../../domain/service/config/VmAnalyticsApiConfig\";\nimport { sendXhrRequest } from \"../../helpers/RequestHelper\";\n\nconst logger = RemoteLogConfig.getInstance().getLoggerInfo(name, version, \"AppViewSessionAdapter\");\n\nclass AppViewSessionAdapter implements LogAdapter {\n\n private config = new VmAnalyticsApiConfig();\n\n public log(message: IRemoteAppViewSession): Promise {\n const sessionId = RemoteLogConfig.getInstance().currentUuid;\n if (sessionId) {\n const jsonBody = JSON.stringify({\n browserSessionUuid: sessionId,\n date: new Date().toISOString(),\n statusCode: message.statusCode,\n statusText: message.statusText,\n });\n\n const requestUrl = this.config.appViewSessionApiEndpoint;\n return sendXhrRequest(\n \"POST\",\n requestUrl,\n jsonBody,\n \"\",\n [],\n {\n \"Accept\": \"application/json\",\n \"Content-type\": \"application/json\",\n // \"Referrer-Policy\": \"unsafe-url\"\n },\n ).catch((e) => {\n return Promise.reject(e);\n });\n\n } else {\n logger.warn(\"sessionId not available\");\n return Promise.reject();\n }\n }\n}\n\nexport { AppViewSessionAdapter };\n","import { name, version } from \"../../../../../package.json\";\nimport { DBAppViewSessionFactory } from \"../../../../adapter/db/factory/DBAppViewSessionFactory\";\nimport { AppViewSessionAdapter } from \"../../../../adapter/rest/AppViewSessionAdapter\";\nimport { IRemoteAppViewSession } from \"../../../model/IRemoteAppViewSession\";\nimport { RemoteLogConfig } from \"../../../RemoteLogConfig\";\n\nconst logger = RemoteLogConfig.getInstance().getLoggerInfo(name, version, \"AppViewSessionConsumer\");\n\nconst dbInstance = () => {\n return DBAppViewSessionFactory.getInstance();\n};\n\nconst messageAdapter = () => {\n return new AppViewSessionAdapter();\n};\n\nconst consumeDbRows = () => {\n const dbase = dbInstance().getDB();\n\n dbase.iterate((\n value: IRemoteAppViewSession,\n key: string\n ) => {\n // if (value === null) {\n // console.error(\"undefined: \", { key });\n // }\n messageAdapter().log({\n statusCode: value.statusCode,\n statusText: value.statusText\n }).then(() => {\n logger.debug(\"consumed stored log message: {}\", JSON.stringify(value));\n // console.info(\"consumed: \", {key, value});\n return dbase.removeItem(key);\n }).catch(() => {\n // console.error(\"failed: \", { key });\n });\n }).then(() => {\n logger.debug(\"all logs consumed from local indexdb\");\n });\n};\n\nclass AppViewSessionConsumer {\n public consume() {\n const time1 = window.performance.now();\n consumeDbRows();\n const time2 = window.performance.now();\n logger.debug(\"logs consumed in {} ms\", time2 - time1);\n }\n}\n\nexport { AppViewSessionConsumer };\n","import { name, version } from \"../../../../package.json\";\nimport { RemoteLogConfig } from \"../../RemoteLogConfig\";\nimport { AppViewSessionConsumer } from \"../log/consumer/AppViewSessionConsumer\";\n\nconst logger = RemoteLogConfig.getInstance().getLoggerInfo(name, version, \"AppViewSessionConsumerJob\");\n\nclass AppViewSessionConsumerJob {\n\n public static getInstance() {\n if (!AppViewSessionConsumerJob.instance) {\n AppViewSessionConsumerJob.instance = new AppViewSessionConsumerJob();\n }\n return AppViewSessionConsumerJob.instance;\n }\n\n private static instance: AppViewSessionConsumerJob;\n private started: boolean = false;\n private intervalFunction: any;\n\n private constructor() {\n logger.debug(\"remote log consumer job created\");\n }\n\n public start(): void {\n if (this.started === true) {\n logger.debug(\"already started\");\n } else {\n logger.debug(\"start to consume logs\");\n this.started = true;\n this.intervalFunction = window.setInterval(new AppViewSessionConsumer().consume, 3000);\n }\n }\n\n public stop(): void {\n if (this.intervalFunction) {\n window.clearInterval(this.intervalFunction);\n }\n }\n\n}\n\nexport { AppViewSessionConsumerJob };\n","import localforage from \"localforage\";\n\nconst dbName = \"db_browsersession\";\n\nclass DBBrowserSessionFactory {\n\n public static getInstance() {\n if (!DBBrowserSessionFactory.instance) {\n DBBrowserSessionFactory.instance = new DBBrowserSessionFactory();\n }\n return DBBrowserSessionFactory.instance;\n }\n\n private static instance: DBBrowserSessionFactory;\n private db: LocalForage;\n\n private constructor() {\n this.db = localforage.createInstance({ name: dbName });\n }\n\n public getDB(): LocalForage {\n return this.db;\n }\n\n public getLogsTableName() {\n return \"logs\";\n }\n\n}\n\nexport { DBBrowserSessionFactory };\n","import { DeviceDetection } from \"@luxottica/vm-devicedetection\";\nimport { name, version } from \"../../../package.json\";\nimport { IRemoteBrowserSession } from \"../../domain/model/IRemoteBrowserSession\";\nimport { RemoteLogConfig } from \"../../domain/RemoteLogConfig\";\nimport { VmAnalyticsApiConfig } from \"../../domain/service/config/VmAnalyticsApiConfig\";\nimport { sendXhrRequest } from \"../../helpers/RequestHelper\";\n\nconst logger = RemoteLogConfig.getInstance().getLoggerInfo(name, version, \"BrowserSessionAdapter\");\n\nconst VM_BROWSERSESSION_FLAG = RemoteLogConfig.storageIdentifier + \".flag\";\nconst VM_BROWSERSESSION_ETAG = RemoteLogConfig.storageIdentifier + \".etag\";\n\nclass BrowserSessionAdapter implements LogAdapter {\n\n private config = new VmAnalyticsApiConfig();\n private storage = window.localStorage;\n\n public log(message: IRemoteBrowserSession): Promise {\n const deviceDetection: DeviceDetection = new DeviceDetection();\n const userAgentData = deviceDetection.getUserAgentData();\n const persistedSessionFlag = this.storage.getItem(VM_BROWSERSESSION_FLAG);\n const persistedSessionUuid = RemoteLogConfig.getInstance().currentUuid;\n\n if (persistedSessionFlag) {\n logger.info(\"skip (session id already created)\");\n return Promise.resolve(false);\n } else {\n if (persistedSessionUuid) {\n const jsonBody = JSON.stringify({\n browserSessionUuid: persistedSessionUuid,\n date: message.date,\n device: {\n cpuArchitecture: userAgentData.cpu.architecture,\n model: userAgentData.device.model,\n resolution: {\n dpi: message.deviceResolution.dpi,\n h: message.deviceResolution.h,\n w: message.deviceResolution.w,\n },\n type: userAgentData.device.type,\n vendor: userAgentData.device.vendor,\n webapi: {\n ambientLight: \"ondevicelight\" in window,\n connection: \"connection\" in navigator,\n serviceWorker: \"serviceWorker\" in navigator,\n share: \"share\" in navigator,\n visibility: \"hidden\" in document,\n },\n webcam: {\n available: message.deviceWebcam.enabled,\n resolutionW: message.deviceWebcam.resolution,\n },\n webgl: {\n version: message.deviceWebgl.version,\n },\n },\n os: {\n name: userAgentData.os.name,\n version: parseFloat(userAgentData.os.version!),\n },\n userAgent: {\n browserEngineName: userAgentData.engine.name,\n browserEngineVersion: parseFloat(userAgentData.engine.version!),\n browserName: userAgentData.browser.name,\n browserVersion: parseFloat(userAgentData.browser.version!),\n webView: deviceDetection.isWebView(),\n },\n });\n\n const requestUrl = this.config.browserSessionApiEndpoint;\n return sendXhrRequest(\n \"POST\",\n requestUrl,\n jsonBody,\n \"\",\n [\"etag\"],\n {\n \"Accept\": \"application/json\",\n \"Content-type\": \"application/json\",\n // \"Referrer-Policy\": \"unsafe-url\"\n },\n ).then((response) => {\n const etagsessionId = response.headers.etag;\n this.storage.setItem(VM_BROWSERSESSION_FLAG, \"true\");\n this.storage.setItem(VM_BROWSERSESSION_ETAG, etagsessionId ? etagsessionId.slice(-1, 1) : \"n.a.\");\n return true;\n }).catch((e) => {\n return Promise.reject(e);\n });\n\n } else {\n logger.warn(\"persistent session uuid not available\");\n return Promise.reject(\"persistent session uuid not available\");\n }\n }\n }\n\n}\n\nexport { BrowserSessionAdapter };\n","import { name, version } from \"../../../../../package.json\";\nimport { DBBrowserSessionFactory } from \"../../../../adapter/db/factory/DBBrowserSessionFactory\";\nimport { BrowserSessionAdapter } from \"../../../../adapter/rest/BrowserSessionAdapter\";\nimport { IRemoteBrowserSession } from \"../../../model/IRemoteBrowserSession\";\nimport { RemoteLogConfig } from \"../../../RemoteLogConfig\";\n\nconst logger = RemoteLogConfig.getInstance().getLoggerInfo(name, version, \"BrowserSessionConsumer\");\n\nconst dbInstance = () => {\n return DBBrowserSessionFactory.getInstance();\n};\n\nconst messageAdapter = () => {\n return new BrowserSessionAdapter();\n};\n\nconst consumeDbRows = () => {\n const dbase = dbInstance().getDB();\n\n dbase.iterate((\n value: IRemoteBrowserSession,\n key: string\n ) => {\n // if (value === null) {\n // console.error(\"undefined: \", { key });\n // }\n messageAdapter().log({\n date: value.date,\n deviceResolution: value.deviceResolution,\n deviceWebcam: value.deviceWebcam,\n deviceWebgl: value.deviceWebgl,\n }).then(() => {\n logger.debug(\"consumed stored log message: {}\", JSON.stringify(value));\n // console.info(\"consumed: \", {key, value});\n return dbase.removeItem(key);\n }).catch(() => {\n // console.error(\"failed: \", { key });\n });\n }).then(() => {\n logger.debug(\"all logs consumed from local indexdb\");\n });\n};\n\nclass BrowserSessionConsumer {\n\n public consume() {\n const time1 = window.performance.now();\n consumeDbRows();\n const time2 = window.performance.now();\n logger.debug(\"logs consumed in {} ms\", time2 - time1);\n }\n\n}\n\nexport { BrowserSessionConsumer };\n","import { name, version } from \"../../../../package.json\";\nimport { RemoteLogConfig } from \"../../RemoteLogConfig\";\nimport { BrowserSessionConsumer } from \"../log/consumer/BrowserSessionConsumer\";\n\nconst logger = RemoteLogConfig.getInstance().getLoggerInfo(name, version, \"BrowserSessionConsumerJob\");\n\nclass BrowserSessionConsumerJob {\n\n public static getInstance() {\n if (!BrowserSessionConsumerJob.instance) {\n BrowserSessionConsumerJob.instance = new BrowserSessionConsumerJob();\n }\n return BrowserSessionConsumerJob.instance;\n }\n\n private static instance: BrowserSessionConsumerJob;\n private started: boolean = false;\n private intervalFunction: any;\n\n private constructor() {\n logger.debug(\"remote log consumer job created\");\n }\n\n public start(): void {\n if (this.started === true) {\n logger.debug(\"already started\");\n } else {\n logger.debug(\"start to consume logs\");\n this.started = true;\n this.intervalFunction = window.setInterval(new BrowserSessionConsumer().consume, 3000);\n }\n }\n\n public stop(): void {\n if (this.intervalFunction) {\n window.clearInterval(this.intervalFunction);\n }\n }\n\n}\n\nexport { BrowserSessionConsumerJob };\n","import { name, version } from \"../../../package.json\";\nimport { LogMessage } from \"../../domain/model/LogMessage\";\nimport { RemoteLogConfig } from \"../../domain/RemoteLogConfig\";\nimport { VmAnalyticsApiConfig } from \"../../domain/service/config/VmAnalyticsApiConfig\";\nimport { sendXhrRequest } from \"../../helpers/RequestHelper\";\n\nconst logger = RemoteLogConfig.getInstance().getLoggerInfo(name, version, \"RemoteLogAdapter\");\n\nclass RemoteLogAdapter implements LogAdapter {\n\n private config = new VmAnalyticsApiConfig();\n\n public log(logMessage: LogMessage): Promise {\n try {\n const sessionId = RemoteLogConfig.getInstance().currentUuid;\n if (sessionId) {\n const jsonBody = JSON.stringify({\n browserSessionUuid: sessionId,\n date: new Date().toISOString(),\n level: logMessage.getLevel(),\n logName: logMessage.getLogName(),\n message: logMessage.getMessage(),\n });\n\n const requestUrl = this.config.remoteLogApiEndpoint;\n\n return sendXhrRequest(\n \"POST\",\n requestUrl,\n jsonBody,\n \"\",\n [],\n {\n \"Accept\": \"application/json\",\n \"Content-type\": \"application/json\",\n // \"Referrer-Policy\": \"unsafe-url\"\n },\n ).catch((e) => {\n return Promise.reject(e);\n });\n\n } else {\n console.warn(\"sessionId not available\");\n return Promise.reject(\"sessionId not available\");\n }\n } catch (e) {\n return Promise.reject(e);\n }\n }\n}\n\nexport { RemoteLogAdapter };\n","import { name, version } from \"../../../../../package.json\";\nimport { DBRemoteLogFactory } from \"../../../../adapter/db/factory/DBRemoteLogFactory\";\nimport { RemoteLogAdapter } from \"../../../../adapter/rest/RemoteLogAdapter\";\nimport { LogMessage } from \"../../../model/LogMessage\";\nimport { RemoteLogConfig } from \"../../../RemoteLogConfig\";\n\nconst logger = RemoteLogConfig.getInstance().getLoggerInfo(name, version, \"RemoteLogConsumer\");\n\nconst dbInstance = () => {\n return DBRemoteLogFactory.getInstance();\n};\n\nconst messageAdapter = () => {\n return new RemoteLogAdapter();\n};\n\nconst consumeDbRows = () => {\n const dbase = dbInstance().getDB();\n\n dbase.iterate((\n value: LogMessage,\n key: string\n ) => {\n if (value === null) {\n // console.error(\"undefined: \", { key });\n }\n messageAdapter().log(\n new LogMessage(value.level, value.logName, value.message)\n ).then(() => {\n logger.debug(\"consumed stored log message: {}\", JSON.stringify(value));\n // console.info(\"consumed: \", {key, value});\n return dbase.removeItem(key);\n }).catch(() => {\n // console.error(\"failed: \", { key });\n });\n }).then(() => {\n logger.debug(\"all logs consumed from local indexdb\");\n });\n};\n\nclass RemoteLogConsumer {\n\n public consume() {\n const time1 = window.performance.now();\n consumeDbRows();\n const time2 = window.performance.now();\n logger.debug(\"logs consumed in {} ms\", time2 - time1);\n }\n\n}\n\nexport { RemoteLogConsumer };\n","import { name, version } from \"../../../../package.json\";\nimport { RemoteLogConfig } from \"../../RemoteLogConfig\";\nimport { RemoteLogConsumer } from \"../log/consumer/RemoteLogConsumer\";\n\nconst logger = RemoteLogConfig.getInstance().getLoggerInfo(name, version, \"RemoteLogConsumerJob\");\n\nclass RemoteLogConsumerJob {\n\n public static getInstance() {\n if (!RemoteLogConsumerJob.instance) {\n RemoteLogConsumerJob.instance = new RemoteLogConsumerJob();\n }\n return RemoteLogConsumerJob.instance;\n }\n\n private static instance: RemoteLogConsumerJob;\n private started: boolean = false;\n private intervalFunction: any;\n\n private constructor() {\n logger.debug(\"remote log consumer job created\");\n }\n\n public start(): void {\n if (this.started === true) {\n logger.debug(\"already started\");\n } else {\n logger.debug(\"start to consume logs\");\n this.started = true;\n this.intervalFunction = window.setInterval(new RemoteLogConsumer().consume, 5000);\n }\n }\n\n public stop(): void {\n if (this.intervalFunction) {\n window.clearInterval(this.intervalFunction);\n }\n }\n\n}\n\nexport { RemoteLogConsumerJob };\n","import localforage from \"localforage\";\n\nconst dbName = \"db_trackingstatus\";\n\nclass DBTrackingStatusFactory {\n\n public static getInstance() {\n if (!DBTrackingStatusFactory.instance) {\n DBTrackingStatusFactory.instance = new DBTrackingStatusFactory();\n }\n return DBTrackingStatusFactory.instance;\n }\n\n private static instance: DBTrackingStatusFactory;\n private db: LocalForage;\n\n private constructor() {\n this.db = localforage.createInstance({ name: dbName });\n }\n\n public getDB(): LocalForage {\n return this.db;\n }\n\n public getLogsTableName() {\n return \"logs\";\n }\n\n}\n\nexport { DBTrackingStatusFactory };\n","import { name, version } from \"../../../package.json\";\nimport { IRemoteTrackingStatus } from \"../../domain/model/IRemoteTrackingStatus\";\nimport { RemoteLogConfig } from \"../../domain/RemoteLogConfig\";\nimport { VmAnalyticsApiConfig } from \"../../domain/service/config/VmAnalyticsApiConfig\";\nimport { sendXhrRequest } from \"../../helpers/RequestHelper\";\n\nconst logger = RemoteLogConfig.getInstance().getLoggerInfo(name, version, \"TrackingStatusAdapter\");\n\nclass TrackingStatusAdapter implements LogAdapter {\n\n private config = new VmAnalyticsApiConfig();\n\n public log(message: IRemoteTrackingStatus): Promise {\n const sessionId = RemoteLogConfig.getInstance().currentUuid;\n if (sessionId) {\n let jsonBody;\n if (message.fps) {\n jsonBody = JSON.stringify({\n browserSessionUuid: sessionId,\n date: new Date().toISOString(),\n fps: message.fps,\n });\n } else {\n jsonBody = JSON.stringify({\n browserSessionUuid: sessionId,\n date: new Date().toISOString(),\n trackingCode: message.trackingCode,\n trackingText: message.trackingText,\n });\n }\n const requestUrl = this.config.trackingStatusApiEndpoint;\n\n return sendXhrRequest(\n \"POST\",\n requestUrl,\n jsonBody,\n \"\",\n [],\n {\n \"Accept\": \"application/json\",\n \"Content-type\": \"application/json\",\n // \"Referrer-Policy\": \"unsafe-url\"\n },\n ).catch((e) => {\n return Promise.reject(e);\n });\n\n } else {\n console.warn(\"sessionId not available\");\n return Promise.reject(\"sessionId not available\");\n }\n }\n}\n\nexport { TrackingStatusAdapter };\n","import { name, version } from \"../../../../../package.json\";\nimport { DBTrackingStatusFactory } from \"../../../../adapter/db/factory/DBTrackingStatusFactory\";\nimport { TrackingStatusAdapter } from \"../../../../adapter/rest/TrackingStatusAdapter\";\nimport { IRemoteTrackingStatus } from \"../../../model/IRemoteTrackingStatus.js\";\nimport { RemoteLogConfig } from \"../../../RemoteLogConfig\";\n\nconst logger = RemoteLogConfig.getInstance().getLoggerInfo(name, version, \"TrackingStatusConsumer\");\n\nconst dbInstance = () => {\n return DBTrackingStatusFactory.getInstance();\n};\n\nconst messageAdapter = () => {\n return new TrackingStatusAdapter();\n};\n\nconst consumeDbRows = () => {\n const dbase = dbInstance().getDB();\n\n dbase.iterate((\n value: IRemoteTrackingStatus,\n key: string\n ) => {\n // if (value === null) {\n // console.error(\"undefined: \", { key });\n // }\n messageAdapter().log({\n fps: value.fps,\n trackingCode: value.trackingCode,\n trackingText: value.trackingText,\n }).then(() => {\n logger.debug(\"consumed stored log message: {}\", JSON.stringify(value));\n // console.info(\"consumed: \", {key, value});\n return dbase.removeItem(key);\n }).catch(() => {\n // console.error(\"failed: \", { key });\n });\n }).then(() => {\n logger.debug(\"all logs consumed from local indexdb\");\n });\n};\n\nclass TrackingStatusConsumer {\n\n public consume() {\n const time1 = window.performance.now();\n consumeDbRows();\n const time2 = window.performance.now();\n logger.debug(\"logs consumed in {} ms\", time2 - time1);\n }\n\n}\n\nexport { TrackingStatusConsumer };\n","import { name, version } from \"../../../../package.json\";\nimport { RemoteLogConfig } from \"../../RemoteLogConfig\";\nimport { TrackingStatusConsumer } from \"../log/consumer/TrackingStatusConsumer\";\n\nconst logger = RemoteLogConfig.getInstance().getLoggerInfo(name, version, \"TrackingStatusConsumerJob\");\n\nclass TrackingStatusConsumerJob {\n\n public static getInstance() {\n if (!TrackingStatusConsumerJob.instance) {\n TrackingStatusConsumerJob.instance = new TrackingStatusConsumerJob();\n }\n return TrackingStatusConsumerJob.instance;\n }\n\n private static instance: TrackingStatusConsumerJob;\n private started: boolean = false;\n private intervalFunction: any;\n\n private constructor() {\n logger.debug(\"remote log consumer job created\");\n }\n\n public start(): void {\n if (this.started === true) {\n logger.debug(\"already started\");\n } else {\n logger.debug(\"start to consume logs\");\n this.started = true;\n this.intervalFunction = window.setInterval(new TrackingStatusConsumer().consume, 3000);\n }\n }\n\n public stop(): void {\n if (this.intervalFunction) {\n window.clearInterval(this.intervalFunction);\n }\n }\n\n}\n\nexport { TrackingStatusConsumerJob };\n","import { AppViewSessionConsumerJob } from \"./AppViewSessionConsumerJob\";\nimport { BrowserSessionConsumerJob } from \"./BrowserSessionConsumerJob\";\nimport { RemoteLogConsumerJob } from \"./RemoteLogConsumerJob\";\nimport { TrackingStatusConsumerJob } from \"./TrackingStatusConsumerJob\";\n\nclass JobsStarter {\n\n public static getInstance() {\n if (!JobsStarter.instance) {\n JobsStarter.instance = new JobsStarter();\n }\n return JobsStarter.instance;\n }\n\n private static instance: JobsStarter;\n\n public constructor() {\n this.createJobs();\n }\n\n private createJobs() {\n BrowserSessionConsumerJob.getInstance().start();\n AppViewSessionConsumerJob.getInstance().start();\n TrackingStatusConsumerJob.getInstance().start();\n RemoteLogConsumerJob.getInstance().start();\n }\n\n}\n\nexport { JobsStarter };\n","import { v4 as uuid } from \"uuid\";\nimport { DBAppViewSessionFactory } from \"../../../../adapter/db/factory/DBAppViewSessionFactory\";\nimport { LogsConfig } from \"../../../../config/LogsConfig\";\nimport { IRemoteAppViewSession } from \"../../../model/IRemoteAppViewSession\";\n\nclass AppViewSessionService {\n\n public log(message: IRemoteAppViewSession): void {\n const timestamp = this.now();\n LogsConfig.getInstance().isAppViewSessionActive().then((isActive) => {\n if (isActive) {\n this.queueMessage(message, timestamp);\n }\n });\n }\n\n private queueMessage(message: IRemoteAppViewSession, timestamp: string) {\n this.dbInstance().getDB().setItem(uuid(), {\n date: timestamp,\n statusCode: message.statusCode,\n statusText: message.statusText,\n });\n }\n\n private dbInstance() {\n return DBAppViewSessionFactory.getInstance();\n }\n\n private now() {\n return new Date().toISOString();\n }\n\n}\n\nexport { AppViewSessionService };\n","import { v4 as uuid } from \"uuid\";\nimport { DBBrowserSessionFactory } from \"../../../../adapter/db/factory/DBBrowserSessionFactory\";\nimport { LogsConfig } from \"../../../../config/LogsConfig\";\nimport { IRemoteBrowserSession } from \"../../../model/IRemoteBrowserSession\";\n\nclass BrowserSessionService {\n\n public log(message: IRemoteBrowserSession): void {\n const timestamp = this.now();\n LogsConfig.getInstance().isBrowserSessionActive().then((isActive) => {\n if (isActive) {\n this.queueMessage(message, timestamp);\n }\n });\n }\n\n private queueMessage(message: IRemoteBrowserSession, timestamp: string) {\n this.dbInstance().getDB().setItem(uuid(), {\n date: timestamp,\n deviceResolution: message.deviceResolution,\n deviceWebcam: message.deviceWebcam,\n deviceWebgl: message.deviceWebgl,\n });\n }\n\n private dbInstance() {\n return DBBrowserSessionFactory.getInstance();\n }\n\n private now() {\n return new Date().toISOString();\n }\n\n}\n\nexport { BrowserSessionService };\n","import { v4 as uuid } from \"uuid\";\nimport { DBTrackingStatusFactory } from \"../../../../adapter/db/factory/DBTrackingStatusFactory\";\nimport { LogsConfig } from \"../../../../config/LogsConfig\";\nimport { IRemoteTrackingStatus } from \"../../../model/IRemoteTrackingStatus\";\n\nclass TrackingStatusService {\n\n public log(message: IRemoteTrackingStatus): void {\n const timestamp = this.now();\n LogsConfig.getInstance().isTrackingStatusActive().then((isActive) => {\n if (isActive) {\n this.queueMessage(message, timestamp);\n }\n });\n }\n\n private queueMessage(message: IRemoteTrackingStatus, timestamp: string) {\n this.dbInstance().getDB().setItem(uuid(), {\n date: timestamp,\n fps: message.fps,\n trackingCode: message.trackingCode,\n trackingText: message.trackingText,\n });\n }\n\n private dbInstance() {\n return DBTrackingStatusFactory.getInstance();\n }\n\n private now() {\n return new Date().toISOString();\n }\n\n}\n\nexport { TrackingStatusService };\n","import { Logger } from \"@log4js2/core\";\nimport { RemoteLogAppender } from \"./domain/appender/RemoteLogAppender\";\nimport { IRemoteAppViewSession } from \"./domain/model/IRemoteAppViewSession\";\nimport { IRemoteBrowserSession } from \"./domain/model/IRemoteBrowserSession\";\nimport { IRemoteTrackingStatus } from \"./domain/model/IRemoteTrackingStatus\";\nimport { RemoteLogConfig } from \"./domain/RemoteLogConfig\";\nimport { JobsStarter } from \"./domain/service/job/JobsStarter\";\nimport { AppViewSessionService } from \"./domain/service/log/producer/AppViewSessionService\";\nimport { BrowserSessionService } from \"./domain/service/log/producer/BrowserSessionService\";\nimport { TrackingStatusService } from \"./domain/service/log/producer/TrackingStatusService\";\n\nclass RemoteLog {\n\n private browserSessionService = new BrowserSessionService();\n private appViewSessionService = new AppViewSessionService();\n private trackingStatusService = new TrackingStatusService();\n\n public constructor() {\n JobsStarter.getInstance();\n }\n\n public sendBrowserSession(browserSession: IRemoteBrowserSession) {\n this.browserSessionService.log(browserSession);\n }\n\n public sendAppViewSession(...appViewSession: IRemoteAppViewSession[]) {\n appViewSession.forEach((item) => {\n this.appViewSessionService.log(item);\n });\n }\n\n public sendTracking(...trackingStatus: IRemoteTrackingStatus[]) {\n trackingStatus.forEach((item) => {\n this.trackingStatusService.log(item);\n });\n }\n\n public sendFps(...trackingStatus: IRemoteTrackingStatus[]) {\n trackingStatus.forEach((item) => {\n this.trackingStatusService.log(item);\n });\n }\n\n}\n\nexport { RemoteLog, RemoteLogAppender, RemoteLogConfig, Logger };\n","/*!\n localForage -- Offline Storage, Improved\n Version 1.9.0\n https://localforage.github.io/localForage\n (c) 2013-2017 Mozilla, Apache License 2.0\n*/\n(function(f){if(typeof exports===\"object\"&&typeof module!==\"undefined\"){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.localforage = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw (f.code=\"MODULE_NOT_FOUND\", f)}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o element; its readystatechange event will be fired asynchronously once it is inserted\n // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.\n var scriptEl = global.document.createElement('script');\n scriptEl.onreadystatechange = function () {\n nextTick();\n\n scriptEl.onreadystatechange = null;\n scriptEl.parentNode.removeChild(scriptEl);\n scriptEl = null;\n };\n global.document.documentElement.appendChild(scriptEl);\n };\n } else {\n scheduleDrain = function () {\n setTimeout(nextTick, 0);\n };\n }\n}\n\nvar draining;\nvar queue = [];\n//named nextTick for less confusing stack traces\nfunction nextTick() {\n draining = true;\n var i, oldQueue;\n var len = queue.length;\n while (len) {\n oldQueue = queue;\n queue = [];\n i = -1;\n while (++i < len) {\n oldQueue[i]();\n }\n len = queue.length;\n }\n draining = false;\n}\n\nmodule.exports = immediate;\nfunction immediate(task) {\n if (queue.push(task) === 1 && !draining) {\n scheduleDrain();\n }\n}\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{}],2:[function(_dereq_,module,exports){\n'use strict';\nvar immediate = _dereq_(1);\n\n/* istanbul ignore next */\nfunction INTERNAL() {}\n\nvar handlers = {};\n\nvar REJECTED = ['REJECTED'];\nvar FULFILLED = ['FULFILLED'];\nvar PENDING = ['PENDING'];\n\nmodule.exports = Promise;\n\nfunction Promise(resolver) {\n if (typeof resolver !== 'function') {\n throw new TypeError('resolver must be a function');\n }\n this.state = PENDING;\n this.queue = [];\n this.outcome = void 0;\n if (resolver !== INTERNAL) {\n safelyResolveThenable(this, resolver);\n }\n}\n\nPromise.prototype[\"catch\"] = function (onRejected) {\n return this.then(null, onRejected);\n};\nPromise.prototype.then = function (onFulfilled, onRejected) {\n if (typeof onFulfilled !== 'function' && this.state === FULFILLED ||\n typeof onRejected !== 'function' && this.state === REJECTED) {\n return this;\n }\n var promise = new this.constructor(INTERNAL);\n if (this.state !== PENDING) {\n var resolver = this.state === FULFILLED ? onFulfilled : onRejected;\n unwrap(promise, resolver, this.outcome);\n } else {\n this.queue.push(new QueueItem(promise, onFulfilled, onRejected));\n }\n\n return promise;\n};\nfunction QueueItem(promise, onFulfilled, onRejected) {\n this.promise = promise;\n if (typeof onFulfilled === 'function') {\n this.onFulfilled = onFulfilled;\n this.callFulfilled = this.otherCallFulfilled;\n }\n if (typeof onRejected === 'function') {\n this.onRejected = onRejected;\n this.callRejected = this.otherCallRejected;\n }\n}\nQueueItem.prototype.callFulfilled = function (value) {\n handlers.resolve(this.promise, value);\n};\nQueueItem.prototype.otherCallFulfilled = function (value) {\n unwrap(this.promise, this.onFulfilled, value);\n};\nQueueItem.prototype.callRejected = function (value) {\n handlers.reject(this.promise, value);\n};\nQueueItem.prototype.otherCallRejected = function (value) {\n unwrap(this.promise, this.onRejected, value);\n};\n\nfunction unwrap(promise, func, value) {\n immediate(function () {\n var returnValue;\n try {\n returnValue = func(value);\n } catch (e) {\n return handlers.reject(promise, e);\n }\n if (returnValue === promise) {\n handlers.reject(promise, new TypeError('Cannot resolve promise with itself'));\n } else {\n handlers.resolve(promise, returnValue);\n }\n });\n}\n\nhandlers.resolve = function (self, value) {\n var result = tryCatch(getThen, value);\n if (result.status === 'error') {\n return handlers.reject(self, result.value);\n }\n var thenable = result.value;\n\n if (thenable) {\n safelyResolveThenable(self, thenable);\n } else {\n self.state = FULFILLED;\n self.outcome = value;\n var i = -1;\n var len = self.queue.length;\n while (++i < len) {\n self.queue[i].callFulfilled(value);\n }\n }\n return self;\n};\nhandlers.reject = function (self, error) {\n self.state = REJECTED;\n self.outcome = error;\n var i = -1;\n var len = self.queue.length;\n while (++i < len) {\n self.queue[i].callRejected(error);\n }\n return self;\n};\n\nfunction getThen(obj) {\n // Make sure we only access the accessor once as required by the spec\n var then = obj && obj.then;\n if (obj && (typeof obj === 'object' || typeof obj === 'function') && typeof then === 'function') {\n return function appyThen() {\n then.apply(obj, arguments);\n };\n }\n}\n\nfunction safelyResolveThenable(self, thenable) {\n // Either fulfill, reject or reject with error\n var called = false;\n function onError(value) {\n if (called) {\n return;\n }\n called = true;\n handlers.reject(self, value);\n }\n\n function onSuccess(value) {\n if (called) {\n return;\n }\n called = true;\n handlers.resolve(self, value);\n }\n\n function tryToUnwrap() {\n thenable(onSuccess, onError);\n }\n\n var result = tryCatch(tryToUnwrap);\n if (result.status === 'error') {\n onError(result.value);\n }\n}\n\nfunction tryCatch(func, value) {\n var out = {};\n try {\n out.value = func(value);\n out.status = 'success';\n } catch (e) {\n out.status = 'error';\n out.value = e;\n }\n return out;\n}\n\nPromise.resolve = resolve;\nfunction resolve(value) {\n if (value instanceof this) {\n return value;\n }\n return handlers.resolve(new this(INTERNAL), value);\n}\n\nPromise.reject = reject;\nfunction reject(reason) {\n var promise = new this(INTERNAL);\n return handlers.reject(promise, reason);\n}\n\nPromise.all = all;\nfunction all(iterable) {\n var self = this;\n if (Object.prototype.toString.call(iterable) !== '[object Array]') {\n return this.reject(new TypeError('must be an array'));\n }\n\n var len = iterable.length;\n var called = false;\n if (!len) {\n return this.resolve([]);\n }\n\n var values = new Array(len);\n var resolved = 0;\n var i = -1;\n var promise = new this(INTERNAL);\n\n while (++i < len) {\n allResolver(iterable[i], i);\n }\n return promise;\n function allResolver(value, i) {\n self.resolve(value).then(resolveFromAll, function (error) {\n if (!called) {\n called = true;\n handlers.reject(promise, error);\n }\n });\n function resolveFromAll(outValue) {\n values[i] = outValue;\n if (++resolved === len && !called) {\n called = true;\n handlers.resolve(promise, values);\n }\n }\n }\n}\n\nPromise.race = race;\nfunction race(iterable) {\n var self = this;\n if (Object.prototype.toString.call(iterable) !== '[object Array]') {\n return this.reject(new TypeError('must be an array'));\n }\n\n var len = iterable.length;\n var called = false;\n if (!len) {\n return this.resolve([]);\n }\n\n var i = -1;\n var promise = new this(INTERNAL);\n\n while (++i < len) {\n resolver(iterable[i]);\n }\n return promise;\n function resolver(value) {\n self.resolve(value).then(function (response) {\n if (!called) {\n called = true;\n handlers.resolve(promise, response);\n }\n }, function (error) {\n if (!called) {\n called = true;\n handlers.reject(promise, error);\n }\n });\n }\n}\n\n},{\"1\":1}],3:[function(_dereq_,module,exports){\n(function (global){\n'use strict';\nif (typeof global.Promise !== 'function') {\n global.Promise = _dereq_(2);\n}\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"2\":2}],4:[function(_dereq_,module,exports){\n'use strict';\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction getIDB() {\n /* global indexedDB,webkitIndexedDB,mozIndexedDB,OIndexedDB,msIndexedDB */\n try {\n if (typeof indexedDB !== 'undefined') {\n return indexedDB;\n }\n if (typeof webkitIndexedDB !== 'undefined') {\n return webkitIndexedDB;\n }\n if (typeof mozIndexedDB !== 'undefined') {\n return mozIndexedDB;\n }\n if (typeof OIndexedDB !== 'undefined') {\n return OIndexedDB;\n }\n if (typeof msIndexedDB !== 'undefined') {\n return msIndexedDB;\n }\n } catch (e) {\n return;\n }\n}\n\nvar idb = getIDB();\n\nfunction isIndexedDBValid() {\n try {\n // Initialize IndexedDB; fall back to vendor-prefixed versions\n // if needed.\n if (!idb || !idb.open) {\n return false;\n }\n // We mimic PouchDB here;\n //\n // We test for openDatabase because IE Mobile identifies itself\n // as Safari. Oh the lulz...\n var isSafari = typeof openDatabase !== 'undefined' && /(Safari|iPhone|iPad|iPod)/.test(navigator.userAgent) && !/Chrome/.test(navigator.userAgent) && !/BlackBerry/.test(navigator.platform);\n\n var hasFetch = typeof fetch === 'function' && fetch.toString().indexOf('[native code') !== -1;\n\n // Safari <10.1 does not meet our requirements for IDB support\n // (see: https://github.com/pouchdb/pouchdb/issues/5572).\n // Safari 10.1 shipped with fetch, we can use that to detect it.\n // Note: this creates issues with `window.fetch` polyfills and\n // overrides; see:\n // https://github.com/localForage/localForage/issues/856\n return (!isSafari || hasFetch) && typeof indexedDB !== 'undefined' &&\n // some outdated implementations of IDB that appear on Samsung\n // and HTC Android devices <4.4 are missing IDBKeyRange\n // See: https://github.com/mozilla/localForage/issues/128\n // See: https://github.com/mozilla/localForage/issues/272\n typeof IDBKeyRange !== 'undefined';\n } catch (e) {\n return false;\n }\n}\n\n// Abstracts constructing a Blob object, so it also works in older\n// browsers that don't support the native Blob constructor. (i.e.\n// old QtWebKit versions, at least).\n// Abstracts constructing a Blob object, so it also works in older\n// browsers that don't support the native Blob constructor. (i.e.\n// old QtWebKit versions, at least).\nfunction createBlob(parts, properties) {\n /* global BlobBuilder,MSBlobBuilder,MozBlobBuilder,WebKitBlobBuilder */\n parts = parts || [];\n properties = properties || {};\n try {\n return new Blob(parts, properties);\n } catch (e) {\n if (e.name !== 'TypeError') {\n throw e;\n }\n var Builder = typeof BlobBuilder !== 'undefined' ? BlobBuilder : typeof MSBlobBuilder !== 'undefined' ? MSBlobBuilder : typeof MozBlobBuilder !== 'undefined' ? MozBlobBuilder : WebKitBlobBuilder;\n var builder = new Builder();\n for (var i = 0; i < parts.length; i += 1) {\n builder.append(parts[i]);\n }\n return builder.getBlob(properties.type);\n }\n}\n\n// This is CommonJS because lie is an external dependency, so Rollup\n// can just ignore it.\nif (typeof Promise === 'undefined') {\n // In the \"nopromises\" build this will just throw if you don't have\n // a global promise object, but it would throw anyway later.\n _dereq_(3);\n}\nvar Promise$1 = Promise;\n\nfunction executeCallback(promise, callback) {\n if (callback) {\n promise.then(function (result) {\n callback(null, result);\n }, function (error) {\n callback(error);\n });\n }\n}\n\nfunction executeTwoCallbacks(promise, callback, errorCallback) {\n if (typeof callback === 'function') {\n promise.then(callback);\n }\n\n if (typeof errorCallback === 'function') {\n promise[\"catch\"](errorCallback);\n }\n}\n\nfunction normalizeKey(key) {\n // Cast the key to a string, as that's all we can set as a key.\n if (typeof key !== 'string') {\n console.warn(key + ' used as a key, but it is not a string.');\n key = String(key);\n }\n\n return key;\n}\n\nfunction getCallback() {\n if (arguments.length && typeof arguments[arguments.length - 1] === 'function') {\n return arguments[arguments.length - 1];\n }\n}\n\n// Some code originally from async_storage.js in\n// [Gaia](https://github.com/mozilla-b2g/gaia).\n\nvar DETECT_BLOB_SUPPORT_STORE = 'local-forage-detect-blob-support';\nvar supportsBlobs = void 0;\nvar dbContexts = {};\nvar toString = Object.prototype.toString;\n\n// Transaction Modes\nvar READ_ONLY = 'readonly';\nvar READ_WRITE = 'readwrite';\n\n// Transform a binary string to an array buffer, because otherwise\n// weird stuff happens when you try to work with the binary string directly.\n// It is known.\n// From http://stackoverflow.com/questions/14967647/ (continues on next line)\n// encode-decode-image-with-base64-breaks-image (2013-04-21)\nfunction _binStringToArrayBuffer(bin) {\n var length = bin.length;\n var buf = new ArrayBuffer(length);\n var arr = new Uint8Array(buf);\n for (var i = 0; i < length; i++) {\n arr[i] = bin.charCodeAt(i);\n }\n return buf;\n}\n\n//\n// Blobs are not supported in all versions of IndexedDB, notably\n// Chrome <37 and Android <5. In those versions, storing a blob will throw.\n//\n// Various other blob bugs exist in Chrome v37-42 (inclusive).\n// Detecting them is expensive and confusing to users, and Chrome 37-42\n// is at very low usage worldwide, so we do a hacky userAgent check instead.\n//\n// content-type bug: https://code.google.com/p/chromium/issues/detail?id=408120\n// 404 bug: https://code.google.com/p/chromium/issues/detail?id=447916\n// FileReader bug: https://code.google.com/p/chromium/issues/detail?id=447836\n//\n// Code borrowed from PouchDB. See:\n// https://github.com/pouchdb/pouchdb/blob/master/packages/node_modules/pouchdb-adapter-idb/src/blobSupport.js\n//\nfunction _checkBlobSupportWithoutCaching(idb) {\n return new Promise$1(function (resolve) {\n var txn = idb.transaction(DETECT_BLOB_SUPPORT_STORE, READ_WRITE);\n var blob = createBlob(['']);\n txn.objectStore(DETECT_BLOB_SUPPORT_STORE).put(blob, 'key');\n\n txn.onabort = function (e) {\n // If the transaction aborts now its due to not being able to\n // write to the database, likely due to the disk being full\n e.preventDefault();\n e.stopPropagation();\n resolve(false);\n };\n\n txn.oncomplete = function () {\n var matchedChrome = navigator.userAgent.match(/Chrome\\/(\\d+)/);\n var matchedEdge = navigator.userAgent.match(/Edge\\//);\n // MS Edge pretends to be Chrome 42:\n // https://msdn.microsoft.com/en-us/library/hh869301%28v=vs.85%29.aspx\n resolve(matchedEdge || !matchedChrome || parseInt(matchedChrome[1], 10) >= 43);\n };\n })[\"catch\"](function () {\n return false; // error, so assume unsupported\n });\n}\n\nfunction _checkBlobSupport(idb) {\n if (typeof supportsBlobs === 'boolean') {\n return Promise$1.resolve(supportsBlobs);\n }\n return _checkBlobSupportWithoutCaching(idb).then(function (value) {\n supportsBlobs = value;\n return supportsBlobs;\n });\n}\n\nfunction _deferReadiness(dbInfo) {\n var dbContext = dbContexts[dbInfo.name];\n\n // Create a deferred object representing the current database operation.\n var deferredOperation = {};\n\n deferredOperation.promise = new Promise$1(function (resolve, reject) {\n deferredOperation.resolve = resolve;\n deferredOperation.reject = reject;\n });\n\n // Enqueue the deferred operation.\n dbContext.deferredOperations.push(deferredOperation);\n\n // Chain its promise to the database readiness.\n if (!dbContext.dbReady) {\n dbContext.dbReady = deferredOperation.promise;\n } else {\n dbContext.dbReady = dbContext.dbReady.then(function () {\n return deferredOperation.promise;\n });\n }\n}\n\nfunction _advanceReadiness(dbInfo) {\n var dbContext = dbContexts[dbInfo.name];\n\n // Dequeue a deferred operation.\n var deferredOperation = dbContext.deferredOperations.pop();\n\n // Resolve its promise (which is part of the database readiness\n // chain of promises).\n if (deferredOperation) {\n deferredOperation.resolve();\n return deferredOperation.promise;\n }\n}\n\nfunction _rejectReadiness(dbInfo, err) {\n var dbContext = dbContexts[dbInfo.name];\n\n // Dequeue a deferred operation.\n var deferredOperation = dbContext.deferredOperations.pop();\n\n // Reject its promise (which is part of the database readiness\n // chain of promises).\n if (deferredOperation) {\n deferredOperation.reject(err);\n return deferredOperation.promise;\n }\n}\n\nfunction _getConnection(dbInfo, upgradeNeeded) {\n return new Promise$1(function (resolve, reject) {\n dbContexts[dbInfo.name] = dbContexts[dbInfo.name] || createDbContext();\n\n if (dbInfo.db) {\n if (upgradeNeeded) {\n _deferReadiness(dbInfo);\n dbInfo.db.close();\n } else {\n return resolve(dbInfo.db);\n }\n }\n\n var dbArgs = [dbInfo.name];\n\n if (upgradeNeeded) {\n dbArgs.push(dbInfo.version);\n }\n\n var openreq = idb.open.apply(idb, dbArgs);\n\n if (upgradeNeeded) {\n openreq.onupgradeneeded = function (e) {\n var db = openreq.result;\n try {\n db.createObjectStore(dbInfo.storeName);\n if (e.oldVersion <= 1) {\n // Added when support for blob shims was added\n db.createObjectStore(DETECT_BLOB_SUPPORT_STORE);\n }\n } catch (ex) {\n if (ex.name === 'ConstraintError') {\n console.warn('The database \"' + dbInfo.name + '\"' + ' has been upgraded from version ' + e.oldVersion + ' to version ' + e.newVersion + ', but the storage \"' + dbInfo.storeName + '\" already exists.');\n } else {\n throw ex;\n }\n }\n };\n }\n\n openreq.onerror = function (e) {\n e.preventDefault();\n reject(openreq.error);\n };\n\n openreq.onsuccess = function () {\n resolve(openreq.result);\n _advanceReadiness(dbInfo);\n };\n });\n}\n\nfunction _getOriginalConnection(dbInfo) {\n return _getConnection(dbInfo, false);\n}\n\nfunction _getUpgradedConnection(dbInfo) {\n return _getConnection(dbInfo, true);\n}\n\nfunction _isUpgradeNeeded(dbInfo, defaultVersion) {\n if (!dbInfo.db) {\n return true;\n }\n\n var isNewStore = !dbInfo.db.objectStoreNames.contains(dbInfo.storeName);\n var isDowngrade = dbInfo.version < dbInfo.db.version;\n var isUpgrade = dbInfo.version > dbInfo.db.version;\n\n if (isDowngrade) {\n // If the version is not the default one\n // then warn for impossible downgrade.\n if (dbInfo.version !== defaultVersion) {\n console.warn('The database \"' + dbInfo.name + '\"' + \" can't be downgraded from version \" + dbInfo.db.version + ' to version ' + dbInfo.version + '.');\n }\n // Align the versions to prevent errors.\n dbInfo.version = dbInfo.db.version;\n }\n\n if (isUpgrade || isNewStore) {\n // If the store is new then increment the version (if needed).\n // This will trigger an \"upgradeneeded\" event which is required\n // for creating a store.\n if (isNewStore) {\n var incVersion = dbInfo.db.version + 1;\n if (incVersion > dbInfo.version) {\n dbInfo.version = incVersion;\n }\n }\n\n return true;\n }\n\n return false;\n}\n\n// encode a blob for indexeddb engines that don't support blobs\nfunction _encodeBlob(blob) {\n return new Promise$1(function (resolve, reject) {\n var reader = new FileReader();\n reader.onerror = reject;\n reader.onloadend = function (e) {\n var base64 = btoa(e.target.result || '');\n resolve({\n __local_forage_encoded_blob: true,\n data: base64,\n type: blob.type\n });\n };\n reader.readAsBinaryString(blob);\n });\n}\n\n// decode an encoded blob\nfunction _decodeBlob(encodedBlob) {\n var arrayBuff = _binStringToArrayBuffer(atob(encodedBlob.data));\n return createBlob([arrayBuff], { type: encodedBlob.type });\n}\n\n// is this one of our fancy encoded blobs?\nfunction _isEncodedBlob(value) {\n return value && value.__local_forage_encoded_blob;\n}\n\n// Specialize the default `ready()` function by making it dependent\n// on the current database operations. Thus, the driver will be actually\n// ready when it's been initialized (default) *and* there are no pending\n// operations on the database (initiated by some other instances).\nfunction _fullyReady(callback) {\n var self = this;\n\n var promise = self._initReady().then(function () {\n var dbContext = dbContexts[self._dbInfo.name];\n\n if (dbContext && dbContext.dbReady) {\n return dbContext.dbReady;\n }\n });\n\n executeTwoCallbacks(promise, callback, callback);\n return promise;\n}\n\n// Try to establish a new db connection to replace the\n// current one which is broken (i.e. experiencing\n// InvalidStateError while creating a transaction).\nfunction _tryReconnect(dbInfo) {\n _deferReadiness(dbInfo);\n\n var dbContext = dbContexts[dbInfo.name];\n var forages = dbContext.forages;\n\n for (var i = 0; i < forages.length; i++) {\n var forage = forages[i];\n if (forage._dbInfo.db) {\n forage._dbInfo.db.close();\n forage._dbInfo.db = null;\n }\n }\n dbInfo.db = null;\n\n return _getOriginalConnection(dbInfo).then(function (db) {\n dbInfo.db = db;\n if (_isUpgradeNeeded(dbInfo)) {\n // Reopen the database for upgrading.\n return _getUpgradedConnection(dbInfo);\n }\n return db;\n }).then(function (db) {\n // store the latest db reference\n // in case the db was upgraded\n dbInfo.db = dbContext.db = db;\n for (var i = 0; i < forages.length; i++) {\n forages[i]._dbInfo.db = db;\n }\n })[\"catch\"](function (err) {\n _rejectReadiness(dbInfo, err);\n throw err;\n });\n}\n\n// FF doesn't like Promises (micro-tasks) and IDDB store operations,\n// so we have to do it with callbacks\nfunction createTransaction(dbInfo, mode, callback, retries) {\n if (retries === undefined) {\n retries = 1;\n }\n\n try {\n var tx = dbInfo.db.transaction(dbInfo.storeName, mode);\n callback(null, tx);\n } catch (err) {\n if (retries > 0 && (!dbInfo.db || err.name === 'InvalidStateError' || err.name === 'NotFoundError')) {\n return Promise$1.resolve().then(function () {\n if (!dbInfo.db || err.name === 'NotFoundError' && !dbInfo.db.objectStoreNames.contains(dbInfo.storeName) && dbInfo.version <= dbInfo.db.version) {\n // increase the db version, to create the new ObjectStore\n if (dbInfo.db) {\n dbInfo.version = dbInfo.db.version + 1;\n }\n // Reopen the database for upgrading.\n return _getUpgradedConnection(dbInfo);\n }\n }).then(function () {\n return _tryReconnect(dbInfo).then(function () {\n createTransaction(dbInfo, mode, callback, retries - 1);\n });\n })[\"catch\"](callback);\n }\n\n callback(err);\n }\n}\n\nfunction createDbContext() {\n return {\n // Running localForages sharing a database.\n forages: [],\n // Shared database.\n db: null,\n // Database readiness (promise).\n dbReady: null,\n // Deferred operations on the database.\n deferredOperations: []\n };\n}\n\n// Open the IndexedDB database (automatically creates one if one didn't\n// previously exist), using any options set in the config.\nfunction _initStorage(options) {\n var self = this;\n var dbInfo = {\n db: null\n };\n\n if (options) {\n for (var i in options) {\n dbInfo[i] = options[i];\n }\n }\n\n // Get the current context of the database;\n var dbContext = dbContexts[dbInfo.name];\n\n // ...or create a new context.\n if (!dbContext) {\n dbContext = createDbContext();\n // Register the new context in the global container.\n dbContexts[dbInfo.name] = dbContext;\n }\n\n // Register itself as a running localForage in the current context.\n dbContext.forages.push(self);\n\n // Replace the default `ready()` function with the specialized one.\n if (!self._initReady) {\n self._initReady = self.ready;\n self.ready = _fullyReady;\n }\n\n // Create an array of initialization states of the related localForages.\n var initPromises = [];\n\n function ignoreErrors() {\n // Don't handle errors here,\n // just makes sure related localForages aren't pending.\n return Promise$1.resolve();\n }\n\n for (var j = 0; j < dbContext.forages.length; j++) {\n var forage = dbContext.forages[j];\n if (forage !== self) {\n // Don't wait for itself...\n initPromises.push(forage._initReady()[\"catch\"](ignoreErrors));\n }\n }\n\n // Take a snapshot of the related localForages.\n var forages = dbContext.forages.slice(0);\n\n // Initialize the connection process only when\n // all the related localForages aren't pending.\n return Promise$1.all(initPromises).then(function () {\n dbInfo.db = dbContext.db;\n // Get the connection or open a new one without upgrade.\n return _getOriginalConnection(dbInfo);\n }).then(function (db) {\n dbInfo.db = db;\n if (_isUpgradeNeeded(dbInfo, self._defaultConfig.version)) {\n // Reopen the database for upgrading.\n return _getUpgradedConnection(dbInfo);\n }\n return db;\n }).then(function (db) {\n dbInfo.db = dbContext.db = db;\n self._dbInfo = dbInfo;\n // Share the final connection amongst related localForages.\n for (var k = 0; k < forages.length; k++) {\n var forage = forages[k];\n if (forage !== self) {\n // Self is already up-to-date.\n forage._dbInfo.db = dbInfo.db;\n forage._dbInfo.version = dbInfo.version;\n }\n }\n });\n}\n\nfunction getItem(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.get(key);\n\n req.onsuccess = function () {\n var value = req.result;\n if (value === undefined) {\n value = null;\n }\n if (_isEncodedBlob(value)) {\n value = _decodeBlob(value);\n }\n resolve(value);\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Iterate over all items stored in database.\nfunction iterate(iterator, callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.openCursor();\n var iterationNumber = 1;\n\n req.onsuccess = function () {\n var cursor = req.result;\n\n if (cursor) {\n var value = cursor.value;\n if (_isEncodedBlob(value)) {\n value = _decodeBlob(value);\n }\n var result = iterator(value, cursor.key, iterationNumber++);\n\n // when the iterator callback returns any\n // (non-`undefined`) value, then we stop\n // the iteration immediately\n if (result !== void 0) {\n resolve(result);\n } else {\n cursor[\"continue\"]();\n }\n } else {\n resolve();\n }\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n\n return promise;\n}\n\nfunction setItem(key, value, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n var dbInfo;\n self.ready().then(function () {\n dbInfo = self._dbInfo;\n if (toString.call(value) === '[object Blob]') {\n return _checkBlobSupport(dbInfo.db).then(function (blobSupport) {\n if (blobSupport) {\n return value;\n }\n return _encodeBlob(value);\n });\n }\n return value;\n }).then(function (value) {\n createTransaction(self._dbInfo, READ_WRITE, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n\n // The reason we don't _save_ null is because IE 10 does\n // not support saving the `null` type in IndexedDB. How\n // ironic, given the bug below!\n // See: https://github.com/mozilla/localForage/issues/161\n if (value === null) {\n value = undefined;\n }\n\n var req = store.put(value, key);\n\n transaction.oncomplete = function () {\n // Cast to undefined so the value passed to\n // callback/promise is the same as what one would get out\n // of `getItem()` later. This leads to some weirdness\n // (setItem('foo', undefined) will return `null`), but\n // it's not my fault localStorage is our baseline and that\n // it's weird.\n if (value === undefined) {\n value = null;\n }\n\n resolve(value);\n };\n transaction.onabort = transaction.onerror = function () {\n var err = req.error ? req.error : req.transaction.error;\n reject(err);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction removeItem(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_WRITE, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n // We use a Grunt task to make this safe for IE and some\n // versions of Android (including those used by Cordova).\n // Normally IE won't like `.delete()` and will insist on\n // using `['delete']()`, but we have a build step that\n // fixes this for us now.\n var req = store[\"delete\"](key);\n transaction.oncomplete = function () {\n resolve();\n };\n\n transaction.onerror = function () {\n reject(req.error);\n };\n\n // The request will be also be aborted if we've exceeded our storage\n // space.\n transaction.onabort = function () {\n var err = req.error ? req.error : req.transaction.error;\n reject(err);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction clear(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_WRITE, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.clear();\n\n transaction.oncomplete = function () {\n resolve();\n };\n\n transaction.onabort = transaction.onerror = function () {\n var err = req.error ? req.error : req.transaction.error;\n reject(err);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction length(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.count();\n\n req.onsuccess = function () {\n resolve(req.result);\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction key(n, callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n if (n < 0) {\n resolve(null);\n\n return;\n }\n\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var advanced = false;\n var req = store.openKeyCursor();\n\n req.onsuccess = function () {\n var cursor = req.result;\n if (!cursor) {\n // this means there weren't enough keys\n resolve(null);\n\n return;\n }\n\n if (n === 0) {\n // We have the first key, return it if that's what they\n // wanted.\n resolve(cursor.key);\n } else {\n if (!advanced) {\n // Otherwise, ask the cursor to skip ahead n\n // records.\n advanced = true;\n cursor.advance(n);\n } else {\n // When we get here, we've got the nth key.\n resolve(cursor.key);\n }\n }\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction keys(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.openKeyCursor();\n var keys = [];\n\n req.onsuccess = function () {\n var cursor = req.result;\n\n if (!cursor) {\n resolve(keys);\n return;\n }\n\n keys.push(cursor.key);\n cursor[\"continue\"]();\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction dropInstance(options, callback) {\n callback = getCallback.apply(this, arguments);\n\n var currentConfig = this.config();\n options = typeof options !== 'function' && options || {};\n if (!options.name) {\n options.name = options.name || currentConfig.name;\n options.storeName = options.storeName || currentConfig.storeName;\n }\n\n var self = this;\n var promise;\n if (!options.name) {\n promise = Promise$1.reject('Invalid arguments');\n } else {\n var isCurrentDb = options.name === currentConfig.name && self._dbInfo.db;\n\n var dbPromise = isCurrentDb ? Promise$1.resolve(self._dbInfo.db) : _getOriginalConnection(options).then(function (db) {\n var dbContext = dbContexts[options.name];\n var forages = dbContext.forages;\n dbContext.db = db;\n for (var i = 0; i < forages.length; i++) {\n forages[i]._dbInfo.db = db;\n }\n return db;\n });\n\n if (!options.storeName) {\n promise = dbPromise.then(function (db) {\n _deferReadiness(options);\n\n var dbContext = dbContexts[options.name];\n var forages = dbContext.forages;\n\n db.close();\n for (var i = 0; i < forages.length; i++) {\n var forage = forages[i];\n forage._dbInfo.db = null;\n }\n\n var dropDBPromise = new Promise$1(function (resolve, reject) {\n var req = idb.deleteDatabase(options.name);\n\n req.onerror = req.onblocked = function (err) {\n var db = req.result;\n if (db) {\n db.close();\n }\n reject(err);\n };\n\n req.onsuccess = function () {\n var db = req.result;\n if (db) {\n db.close();\n }\n resolve(db);\n };\n });\n\n return dropDBPromise.then(function (db) {\n dbContext.db = db;\n for (var i = 0; i < forages.length; i++) {\n var _forage = forages[i];\n _advanceReadiness(_forage._dbInfo);\n }\n })[\"catch\"](function (err) {\n (_rejectReadiness(options, err) || Promise$1.resolve())[\"catch\"](function () {});\n throw err;\n });\n });\n } else {\n promise = dbPromise.then(function (db) {\n if (!db.objectStoreNames.contains(options.storeName)) {\n return;\n }\n\n var newVersion = db.version + 1;\n\n _deferReadiness(options);\n\n var dbContext = dbContexts[options.name];\n var forages = dbContext.forages;\n\n db.close();\n for (var i = 0; i < forages.length; i++) {\n var forage = forages[i];\n forage._dbInfo.db = null;\n forage._dbInfo.version = newVersion;\n }\n\n var dropObjectPromise = new Promise$1(function (resolve, reject) {\n var req = idb.open(options.name, newVersion);\n\n req.onerror = function (err) {\n var db = req.result;\n db.close();\n reject(err);\n };\n\n req.onupgradeneeded = function () {\n var db = req.result;\n db.deleteObjectStore(options.storeName);\n };\n\n req.onsuccess = function () {\n var db = req.result;\n db.close();\n resolve(db);\n };\n });\n\n return dropObjectPromise.then(function (db) {\n dbContext.db = db;\n for (var j = 0; j < forages.length; j++) {\n var _forage2 = forages[j];\n _forage2._dbInfo.db = db;\n _advanceReadiness(_forage2._dbInfo);\n }\n })[\"catch\"](function (err) {\n (_rejectReadiness(options, err) || Promise$1.resolve())[\"catch\"](function () {});\n throw err;\n });\n });\n }\n }\n\n executeCallback(promise, callback);\n return promise;\n}\n\nvar asyncStorage = {\n _driver: 'asyncStorage',\n _initStorage: _initStorage,\n _support: isIndexedDBValid(),\n iterate: iterate,\n getItem: getItem,\n setItem: setItem,\n removeItem: removeItem,\n clear: clear,\n length: length,\n key: key,\n keys: keys,\n dropInstance: dropInstance\n};\n\nfunction isWebSQLValid() {\n return typeof openDatabase === 'function';\n}\n\n// Sadly, the best way to save binary data in WebSQL/localStorage is serializing\n// it to Base64, so this is how we store it to prevent very strange errors with less\n// verbose ways of binary <-> string data storage.\nvar BASE_CHARS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\nvar BLOB_TYPE_PREFIX = '~~local_forage_type~';\nvar BLOB_TYPE_PREFIX_REGEX = /^~~local_forage_type~([^~]+)~/;\n\nvar SERIALIZED_MARKER = '__lfsc__:';\nvar SERIALIZED_MARKER_LENGTH = SERIALIZED_MARKER.length;\n\n// OMG the serializations!\nvar TYPE_ARRAYBUFFER = 'arbf';\nvar TYPE_BLOB = 'blob';\nvar TYPE_INT8ARRAY = 'si08';\nvar TYPE_UINT8ARRAY = 'ui08';\nvar TYPE_UINT8CLAMPEDARRAY = 'uic8';\nvar TYPE_INT16ARRAY = 'si16';\nvar TYPE_INT32ARRAY = 'si32';\nvar TYPE_UINT16ARRAY = 'ur16';\nvar TYPE_UINT32ARRAY = 'ui32';\nvar TYPE_FLOAT32ARRAY = 'fl32';\nvar TYPE_FLOAT64ARRAY = 'fl64';\nvar TYPE_SERIALIZED_MARKER_LENGTH = SERIALIZED_MARKER_LENGTH + TYPE_ARRAYBUFFER.length;\n\nvar toString$1 = Object.prototype.toString;\n\nfunction stringToBuffer(serializedString) {\n // Fill the string into a ArrayBuffer.\n var bufferLength = serializedString.length * 0.75;\n var len = serializedString.length;\n var i;\n var p = 0;\n var encoded1, encoded2, encoded3, encoded4;\n\n if (serializedString[serializedString.length - 1] === '=') {\n bufferLength--;\n if (serializedString[serializedString.length - 2] === '=') {\n bufferLength--;\n }\n }\n\n var buffer = new ArrayBuffer(bufferLength);\n var bytes = new Uint8Array(buffer);\n\n for (i = 0; i < len; i += 4) {\n encoded1 = BASE_CHARS.indexOf(serializedString[i]);\n encoded2 = BASE_CHARS.indexOf(serializedString[i + 1]);\n encoded3 = BASE_CHARS.indexOf(serializedString[i + 2]);\n encoded4 = BASE_CHARS.indexOf(serializedString[i + 3]);\n\n /*jslint bitwise: true */\n bytes[p++] = encoded1 << 2 | encoded2 >> 4;\n bytes[p++] = (encoded2 & 15) << 4 | encoded3 >> 2;\n bytes[p++] = (encoded3 & 3) << 6 | encoded4 & 63;\n }\n return buffer;\n}\n\n// Converts a buffer to a string to store, serialized, in the backend\n// storage library.\nfunction bufferToString(buffer) {\n // base64-arraybuffer\n var bytes = new Uint8Array(buffer);\n var base64String = '';\n var i;\n\n for (i = 0; i < bytes.length; i += 3) {\n /*jslint bitwise: true */\n base64String += BASE_CHARS[bytes[i] >> 2];\n base64String += BASE_CHARS[(bytes[i] & 3) << 4 | bytes[i + 1] >> 4];\n base64String += BASE_CHARS[(bytes[i + 1] & 15) << 2 | bytes[i + 2] >> 6];\n base64String += BASE_CHARS[bytes[i + 2] & 63];\n }\n\n if (bytes.length % 3 === 2) {\n base64String = base64String.substring(0, base64String.length - 1) + '=';\n } else if (bytes.length % 3 === 1) {\n base64String = base64String.substring(0, base64String.length - 2) + '==';\n }\n\n return base64String;\n}\n\n// Serialize a value, afterwards executing a callback (which usually\n// instructs the `setItem()` callback/promise to be executed). This is how\n// we store binary data with localStorage.\nfunction serialize(value, callback) {\n var valueType = '';\n if (value) {\n valueType = toString$1.call(value);\n }\n\n // Cannot use `value instanceof ArrayBuffer` or such here, as these\n // checks fail when running the tests using casper.js...\n //\n // TODO: See why those tests fail and use a better solution.\n if (value && (valueType === '[object ArrayBuffer]' || value.buffer && toString$1.call(value.buffer) === '[object ArrayBuffer]')) {\n // Convert binary arrays to a string and prefix the string with\n // a special marker.\n var buffer;\n var marker = SERIALIZED_MARKER;\n\n if (value instanceof ArrayBuffer) {\n buffer = value;\n marker += TYPE_ARRAYBUFFER;\n } else {\n buffer = value.buffer;\n\n if (valueType === '[object Int8Array]') {\n marker += TYPE_INT8ARRAY;\n } else if (valueType === '[object Uint8Array]') {\n marker += TYPE_UINT8ARRAY;\n } else if (valueType === '[object Uint8ClampedArray]') {\n marker += TYPE_UINT8CLAMPEDARRAY;\n } else if (valueType === '[object Int16Array]') {\n marker += TYPE_INT16ARRAY;\n } else if (valueType === '[object Uint16Array]') {\n marker += TYPE_UINT16ARRAY;\n } else if (valueType === '[object Int32Array]') {\n marker += TYPE_INT32ARRAY;\n } else if (valueType === '[object Uint32Array]') {\n marker += TYPE_UINT32ARRAY;\n } else if (valueType === '[object Float32Array]') {\n marker += TYPE_FLOAT32ARRAY;\n } else if (valueType === '[object Float64Array]') {\n marker += TYPE_FLOAT64ARRAY;\n } else {\n callback(new Error('Failed to get type for BinaryArray'));\n }\n }\n\n callback(marker + bufferToString(buffer));\n } else if (valueType === '[object Blob]') {\n // Conver the blob to a binaryArray and then to a string.\n var fileReader = new FileReader();\n\n fileReader.onload = function () {\n // Backwards-compatible prefix for the blob type.\n var str = BLOB_TYPE_PREFIX + value.type + '~' + bufferToString(this.result);\n\n callback(SERIALIZED_MARKER + TYPE_BLOB + str);\n };\n\n fileReader.readAsArrayBuffer(value);\n } else {\n try {\n callback(JSON.stringify(value));\n } catch (e) {\n console.error(\"Couldn't convert value into a JSON string: \", value);\n\n callback(null, e);\n }\n }\n}\n\n// Deserialize data we've inserted into a value column/field. We place\n// special markers into our strings to mark them as encoded; this isn't\n// as nice as a meta field, but it's the only sane thing we can do whilst\n// keeping localStorage support intact.\n//\n// Oftentimes this will just deserialize JSON content, but if we have a\n// special marker (SERIALIZED_MARKER, defined above), we will extract\n// some kind of arraybuffer/binary data/typed array out of the string.\nfunction deserialize(value) {\n // If we haven't marked this string as being specially serialized (i.e.\n // something other than serialized JSON), we can just return it and be\n // done with it.\n if (value.substring(0, SERIALIZED_MARKER_LENGTH) !== SERIALIZED_MARKER) {\n return JSON.parse(value);\n }\n\n // The following code deals with deserializing some kind of Blob or\n // TypedArray. First we separate out the type of data we're dealing\n // with from the data itself.\n var serializedString = value.substring(TYPE_SERIALIZED_MARKER_LENGTH);\n var type = value.substring(SERIALIZED_MARKER_LENGTH, TYPE_SERIALIZED_MARKER_LENGTH);\n\n var blobType;\n // Backwards-compatible blob type serialization strategy.\n // DBs created with older versions of localForage will simply not have the blob type.\n if (type === TYPE_BLOB && BLOB_TYPE_PREFIX_REGEX.test(serializedString)) {\n var matcher = serializedString.match(BLOB_TYPE_PREFIX_REGEX);\n blobType = matcher[1];\n serializedString = serializedString.substring(matcher[0].length);\n }\n var buffer = stringToBuffer(serializedString);\n\n // Return the right type based on the code/type set during\n // serialization.\n switch (type) {\n case TYPE_ARRAYBUFFER:\n return buffer;\n case TYPE_BLOB:\n return createBlob([buffer], { type: blobType });\n case TYPE_INT8ARRAY:\n return new Int8Array(buffer);\n case TYPE_UINT8ARRAY:\n return new Uint8Array(buffer);\n case TYPE_UINT8CLAMPEDARRAY:\n return new Uint8ClampedArray(buffer);\n case TYPE_INT16ARRAY:\n return new Int16Array(buffer);\n case TYPE_UINT16ARRAY:\n return new Uint16Array(buffer);\n case TYPE_INT32ARRAY:\n return new Int32Array(buffer);\n case TYPE_UINT32ARRAY:\n return new Uint32Array(buffer);\n case TYPE_FLOAT32ARRAY:\n return new Float32Array(buffer);\n case TYPE_FLOAT64ARRAY:\n return new Float64Array(buffer);\n default:\n throw new Error('Unkown type: ' + type);\n }\n}\n\nvar localforageSerializer = {\n serialize: serialize,\n deserialize: deserialize,\n stringToBuffer: stringToBuffer,\n bufferToString: bufferToString\n};\n\n/*\n * Includes code from:\n *\n * base64-arraybuffer\n * https://github.com/niklasvh/base64-arraybuffer\n *\n * Copyright (c) 2012 Niklas von Hertzen\n * Licensed under the MIT license.\n */\n\nfunction createDbTable(t, dbInfo, callback, errorCallback) {\n t.executeSql('CREATE TABLE IF NOT EXISTS ' + dbInfo.storeName + ' ' + '(id INTEGER PRIMARY KEY, key unique, value)', [], callback, errorCallback);\n}\n\n// Open the WebSQL database (automatically creates one if one didn't\n// previously exist), using any options set in the config.\nfunction _initStorage$1(options) {\n var self = this;\n var dbInfo = {\n db: null\n };\n\n if (options) {\n for (var i in options) {\n dbInfo[i] = typeof options[i] !== 'string' ? options[i].toString() : options[i];\n }\n }\n\n var dbInfoPromise = new Promise$1(function (resolve, reject) {\n // Open the database; the openDatabase API will automatically\n // create it for us if it doesn't exist.\n try {\n dbInfo.db = openDatabase(dbInfo.name, String(dbInfo.version), dbInfo.description, dbInfo.size);\n } catch (e) {\n return reject(e);\n }\n\n // Create our key/value table if it doesn't exist.\n dbInfo.db.transaction(function (t) {\n createDbTable(t, dbInfo, function () {\n self._dbInfo = dbInfo;\n resolve();\n }, function (t, error) {\n reject(error);\n });\n }, reject);\n });\n\n dbInfo.serializer = localforageSerializer;\n return dbInfoPromise;\n}\n\nfunction tryExecuteSql(t, dbInfo, sqlStatement, args, callback, errorCallback) {\n t.executeSql(sqlStatement, args, callback, function (t, error) {\n if (error.code === error.SYNTAX_ERR) {\n t.executeSql('SELECT name FROM sqlite_master ' + \"WHERE type='table' AND name = ?\", [dbInfo.storeName], function (t, results) {\n if (!results.rows.length) {\n // if the table is missing (was deleted)\n // re-create it table and retry\n createDbTable(t, dbInfo, function () {\n t.executeSql(sqlStatement, args, callback, errorCallback);\n }, errorCallback);\n } else {\n errorCallback(t, error);\n }\n }, errorCallback);\n } else {\n errorCallback(t, error);\n }\n }, errorCallback);\n}\n\nfunction getItem$1(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'SELECT * FROM ' + dbInfo.storeName + ' WHERE key = ? LIMIT 1', [key], function (t, results) {\n var result = results.rows.length ? results.rows.item(0).value : null;\n\n // Check to see if this is serialized content we need to\n // unpack.\n if (result) {\n result = dbInfo.serializer.deserialize(result);\n }\n\n resolve(result);\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction iterate$1(iterator, callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'SELECT * FROM ' + dbInfo.storeName, [], function (t, results) {\n var rows = results.rows;\n var length = rows.length;\n\n for (var i = 0; i < length; i++) {\n var item = rows.item(i);\n var result = item.value;\n\n // Check to see if this is serialized content\n // we need to unpack.\n if (result) {\n result = dbInfo.serializer.deserialize(result);\n }\n\n result = iterator(result, item.key, i + 1);\n\n // void(0) prevents problems with redefinition\n // of `undefined`.\n if (result !== void 0) {\n resolve(result);\n return;\n }\n }\n\n resolve();\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction _setItem(key, value, callback, retriesLeft) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n // The localStorage API doesn't return undefined values in an\n // \"expected\" way, so undefined is always cast to null in all\n // drivers. See: https://github.com/mozilla/localForage/pull/42\n if (value === undefined) {\n value = null;\n }\n\n // Save the original value to pass to the callback.\n var originalValue = value;\n\n var dbInfo = self._dbInfo;\n dbInfo.serializer.serialize(value, function (value, error) {\n if (error) {\n reject(error);\n } else {\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'INSERT OR REPLACE INTO ' + dbInfo.storeName + ' ' + '(key, value) VALUES (?, ?)', [key, value], function () {\n resolve(originalValue);\n }, function (t, error) {\n reject(error);\n });\n }, function (sqlError) {\n // The transaction failed; check\n // to see if it's a quota error.\n if (sqlError.code === sqlError.QUOTA_ERR) {\n // We reject the callback outright for now, but\n // it's worth trying to re-run the transaction.\n // Even if the user accepts the prompt to use\n // more storage on Safari, this error will\n // be called.\n //\n // Try to re-run the transaction.\n if (retriesLeft > 0) {\n resolve(_setItem.apply(self, [key, originalValue, callback, retriesLeft - 1]));\n return;\n }\n reject(sqlError);\n }\n });\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction setItem$1(key, value, callback) {\n return _setItem.apply(this, [key, value, callback, 1]);\n}\n\nfunction removeItem$1(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'DELETE FROM ' + dbInfo.storeName + ' WHERE key = ?', [key], function () {\n resolve();\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Deletes every item in the table.\n// TODO: Find out if this resets the AUTO_INCREMENT number.\nfunction clear$1(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'DELETE FROM ' + dbInfo.storeName, [], function () {\n resolve();\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Does a simple `COUNT(key)` to get the number of items stored in\n// localForage.\nfunction length$1(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n // Ahhh, SQL makes this one soooooo easy.\n tryExecuteSql(t, dbInfo, 'SELECT COUNT(key) as c FROM ' + dbInfo.storeName, [], function (t, results) {\n var result = results.rows.item(0).c;\n resolve(result);\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Return the key located at key index X; essentially gets the key from a\n// `WHERE id = ?`. This is the most efficient way I can think to implement\n// this rarely-used (in my experience) part of the API, but it can seem\n// inconsistent, because we do `INSERT OR REPLACE INTO` on `setItem()`, so\n// the ID of each key will change every time it's updated. Perhaps a stored\n// procedure for the `setItem()` SQL would solve this problem?\n// TODO: Don't change ID on `setItem()`.\nfunction key$1(n, callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'SELECT key FROM ' + dbInfo.storeName + ' WHERE id = ? LIMIT 1', [n + 1], function (t, results) {\n var result = results.rows.length ? results.rows.item(0).key : null;\n resolve(result);\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction keys$1(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'SELECT key FROM ' + dbInfo.storeName, [], function (t, results) {\n var keys = [];\n\n for (var i = 0; i < results.rows.length; i++) {\n keys.push(results.rows.item(i).key);\n }\n\n resolve(keys);\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// https://www.w3.org/TR/webdatabase/#databases\n// > There is no way to enumerate or delete the databases available for an origin from this API.\nfunction getAllStoreNames(db) {\n return new Promise$1(function (resolve, reject) {\n db.transaction(function (t) {\n t.executeSql('SELECT name FROM sqlite_master ' + \"WHERE type='table' AND name <> '__WebKitDatabaseInfoTable__'\", [], function (t, results) {\n var storeNames = [];\n\n for (var i = 0; i < results.rows.length; i++) {\n storeNames.push(results.rows.item(i).name);\n }\n\n resolve({\n db: db,\n storeNames: storeNames\n });\n }, function (t, error) {\n reject(error);\n });\n }, function (sqlError) {\n reject(sqlError);\n });\n });\n}\n\nfunction dropInstance$1(options, callback) {\n callback = getCallback.apply(this, arguments);\n\n var currentConfig = this.config();\n options = typeof options !== 'function' && options || {};\n if (!options.name) {\n options.name = options.name || currentConfig.name;\n options.storeName = options.storeName || currentConfig.storeName;\n }\n\n var self = this;\n var promise;\n if (!options.name) {\n promise = Promise$1.reject('Invalid arguments');\n } else {\n promise = new Promise$1(function (resolve) {\n var db;\n if (options.name === currentConfig.name) {\n // use the db reference of the current instance\n db = self._dbInfo.db;\n } else {\n db = openDatabase(options.name, '', '', 0);\n }\n\n if (!options.storeName) {\n // drop all database tables\n resolve(getAllStoreNames(db));\n } else {\n resolve({\n db: db,\n storeNames: [options.storeName]\n });\n }\n }).then(function (operationInfo) {\n return new Promise$1(function (resolve, reject) {\n operationInfo.db.transaction(function (t) {\n function dropTable(storeName) {\n return new Promise$1(function (resolve, reject) {\n t.executeSql('DROP TABLE IF EXISTS ' + storeName, [], function () {\n resolve();\n }, function (t, error) {\n reject(error);\n });\n });\n }\n\n var operations = [];\n for (var i = 0, len = operationInfo.storeNames.length; i < len; i++) {\n operations.push(dropTable(operationInfo.storeNames[i]));\n }\n\n Promise$1.all(operations).then(function () {\n resolve();\n })[\"catch\"](function (e) {\n reject(e);\n });\n }, function (sqlError) {\n reject(sqlError);\n });\n });\n });\n }\n\n executeCallback(promise, callback);\n return promise;\n}\n\nvar webSQLStorage = {\n _driver: 'webSQLStorage',\n _initStorage: _initStorage$1,\n _support: isWebSQLValid(),\n iterate: iterate$1,\n getItem: getItem$1,\n setItem: setItem$1,\n removeItem: removeItem$1,\n clear: clear$1,\n length: length$1,\n key: key$1,\n keys: keys$1,\n dropInstance: dropInstance$1\n};\n\nfunction isLocalStorageValid() {\n try {\n return typeof localStorage !== 'undefined' && 'setItem' in localStorage &&\n // in IE8 typeof localStorage.setItem === 'object'\n !!localStorage.setItem;\n } catch (e) {\n return false;\n }\n}\n\nfunction _getKeyPrefix(options, defaultConfig) {\n var keyPrefix = options.name + '/';\n\n if (options.storeName !== defaultConfig.storeName) {\n keyPrefix += options.storeName + '/';\n }\n return keyPrefix;\n}\n\n// Check if localStorage throws when saving an item\nfunction checkIfLocalStorageThrows() {\n var localStorageTestKey = '_localforage_support_test';\n\n try {\n localStorage.setItem(localStorageTestKey, true);\n localStorage.removeItem(localStorageTestKey);\n\n return false;\n } catch (e) {\n return true;\n }\n}\n\n// Check if localStorage is usable and allows to save an item\n// This method checks if localStorage is usable in Safari Private Browsing\n// mode, or in any other case where the available quota for localStorage\n// is 0 and there wasn't any saved items yet.\nfunction _isLocalStorageUsable() {\n return !checkIfLocalStorageThrows() || localStorage.length > 0;\n}\n\n// Config the localStorage backend, using options set in the config.\nfunction _initStorage$2(options) {\n var self = this;\n var dbInfo = {};\n if (options) {\n for (var i in options) {\n dbInfo[i] = options[i];\n }\n }\n\n dbInfo.keyPrefix = _getKeyPrefix(options, self._defaultConfig);\n\n if (!_isLocalStorageUsable()) {\n return Promise$1.reject();\n }\n\n self._dbInfo = dbInfo;\n dbInfo.serializer = localforageSerializer;\n\n return Promise$1.resolve();\n}\n\n// Remove all keys from the datastore, effectively destroying all data in\n// the app's key/value store!\nfunction clear$2(callback) {\n var self = this;\n var promise = self.ready().then(function () {\n var keyPrefix = self._dbInfo.keyPrefix;\n\n for (var i = localStorage.length - 1; i >= 0; i--) {\n var key = localStorage.key(i);\n\n if (key.indexOf(keyPrefix) === 0) {\n localStorage.removeItem(key);\n }\n }\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Retrieve an item from the store. Unlike the original async_storage\n// library in Gaia, we don't modify return values at all. If a key's value\n// is `undefined`, we pass that value to the callback function.\nfunction getItem$2(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var result = localStorage.getItem(dbInfo.keyPrefix + key);\n\n // If a result was found, parse it from the serialized\n // string into a JS object. If result isn't truthy, the key\n // is likely undefined and we'll pass it straight to the\n // callback.\n if (result) {\n result = dbInfo.serializer.deserialize(result);\n }\n\n return result;\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Iterate over all items in the store.\nfunction iterate$2(iterator, callback) {\n var self = this;\n\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var keyPrefix = dbInfo.keyPrefix;\n var keyPrefixLength = keyPrefix.length;\n var length = localStorage.length;\n\n // We use a dedicated iterator instead of the `i` variable below\n // so other keys we fetch in localStorage aren't counted in\n // the `iterationNumber` argument passed to the `iterate()`\n // callback.\n //\n // See: github.com/mozilla/localForage/pull/435#discussion_r38061530\n var iterationNumber = 1;\n\n for (var i = 0; i < length; i++) {\n var key = localStorage.key(i);\n if (key.indexOf(keyPrefix) !== 0) {\n continue;\n }\n var value = localStorage.getItem(key);\n\n // If a result was found, parse it from the serialized\n // string into a JS object. If result isn't truthy, the\n // key is likely undefined and we'll pass it straight\n // to the iterator.\n if (value) {\n value = dbInfo.serializer.deserialize(value);\n }\n\n value = iterator(value, key.substring(keyPrefixLength), iterationNumber++);\n\n if (value !== void 0) {\n return value;\n }\n }\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Same as localStorage's key() method, except takes a callback.\nfunction key$2(n, callback) {\n var self = this;\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var result;\n try {\n result = localStorage.key(n);\n } catch (error) {\n result = null;\n }\n\n // Remove the prefix from the key, if a key is found.\n if (result) {\n result = result.substring(dbInfo.keyPrefix.length);\n }\n\n return result;\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction keys$2(callback) {\n var self = this;\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var length = localStorage.length;\n var keys = [];\n\n for (var i = 0; i < length; i++) {\n var itemKey = localStorage.key(i);\n if (itemKey.indexOf(dbInfo.keyPrefix) === 0) {\n keys.push(itemKey.substring(dbInfo.keyPrefix.length));\n }\n }\n\n return keys;\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Supply the number of keys in the datastore to the callback function.\nfunction length$2(callback) {\n var self = this;\n var promise = self.keys().then(function (keys) {\n return keys.length;\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Remove an item from the store, nice and simple.\nfunction removeItem$2(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n localStorage.removeItem(dbInfo.keyPrefix + key);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Set a key's value and run an optional callback once the value is set.\n// Unlike Gaia's implementation, the callback function is passed the value,\n// in case you want to operate on that value only after you're sure it\n// saved, or something like that.\nfunction setItem$2(key, value, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = self.ready().then(function () {\n // Convert undefined values to null.\n // https://github.com/mozilla/localForage/pull/42\n if (value === undefined) {\n value = null;\n }\n\n // Save the original value to pass to the callback.\n var originalValue = value;\n\n return new Promise$1(function (resolve, reject) {\n var dbInfo = self._dbInfo;\n dbInfo.serializer.serialize(value, function (value, error) {\n if (error) {\n reject(error);\n } else {\n try {\n localStorage.setItem(dbInfo.keyPrefix + key, value);\n resolve(originalValue);\n } catch (e) {\n // localStorage capacity exceeded.\n // TODO: Make this a specific error/event.\n if (e.name === 'QuotaExceededError' || e.name === 'NS_ERROR_DOM_QUOTA_REACHED') {\n reject(e);\n }\n reject(e);\n }\n }\n });\n });\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction dropInstance$2(options, callback) {\n callback = getCallback.apply(this, arguments);\n\n options = typeof options !== 'function' && options || {};\n if (!options.name) {\n var currentConfig = this.config();\n options.name = options.name || currentConfig.name;\n options.storeName = options.storeName || currentConfig.storeName;\n }\n\n var self = this;\n var promise;\n if (!options.name) {\n promise = Promise$1.reject('Invalid arguments');\n } else {\n promise = new Promise$1(function (resolve) {\n if (!options.storeName) {\n resolve(options.name + '/');\n } else {\n resolve(_getKeyPrefix(options, self._defaultConfig));\n }\n }).then(function (keyPrefix) {\n for (var i = localStorage.length - 1; i >= 0; i--) {\n var key = localStorage.key(i);\n\n if (key.indexOf(keyPrefix) === 0) {\n localStorage.removeItem(key);\n }\n }\n });\n }\n\n executeCallback(promise, callback);\n return promise;\n}\n\nvar localStorageWrapper = {\n _driver: 'localStorageWrapper',\n _initStorage: _initStorage$2,\n _support: isLocalStorageValid(),\n iterate: iterate$2,\n getItem: getItem$2,\n setItem: setItem$2,\n removeItem: removeItem$2,\n clear: clear$2,\n length: length$2,\n key: key$2,\n keys: keys$2,\n dropInstance: dropInstance$2\n};\n\nvar sameValue = function sameValue(x, y) {\n return x === y || typeof x === 'number' && typeof y === 'number' && isNaN(x) && isNaN(y);\n};\n\nvar includes = function includes(array, searchElement) {\n var len = array.length;\n var i = 0;\n while (i < len) {\n if (sameValue(array[i], searchElement)) {\n return true;\n }\n i++;\n }\n\n return false;\n};\n\nvar isArray = Array.isArray || function (arg) {\n return Object.prototype.toString.call(arg) === '[object Array]';\n};\n\n// Drivers are stored here when `defineDriver()` is called.\n// They are shared across all instances of localForage.\nvar DefinedDrivers = {};\n\nvar DriverSupport = {};\n\nvar DefaultDrivers = {\n INDEXEDDB: asyncStorage,\n WEBSQL: webSQLStorage,\n LOCALSTORAGE: localStorageWrapper\n};\n\nvar DefaultDriverOrder = [DefaultDrivers.INDEXEDDB._driver, DefaultDrivers.WEBSQL._driver, DefaultDrivers.LOCALSTORAGE._driver];\n\nvar OptionalDriverMethods = ['dropInstance'];\n\nvar LibraryMethods = ['clear', 'getItem', 'iterate', 'key', 'keys', 'length', 'removeItem', 'setItem'].concat(OptionalDriverMethods);\n\nvar DefaultConfig = {\n description: '',\n driver: DefaultDriverOrder.slice(),\n name: 'localforage',\n // Default DB size is _JUST UNDER_ 5MB, as it's the highest size\n // we can use without a prompt.\n size: 4980736,\n storeName: 'keyvaluepairs',\n version: 1.0\n};\n\nfunction callWhenReady(localForageInstance, libraryMethod) {\n localForageInstance[libraryMethod] = function () {\n var _args = arguments;\n return localForageInstance.ready().then(function () {\n return localForageInstance[libraryMethod].apply(localForageInstance, _args);\n });\n };\n}\n\nfunction extend() {\n for (var i = 1; i < arguments.length; i++) {\n var arg = arguments[i];\n\n if (arg) {\n for (var _key in arg) {\n if (arg.hasOwnProperty(_key)) {\n if (isArray(arg[_key])) {\n arguments[0][_key] = arg[_key].slice();\n } else {\n arguments[0][_key] = arg[_key];\n }\n }\n }\n }\n }\n\n return arguments[0];\n}\n\nvar LocalForage = function () {\n function LocalForage(options) {\n _classCallCheck(this, LocalForage);\n\n for (var driverTypeKey in DefaultDrivers) {\n if (DefaultDrivers.hasOwnProperty(driverTypeKey)) {\n var driver = DefaultDrivers[driverTypeKey];\n var driverName = driver._driver;\n this[driverTypeKey] = driverName;\n\n if (!DefinedDrivers[driverName]) {\n // we don't need to wait for the promise,\n // since the default drivers can be defined\n // in a blocking manner\n this.defineDriver(driver);\n }\n }\n }\n\n this._defaultConfig = extend({}, DefaultConfig);\n this._config = extend({}, this._defaultConfig, options);\n this._driverSet = null;\n this._initDriver = null;\n this._ready = false;\n this._dbInfo = null;\n\n this._wrapLibraryMethodsWithReady();\n this.setDriver(this._config.driver)[\"catch\"](function () {});\n }\n\n // Set any config values for localForage; can be called anytime before\n // the first API call (e.g. `getItem`, `setItem`).\n // We loop through options so we don't overwrite existing config\n // values.\n\n\n LocalForage.prototype.config = function config(options) {\n // If the options argument is an object, we use it to set values.\n // Otherwise, we return either a specified config value or all\n // config values.\n if ((typeof options === 'undefined' ? 'undefined' : _typeof(options)) === 'object') {\n // If localforage is ready and fully initialized, we can't set\n // any new configuration values. Instead, we return an error.\n if (this._ready) {\n return new Error(\"Can't call config() after localforage \" + 'has been used.');\n }\n\n for (var i in options) {\n if (i === 'storeName') {\n options[i] = options[i].replace(/\\W/g, '_');\n }\n\n if (i === 'version' && typeof options[i] !== 'number') {\n return new Error('Database version must be a number.');\n }\n\n this._config[i] = options[i];\n }\n\n // after all config options are set and\n // the driver option is used, try setting it\n if ('driver' in options && options.driver) {\n return this.setDriver(this._config.driver);\n }\n\n return true;\n } else if (typeof options === 'string') {\n return this._config[options];\n } else {\n return this._config;\n }\n };\n\n // Used to define a custom driver, shared across all instances of\n // localForage.\n\n\n LocalForage.prototype.defineDriver = function defineDriver(driverObject, callback, errorCallback) {\n var promise = new Promise$1(function (resolve, reject) {\n try {\n var driverName = driverObject._driver;\n var complianceError = new Error('Custom driver not compliant; see ' + 'https://mozilla.github.io/localForage/#definedriver');\n\n // A driver name should be defined and not overlap with the\n // library-defined, default drivers.\n if (!driverObject._driver) {\n reject(complianceError);\n return;\n }\n\n var driverMethods = LibraryMethods.concat('_initStorage');\n for (var i = 0, len = driverMethods.length; i < len; i++) {\n var driverMethodName = driverMethods[i];\n\n // when the property is there,\n // it should be a method even when optional\n var isRequired = !includes(OptionalDriverMethods, driverMethodName);\n if ((isRequired || driverObject[driverMethodName]) && typeof driverObject[driverMethodName] !== 'function') {\n reject(complianceError);\n return;\n }\n }\n\n var configureMissingMethods = function configureMissingMethods() {\n var methodNotImplementedFactory = function methodNotImplementedFactory(methodName) {\n return function () {\n var error = new Error('Method ' + methodName + ' is not implemented by the current driver');\n var promise = Promise$1.reject(error);\n executeCallback(promise, arguments[arguments.length - 1]);\n return promise;\n };\n };\n\n for (var _i = 0, _len = OptionalDriverMethods.length; _i < _len; _i++) {\n var optionalDriverMethod = OptionalDriverMethods[_i];\n if (!driverObject[optionalDriverMethod]) {\n driverObject[optionalDriverMethod] = methodNotImplementedFactory(optionalDriverMethod);\n }\n }\n };\n\n configureMissingMethods();\n\n var setDriverSupport = function setDriverSupport(support) {\n if (DefinedDrivers[driverName]) {\n console.info('Redefining LocalForage driver: ' + driverName);\n }\n DefinedDrivers[driverName] = driverObject;\n DriverSupport[driverName] = support;\n // don't use a then, so that we can define\n // drivers that have simple _support methods\n // in a blocking manner\n resolve();\n };\n\n if ('_support' in driverObject) {\n if (driverObject._support && typeof driverObject._support === 'function') {\n driverObject._support().then(setDriverSupport, reject);\n } else {\n setDriverSupport(!!driverObject._support);\n }\n } else {\n setDriverSupport(true);\n }\n } catch (e) {\n reject(e);\n }\n });\n\n executeTwoCallbacks(promise, callback, errorCallback);\n return promise;\n };\n\n LocalForage.prototype.driver = function driver() {\n return this._driver || null;\n };\n\n LocalForage.prototype.getDriver = function getDriver(driverName, callback, errorCallback) {\n var getDriverPromise = DefinedDrivers[driverName] ? Promise$1.resolve(DefinedDrivers[driverName]) : Promise$1.reject(new Error('Driver not found.'));\n\n executeTwoCallbacks(getDriverPromise, callback, errorCallback);\n return getDriverPromise;\n };\n\n LocalForage.prototype.getSerializer = function getSerializer(callback) {\n var serializerPromise = Promise$1.resolve(localforageSerializer);\n executeTwoCallbacks(serializerPromise, callback);\n return serializerPromise;\n };\n\n LocalForage.prototype.ready = function ready(callback) {\n var self = this;\n\n var promise = self._driverSet.then(function () {\n if (self._ready === null) {\n self._ready = self._initDriver();\n }\n\n return self._ready;\n });\n\n executeTwoCallbacks(promise, callback, callback);\n return promise;\n };\n\n LocalForage.prototype.setDriver = function setDriver(drivers, callback, errorCallback) {\n var self = this;\n\n if (!isArray(drivers)) {\n drivers = [drivers];\n }\n\n var supportedDrivers = this._getSupportedDrivers(drivers);\n\n function setDriverToConfig() {\n self._config.driver = self.driver();\n }\n\n function extendSelfWithDriver(driver) {\n self._extend(driver);\n setDriverToConfig();\n\n self._ready = self._initStorage(self._config);\n return self._ready;\n }\n\n function initDriver(supportedDrivers) {\n return function () {\n var currentDriverIndex = 0;\n\n function driverPromiseLoop() {\n while (currentDriverIndex < supportedDrivers.length) {\n var driverName = supportedDrivers[currentDriverIndex];\n currentDriverIndex++;\n\n self._dbInfo = null;\n self._ready = null;\n\n return self.getDriver(driverName).then(extendSelfWithDriver)[\"catch\"](driverPromiseLoop);\n }\n\n setDriverToConfig();\n var error = new Error('No available storage method found.');\n self._driverSet = Promise$1.reject(error);\n return self._driverSet;\n }\n\n return driverPromiseLoop();\n };\n }\n\n // There might be a driver initialization in progress\n // so wait for it to finish in order to avoid a possible\n // race condition to set _dbInfo\n var oldDriverSetDone = this._driverSet !== null ? this._driverSet[\"catch\"](function () {\n return Promise$1.resolve();\n }) : Promise$1.resolve();\n\n this._driverSet = oldDriverSetDone.then(function () {\n var driverName = supportedDrivers[0];\n self._dbInfo = null;\n self._ready = null;\n\n return self.getDriver(driverName).then(function (driver) {\n self._driver = driver._driver;\n setDriverToConfig();\n self._wrapLibraryMethodsWithReady();\n self._initDriver = initDriver(supportedDrivers);\n });\n })[\"catch\"](function () {\n setDriverToConfig();\n var error = new Error('No available storage method found.');\n self._driverSet = Promise$1.reject(error);\n return self._driverSet;\n });\n\n executeTwoCallbacks(this._driverSet, callback, errorCallback);\n return this._driverSet;\n };\n\n LocalForage.prototype.supports = function supports(driverName) {\n return !!DriverSupport[driverName];\n };\n\n LocalForage.prototype._extend = function _extend(libraryMethodsAndProperties) {\n extend(this, libraryMethodsAndProperties);\n };\n\n LocalForage.prototype._getSupportedDrivers = function _getSupportedDrivers(drivers) {\n var supportedDrivers = [];\n for (var i = 0, len = drivers.length; i < len; i++) {\n var driverName = drivers[i];\n if (this.supports(driverName)) {\n supportedDrivers.push(driverName);\n }\n }\n return supportedDrivers;\n };\n\n LocalForage.prototype._wrapLibraryMethodsWithReady = function _wrapLibraryMethodsWithReady() {\n // Add a stub for each driver API method that delays the call to the\n // corresponding driver method until localForage is ready. These stubs\n // will be replaced by the driver methods as soon as the driver is\n // loaded, so there is no performance impact.\n for (var i = 0, len = LibraryMethods.length; i < len; i++) {\n callWhenReady(this, LibraryMethods[i]);\n }\n };\n\n LocalForage.prototype.createInstance = function createInstance(options) {\n return new LocalForage(options);\n };\n\n return LocalForage;\n}();\n\n// The actual localForage object that we expose as a module or via a\n// global. It's extended by pulling in one of our other libraries.\n\n\nvar localforage_js = new LocalForage();\n\nmodule.exports = localforage_js;\n\n},{\"3\":3}]},{},[4])(4)\n});\n","// 'path' module extracted from Node.js v8.11.1 (only the posix part)\n// transplited with Babel\n\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nfunction assertPath(path) {\n if (typeof path !== 'string') {\n throw new TypeError('Path must be a string. Received ' + JSON.stringify(path));\n }\n}\n\n// Resolves . and .. elements in a path with directory names\nfunction normalizeStringPosix(path, allowAboveRoot) {\n var res = '';\n var lastSegmentLength = 0;\n var lastSlash = -1;\n var dots = 0;\n var code;\n for (var i = 0; i <= path.length; ++i) {\n if (i < path.length)\n code = path.charCodeAt(i);\n else if (code === 47 /*/*/)\n break;\n else\n code = 47 /*/*/;\n if (code === 47 /*/*/) {\n if (lastSlash === i - 1 || dots === 1) {\n // NOOP\n } else if (lastSlash !== i - 1 && dots === 2) {\n if (res.length < 2 || lastSegmentLength !== 2 || res.charCodeAt(res.length - 1) !== 46 /*.*/ || res.charCodeAt(res.length - 2) !== 46 /*.*/) {\n if (res.length > 2) {\n var lastSlashIndex = res.lastIndexOf('/');\n if (lastSlashIndex !== res.length - 1) {\n if (lastSlashIndex === -1) {\n res = '';\n lastSegmentLength = 0;\n } else {\n res = res.slice(0, lastSlashIndex);\n lastSegmentLength = res.length - 1 - res.lastIndexOf('/');\n }\n lastSlash = i;\n dots = 0;\n continue;\n }\n } else if (res.length === 2 || res.length === 1) {\n res = '';\n lastSegmentLength = 0;\n lastSlash = i;\n dots = 0;\n continue;\n }\n }\n if (allowAboveRoot) {\n if (res.length > 0)\n res += '/..';\n else\n res = '..';\n lastSegmentLength = 2;\n }\n } else {\n if (res.length > 0)\n res += '/' + path.slice(lastSlash + 1, i);\n else\n res = path.slice(lastSlash + 1, i);\n lastSegmentLength = i - lastSlash - 1;\n }\n lastSlash = i;\n dots = 0;\n } else if (code === 46 /*.*/ && dots !== -1) {\n ++dots;\n } else {\n dots = -1;\n }\n }\n return res;\n}\n\nfunction _format(sep, pathObject) {\n var dir = pathObject.dir || pathObject.root;\n var base = pathObject.base || (pathObject.name || '') + (pathObject.ext || '');\n if (!dir) {\n return base;\n }\n if (dir === pathObject.root) {\n return dir + base;\n }\n return dir + sep + base;\n}\n\nvar posix = {\n // path.resolve([from ...], to)\n resolve: function resolve() {\n var resolvedPath = '';\n var resolvedAbsolute = false;\n var cwd;\n\n for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n var path;\n if (i >= 0)\n path = arguments[i];\n else {\n if (cwd === undefined)\n cwd = process.cwd();\n path = cwd;\n }\n\n assertPath(path);\n\n // Skip empty entries\n if (path.length === 0) {\n continue;\n }\n\n resolvedPath = path + '/' + resolvedPath;\n resolvedAbsolute = path.charCodeAt(0) === 47 /*/*/;\n }\n\n // At this point the path should be resolved to a full absolute path, but\n // handle relative paths to be safe (might happen when process.cwd() fails)\n\n // Normalize the path\n resolvedPath = normalizeStringPosix(resolvedPath, !resolvedAbsolute);\n\n if (resolvedAbsolute) {\n if (resolvedPath.length > 0)\n return '/' + resolvedPath;\n else\n return '/';\n } else if (resolvedPath.length > 0) {\n return resolvedPath;\n } else {\n return '.';\n }\n },\n\n normalize: function normalize(path) {\n assertPath(path);\n\n if (path.length === 0) return '.';\n\n var isAbsolute = path.charCodeAt(0) === 47 /*/*/;\n var trailingSeparator = path.charCodeAt(path.length - 1) === 47 /*/*/;\n\n // Normalize the path\n path = normalizeStringPosix(path, !isAbsolute);\n\n if (path.length === 0 && !isAbsolute) path = '.';\n if (path.length > 0 && trailingSeparator) path += '/';\n\n if (isAbsolute) return '/' + path;\n return path;\n },\n\n isAbsolute: function isAbsolute(path) {\n assertPath(path);\n return path.length > 0 && path.charCodeAt(0) === 47 /*/*/;\n },\n\n join: function join() {\n if (arguments.length === 0)\n return '.';\n var joined;\n for (var i = 0; i < arguments.length; ++i) {\n var arg = arguments[i];\n assertPath(arg);\n if (arg.length > 0) {\n if (joined === undefined)\n joined = arg;\n else\n joined += '/' + arg;\n }\n }\n if (joined === undefined)\n return '.';\n return posix.normalize(joined);\n },\n\n relative: function relative(from, to) {\n assertPath(from);\n assertPath(to);\n\n if (from === to) return '';\n\n from = posix.resolve(from);\n to = posix.resolve(to);\n\n if (from === to) return '';\n\n // Trim any leading backslashes\n var fromStart = 1;\n for (; fromStart < from.length; ++fromStart) {\n if (from.charCodeAt(fromStart) !== 47 /*/*/)\n break;\n }\n var fromEnd = from.length;\n var fromLen = fromEnd - fromStart;\n\n // Trim any leading backslashes\n var toStart = 1;\n for (; toStart < to.length; ++toStart) {\n if (to.charCodeAt(toStart) !== 47 /*/*/)\n break;\n }\n var toEnd = to.length;\n var toLen = toEnd - toStart;\n\n // Compare paths to find the longest common path from root\n var length = fromLen < toLen ? fromLen : toLen;\n var lastCommonSep = -1;\n var i = 0;\n for (; i <= length; ++i) {\n if (i === length) {\n if (toLen > length) {\n if (to.charCodeAt(toStart + i) === 47 /*/*/) {\n // We get here if `from` is the exact base path for `to`.\n // For example: from='/foo/bar'; to='/foo/bar/baz'\n return to.slice(toStart + i + 1);\n } else if (i === 0) {\n // We get here if `from` is the root\n // For example: from='/'; to='/foo'\n return to.slice(toStart + i);\n }\n } else if (fromLen > length) {\n if (from.charCodeAt(fromStart + i) === 47 /*/*/) {\n // We get here if `to` is the exact base path for `from`.\n // For example: from='/foo/bar/baz'; to='/foo/bar'\n lastCommonSep = i;\n } else if (i === 0) {\n // We get here if `to` is the root.\n // For example: from='/foo'; to='/'\n lastCommonSep = 0;\n }\n }\n break;\n }\n var fromCode = from.charCodeAt(fromStart + i);\n var toCode = to.charCodeAt(toStart + i);\n if (fromCode !== toCode)\n break;\n else if (fromCode === 47 /*/*/)\n lastCommonSep = i;\n }\n\n var out = '';\n // Generate the relative path based on the path difference between `to`\n // and `from`\n for (i = fromStart + lastCommonSep + 1; i <= fromEnd; ++i) {\n if (i === fromEnd || from.charCodeAt(i) === 47 /*/*/) {\n if (out.length === 0)\n out += '..';\n else\n out += '/..';\n }\n }\n\n // Lastly, append the rest of the destination (`to`) path that comes after\n // the common path parts\n if (out.length > 0)\n return out + to.slice(toStart + lastCommonSep);\n else {\n toStart += lastCommonSep;\n if (to.charCodeAt(toStart) === 47 /*/*/)\n ++toStart;\n return to.slice(toStart);\n }\n },\n\n _makeLong: function _makeLong(path) {\n return path;\n },\n\n dirname: function dirname(path) {\n assertPath(path);\n if (path.length === 0) return '.';\n var code = path.charCodeAt(0);\n var hasRoot = code === 47 /*/*/;\n var end = -1;\n var matchedSlash = true;\n for (var i = path.length - 1; i >= 1; --i) {\n code = path.charCodeAt(i);\n if (code === 47 /*/*/) {\n if (!matchedSlash) {\n end = i;\n break;\n }\n } else {\n // We saw the first non-path separator\n matchedSlash = false;\n }\n }\n\n if (end === -1) return hasRoot ? '/' : '.';\n if (hasRoot && end === 1) return '//';\n return path.slice(0, end);\n },\n\n basename: function basename(path, ext) {\n if (ext !== undefined && typeof ext !== 'string') throw new TypeError('\"ext\" argument must be a string');\n assertPath(path);\n\n var start = 0;\n var end = -1;\n var matchedSlash = true;\n var i;\n\n if (ext !== undefined && ext.length > 0 && ext.length <= path.length) {\n if (ext.length === path.length && ext === path) return '';\n var extIdx = ext.length - 1;\n var firstNonSlashEnd = -1;\n for (i = path.length - 1; i >= 0; --i) {\n var code = path.charCodeAt(i);\n if (code === 47 /*/*/) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n start = i + 1;\n break;\n }\n } else {\n if (firstNonSlashEnd === -1) {\n // We saw the first non-path separator, remember this index in case\n // we need it if the extension ends up not matching\n matchedSlash = false;\n firstNonSlashEnd = i + 1;\n }\n if (extIdx >= 0) {\n // Try to match the explicit extension\n if (code === ext.charCodeAt(extIdx)) {\n if (--extIdx === -1) {\n // We matched the extension, so mark this as the end of our path\n // component\n end = i;\n }\n } else {\n // Extension does not match, so our result is the entire path\n // component\n extIdx = -1;\n end = firstNonSlashEnd;\n }\n }\n }\n }\n\n if (start === end) end = firstNonSlashEnd;else if (end === -1) end = path.length;\n return path.slice(start, end);\n } else {\n for (i = path.length - 1; i >= 0; --i) {\n if (path.charCodeAt(i) === 47 /*/*/) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n start = i + 1;\n break;\n }\n } else if (end === -1) {\n // We saw the first non-path separator, mark this as the end of our\n // path component\n matchedSlash = false;\n end = i + 1;\n }\n }\n\n if (end === -1) return '';\n return path.slice(start, end);\n }\n },\n\n extname: function extname(path) {\n assertPath(path);\n var startDot = -1;\n var startPart = 0;\n var end = -1;\n var matchedSlash = true;\n // Track the state of characters (if any) we see before our first dot and\n // after any path separator we find\n var preDotState = 0;\n for (var i = path.length - 1; i >= 0; --i) {\n var code = path.charCodeAt(i);\n if (code === 47 /*/*/) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n startPart = i + 1;\n break;\n }\n continue;\n }\n if (end === -1) {\n // We saw the first non-path separator, mark this as the end of our\n // extension\n matchedSlash = false;\n end = i + 1;\n }\n if (code === 46 /*.*/) {\n // If this is our first dot, mark it as the start of our extension\n if (startDot === -1)\n startDot = i;\n else if (preDotState !== 1)\n preDotState = 1;\n } else if (startDot !== -1) {\n // We saw a non-dot and non-path separator before our dot, so we should\n // have a good chance at having a non-empty extension\n preDotState = -1;\n }\n }\n\n if (startDot === -1 || end === -1 ||\n // We saw a non-dot character immediately before the dot\n preDotState === 0 ||\n // The (right-most) trimmed path component is exactly '..'\n preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {\n return '';\n }\n return path.slice(startDot, end);\n },\n\n format: function format(pathObject) {\n if (pathObject === null || typeof pathObject !== 'object') {\n throw new TypeError('The \"pathObject\" argument must be of type Object. Received type ' + typeof pathObject);\n }\n return _format('/', pathObject);\n },\n\n parse: function parse(path) {\n assertPath(path);\n\n var ret = { root: '', dir: '', base: '', ext: '', name: '' };\n if (path.length === 0) return ret;\n var code = path.charCodeAt(0);\n var isAbsolute = code === 47 /*/*/;\n var start;\n if (isAbsolute) {\n ret.root = '/';\n start = 1;\n } else {\n start = 0;\n }\n var startDot = -1;\n var startPart = 0;\n var end = -1;\n var matchedSlash = true;\n var i = path.length - 1;\n\n // Track the state of characters (if any) we see before our first dot and\n // after any path separator we find\n var preDotState = 0;\n\n // Get non-dir info\n for (; i >= start; --i) {\n code = path.charCodeAt(i);\n if (code === 47 /*/*/) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n startPart = i + 1;\n break;\n }\n continue;\n }\n if (end === -1) {\n // We saw the first non-path separator, mark this as the end of our\n // extension\n matchedSlash = false;\n end = i + 1;\n }\n if (code === 46 /*.*/) {\n // If this is our first dot, mark it as the start of our extension\n if (startDot === -1) startDot = i;else if (preDotState !== 1) preDotState = 1;\n } else if (startDot !== -1) {\n // We saw a non-dot and non-path separator before our dot, so we should\n // have a good chance at having a non-empty extension\n preDotState = -1;\n }\n }\n\n if (startDot === -1 || end === -1 ||\n // We saw a non-dot character immediately before the dot\n preDotState === 0 ||\n // The (right-most) trimmed path component is exactly '..'\n preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {\n if (end !== -1) {\n if (startPart === 0 && isAbsolute) ret.base = ret.name = path.slice(1, end);else ret.base = ret.name = path.slice(startPart, end);\n }\n } else {\n if (startPart === 0 && isAbsolute) {\n ret.name = path.slice(1, startDot);\n ret.base = path.slice(1, end);\n } else {\n ret.name = path.slice(startPart, startDot);\n ret.base = path.slice(startPart, end);\n }\n ret.ext = path.slice(startDot, end);\n }\n\n if (startPart > 0) ret.dir = path.slice(0, startPart - 1);else if (isAbsolute) ret.dir = '/';\n\n return ret;\n },\n\n sep: '/',\n delimiter: ':',\n win32: null,\n posix: null\n};\n\nposix.posix = posix;\n\nmodule.exports = posix;\n","/*! *****************************************************************************\nCopyright (C) Microsoft. All rights reserved.\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\nthis file except in compliance with the License. You may obtain a copy of the\nLicense at http://www.apache.org/licenses/LICENSE-2.0\n\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\nMERCHANTABLITY OR NON-INFRINGEMENT.\n\nSee the Apache Version 2.0 License for specific language governing permissions\nand limitations under the License.\n***************************************************************************** */\nvar Reflect;\n(function (Reflect) {\n // Metadata Proposal\n // https://rbuckton.github.io/reflect-metadata/\n (function (factory) {\n var root = typeof global === \"object\" ? global :\n typeof self === \"object\" ? self :\n typeof this === \"object\" ? this :\n Function(\"return this;\")();\n var exporter = makeExporter(Reflect);\n if (typeof root.Reflect === \"undefined\") {\n root.Reflect = Reflect;\n }\n else {\n exporter = makeExporter(root.Reflect, exporter);\n }\n factory(exporter);\n function makeExporter(target, previous) {\n return function (key, value) {\n if (typeof target[key] !== \"function\") {\n Object.defineProperty(target, key, { configurable: true, writable: true, value: value });\n }\n if (previous)\n previous(key, value);\n };\n }\n })(function (exporter) {\n var hasOwn = Object.prototype.hasOwnProperty;\n // feature test for Symbol support\n var supportsSymbol = typeof Symbol === \"function\";\n var toPrimitiveSymbol = supportsSymbol && typeof Symbol.toPrimitive !== \"undefined\" ? Symbol.toPrimitive : \"@@toPrimitive\";\n var iteratorSymbol = supportsSymbol && typeof Symbol.iterator !== \"undefined\" ? Symbol.iterator : \"@@iterator\";\n var supportsCreate = typeof Object.create === \"function\"; // feature test for Object.create support\n var supportsProto = { __proto__: [] } instanceof Array; // feature test for __proto__ support\n var downLevel = !supportsCreate && !supportsProto;\n var HashMap = {\n // create an object in dictionary mode (a.k.a. \"slow\" mode in v8)\n create: supportsCreate\n ? function () { return MakeDictionary(Object.create(null)); }\n : supportsProto\n ? function () { return MakeDictionary({ __proto__: null }); }\n : function () { return MakeDictionary({}); },\n has: downLevel\n ? function (map, key) { return hasOwn.call(map, key); }\n : function (map, key) { return key in map; },\n get: downLevel\n ? function (map, key) { return hasOwn.call(map, key) ? map[key] : undefined; }\n : function (map, key) { return map[key]; },\n };\n // Load global or shim versions of Map, Set, and WeakMap\n var functionPrototype = Object.getPrototypeOf(Function);\n var usePolyfill = typeof process === \"object\" && process.env && process.env[\"REFLECT_METADATA_USE_MAP_POLYFILL\"] === \"true\";\n var _Map = !usePolyfill && typeof Map === \"function\" && typeof Map.prototype.entries === \"function\" ? Map : CreateMapPolyfill();\n var _Set = !usePolyfill && typeof Set === \"function\" && typeof Set.prototype.entries === \"function\" ? Set : CreateSetPolyfill();\n var _WeakMap = !usePolyfill && typeof WeakMap === \"function\" ? WeakMap : CreateWeakMapPolyfill();\n // [[Metadata]] internal slot\n // https://rbuckton.github.io/reflect-metadata/#ordinary-object-internal-methods-and-internal-slots\n var Metadata = new _WeakMap();\n /**\n * Applies a set of decorators to a property of a target object.\n * @param decorators An array of decorators.\n * @param target The target object.\n * @param propertyKey (Optional) The property key to decorate.\n * @param attributes (Optional) The property descriptor for the target key.\n * @remarks Decorators are applied in reverse order.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * Example = Reflect.decorate(decoratorsArray, Example);\n *\n * // property (on constructor)\n * Reflect.decorate(decoratorsArray, Example, \"staticProperty\");\n *\n * // property (on prototype)\n * Reflect.decorate(decoratorsArray, Example.prototype, \"property\");\n *\n * // method (on constructor)\n * Object.defineProperty(Example, \"staticMethod\",\n * Reflect.decorate(decoratorsArray, Example, \"staticMethod\",\n * Object.getOwnPropertyDescriptor(Example, \"staticMethod\")));\n *\n * // method (on prototype)\n * Object.defineProperty(Example.prototype, \"method\",\n * Reflect.decorate(decoratorsArray, Example.prototype, \"method\",\n * Object.getOwnPropertyDescriptor(Example.prototype, \"method\")));\n *\n */\n function decorate(decorators, target, propertyKey, attributes) {\n if (!IsUndefined(propertyKey)) {\n if (!IsArray(decorators))\n throw new TypeError();\n if (!IsObject(target))\n throw new TypeError();\n if (!IsObject(attributes) && !IsUndefined(attributes) && !IsNull(attributes))\n throw new TypeError();\n if (IsNull(attributes))\n attributes = undefined;\n propertyKey = ToPropertyKey(propertyKey);\n return DecorateProperty(decorators, target, propertyKey, attributes);\n }\n else {\n if (!IsArray(decorators))\n throw new TypeError();\n if (!IsConstructor(target))\n throw new TypeError();\n return DecorateConstructor(decorators, target);\n }\n }\n exporter(\"decorate\", decorate);\n // 4.1.2 Reflect.metadata(metadataKey, metadataValue)\n // https://rbuckton.github.io/reflect-metadata/#reflect.metadata\n /**\n * A default metadata decorator factory that can be used on a class, class member, or parameter.\n * @param metadataKey The key for the metadata entry.\n * @param metadataValue The value for the metadata entry.\n * @returns A decorator function.\n * @remarks\n * If `metadataKey` is already defined for the target and target key, the\n * metadataValue for that key will be overwritten.\n * @example\n *\n * // constructor\n * @Reflect.metadata(key, value)\n * class Example {\n * }\n *\n * // property (on constructor, TypeScript only)\n * class Example {\n * @Reflect.metadata(key, value)\n * static staticProperty;\n * }\n *\n * // property (on prototype, TypeScript only)\n * class Example {\n * @Reflect.metadata(key, value)\n * property;\n * }\n *\n * // method (on constructor)\n * class Example {\n * @Reflect.metadata(key, value)\n * static staticMethod() { }\n * }\n *\n * // method (on prototype)\n * class Example {\n * @Reflect.metadata(key, value)\n * method() { }\n * }\n *\n */\n function metadata(metadataKey, metadataValue) {\n function decorator(target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey) && !IsPropertyKey(propertyKey))\n throw new TypeError();\n OrdinaryDefineOwnMetadata(metadataKey, metadataValue, target, propertyKey);\n }\n return decorator;\n }\n exporter(\"metadata\", metadata);\n /**\n * Define a unique metadata entry on the target.\n * @param metadataKey A key used to store and retrieve metadata.\n * @param metadataValue A value that contains attached metadata.\n * @param target The target object on which to define metadata.\n * @param propertyKey (Optional) The property key for the target.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * Reflect.defineMetadata(\"custom:annotation\", options, Example);\n *\n * // property (on constructor)\n * Reflect.defineMetadata(\"custom:annotation\", options, Example, \"staticProperty\");\n *\n * // property (on prototype)\n * Reflect.defineMetadata(\"custom:annotation\", options, Example.prototype, \"property\");\n *\n * // method (on constructor)\n * Reflect.defineMetadata(\"custom:annotation\", options, Example, \"staticMethod\");\n *\n * // method (on prototype)\n * Reflect.defineMetadata(\"custom:annotation\", options, Example.prototype, \"method\");\n *\n * // decorator factory as metadata-producing annotation.\n * function MyAnnotation(options): Decorator {\n * return (target, key?) => Reflect.defineMetadata(\"custom:annotation\", options, target, key);\n * }\n *\n */\n function defineMetadata(metadataKey, metadataValue, target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryDefineOwnMetadata(metadataKey, metadataValue, target, propertyKey);\n }\n exporter(\"defineMetadata\", defineMetadata);\n /**\n * Gets a value indicating whether the target object or its prototype chain has the provided metadata key defined.\n * @param metadataKey A key used to store and retrieve metadata.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns `true` if the metadata key was defined on the target object or its prototype chain; otherwise, `false`.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.hasMetadata(\"custom:annotation\", Example);\n *\n * // property (on constructor)\n * result = Reflect.hasMetadata(\"custom:annotation\", Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.hasMetadata(\"custom:annotation\", Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.hasMetadata(\"custom:annotation\", Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.hasMetadata(\"custom:annotation\", Example.prototype, \"method\");\n *\n */\n function hasMetadata(metadataKey, target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryHasMetadata(metadataKey, target, propertyKey);\n }\n exporter(\"hasMetadata\", hasMetadata);\n /**\n * Gets a value indicating whether the target object has the provided metadata key defined.\n * @param metadataKey A key used to store and retrieve metadata.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns `true` if the metadata key was defined on the target object; otherwise, `false`.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.hasOwnMetadata(\"custom:annotation\", Example);\n *\n * // property (on constructor)\n * result = Reflect.hasOwnMetadata(\"custom:annotation\", Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.hasOwnMetadata(\"custom:annotation\", Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.hasOwnMetadata(\"custom:annotation\", Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.hasOwnMetadata(\"custom:annotation\", Example.prototype, \"method\");\n *\n */\n function hasOwnMetadata(metadataKey, target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryHasOwnMetadata(metadataKey, target, propertyKey);\n }\n exporter(\"hasOwnMetadata\", hasOwnMetadata);\n /**\n * Gets the metadata value for the provided metadata key on the target object or its prototype chain.\n * @param metadataKey A key used to store and retrieve metadata.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns The metadata value for the metadata key if found; otherwise, `undefined`.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.getMetadata(\"custom:annotation\", Example);\n *\n * // property (on constructor)\n * result = Reflect.getMetadata(\"custom:annotation\", Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.getMetadata(\"custom:annotation\", Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.getMetadata(\"custom:annotation\", Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.getMetadata(\"custom:annotation\", Example.prototype, \"method\");\n *\n */\n function getMetadata(metadataKey, target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryGetMetadata(metadataKey, target, propertyKey);\n }\n exporter(\"getMetadata\", getMetadata);\n /**\n * Gets the metadata value for the provided metadata key on the target object.\n * @param metadataKey A key used to store and retrieve metadata.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns The metadata value for the metadata key if found; otherwise, `undefined`.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.getOwnMetadata(\"custom:annotation\", Example);\n *\n * // property (on constructor)\n * result = Reflect.getOwnMetadata(\"custom:annotation\", Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.getOwnMetadata(\"custom:annotation\", Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.getOwnMetadata(\"custom:annotation\", Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.getOwnMetadata(\"custom:annotation\", Example.prototype, \"method\");\n *\n */\n function getOwnMetadata(metadataKey, target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryGetOwnMetadata(metadataKey, target, propertyKey);\n }\n exporter(\"getOwnMetadata\", getOwnMetadata);\n /**\n * Gets the metadata keys defined on the target object or its prototype chain.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns An array of unique metadata keys.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.getMetadataKeys(Example);\n *\n * // property (on constructor)\n * result = Reflect.getMetadataKeys(Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.getMetadataKeys(Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.getMetadataKeys(Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.getMetadataKeys(Example.prototype, \"method\");\n *\n */\n function getMetadataKeys(target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryMetadataKeys(target, propertyKey);\n }\n exporter(\"getMetadataKeys\", getMetadataKeys);\n /**\n * Gets the unique metadata keys defined on the target object.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns An array of unique metadata keys.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.getOwnMetadataKeys(Example);\n *\n * // property (on constructor)\n * result = Reflect.getOwnMetadataKeys(Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.getOwnMetadataKeys(Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.getOwnMetadataKeys(Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.getOwnMetadataKeys(Example.prototype, \"method\");\n *\n */\n function getOwnMetadataKeys(target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryOwnMetadataKeys(target, propertyKey);\n }\n exporter(\"getOwnMetadataKeys\", getOwnMetadataKeys);\n /**\n * Deletes the metadata entry from the target object with the provided key.\n * @param metadataKey A key used to store and retrieve metadata.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns `true` if the metadata entry was found and deleted; otherwise, false.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.deleteMetadata(\"custom:annotation\", Example);\n *\n * // property (on constructor)\n * result = Reflect.deleteMetadata(\"custom:annotation\", Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.deleteMetadata(\"custom:annotation\", Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.deleteMetadata(\"custom:annotation\", Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.deleteMetadata(\"custom:annotation\", Example.prototype, \"method\");\n *\n */\n function deleteMetadata(metadataKey, target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n var metadataMap = GetOrCreateMetadataMap(target, propertyKey, /*Create*/ false);\n if (IsUndefined(metadataMap))\n return false;\n if (!metadataMap.delete(metadataKey))\n return false;\n if (metadataMap.size > 0)\n return true;\n var targetMetadata = Metadata.get(target);\n targetMetadata.delete(propertyKey);\n if (targetMetadata.size > 0)\n return true;\n Metadata.delete(target);\n return true;\n }\n exporter(\"deleteMetadata\", deleteMetadata);\n function DecorateConstructor(decorators, target) {\n for (var i = decorators.length - 1; i >= 0; --i) {\n var decorator = decorators[i];\n var decorated = decorator(target);\n if (!IsUndefined(decorated) && !IsNull(decorated)) {\n if (!IsConstructor(decorated))\n throw new TypeError();\n target = decorated;\n }\n }\n return target;\n }\n function DecorateProperty(decorators, target, propertyKey, descriptor) {\n for (var i = decorators.length - 1; i >= 0; --i) {\n var decorator = decorators[i];\n var decorated = decorator(target, propertyKey, descriptor);\n if (!IsUndefined(decorated) && !IsNull(decorated)) {\n if (!IsObject(decorated))\n throw new TypeError();\n descriptor = decorated;\n }\n }\n return descriptor;\n }\n function GetOrCreateMetadataMap(O, P, Create) {\n var targetMetadata = Metadata.get(O);\n if (IsUndefined(targetMetadata)) {\n if (!Create)\n return undefined;\n targetMetadata = new _Map();\n Metadata.set(O, targetMetadata);\n }\n var metadataMap = targetMetadata.get(P);\n if (IsUndefined(metadataMap)) {\n if (!Create)\n return undefined;\n metadataMap = new _Map();\n targetMetadata.set(P, metadataMap);\n }\n return metadataMap;\n }\n // 3.1.1.1 OrdinaryHasMetadata(MetadataKey, O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinaryhasmetadata\n function OrdinaryHasMetadata(MetadataKey, O, P) {\n var hasOwn = OrdinaryHasOwnMetadata(MetadataKey, O, P);\n if (hasOwn)\n return true;\n var parent = OrdinaryGetPrototypeOf(O);\n if (!IsNull(parent))\n return OrdinaryHasMetadata(MetadataKey, parent, P);\n return false;\n }\n // 3.1.2.1 OrdinaryHasOwnMetadata(MetadataKey, O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinaryhasownmetadata\n function OrdinaryHasOwnMetadata(MetadataKey, O, P) {\n var metadataMap = GetOrCreateMetadataMap(O, P, /*Create*/ false);\n if (IsUndefined(metadataMap))\n return false;\n return ToBoolean(metadataMap.has(MetadataKey));\n }\n // 3.1.3.1 OrdinaryGetMetadata(MetadataKey, O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinarygetmetadata\n function OrdinaryGetMetadata(MetadataKey, O, P) {\n var hasOwn = OrdinaryHasOwnMetadata(MetadataKey, O, P);\n if (hasOwn)\n return OrdinaryGetOwnMetadata(MetadataKey, O, P);\n var parent = OrdinaryGetPrototypeOf(O);\n if (!IsNull(parent))\n return OrdinaryGetMetadata(MetadataKey, parent, P);\n return undefined;\n }\n // 3.1.4.1 OrdinaryGetOwnMetadata(MetadataKey, O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinarygetownmetadata\n function OrdinaryGetOwnMetadata(MetadataKey, O, P) {\n var metadataMap = GetOrCreateMetadataMap(O, P, /*Create*/ false);\n if (IsUndefined(metadataMap))\n return undefined;\n return metadataMap.get(MetadataKey);\n }\n // 3.1.5.1 OrdinaryDefineOwnMetadata(MetadataKey, MetadataValue, O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinarydefineownmetadata\n function OrdinaryDefineOwnMetadata(MetadataKey, MetadataValue, O, P) {\n var metadataMap = GetOrCreateMetadataMap(O, P, /*Create*/ true);\n metadataMap.set(MetadataKey, MetadataValue);\n }\n // 3.1.6.1 OrdinaryMetadataKeys(O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinarymetadatakeys\n function OrdinaryMetadataKeys(O, P) {\n var ownKeys = OrdinaryOwnMetadataKeys(O, P);\n var parent = OrdinaryGetPrototypeOf(O);\n if (parent === null)\n return ownKeys;\n var parentKeys = OrdinaryMetadataKeys(parent, P);\n if (parentKeys.length <= 0)\n return ownKeys;\n if (ownKeys.length <= 0)\n return parentKeys;\n var set = new _Set();\n var keys = [];\n for (var _i = 0, ownKeys_1 = ownKeys; _i < ownKeys_1.length; _i++) {\n var key = ownKeys_1[_i];\n var hasKey = set.has(key);\n if (!hasKey) {\n set.add(key);\n keys.push(key);\n }\n }\n for (var _a = 0, parentKeys_1 = parentKeys; _a < parentKeys_1.length; _a++) {\n var key = parentKeys_1[_a];\n var hasKey = set.has(key);\n if (!hasKey) {\n set.add(key);\n keys.push(key);\n }\n }\n return keys;\n }\n // 3.1.7.1 OrdinaryOwnMetadataKeys(O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinaryownmetadatakeys\n function OrdinaryOwnMetadataKeys(O, P) {\n var keys = [];\n var metadataMap = GetOrCreateMetadataMap(O, P, /*Create*/ false);\n if (IsUndefined(metadataMap))\n return keys;\n var keysObj = metadataMap.keys();\n var iterator = GetIterator(keysObj);\n var k = 0;\n while (true) {\n var next = IteratorStep(iterator);\n if (!next) {\n keys.length = k;\n return keys;\n }\n var nextValue = IteratorValue(next);\n try {\n keys[k] = nextValue;\n }\n catch (e) {\n try {\n IteratorClose(iterator);\n }\n finally {\n throw e;\n }\n }\n k++;\n }\n }\n // 6 ECMAScript Data Typ0es and Values\n // https://tc39.github.io/ecma262/#sec-ecmascript-data-types-and-values\n function Type(x) {\n if (x === null)\n return 1 /* Null */;\n switch (typeof x) {\n case \"undefined\": return 0 /* Undefined */;\n case \"boolean\": return 2 /* Boolean */;\n case \"string\": return 3 /* String */;\n case \"symbol\": return 4 /* Symbol */;\n case \"number\": return 5 /* Number */;\n case \"object\": return x === null ? 1 /* Null */ : 6 /* Object */;\n default: return 6 /* Object */;\n }\n }\n // 6.1.1 The Undefined Type\n // https://tc39.github.io/ecma262/#sec-ecmascript-language-types-undefined-type\n function IsUndefined(x) {\n return x === undefined;\n }\n // 6.1.2 The Null Type\n // https://tc39.github.io/ecma262/#sec-ecmascript-language-types-null-type\n function IsNull(x) {\n return x === null;\n }\n // 6.1.5 The Symbol Type\n // https://tc39.github.io/ecma262/#sec-ecmascript-language-types-symbol-type\n function IsSymbol(x) {\n return typeof x === \"symbol\";\n }\n // 6.1.7 The Object Type\n // https://tc39.github.io/ecma262/#sec-object-type\n function IsObject(x) {\n return typeof x === \"object\" ? x !== null : typeof x === \"function\";\n }\n // 7.1 Type Conversion\n // https://tc39.github.io/ecma262/#sec-type-conversion\n // 7.1.1 ToPrimitive(input [, PreferredType])\n // https://tc39.github.io/ecma262/#sec-toprimitive\n function ToPrimitive(input, PreferredType) {\n switch (Type(input)) {\n case 0 /* Undefined */: return input;\n case 1 /* Null */: return input;\n case 2 /* Boolean */: return input;\n case 3 /* String */: return input;\n case 4 /* Symbol */: return input;\n case 5 /* Number */: return input;\n }\n var hint = PreferredType === 3 /* String */ ? \"string\" : PreferredType === 5 /* Number */ ? \"number\" : \"default\";\n var exoticToPrim = GetMethod(input, toPrimitiveSymbol);\n if (exoticToPrim !== undefined) {\n var result = exoticToPrim.call(input, hint);\n if (IsObject(result))\n throw new TypeError();\n return result;\n }\n return OrdinaryToPrimitive(input, hint === \"default\" ? \"number\" : hint);\n }\n // 7.1.1.1 OrdinaryToPrimitive(O, hint)\n // https://tc39.github.io/ecma262/#sec-ordinarytoprimitive\n function OrdinaryToPrimitive(O, hint) {\n if (hint === \"string\") {\n var toString_1 = O.toString;\n if (IsCallable(toString_1)) {\n var result = toString_1.call(O);\n if (!IsObject(result))\n return result;\n }\n var valueOf = O.valueOf;\n if (IsCallable(valueOf)) {\n var result = valueOf.call(O);\n if (!IsObject(result))\n return result;\n }\n }\n else {\n var valueOf = O.valueOf;\n if (IsCallable(valueOf)) {\n var result = valueOf.call(O);\n if (!IsObject(result))\n return result;\n }\n var toString_2 = O.toString;\n if (IsCallable(toString_2)) {\n var result = toString_2.call(O);\n if (!IsObject(result))\n return result;\n }\n }\n throw new TypeError();\n }\n // 7.1.2 ToBoolean(argument)\n // https://tc39.github.io/ecma262/2016/#sec-toboolean\n function ToBoolean(argument) {\n return !!argument;\n }\n // 7.1.12 ToString(argument)\n // https://tc39.github.io/ecma262/#sec-tostring\n function ToString(argument) {\n return \"\" + argument;\n }\n // 7.1.14 ToPropertyKey(argument)\n // https://tc39.github.io/ecma262/#sec-topropertykey\n function ToPropertyKey(argument) {\n var key = ToPrimitive(argument, 3 /* String */);\n if (IsSymbol(key))\n return key;\n return ToString(key);\n }\n // 7.2 Testing and Comparison Operations\n // https://tc39.github.io/ecma262/#sec-testing-and-comparison-operations\n // 7.2.2 IsArray(argument)\n // https://tc39.github.io/ecma262/#sec-isarray\n function IsArray(argument) {\n return Array.isArray\n ? Array.isArray(argument)\n : argument instanceof Object\n ? argument instanceof Array\n : Object.prototype.toString.call(argument) === \"[object Array]\";\n }\n // 7.2.3 IsCallable(argument)\n // https://tc39.github.io/ecma262/#sec-iscallable\n function IsCallable(argument) {\n // NOTE: This is an approximation as we cannot check for [[Call]] internal method.\n return typeof argument === \"function\";\n }\n // 7.2.4 IsConstructor(argument)\n // https://tc39.github.io/ecma262/#sec-isconstructor\n function IsConstructor(argument) {\n // NOTE: This is an approximation as we cannot check for [[Construct]] internal method.\n return typeof argument === \"function\";\n }\n // 7.2.7 IsPropertyKey(argument)\n // https://tc39.github.io/ecma262/#sec-ispropertykey\n function IsPropertyKey(argument) {\n switch (Type(argument)) {\n case 3 /* String */: return true;\n case 4 /* Symbol */: return true;\n default: return false;\n }\n }\n // 7.3 Operations on Objects\n // https://tc39.github.io/ecma262/#sec-operations-on-objects\n // 7.3.9 GetMethod(V, P)\n // https://tc39.github.io/ecma262/#sec-getmethod\n function GetMethod(V, P) {\n var func = V[P];\n if (func === undefined || func === null)\n return undefined;\n if (!IsCallable(func))\n throw new TypeError();\n return func;\n }\n // 7.4 Operations on Iterator Objects\n // https://tc39.github.io/ecma262/#sec-operations-on-iterator-objects\n function GetIterator(obj) {\n var method = GetMethod(obj, iteratorSymbol);\n if (!IsCallable(method))\n throw new TypeError(); // from Call\n var iterator = method.call(obj);\n if (!IsObject(iterator))\n throw new TypeError();\n return iterator;\n }\n // 7.4.4 IteratorValue(iterResult)\n // https://tc39.github.io/ecma262/2016/#sec-iteratorvalue\n function IteratorValue(iterResult) {\n return iterResult.value;\n }\n // 7.4.5 IteratorStep(iterator)\n // https://tc39.github.io/ecma262/#sec-iteratorstep\n function IteratorStep(iterator) {\n var result = iterator.next();\n return result.done ? false : result;\n }\n // 7.4.6 IteratorClose(iterator, completion)\n // https://tc39.github.io/ecma262/#sec-iteratorclose\n function IteratorClose(iterator) {\n var f = iterator[\"return\"];\n if (f)\n f.call(iterator);\n }\n // 9.1 Ordinary Object Internal Methods and Internal Slots\n // https://tc39.github.io/ecma262/#sec-ordinary-object-internal-methods-and-internal-slots\n // 9.1.1.1 OrdinaryGetPrototypeOf(O)\n // https://tc39.github.io/ecma262/#sec-ordinarygetprototypeof\n function OrdinaryGetPrototypeOf(O) {\n var proto = Object.getPrototypeOf(O);\n if (typeof O !== \"function\" || O === functionPrototype)\n return proto;\n // TypeScript doesn't set __proto__ in ES5, as it's non-standard.\n // Try to determine the superclass constructor. Compatible implementations\n // must either set __proto__ on a subclass constructor to the superclass constructor,\n // or ensure each class has a valid `constructor` property on its prototype that\n // points back to the constructor.\n // If this is not the same as Function.[[Prototype]], then this is definately inherited.\n // This is the case when in ES6 or when using __proto__ in a compatible browser.\n if (proto !== functionPrototype)\n return proto;\n // If the super prototype is Object.prototype, null, or undefined, then we cannot determine the heritage.\n var prototype = O.prototype;\n var prototypeProto = prototype && Object.getPrototypeOf(prototype);\n if (prototypeProto == null || prototypeProto === Object.prototype)\n return proto;\n // If the constructor was not a function, then we cannot determine the heritage.\n var constructor = prototypeProto.constructor;\n if (typeof constructor !== \"function\")\n return proto;\n // If we have some kind of self-reference, then we cannot determine the heritage.\n if (constructor === O)\n return proto;\n // we have a pretty good guess at the heritage.\n return constructor;\n }\n // naive Map shim\n function CreateMapPolyfill() {\n var cacheSentinel = {};\n var arraySentinel = [];\n var MapIterator = /** @class */ (function () {\n function MapIterator(keys, values, selector) {\n this._index = 0;\n this._keys = keys;\n this._values = values;\n this._selector = selector;\n }\n MapIterator.prototype[\"@@iterator\"] = function () { return this; };\n MapIterator.prototype[iteratorSymbol] = function () { return this; };\n MapIterator.prototype.next = function () {\n var index = this._index;\n if (index >= 0 && index < this._keys.length) {\n var result = this._selector(this._keys[index], this._values[index]);\n if (index + 1 >= this._keys.length) {\n this._index = -1;\n this._keys = arraySentinel;\n this._values = arraySentinel;\n }\n else {\n this._index++;\n }\n return { value: result, done: false };\n }\n return { value: undefined, done: true };\n };\n MapIterator.prototype.throw = function (error) {\n if (this._index >= 0) {\n this._index = -1;\n this._keys = arraySentinel;\n this._values = arraySentinel;\n }\n throw error;\n };\n MapIterator.prototype.return = function (value) {\n if (this._index >= 0) {\n this._index = -1;\n this._keys = arraySentinel;\n this._values = arraySentinel;\n }\n return { value: value, done: true };\n };\n return MapIterator;\n }());\n return /** @class */ (function () {\n function Map() {\n this._keys = [];\n this._values = [];\n this._cacheKey = cacheSentinel;\n this._cacheIndex = -2;\n }\n Object.defineProperty(Map.prototype, \"size\", {\n get: function () { return this._keys.length; },\n enumerable: true,\n configurable: true\n });\n Map.prototype.has = function (key) { return this._find(key, /*insert*/ false) >= 0; };\n Map.prototype.get = function (key) {\n var index = this._find(key, /*insert*/ false);\n return index >= 0 ? this._values[index] : undefined;\n };\n Map.prototype.set = function (key, value) {\n var index = this._find(key, /*insert*/ true);\n this._values[index] = value;\n return this;\n };\n Map.prototype.delete = function (key) {\n var index = this._find(key, /*insert*/ false);\n if (index >= 0) {\n var size = this._keys.length;\n for (var i = index + 1; i < size; i++) {\n this._keys[i - 1] = this._keys[i];\n this._values[i - 1] = this._values[i];\n }\n this._keys.length--;\n this._values.length--;\n if (key === this._cacheKey) {\n this._cacheKey = cacheSentinel;\n this._cacheIndex = -2;\n }\n return true;\n }\n return false;\n };\n Map.prototype.clear = function () {\n this._keys.length = 0;\n this._values.length = 0;\n this._cacheKey = cacheSentinel;\n this._cacheIndex = -2;\n };\n Map.prototype.keys = function () { return new MapIterator(this._keys, this._values, getKey); };\n Map.prototype.values = function () { return new MapIterator(this._keys, this._values, getValue); };\n Map.prototype.entries = function () { return new MapIterator(this._keys, this._values, getEntry); };\n Map.prototype[\"@@iterator\"] = function () { return this.entries(); };\n Map.prototype[iteratorSymbol] = function () { return this.entries(); };\n Map.prototype._find = function (key, insert) {\n if (this._cacheKey !== key) {\n this._cacheIndex = this._keys.indexOf(this._cacheKey = key);\n }\n if (this._cacheIndex < 0 && insert) {\n this._cacheIndex = this._keys.length;\n this._keys.push(key);\n this._values.push(undefined);\n }\n return this._cacheIndex;\n };\n return Map;\n }());\n function getKey(key, _) {\n return key;\n }\n function getValue(_, value) {\n return value;\n }\n function getEntry(key, value) {\n return [key, value];\n }\n }\n // naive Set shim\n function CreateSetPolyfill() {\n return /** @class */ (function () {\n function Set() {\n this._map = new _Map();\n }\n Object.defineProperty(Set.prototype, \"size\", {\n get: function () { return this._map.size; },\n enumerable: true,\n configurable: true\n });\n Set.prototype.has = function (value) { return this._map.has(value); };\n Set.prototype.add = function (value) { return this._map.set(value, value), this; };\n Set.prototype.delete = function (value) { return this._map.delete(value); };\n Set.prototype.clear = function () { this._map.clear(); };\n Set.prototype.keys = function () { return this._map.keys(); };\n Set.prototype.values = function () { return this._map.values(); };\n Set.prototype.entries = function () { return this._map.entries(); };\n Set.prototype[\"@@iterator\"] = function () { return this.keys(); };\n Set.prototype[iteratorSymbol] = function () { return this.keys(); };\n return Set;\n }());\n }\n // naive WeakMap shim\n function CreateWeakMapPolyfill() {\n var UUID_SIZE = 16;\n var keys = HashMap.create();\n var rootKey = CreateUniqueKey();\n return /** @class */ (function () {\n function WeakMap() {\n this._key = CreateUniqueKey();\n }\n WeakMap.prototype.has = function (target) {\n var table = GetOrCreateWeakMapTable(target, /*create*/ false);\n return table !== undefined ? HashMap.has(table, this._key) : false;\n };\n WeakMap.prototype.get = function (target) {\n var table = GetOrCreateWeakMapTable(target, /*create*/ false);\n return table !== undefined ? HashMap.get(table, this._key) : undefined;\n };\n WeakMap.prototype.set = function (target, value) {\n var table = GetOrCreateWeakMapTable(target, /*create*/ true);\n table[this._key] = value;\n return this;\n };\n WeakMap.prototype.delete = function (target) {\n var table = GetOrCreateWeakMapTable(target, /*create*/ false);\n return table !== undefined ? delete table[this._key] : false;\n };\n WeakMap.prototype.clear = function () {\n // NOTE: not a real clear, just makes the previous data unreachable\n this._key = CreateUniqueKey();\n };\n return WeakMap;\n }());\n function CreateUniqueKey() {\n var key;\n do\n key = \"@@WeakMap@@\" + CreateUUID();\n while (HashMap.has(keys, key));\n keys[key] = true;\n return key;\n }\n function GetOrCreateWeakMapTable(target, create) {\n if (!hasOwn.call(target, rootKey)) {\n if (!create)\n return undefined;\n Object.defineProperty(target, rootKey, { value: HashMap.create() });\n }\n return target[rootKey];\n }\n function FillRandomBytes(buffer, size) {\n for (var i = 0; i < size; ++i)\n buffer[i] = Math.random() * 0xff | 0;\n return buffer;\n }\n function GenRandomBytes(size) {\n if (typeof Uint8Array === \"function\") {\n if (typeof crypto !== \"undefined\")\n return crypto.getRandomValues(new Uint8Array(size));\n if (typeof msCrypto !== \"undefined\")\n return msCrypto.getRandomValues(new Uint8Array(size));\n return FillRandomBytes(new Uint8Array(size), size);\n }\n return FillRandomBytes(new Array(size), size);\n }\n function CreateUUID() {\n var data = GenRandomBytes(UUID_SIZE);\n // mark as random - RFC 4122 § 4.4\n data[6] = data[6] & 0x4f | 0x40;\n data[8] = data[8] & 0xbf | 0x80;\n var result = \"\";\n for (var offset = 0; offset < UUID_SIZE; ++offset) {\n var byte = data[offset];\n if (offset === 4 || offset === 6 || offset === 8)\n result += \"-\";\n if (byte < 16)\n result += \"0\";\n result += byte.toString(16).toLowerCase();\n }\n return result;\n }\n }\n // uses a heuristic used by v8 and chakra to force an object into dictionary mode.\n function MakeDictionary(obj) {\n obj.__ = undefined;\n delete obj.__;\n return obj;\n }\n });\n})(Reflect || (Reflect = {}));\n","/////////////////////////////////////////////////////////////////////////////////\n/* UAParser.js v0.7.31\n Copyright © 2012-2021 Faisal Salman \n MIT License *//*\n Detect Browser, Engine, OS, CPU, and Device type/model from User-Agent data.\n Supports browser & node.js environment. \n Demo : https://faisalman.github.io/ua-parser-js\n Source : https://github.com/faisalman/ua-parser-js */\n/////////////////////////////////////////////////////////////////////////////////\n\n(function (window, undefined) {\n\n 'use strict';\n\n //////////////\n // Constants\n /////////////\n\n\n var LIBVERSION = '0.7.31',\n EMPTY = '',\n UNKNOWN = '?',\n FUNC_TYPE = 'function',\n UNDEF_TYPE = 'undefined',\n OBJ_TYPE = 'object',\n STR_TYPE = 'string',\n MAJOR = 'major',\n MODEL = 'model',\n NAME = 'name',\n TYPE = 'type',\n VENDOR = 'vendor',\n VERSION = 'version',\n ARCHITECTURE= 'architecture',\n CONSOLE = 'console',\n MOBILE = 'mobile',\n TABLET = 'tablet',\n SMARTTV = 'smarttv',\n WEARABLE = 'wearable',\n EMBEDDED = 'embedded',\n UA_MAX_LENGTH = 255;\n\n var AMAZON = 'Amazon',\n APPLE = 'Apple',\n ASUS = 'ASUS',\n BLACKBERRY = 'BlackBerry',\n BROWSER = 'Browser',\n CHROME = 'Chrome',\n EDGE = 'Edge',\n FIREFOX = 'Firefox',\n GOOGLE = 'Google',\n HUAWEI = 'Huawei',\n LG = 'LG',\n MICROSOFT = 'Microsoft',\n MOTOROLA = 'Motorola',\n OPERA = 'Opera',\n SAMSUNG = 'Samsung',\n SONY = 'Sony',\n XIAOMI = 'Xiaomi',\n ZEBRA = 'Zebra',\n FACEBOOK = 'Facebook';\n\n ///////////\n // Helper\n //////////\n\n var extend = function (regexes, extensions) {\n var mergedRegexes = {};\n for (var i in regexes) {\n if (extensions[i] && extensions[i].length % 2 === 0) {\n mergedRegexes[i] = extensions[i].concat(regexes[i]);\n } else {\n mergedRegexes[i] = regexes[i];\n }\n }\n return mergedRegexes;\n },\n enumerize = function (arr) {\n var enums = {};\n for (var i=0; i 0) {\n if (q.length === 2) {\n if (typeof q[1] == FUNC_TYPE) {\n // assign modified match\n this[q[0]] = q[1].call(this, match);\n } else {\n // assign given value, ignore regex match\n this[q[0]] = q[1];\n }\n } else if (q.length === 3) {\n // check whether function or regex\n if (typeof q[1] === FUNC_TYPE && !(q[1].exec && q[1].test)) {\n // call function (usually string mapper)\n this[q[0]] = match ? q[1].call(this, match, q[2]) : undefined;\n } else {\n // sanitize match using given regex\n this[q[0]] = match ? match.replace(q[1], q[2]) : undefined;\n }\n } else if (q.length === 4) {\n this[q[0]] = match ? q[3].call(this, match.replace(q[1], q[2])) : undefined;\n }\n } else {\n this[q] = match ? match : undefined;\n }\n }\n }\n }\n i += 2;\n }\n },\n\n strMapper = function (str, map) {\n\n for (var i in map) {\n // check if current value is array\n if (typeof map[i] === OBJ_TYPE && map[i].length > 0) {\n for (var j = 0; j < map[i].length; j++) {\n if (has(map[i][j], str)) {\n return (i === UNKNOWN) ? undefined : i;\n }\n }\n } else if (has(map[i], str)) {\n return (i === UNKNOWN) ? undefined : i;\n }\n }\n return str;\n };\n\n ///////////////\n // String map\n //////////////\n\n // Safari < 3.0\n var oldSafariMap = {\n '1.0' : '/8',\n '1.2' : '/1',\n '1.3' : '/3',\n '2.0' : '/412',\n '2.0.2' : '/416',\n '2.0.3' : '/417',\n '2.0.4' : '/419',\n '?' : '/'\n },\n windowsVersionMap = {\n 'ME' : '4.90',\n 'NT 3.11' : 'NT3.51',\n 'NT 4.0' : 'NT4.0',\n '2000' : 'NT 5.0',\n 'XP' : ['NT 5.1', 'NT 5.2'],\n 'Vista' : 'NT 6.0',\n '7' : 'NT 6.1',\n '8' : 'NT 6.2',\n '8.1' : 'NT 6.3',\n '10' : ['NT 6.4', 'NT 10.0'],\n 'RT' : 'ARM'\n };\n\n //////////////\n // Regex map\n /////////////\n\n var regexes = {\n\n browser : [[\n\n /\\b(?:crmo|crios)\\/([\\w\\.]+)/i // Chrome for Android/iOS\n ], [VERSION, [NAME, 'Chrome']], [\n /edg(?:e|ios|a)?\\/([\\w\\.]+)/i // Microsoft Edge\n ], [VERSION, [NAME, 'Edge']], [\n\n // Presto based\n /(opera mini)\\/([-\\w\\.]+)/i, // Opera Mini\n /(opera [mobiletab]{3,6})\\b.+version\\/([-\\w\\.]+)/i, // Opera Mobi/Tablet\n /(opera)(?:.+version\\/|[\\/ ]+)([\\w\\.]+)/i // Opera\n ], [NAME, VERSION], [\n /opios[\\/ ]+([\\w\\.]+)/i // Opera mini on iphone >= 8.0\n ], [VERSION, [NAME, OPERA+' Mini']], [\n /\\bopr\\/([\\w\\.]+)/i // Opera Webkit\n ], [VERSION, [NAME, OPERA]], [\n\n // Mixed\n /(kindle)\\/([\\w\\.]+)/i, // Kindle\n /(lunascape|maxthon|netfront|jasmine|blazer)[\\/ ]?([\\w\\.]*)/i, // Lunascape/Maxthon/Netfront/Jasmine/Blazer\n // Trident based\n /(avant |iemobile|slim)(?:browser)?[\\/ ]?([\\w\\.]*)/i, // Avant/IEMobile/SlimBrowser\n /(ba?idubrowser)[\\/ ]?([\\w\\.]+)/i, // Baidu Browser\n /(?:ms|\\()(ie) ([\\w\\.]+)/i, // Internet Explorer\n\n // Webkit/KHTML based // Flock/RockMelt/Midori/Epiphany/Silk/Skyfire/Bolt/Iron/Iridium/PhantomJS/Bowser/QupZilla/Falkon\n /(flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron|vivaldi|iridium|phantomjs|bowser|quark|qupzilla|falkon|rekonq|puffin|brave|whale|qqbrowserlite|qq)\\/([-\\w\\.]+)/i,\n // Rekonq/Puffin/Brave/Whale/QQBrowserLite/QQ, aka ShouQ\n /(weibo)__([\\d\\.]+)/i // Weibo\n ], [NAME, VERSION], [\n /(?:\\buc? ?browser|(?:juc.+)ucweb)[\\/ ]?([\\w\\.]+)/i // UCBrowser\n ], [VERSION, [NAME, 'UC'+BROWSER]], [\n /\\bqbcore\\/([\\w\\.]+)/i // WeChat Desktop for Windows Built-in Browser\n ], [VERSION, [NAME, 'WeChat(Win) Desktop']], [\n /micromessenger\\/([\\w\\.]+)/i // WeChat\n ], [VERSION, [NAME, 'WeChat']], [\n /konqueror\\/([\\w\\.]+)/i // Konqueror\n ], [VERSION, [NAME, 'Konqueror']], [\n /trident.+rv[: ]([\\w\\.]{1,9})\\b.+like gecko/i // IE11\n ], [VERSION, [NAME, 'IE']], [\n /yabrowser\\/([\\w\\.]+)/i // Yandex\n ], [VERSION, [NAME, 'Yandex']], [\n /(avast|avg)\\/([\\w\\.]+)/i // Avast/AVG Secure Browser\n ], [[NAME, /(.+)/, '$1 Secure '+BROWSER], VERSION], [\n /\\bfocus\\/([\\w\\.]+)/i // Firefox Focus\n ], [VERSION, [NAME, FIREFOX+' Focus']], [\n /\\bopt\\/([\\w\\.]+)/i // Opera Touch\n ], [VERSION, [NAME, OPERA+' Touch']], [\n /coc_coc\\w+\\/([\\w\\.]+)/i // Coc Coc Browser\n ], [VERSION, [NAME, 'Coc Coc']], [\n /dolfin\\/([\\w\\.]+)/i // Dolphin\n ], [VERSION, [NAME, 'Dolphin']], [\n /coast\\/([\\w\\.]+)/i // Opera Coast\n ], [VERSION, [NAME, OPERA+' Coast']], [\n /miuibrowser\\/([\\w\\.]+)/i // MIUI Browser\n ], [VERSION, [NAME, 'MIUI '+BROWSER]], [\n /fxios\\/([-\\w\\.]+)/i // Firefox for iOS\n ], [VERSION, [NAME, FIREFOX]], [\n /\\bqihu|(qi?ho?o?|360)browser/i // 360\n ], [[NAME, '360 '+BROWSER]], [\n /(oculus|samsung|sailfish)browser\\/([\\w\\.]+)/i\n ], [[NAME, /(.+)/, '$1 '+BROWSER], VERSION], [ // Oculus/Samsung/Sailfish Browser\n /(comodo_dragon)\\/([\\w\\.]+)/i // Comodo Dragon\n ], [[NAME, /_/g, ' '], VERSION], [\n /(electron)\\/([\\w\\.]+) safari/i, // Electron-based App\n /(tesla)(?: qtcarbrowser|\\/(20\\d\\d\\.[-\\w\\.]+))/i, // Tesla\n /m?(qqbrowser|baiduboxapp|2345Explorer)[\\/ ]?([\\w\\.]+)/i // QQBrowser/Baidu App/2345 Browser\n ], [NAME, VERSION], [\n /(metasr)[\\/ ]?([\\w\\.]+)/i, // SouGouBrowser\n /(lbbrowser)/i // LieBao Browser\n ], [NAME], [\n\n // WebView\n /((?:fban\\/fbios|fb_iab\\/fb4a)(?!.+fbav)|;fbav\\/([\\w\\.]+);)/i // Facebook App for iOS & Android\n ], [[NAME, FACEBOOK], VERSION], [\n /safari (line)\\/([\\w\\.]+)/i, // Line App for iOS\n /\\b(line)\\/([\\w\\.]+)\\/iab/i, // Line App for Android\n /(chromium|instagram)[\\/ ]([-\\w\\.]+)/i // Chromium/Instagram\n ], [NAME, VERSION], [\n /\\bgsa\\/([\\w\\.]+) .*safari\\//i // Google Search Appliance on iOS\n ], [VERSION, [NAME, 'GSA']], [\n\n /headlesschrome(?:\\/([\\w\\.]+)| )/i // Chrome Headless\n ], [VERSION, [NAME, CHROME+' Headless']], [\n\n / wv\\).+(chrome)\\/([\\w\\.]+)/i // Chrome WebView\n ], [[NAME, CHROME+' WebView'], VERSION], [\n\n /droid.+ version\\/([\\w\\.]+)\\b.+(?:mobile safari|safari)/i // Android Browser\n ], [VERSION, [NAME, 'Android '+BROWSER]], [\n\n /(chrome|omniweb|arora|[tizenoka]{5} ?browser)\\/v?([\\w\\.]+)/i // Chrome/OmniWeb/Arora/Tizen/Nokia\n ], [NAME, VERSION], [\n\n /version\\/([\\w\\.]+) .*mobile\\/\\w+ (safari)/i // Mobile Safari\n ], [VERSION, [NAME, 'Mobile Safari']], [\n /version\\/([\\w\\.]+) .*(mobile ?safari|safari)/i // Safari & Safari Mobile\n ], [VERSION, NAME], [\n /webkit.+?(mobile ?safari|safari)(\\/[\\w\\.]+)/i // Safari < 3.0\n ], [NAME, [VERSION, strMapper, oldSafariMap]], [\n\n /(webkit|khtml)\\/([\\w\\.]+)/i\n ], [NAME, VERSION], [\n\n // Gecko based\n /(navigator|netscape\\d?)\\/([-\\w\\.]+)/i // Netscape\n ], [[NAME, 'Netscape'], VERSION], [\n /mobile vr; rv:([\\w\\.]+)\\).+firefox/i // Firefox Reality\n ], [VERSION, [NAME, FIREFOX+' Reality']], [\n /ekiohf.+(flow)\\/([\\w\\.]+)/i, // Flow\n /(swiftfox)/i, // Swiftfox\n /(icedragon|iceweasel|camino|chimera|fennec|maemo browser|minimo|conkeror|klar)[\\/ ]?([\\w\\.\\+]+)/i,\n // IceDragon/Iceweasel/Camino/Chimera/Fennec/Maemo/Minimo/Conkeror/Klar\n /(seamonkey|k-meleon|icecat|iceape|firebird|phoenix|palemoon|basilisk|waterfox)\\/([-\\w\\.]+)$/i,\n // Firefox/SeaMonkey/K-Meleon/IceCat/IceApe/Firebird/Phoenix\n /(firefox)\\/([\\w\\.]+)/i, // Other Firefox-based\n /(mozilla)\\/([\\w\\.]+) .+rv\\:.+gecko\\/\\d+/i, // Mozilla\n\n // Other\n /(polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf|sleipnir|obigo|mosaic|(?:go|ice|up)[\\. ]?browser)[-\\/ ]?v?([\\w\\.]+)/i,\n // Polaris/Lynx/Dillo/iCab/Doris/Amaya/w3m/NetSurf/Sleipnir/Obigo/Mosaic/Go/ICE/UP.Browser\n /(links) \\(([\\w\\.]+)/i // Links\n ], [NAME, VERSION]\n ],\n\n cpu : [[\n\n /(?:(amd|x(?:(?:86|64)[-_])?|wow|win)64)[;\\)]/i // AMD64 (x64)\n ], [[ARCHITECTURE, 'amd64']], [\n\n /(ia32(?=;))/i // IA32 (quicktime)\n ], [[ARCHITECTURE, lowerize]], [\n\n /((?:i[346]|x)86)[;\\)]/i // IA32 (x86)\n ], [[ARCHITECTURE, 'ia32']], [\n\n /\\b(aarch64|arm(v?8e?l?|_?64))\\b/i // ARM64\n ], [[ARCHITECTURE, 'arm64']], [\n\n /\\b(arm(?:v[67])?ht?n?[fl]p?)\\b/i // ARMHF\n ], [[ARCHITECTURE, 'armhf']], [\n\n // PocketPC mistakenly identified as PowerPC\n /windows (ce|mobile); ppc;/i\n ], [[ARCHITECTURE, 'arm']], [\n\n /((?:ppc|powerpc)(?:64)?)(?: mac|;|\\))/i // PowerPC\n ], [[ARCHITECTURE, /ower/, EMPTY, lowerize]], [\n\n /(sun4\\w)[;\\)]/i // SPARC\n ], [[ARCHITECTURE, 'sparc']], [\n\n /((?:avr32|ia64(?=;))|68k(?=\\))|\\barm(?=v(?:[1-7]|[5-7]1)l?|;|eabi)|(?=atmel )avr|(?:irix|mips|sparc)(?:64)?\\b|pa-risc)/i\n // IA64, 68K, ARM/64, AVR/32, IRIX/64, MIPS/64, SPARC/64, PA-RISC\n ], [[ARCHITECTURE, lowerize]]\n ],\n\n device : [[\n\n //////////////////////////\n // MOBILES & TABLETS\n // Ordered by popularity\n /////////////////////////\n\n // Samsung\n /\\b(sch-i[89]0\\d|shw-m380s|sm-[pt]\\w{2,4}|gt-[pn]\\d{2,4}|sgh-t8[56]9|nexus 10)/i\n ], [MODEL, [VENDOR, SAMSUNG], [TYPE, TABLET]], [\n /\\b((?:s[cgp]h|gt|sm)-\\w+|galaxy nexus)/i,\n /samsung[- ]([-\\w]+)/i,\n /sec-(sgh\\w+)/i\n ], [MODEL, [VENDOR, SAMSUNG], [TYPE, MOBILE]], [\n\n // Apple\n /\\((ip(?:hone|od)[\\w ]*);/i // iPod/iPhone\n ], [MODEL, [VENDOR, APPLE], [TYPE, MOBILE]], [\n /\\((ipad);[-\\w\\),; ]+apple/i, // iPad\n /applecoremedia\\/[\\w\\.]+ \\((ipad)/i,\n /\\b(ipad)\\d\\d?,\\d\\d?[;\\]].+ios/i\n ], [MODEL, [VENDOR, APPLE], [TYPE, TABLET]], [\n\n // Huawei\n /\\b((?:ag[rs][23]?|bah2?|sht?|btv)-a?[lw]\\d{2})\\b(?!.+d\\/s)/i\n ], [MODEL, [VENDOR, HUAWEI], [TYPE, TABLET]], [\n /(?:huawei|honor)([-\\w ]+)[;\\)]/i,\n /\\b(nexus 6p|\\w{2,4}-[atu]?[ln][01259x][012359][an]?)\\b(?!.+d\\/s)/i\n ], [MODEL, [VENDOR, HUAWEI], [TYPE, MOBILE]], [\n\n // Xiaomi\n /\\b(poco[\\w ]+)(?: bui|\\))/i, // Xiaomi POCO\n /\\b; (\\w+) build\\/hm\\1/i, // Xiaomi Hongmi 'numeric' models\n /\\b(hm[-_ ]?note?[_ ]?(?:\\d\\w)?) bui/i, // Xiaomi Hongmi\n /\\b(redmi[\\-_ ]?(?:note|k)?[\\w_ ]+)(?: bui|\\))/i, // Xiaomi Redmi\n /\\b(mi[-_ ]?(?:a\\d|one|one[_ ]plus|note lte|max)?[_ ]?(?:\\d?\\w?)[_ ]?(?:plus|se|lite)?)(?: bui|\\))/i // Xiaomi Mi\n ], [[MODEL, /_/g, ' '], [VENDOR, XIAOMI], [TYPE, MOBILE]], [\n /\\b(mi[-_ ]?(?:pad)(?:[\\w_ ]+))(?: bui|\\))/i // Mi Pad tablets\n ],[[MODEL, /_/g, ' '], [VENDOR, XIAOMI], [TYPE, TABLET]], [\n\n // OPPO\n /; (\\w+) bui.+ oppo/i,\n /\\b(cph[12]\\d{3}|p(?:af|c[al]|d\\w|e[ar])[mt]\\d0|x9007|a101op)\\b/i\n ], [MODEL, [VENDOR, 'OPPO'], [TYPE, MOBILE]], [\n\n // Vivo\n /vivo (\\w+)(?: bui|\\))/i,\n /\\b(v[12]\\d{3}\\w?[at])(?: bui|;)/i\n ], [MODEL, [VENDOR, 'Vivo'], [TYPE, MOBILE]], [\n\n // Realme\n /\\b(rmx[12]\\d{3})(?: bui|;|\\))/i\n ], [MODEL, [VENDOR, 'Realme'], [TYPE, MOBILE]], [\n\n // Motorola\n /\\b(milestone|droid(?:[2-4x]| (?:bionic|x2|pro|razr))?:?( 4g)?)\\b[\\w ]+build\\//i,\n /\\bmot(?:orola)?[- ](\\w*)/i,\n /((?:moto[\\w\\(\\) ]+|xt\\d{3,4}|nexus 6)(?= bui|\\)))/i\n ], [MODEL, [VENDOR, MOTOROLA], [TYPE, MOBILE]], [\n /\\b(mz60\\d|xoom[2 ]{0,2}) build\\//i\n ], [MODEL, [VENDOR, MOTOROLA], [TYPE, TABLET]], [\n\n // LG\n /((?=lg)?[vl]k\\-?\\d{3}) bui| 3\\.[-\\w; ]{10}lg?-([06cv9]{3,4})/i\n ], [MODEL, [VENDOR, LG], [TYPE, TABLET]], [\n /(lm(?:-?f100[nv]?|-[\\w\\.]+)(?= bui|\\))|nexus [45])/i,\n /\\blg[-e;\\/ ]+((?!browser|netcast|android tv)\\w+)/i,\n /\\blg-?([\\d\\w]+) bui/i\n ], [MODEL, [VENDOR, LG], [TYPE, MOBILE]], [\n\n // Lenovo\n /(ideatab[-\\w ]+)/i,\n /lenovo ?(s[56]000[-\\w]+|tab(?:[\\w ]+)|yt[-\\d\\w]{6}|tb[-\\d\\w]{6})/i\n ], [MODEL, [VENDOR, 'Lenovo'], [TYPE, TABLET]], [\n\n // Nokia\n /(?:maemo|nokia).*(n900|lumia \\d+)/i,\n /nokia[-_ ]?([-\\w\\.]*)/i\n ], [[MODEL, /_/g, ' '], [VENDOR, 'Nokia'], [TYPE, MOBILE]], [\n\n // Google\n /(pixel c)\\b/i // Google Pixel C\n ], [MODEL, [VENDOR, GOOGLE], [TYPE, TABLET]], [\n /droid.+; (pixel[\\daxl ]{0,6})(?: bui|\\))/i // Google Pixel\n ], [MODEL, [VENDOR, GOOGLE], [TYPE, MOBILE]], [\n\n // Sony\n /droid.+ ([c-g]\\d{4}|so[-gl]\\w+|xq-a\\w[4-7][12])(?= bui|\\).+chrome\\/(?![1-6]{0,1}\\d\\.))/i\n ], [MODEL, [VENDOR, SONY], [TYPE, MOBILE]], [\n /sony tablet [ps]/i,\n /\\b(?:sony)?sgp\\w+(?: bui|\\))/i\n ], [[MODEL, 'Xperia Tablet'], [VENDOR, SONY], [TYPE, TABLET]], [\n\n // OnePlus\n / (kb2005|in20[12]5|be20[12][59])\\b/i,\n /(?:one)?(?:plus)? (a\\d0\\d\\d)(?: b|\\))/i\n ], [MODEL, [VENDOR, 'OnePlus'], [TYPE, MOBILE]], [\n\n // Amazon\n /(alexa)webm/i,\n /(kf[a-z]{2}wi)( bui|\\))/i, // Kindle Fire without Silk\n /(kf[a-z]+)( bui|\\)).+silk\\//i // Kindle Fire HD\n ], [MODEL, [VENDOR, AMAZON], [TYPE, TABLET]], [\n /((?:sd|kf)[0349hijorstuw]+)( bui|\\)).+silk\\//i // Fire Phone\n ], [[MODEL, /(.+)/g, 'Fire Phone $1'], [VENDOR, AMAZON], [TYPE, MOBILE]], [\n\n // BlackBerry\n /(playbook);[-\\w\\),; ]+(rim)/i // BlackBerry PlayBook\n ], [MODEL, VENDOR, [TYPE, TABLET]], [\n /\\b((?:bb[a-f]|st[hv])100-\\d)/i,\n /\\(bb10; (\\w+)/i // BlackBerry 10\n ], [MODEL, [VENDOR, BLACKBERRY], [TYPE, MOBILE]], [\n\n // Asus\n /(?:\\b|asus_)(transfo[prime ]{4,10} \\w+|eeepc|slider \\w+|nexus 7|padfone|p00[cj])/i\n ], [MODEL, [VENDOR, ASUS], [TYPE, TABLET]], [\n / (z[bes]6[027][012][km][ls]|zenfone \\d\\w?)\\b/i\n ], [MODEL, [VENDOR, ASUS], [TYPE, MOBILE]], [\n\n // HTC\n /(nexus 9)/i // HTC Nexus 9\n ], [MODEL, [VENDOR, 'HTC'], [TYPE, TABLET]], [\n /(htc)[-;_ ]{1,2}([\\w ]+(?=\\)| bui)|\\w+)/i, // HTC\n\n // ZTE\n /(zte)[- ]([\\w ]+?)(?: bui|\\/|\\))/i,\n /(alcatel|geeksphone|nexian|panasonic|sony)[-_ ]?([-\\w]*)/i // Alcatel/GeeksPhone/Nexian/Panasonic/Sony\n ], [VENDOR, [MODEL, /_/g, ' '], [TYPE, MOBILE]], [\n\n // Acer\n /droid.+; ([ab][1-7]-?[0178a]\\d\\d?)/i\n ], [MODEL, [VENDOR, 'Acer'], [TYPE, TABLET]], [\n\n // Meizu\n /droid.+; (m[1-5] note) bui/i,\n /\\bmz-([-\\w]{2,})/i\n ], [MODEL, [VENDOR, 'Meizu'], [TYPE, MOBILE]], [\n\n // Sharp\n /\\b(sh-?[altvz]?\\d\\d[a-ekm]?)/i\n ], [MODEL, [VENDOR, 'Sharp'], [TYPE, MOBILE]], [\n\n // MIXED\n /(blackberry|benq|palm(?=\\-)|sonyericsson|acer|asus|dell|meizu|motorola|polytron)[-_ ]?([-\\w]*)/i,\n // BlackBerry/BenQ/Palm/Sony-Ericsson/Acer/Asus/Dell/Meizu/Motorola/Polytron\n /(hp) ([\\w ]+\\w)/i, // HP iPAQ\n /(asus)-?(\\w+)/i, // Asus\n /(microsoft); (lumia[\\w ]+)/i, // Microsoft Lumia\n /(lenovo)[-_ ]?([-\\w]+)/i, // Lenovo\n /(jolla)/i, // Jolla\n /(oppo) ?([\\w ]+) bui/i // OPPO\n ], [VENDOR, MODEL, [TYPE, MOBILE]], [\n\n /(archos) (gamepad2?)/i, // Archos\n /(hp).+(touchpad(?!.+tablet)|tablet)/i, // HP TouchPad\n /(kindle)\\/([\\w\\.]+)/i, // Kindle\n /(nook)[\\w ]+build\\/(\\w+)/i, // Nook\n /(dell) (strea[kpr\\d ]*[\\dko])/i, // Dell Streak\n /(le[- ]+pan)[- ]+(\\w{1,9}) bui/i, // Le Pan Tablets\n /(trinity)[- ]*(t\\d{3}) bui/i, // Trinity Tablets\n /(gigaset)[- ]+(q\\w{1,9}) bui/i, // Gigaset Tablets\n /(vodafone) ([\\w ]+)(?:\\)| bui)/i // Vodafone\n ], [VENDOR, MODEL, [TYPE, TABLET]], [\n\n /(surface duo)/i // Surface Duo\n ], [MODEL, [VENDOR, MICROSOFT], [TYPE, TABLET]], [\n /droid [\\d\\.]+; (fp\\du?)(?: b|\\))/i // Fairphone\n ], [MODEL, [VENDOR, 'Fairphone'], [TYPE, MOBILE]], [\n /(u304aa)/i // AT&T\n ], [MODEL, [VENDOR, 'AT&T'], [TYPE, MOBILE]], [\n /\\bsie-(\\w*)/i // Siemens\n ], [MODEL, [VENDOR, 'Siemens'], [TYPE, MOBILE]], [\n /\\b(rct\\w+) b/i // RCA Tablets\n ], [MODEL, [VENDOR, 'RCA'], [TYPE, TABLET]], [\n /\\b(venue[\\d ]{2,7}) b/i // Dell Venue Tablets\n ], [MODEL, [VENDOR, 'Dell'], [TYPE, TABLET]], [\n /\\b(q(?:mv|ta)\\w+) b/i // Verizon Tablet\n ], [MODEL, [VENDOR, 'Verizon'], [TYPE, TABLET]], [\n /\\b(?:barnes[& ]+noble |bn[rt])([\\w\\+ ]*) b/i // Barnes & Noble Tablet\n ], [MODEL, [VENDOR, 'Barnes & Noble'], [TYPE, TABLET]], [\n /\\b(tm\\d{3}\\w+) b/i\n ], [MODEL, [VENDOR, 'NuVision'], [TYPE, TABLET]], [\n /\\b(k88) b/i // ZTE K Series Tablet\n ], [MODEL, [VENDOR, 'ZTE'], [TYPE, TABLET]], [\n /\\b(nx\\d{3}j) b/i // ZTE Nubia\n ], [MODEL, [VENDOR, 'ZTE'], [TYPE, MOBILE]], [\n /\\b(gen\\d{3}) b.+49h/i // Swiss GEN Mobile\n ], [MODEL, [VENDOR, 'Swiss'], [TYPE, MOBILE]], [\n /\\b(zur\\d{3}) b/i // Swiss ZUR Tablet\n ], [MODEL, [VENDOR, 'Swiss'], [TYPE, TABLET]], [\n /\\b((zeki)?tb.*\\b) b/i // Zeki Tablets\n ], [MODEL, [VENDOR, 'Zeki'], [TYPE, TABLET]], [\n /\\b([yr]\\d{2}) b/i,\n /\\b(dragon[- ]+touch |dt)(\\w{5}) b/i // Dragon Touch Tablet\n ], [[VENDOR, 'Dragon Touch'], MODEL, [TYPE, TABLET]], [\n /\\b(ns-?\\w{0,9}) b/i // Insignia Tablets\n ], [MODEL, [VENDOR, 'Insignia'], [TYPE, TABLET]], [\n /\\b((nxa|next)-?\\w{0,9}) b/i // NextBook Tablets\n ], [MODEL, [VENDOR, 'NextBook'], [TYPE, TABLET]], [\n /\\b(xtreme\\_)?(v(1[045]|2[015]|[3469]0|7[05])) b/i // Voice Xtreme Phones\n ], [[VENDOR, 'Voice'], MODEL, [TYPE, MOBILE]], [\n /\\b(lvtel\\-)?(v1[12]) b/i // LvTel Phones\n ], [[VENDOR, 'LvTel'], MODEL, [TYPE, MOBILE]], [\n /\\b(ph-1) /i // Essential PH-1\n ], [MODEL, [VENDOR, 'Essential'], [TYPE, MOBILE]], [\n /\\b(v(100md|700na|7011|917g).*\\b) b/i // Envizen Tablets\n ], [MODEL, [VENDOR, 'Envizen'], [TYPE, TABLET]], [\n /\\b(trio[-\\w\\. ]+) b/i // MachSpeed Tablets\n ], [MODEL, [VENDOR, 'MachSpeed'], [TYPE, TABLET]], [\n /\\btu_(1491) b/i // Rotor Tablets\n ], [MODEL, [VENDOR, 'Rotor'], [TYPE, TABLET]], [\n /(shield[\\w ]+) b/i // Nvidia Shield Tablets\n ], [MODEL, [VENDOR, 'Nvidia'], [TYPE, TABLET]], [\n /(sprint) (\\w+)/i // Sprint Phones\n ], [VENDOR, MODEL, [TYPE, MOBILE]], [\n /(kin\\.[onetw]{3})/i // Microsoft Kin\n ], [[MODEL, /\\./g, ' '], [VENDOR, MICROSOFT], [TYPE, MOBILE]], [\n /droid.+; (cc6666?|et5[16]|mc[239][23]x?|vc8[03]x?)\\)/i // Zebra\n ], [MODEL, [VENDOR, ZEBRA], [TYPE, TABLET]], [\n /droid.+; (ec30|ps20|tc[2-8]\\d[kx])\\)/i\n ], [MODEL, [VENDOR, ZEBRA], [TYPE, MOBILE]], [\n\n ///////////////////\n // CONSOLES\n ///////////////////\n\n /(ouya)/i, // Ouya\n /(nintendo) ([wids3utch]+)/i // Nintendo\n ], [VENDOR, MODEL, [TYPE, CONSOLE]], [\n /droid.+; (shield) bui/i // Nvidia\n ], [MODEL, [VENDOR, 'Nvidia'], [TYPE, CONSOLE]], [\n /(playstation [345portablevi]+)/i // Playstation\n ], [MODEL, [VENDOR, SONY], [TYPE, CONSOLE]], [\n /\\b(xbox(?: one)?(?!; xbox))[\\); ]/i // Microsoft Xbox\n ], [MODEL, [VENDOR, MICROSOFT], [TYPE, CONSOLE]], [\n\n ///////////////////\n // SMARTTVS\n ///////////////////\n\n /smart-tv.+(samsung)/i // Samsung\n ], [VENDOR, [TYPE, SMARTTV]], [\n /hbbtv.+maple;(\\d+)/i\n ], [[MODEL, /^/, 'SmartTV'], [VENDOR, SAMSUNG], [TYPE, SMARTTV]], [\n /(nux; netcast.+smarttv|lg (netcast\\.tv-201\\d|android tv))/i // LG SmartTV\n ], [[VENDOR, LG], [TYPE, SMARTTV]], [\n /(apple) ?tv/i // Apple TV\n ], [VENDOR, [MODEL, APPLE+' TV'], [TYPE, SMARTTV]], [\n /crkey/i // Google Chromecast\n ], [[MODEL, CHROME+'cast'], [VENDOR, GOOGLE], [TYPE, SMARTTV]], [\n /droid.+aft(\\w)( bui|\\))/i // Fire TV\n ], [MODEL, [VENDOR, AMAZON], [TYPE, SMARTTV]], [\n /\\(dtv[\\);].+(aquos)/i // Sharp\n ], [MODEL, [VENDOR, 'Sharp'], [TYPE, SMARTTV]], [\n /\\b(roku)[\\dx]*[\\)\\/]((?:dvp-)?[\\d\\.]*)/i, // Roku\n /hbbtv\\/\\d+\\.\\d+\\.\\d+ +\\([\\w ]*; *(\\w[^;]*);([^;]*)/i // HbbTV devices\n ], [[VENDOR, trim], [MODEL, trim], [TYPE, SMARTTV]], [\n /\\b(android tv|smart[- ]?tv|opera tv|tv; rv:)\\b/i // SmartTV from Unidentified Vendors\n ], [[TYPE, SMARTTV]], [\n\n ///////////////////\n // WEARABLES\n ///////////////////\n\n /((pebble))app/i // Pebble\n ], [VENDOR, MODEL, [TYPE, WEARABLE]], [\n /droid.+; (glass) \\d/i // Google Glass\n ], [MODEL, [VENDOR, GOOGLE], [TYPE, WEARABLE]], [\n /droid.+; (wt63?0{2,3})\\)/i\n ], [MODEL, [VENDOR, ZEBRA], [TYPE, WEARABLE]], [\n /(quest( 2)?)/i // Oculus Quest\n ], [MODEL, [VENDOR, FACEBOOK], [TYPE, WEARABLE]], [\n\n ///////////////////\n // EMBEDDED\n ///////////////////\n\n /(tesla)(?: qtcarbrowser|\\/[-\\w\\.]+)/i // Tesla\n ], [VENDOR, [TYPE, EMBEDDED]], [\n\n ////////////////////\n // MIXED (GENERIC)\n ///////////////////\n\n /droid .+?; ([^;]+?)(?: bui|\\) applew).+? mobile safari/i // Android Phones from Unidentified Vendors\n ], [MODEL, [TYPE, MOBILE]], [\n /droid .+?; ([^;]+?)(?: bui|\\) applew).+?(?! mobile) safari/i // Android Tablets from Unidentified Vendors\n ], [MODEL, [TYPE, TABLET]], [\n /\\b((tablet|tab)[;\\/]|focus\\/\\d(?!.+mobile))/i // Unidentifiable Tablet\n ], [[TYPE, TABLET]], [\n /(phone|mobile(?:[;\\/]| safari)|pda(?=.+windows ce))/i // Unidentifiable Mobile\n ], [[TYPE, MOBILE]], [\n /(android[-\\w\\. ]{0,9});.+buil/i // Generic Android Device\n ], [MODEL, [VENDOR, 'Generic']]\n ],\n\n engine : [[\n\n /windows.+ edge\\/([\\w\\.]+)/i // EdgeHTML\n ], [VERSION, [NAME, EDGE+'HTML']], [\n\n /webkit\\/537\\.36.+chrome\\/(?!27)([\\w\\.]+)/i // Blink\n ], [VERSION, [NAME, 'Blink']], [\n\n /(presto)\\/([\\w\\.]+)/i, // Presto\n /(webkit|trident|netfront|netsurf|amaya|lynx|w3m|goanna)\\/([\\w\\.]+)/i, // WebKit/Trident/NetFront/NetSurf/Amaya/Lynx/w3m/Goanna\n /ekioh(flow)\\/([\\w\\.]+)/i, // Flow\n /(khtml|tasman|links)[\\/ ]\\(?([\\w\\.]+)/i, // KHTML/Tasman/Links\n /(icab)[\\/ ]([23]\\.[\\d\\.]+)/i // iCab\n ], [NAME, VERSION], [\n\n /rv\\:([\\w\\.]{1,9})\\b.+(gecko)/i // Gecko\n ], [VERSION, NAME]\n ],\n\n os : [[\n\n // Windows\n /microsoft (windows) (vista|xp)/i // Windows (iTunes)\n ], [NAME, VERSION], [\n /(windows) nt 6\\.2; (arm)/i, // Windows RT\n /(windows (?:phone(?: os)?|mobile))[\\/ ]?([\\d\\.\\w ]*)/i, // Windows Phone\n /(windows)[\\/ ]?([ntce\\d\\. ]+\\w)(?!.+xbox)/i\n ], [NAME, [VERSION, strMapper, windowsVersionMap]], [\n /(win(?=3|9|n)|win 9x )([nt\\d\\.]+)/i\n ], [[NAME, 'Windows'], [VERSION, strMapper, windowsVersionMap]], [\n\n // iOS/macOS\n /ip[honead]{2,4}\\b(?:.*os ([\\w]+) like mac|; opera)/i, // iOS\n /cfnetwork\\/.+darwin/i\n ], [[VERSION, /_/g, '.'], [NAME, 'iOS']], [\n /(mac os x) ?([\\w\\. ]*)/i,\n /(macintosh|mac_powerpc\\b)(?!.+haiku)/i // Mac OS\n ], [[NAME, 'Mac OS'], [VERSION, /_/g, '.']], [\n\n // Mobile OSes\n /droid ([\\w\\.]+)\\b.+(android[- ]x86)/i // Android-x86\n ], [VERSION, NAME], [ // Android/WebOS/QNX/Bada/RIM/Maemo/MeeGo/Sailfish OS\n /(android|webos|qnx|bada|rim tablet os|maemo|meego|sailfish)[-\\/ ]?([\\w\\.]*)/i,\n /(blackberry)\\w*\\/([\\w\\.]*)/i, // Blackberry\n /(tizen|kaios)[\\/ ]([\\w\\.]+)/i, // Tizen/KaiOS\n /\\((series40);/i // Series 40\n ], [NAME, VERSION], [\n /\\(bb(10);/i // BlackBerry 10\n ], [VERSION, [NAME, BLACKBERRY]], [\n /(?:symbian ?os|symbos|s60(?=;)|series60)[-\\/ ]?([\\w\\.]*)/i // Symbian\n ], [VERSION, [NAME, 'Symbian']], [\n /mozilla\\/[\\d\\.]+ \\((?:mobile|tablet|tv|mobile; [\\w ]+); rv:.+ gecko\\/([\\w\\.]+)/i // Firefox OS\n ], [VERSION, [NAME, FIREFOX+' OS']], [\n /web0s;.+rt(tv)/i,\n /\\b(?:hp)?wos(?:browser)?\\/([\\w\\.]+)/i // WebOS\n ], [VERSION, [NAME, 'webOS']], [\n\n // Google Chromecast\n /crkey\\/([\\d\\.]+)/i // Google Chromecast\n ], [VERSION, [NAME, CHROME+'cast']], [\n /(cros) [\\w]+ ([\\w\\.]+\\w)/i // Chromium OS\n ], [[NAME, 'Chromium OS'], VERSION],[\n\n // Console\n /(nintendo|playstation) ([wids345portablevuch]+)/i, // Nintendo/Playstation\n /(xbox); +xbox ([^\\);]+)/i, // Microsoft Xbox (360, One, X, S, Series X, Series S)\n\n // Other\n /\\b(joli|palm)\\b ?(?:os)?\\/?([\\w\\.]*)/i, // Joli/Palm\n /(mint)[\\/\\(\\) ]?(\\w*)/i, // Mint\n /(mageia|vectorlinux)[; ]/i, // Mageia/VectorLinux\n /([kxln]?ubuntu|debian|suse|opensuse|gentoo|arch(?= linux)|slackware|fedora|mandriva|centos|pclinuxos|red ?hat|zenwalk|linpus|raspbian|plan 9|minix|risc os|contiki|deepin|manjaro|elementary os|sabayon|linspire)(?: gnu\\/linux)?(?: enterprise)?(?:[- ]linux)?(?:-gnu)?[-\\/ ]?(?!chrom|package)([-\\w\\.]*)/i,\n // Ubuntu/Debian/SUSE/Gentoo/Arch/Slackware/Fedora/Mandriva/CentOS/PCLinuxOS/RedHat/Zenwalk/Linpus/Raspbian/Plan9/Minix/RISCOS/Contiki/Deepin/Manjaro/elementary/Sabayon/Linspire\n /(hurd|linux) ?([\\w\\.]*)/i, // Hurd/Linux\n /(gnu) ?([\\w\\.]*)/i, // GNU\n /\\b([-frentopcghs]{0,5}bsd|dragonfly)[\\/ ]?(?!amd|[ix346]{1,2}86)([\\w\\.]*)/i, // FreeBSD/NetBSD/OpenBSD/PC-BSD/GhostBSD/DragonFly\n /(haiku) (\\w+)/i // Haiku\n ], [NAME, VERSION], [\n /(sunos) ?([\\w\\.\\d]*)/i // Solaris\n ], [[NAME, 'Solaris'], VERSION], [\n /((?:open)?solaris)[-\\/ ]?([\\w\\.]*)/i, // Solaris\n /(aix) ((\\d)(?=\\.|\\)| )[\\w\\.])*/i, // AIX\n /\\b(beos|os\\/2|amigaos|morphos|openvms|fuchsia|hp-ux)/i, // BeOS/OS2/AmigaOS/MorphOS/OpenVMS/Fuchsia/HP-UX\n /(unix) ?([\\w\\.]*)/i // UNIX\n ], [NAME, VERSION]\n ]\n };\n\n /////////////////\n // Constructor\n ////////////////\n\n var UAParser = function (ua, extensions) {\n\n if (typeof ua === OBJ_TYPE) {\n extensions = ua;\n ua = undefined;\n }\n\n if (!(this instanceof UAParser)) {\n return new UAParser(ua, extensions).getResult();\n }\n\n var _ua = ua || ((typeof window !== UNDEF_TYPE && window.navigator && window.navigator.userAgent) ? window.navigator.userAgent : EMPTY);\n var _rgxmap = extensions ? extend(regexes, extensions) : regexes;\n\n this.getBrowser = function () {\n var _browser = {};\n _browser[NAME] = undefined;\n _browser[VERSION] = undefined;\n rgxMapper.call(_browser, _ua, _rgxmap.browser);\n _browser.major = majorize(_browser.version);\n return _browser;\n };\n this.getCPU = function () {\n var _cpu = {};\n _cpu[ARCHITECTURE] = undefined;\n rgxMapper.call(_cpu, _ua, _rgxmap.cpu);\n return _cpu;\n };\n this.getDevice = function () {\n var _device = {};\n _device[VENDOR] = undefined;\n _device[MODEL] = undefined;\n _device[TYPE] = undefined;\n rgxMapper.call(_device, _ua, _rgxmap.device);\n return _device;\n };\n this.getEngine = function () {\n var _engine = {};\n _engine[NAME] = undefined;\n _engine[VERSION] = undefined;\n rgxMapper.call(_engine, _ua, _rgxmap.engine);\n return _engine;\n };\n this.getOS = function () {\n var _os = {};\n _os[NAME] = undefined;\n _os[VERSION] = undefined;\n rgxMapper.call(_os, _ua, _rgxmap.os);\n return _os;\n };\n this.getResult = function () {\n return {\n ua : this.getUA(),\n browser : this.getBrowser(),\n engine : this.getEngine(),\n os : this.getOS(),\n device : this.getDevice(),\n cpu : this.getCPU()\n };\n };\n this.getUA = function () {\n return _ua;\n };\n this.setUA = function (ua) {\n _ua = (typeof ua === STR_TYPE && ua.length > UA_MAX_LENGTH) ? trim(ua, UA_MAX_LENGTH) : ua;\n return this;\n };\n this.setUA(_ua);\n return this;\n };\n\n UAParser.VERSION = LIBVERSION;\n UAParser.BROWSER = enumerize([NAME, VERSION, MAJOR]);\n UAParser.CPU = enumerize([ARCHITECTURE]);\n UAParser.DEVICE = enumerize([MODEL, VENDOR, TYPE, CONSOLE, MOBILE, SMARTTV, TABLET, WEARABLE, EMBEDDED]);\n UAParser.ENGINE = UAParser.OS = enumerize([NAME, VERSION]);\n\n ///////////\n // Export\n //////////\n\n // check js environment\n if (typeof(exports) !== UNDEF_TYPE) {\n // nodejs env\n if (typeof module !== UNDEF_TYPE && module.exports) {\n exports = module.exports = UAParser;\n }\n exports.UAParser = UAParser;\n } else {\n // requirejs env (optional)\n if (typeof(define) === FUNC_TYPE && define.amd) {\n define(function () {\n return UAParser;\n });\n } else if (typeof window !== UNDEF_TYPE) {\n // browser env\n window.UAParser = UAParser;\n }\n }\n\n // jQuery/Zepto specific (optional)\n // Note:\n // In AMD env the global scope should be kept clean, but jQuery is an exception.\n // jQuery always exports to global scope, unless jQuery.noConflict(true) is used,\n // and we should catch that.\n var $ = typeof window !== UNDEF_TYPE && (window.jQuery || window.Zepto);\n if ($ && !$.ua) {\n var parser = new UAParser();\n $.ua = parser.getResult();\n $.ua.get = function () {\n return parser.getUA();\n };\n $.ua.set = function (ua) {\n parser.setUA(ua);\n var result = parser.getResult();\n for (var prop in result) {\n $.ua[prop] = result[prop];\n }\n };\n }\n\n})(typeof window === 'object' ? window : this);\n","export default function _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}","import unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nexport default function _createForOfIteratorHelper(o, allowArrayLike) {\n var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"];\n\n if (!it) {\n if (Array.isArray(o) || (it = unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") {\n if (it) o = it;\n var i = 0;\n\n var F = function F() {};\n\n return {\n s: F,\n n: function n() {\n if (i >= o.length) return {\n done: true\n };\n return {\n done: false,\n value: o[i++]\n };\n },\n e: function e(_e) {\n throw _e;\n },\n f: F\n };\n }\n\n throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n }\n\n var normalCompletion = true,\n didErr = false,\n err;\n return {\n s: function s() {\n it = it.call(o);\n },\n n: function n() {\n var step = it.next();\n normalCompletion = step.done;\n return step;\n },\n e: function e(_e2) {\n didErr = true;\n err = _e2;\n },\n f: function f() {\n try {\n if (!normalCompletion && it[\"return\"] != null) it[\"return\"]();\n } finally {\n if (didErr) throw err;\n }\n }\n };\n}","import getPrototypeOf from \"./getPrototypeOf.js\";\nimport isNativeReflectConstruct from \"./isNativeReflectConstruct.js\";\nimport possibleConstructorReturn from \"./possibleConstructorReturn.js\";\nexport default function _createSuper(Derived) {\n var hasNativeReflectConstruct = isNativeReflectConstruct();\n return function _createSuperInternal() {\n var Super = getPrototypeOf(Derived),\n result;\n\n if (hasNativeReflectConstruct) {\n var NewTarget = getPrototypeOf(this).constructor;\n result = Reflect.construct(Super, arguments, NewTarget);\n } else {\n result = Super.apply(this, arguments);\n }\n\n return possibleConstructorReturn(this, result);\n };\n}","export default function _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}","import setPrototypeOf from \"./setPrototypeOf.js\";\nexport default function _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n Object.defineProperty(subClass, \"prototype\", {\n writable: false\n });\n if (superClass) setPrototypeOf(subClass, superClass);\n}","export default function _isNativeReflectConstruct() {\n if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n if (Reflect.construct.sham) return false;\n if (typeof Proxy === \"function\") return true;\n\n try {\n Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));\n return true;\n } catch (e) {\n return false;\n }\n}","import _typeof from \"./typeof.js\";\nimport assertThisInitialized from \"./assertThisInitialized.js\";\nexport default function _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n } else if (call !== void 0) {\n throw new TypeError(\"Derived constructors may only return object or undefined\");\n }\n\n return assertThisInitialized(self);\n}","export default function _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}","export default function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n }, _typeof(obj);\n}","import setPrototypeOf from \"./setPrototypeOf.js\";\nimport isNativeReflectConstruct from \"./isNativeReflectConstruct.js\";\nexport default function _construct(Parent, args, Class) {\n if (isNativeReflectConstruct()) {\n _construct = Reflect.construct;\n } else {\n _construct = function _construct(Parent, args, Class) {\n var a = [null];\n a.push.apply(a, args);\n var Constructor = Function.bind.apply(Parent, a);\n var instance = new Constructor();\n if (Class) setPrototypeOf(instance, Class.prototype);\n return instance;\n };\n }\n\n return _construct.apply(null, arguments);\n}","import getPrototypeOf from \"./getPrototypeOf.js\";\nimport setPrototypeOf from \"./setPrototypeOf.js\";\nimport isNativeFunction from \"./isNativeFunction.js\";\nimport construct from \"./construct.js\";\nexport default function _wrapNativeSuper(Class) {\n var _cache = typeof Map === \"function\" ? new Map() : undefined;\n\n _wrapNativeSuper = function _wrapNativeSuper(Class) {\n if (Class === null || !isNativeFunction(Class)) return Class;\n\n if (typeof Class !== \"function\") {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n if (typeof _cache !== \"undefined\") {\n if (_cache.has(Class)) return _cache.get(Class);\n\n _cache.set(Class, Wrapper);\n }\n\n function Wrapper() {\n return construct(Class, arguments, getPrototypeOf(this).constructor);\n }\n\n Wrapper.prototype = Object.create(Class.prototype, {\n constructor: {\n value: Wrapper,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n return setPrototypeOf(Wrapper, Class);\n };\n\n return _wrapNativeSuper(Class);\n}","export default function _isNativeFunction(fn) {\n return Function.toString.call(fn).indexOf(\"[native code]\") !== -1;\n}"],"names":["Object","defineProperty","exports","value","filter_1","require","log_filter_action_1","AppenderWrapper","appender","_config","this","_appender","config","setLayout","layout","_isPassThrough","filters","length","_filters","map","filter","Function","getFilter","onMatch","onMismatch","prototype","get","enumerable","configurable","append","event","isMatch","_isMatch","item","count","i","LogFilterAction","DENY","ALLOW","__extends","extendStatics","d","b","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__","constructor","create","__decorate","decorators","target","key","desc","c","arguments","r","getOwnPropertyDescriptor","Reflect","decorate","log_level_1","appender_1","virtual_console_1","ConsoleAppender","_super","apply","logEvent","level","getLogLevel","_appendToConsole","message","format","LogLevel","FATAL","ERROR","error","getVirtualConsole","WARN","warn","INFO","info","DEBUG","TRACE","debug","Appender","LogAppender","utility_1","appender_wrapper_1","log_appender_1","_appenderMethods","Set","add","_appenders","Map","_registeredLoggerAppenders","getAppenderName","name","getFunctionName","addAppender","forEach","element","Error","_validateAppender","appenderName","has","set","registerAppender","getAppender","getLoggerAppenderInstances","appenders","appenderConfig","result_1","push","setLoggerAppenderConfig","formatter_1","isActive","active","logLevel","setLogLevel","getLayout","Filter","addFilter","__1","logMarker","Symbol","LogMarker","marker","defineMetadata","Log","options","_i","descriptor","originalMethod","args","getOwnMetadata","logger","getLogger","log","concat","call","_filterMethods","LogFilter","filterObj","_validateFilter","configuration","MarkerFilter","_isParentMarkerMatch","_this","hasParents","getParents","every","parent","ThresholdFilter","m","__export","logger_1","Logger","console_appender_1","marker_1","Marker","log_1","log_filter_1","marker_filter_1","threshold_filter_1","DateTimeFormat","TIMEZONE","TIMEZONE_CLIP","padLeft","character","strValue","String","_i18n","_maskStore","_flags","date","getDate","dd","ddd","getDay","dddd","M","getMonth","MM","MMM","MMMM","yy","isUTC","getFullYear","getUTCFullYear","slice","yyyy","h","getHours","hh","H","HH","getMinutes","mm","s","getSeconds","ss","S","getMilliseconds","a","aa","A","AA","Z","match","pop","replace","o","offset","getTimezoneOffset","Math","floor","abs","formatDate","mask","Date","DEFAULT","formatMap","regex","maskStr","substring","_createMask","join","date_formatter_1","formatter","response","params","trim","_formatLogEvent","_compiledLayouts","formatArray","formatString","result","exec","_getFormatterFunction","command","split","_getFormatterObject","_compileLayout","_getCompiledLayout","_formatters","stack","stacks","reduce","accumulator","file","_getFileDetails","properties","lineNumber","column","method","_formatMarkerFromEvent","relative","sequence","formatted","RegExp","logErrorStack","fileParts","location","host","appDir","dirname","filename","startsWith","__assign","assign","t","n","logger_2","_DEFAULT_APPENDERS","_DEFAULT_PATTERN_LAYOUT","_DEFAULT_CONFIG","loggers","_configuration","_getAppendersForLogger","logConfig","appenderList","appenderWrapper","configure","hasMain","isArray","tag","MAIN_LOGGER","addLogger","mainLoggerConfig","_configureLoggers","_configureAppenders","virtualConsole","_getLoggerConfiguration","useVirtualConsole","context","logContext","_determineContext","loggerConfig","_loggers","_logContext","_logSequence","_relative","getTime","passed","_constructLogEvent","fatal","trace","logTime","e","_isNotStrict","callee","caller","undefined","_parents","_name","getMarker","_markers","size","remove","delete","setParents","markers","index","func","name_1","toString","indexOf","_virtualConsole","_isUseVirtualConsole","state","console","Log4JConsole","isVirtual","memory","assert","condition","data","clear","label","dir","optionalParams","dirxml","group","groupTitle","groupCollapsed","groupEnd","markTimeline","msIsIndependentlyComposed","profile","reportName","profileEnd","table","tabularData","time","timeEnd","timeStamp","timeline","timelineEnd","exception","countReset","timeLog","UserAgentParser","userAgentData","UAParser","getResult","instance","WasmDetection","simplewasm","Uint8Array","of","supported","WebAssembly","instantiate","module","Module","Instance","WebGlDetection","canvas","document","createElement","setAttribute","tmpCanvasElementId","getWebglContext","elementToRemove","getElementById","outerHTML","webglContext","webglRenderingContext","contextName","getContext","webglCtxAttributes","depth","premultipliedAlpha","WebRtcDetection","isMediaDeviceAvailable","isNativeBridgePresent","videoInputDeviceAvailability","navigator","mediaDevices","enumerateDevices","then","devices","some","device","kind","Promise","resolve","getUserMedia","window","webkit","messageHandlers","startNativeCam","DeviceDetection","uaData","getInstance","getUserAgentData","isIOS13","os","version","isiPadOS","osName","iPadOS","orientation","isWebView","engine","browser","isWebViewBrowser","isWebAssemblySupported","isUserMediaSupported","isVideoInputDeviceAvailable","isWebGlSupported","getRandomValues","rnds8","rng","crypto","bind","msCrypto","uuid","REGEX","byteToHex","substr","arr","toLowerCase","validate","TypeError","buf","rnds","random","stringify","LogMessage","logName","toISOString","DBRemoteLogFactory","db","localforage","LogsConfigurationRetriever","configurationUrl","currentHostname","hostname","fetch","headers","res","ok","json","defaultConfiguration","appviewSessionIsActive","browserSessionIsActive","clientLogIsActive","serverLogIsActive","trackingStatusIsActive","catch","LogsConfig","getConfiguration","appViewSessionActive","cfg","reason","browserSessionActive","trackingStatusActive","clientLogActive","serverLogActive","RemoteLogService","isServerLogActive","queueMessage","logMessage","dbInstance","getDB","setItem","getLevel","getLogName","getMessage","RemoteLogAppender","logService","newLogMessage","VM_BROWSERSESSION_UUID","VM_LOGLEVEL_OVERRIDE","defaultLevel","defaultLayout","RemoteLogConfig","storage","localStorage","configured","browserUUID","createSessionId","configureLevel","VMAvailableLogLevels","VMLogLevelsOverrideKey","moduleName","moduleVersion","loggerName","logOverride","getItem","logLevelOverride","configureLog4js2","isClientLogActive","logAppenders","logAppenderName","currentUuid","newUuid","DBAppViewSessionFactory","getLoggerInfo","VmAnalyticsApiConfig","hostTest","hostProd","appViewSessionApi","browserSessionApi","trackingStatusApi","remoteLogApi","getHostname","isDevEnvironment","isDev","sendXhrRequest","url","body","responseType","responseHeaders","onProgress","reject","xhr","XMLHttpRequest","header","open","setRequestHeader","onload","status","responseHeaderValues","responseHeaderValue","getResponseHeader","statusText","onerror","upload","onprogress","send","AppViewSessionAdapter","sessionId","jsonBody","JSON","browserSessionUuid","statusCode","requestUrl","appViewSessionApiEndpoint","consumeDbRows","dbase","iterate","removeItem","AppViewSessionConsumer","time1","performance","now","time2","AppViewSessionConsumerJob","started","intervalFunction","setInterval","consume","clearInterval","DBBrowserSessionFactory","VM_BROWSERSESSION_FLAG","storageIdentifier","VM_BROWSERSESSION_ETAG","BrowserSessionAdapter","deviceDetection","persistedSessionFlag","persistedSessionUuid","cpuArchitecture","cpu","architecture","model","resolution","dpi","deviceResolution","w","type","vendor","webapi","ambientLight","connection","serviceWorker","share","visibility","webcam","available","deviceWebcam","enabled","resolutionW","webgl","deviceWebgl","parseFloat","userAgent","browserEngineName","browserEngineVersion","browserName","browserVersion","webView","browserSessionApiEndpoint","etagsessionId","etag","BrowserSessionConsumer","BrowserSessionConsumerJob","RemoteLogAdapter","remoteLogApiEndpoint","RemoteLogConsumer","RemoteLogConsumerJob","DBTrackingStatusFactory","TrackingStatusAdapter","fps","trackingCode","trackingText","trackingStatusApiEndpoint","TrackingStatusConsumer","TrackingStatusConsumerJob","JobsStarter","createJobs","start","AppViewSessionService","timestamp","isAppViewSessionActive","BrowserSessionService","isBrowserSessionActive","TrackingStatusService","isTrackingStatusActive","RemoteLog","browserSessionService","appViewSessionService","trackingStatusService","browserSession","appViewSession","trackingStatus","u","f","code","l","_dereq_","global","scheduleDrain","draining","Mutation","MutationObserver","WebKitMutationObserver","called","observer","nextTick","createTextNode","observe","characterData","setImmediate","MessageChannel","scriptEl","onreadystatechange","parentNode","removeChild","documentElement","appendChild","setTimeout","channel","port1","onmessage","port2","postMessage","queue","oldQueue","len","immediate","task","self","INTERNAL","handlers","REJECTED","FULFILLED","PENDING","resolver","outcome","safelyResolveThenable","QueueItem","promise","onFulfilled","onRejected","callFulfilled","otherCallFulfilled","callRejected","otherCallRejected","unwrap","returnValue","getThen","obj","thenable","onError","onSuccess","tryToUnwrap","tryCatch","out","all","iterable","values","resolved","allResolver","resolveFromAll","outValue","race","_typeof","iterator","_classCallCheck","Constructor","getIDB","indexedDB","webkitIndexedDB","mozIndexedDB","OIndexedDB","msIndexedDB","idb","isIndexedDBValid","isSafari","openDatabase","test","platform","hasFetch","IDBKeyRange","createBlob","parts","Blob","builder","BlobBuilder","MSBlobBuilder","MozBlobBuilder","WebKitBlobBuilder","getBlob","Promise$1","executeCallback","callback","executeTwoCallbacks","errorCallback","normalizeKey","getCallback","DETECT_BLOB_SUPPORT_STORE","supportsBlobs","dbContexts","READ_ONLY","READ_WRITE","_binStringToArrayBuffer","bin","ArrayBuffer","charCodeAt","_checkBlobSupportWithoutCaching","txn","transaction","blob","objectStore","put","onabort","preventDefault","stopPropagation","oncomplete","matchedChrome","matchedEdge","parseInt","_checkBlobSupport","_deferReadiness","dbInfo","dbContext","deferredOperation","deferredOperations","dbReady","_advanceReadiness","_rejectReadiness","err","_getConnection","upgradeNeeded","createDbContext","close","dbArgs","openreq","onupgradeneeded","createObjectStore","storeName","oldVersion","ex","newVersion","onsuccess","_getOriginalConnection","_getUpgradedConnection","_isUpgradeNeeded","defaultVersion","isNewStore","objectStoreNames","contains","isDowngrade","isUpgrade","incVersion","_encodeBlob","reader","FileReader","onloadend","base64","btoa","__local_forage_encoded_blob","readAsBinaryString","_decodeBlob","encodedBlob","atob","_isEncodedBlob","_fullyReady","_initReady","_dbInfo","_tryReconnect","forages","forage","createTransaction","mode","retries","tx","_initStorage","ready","initPromises","ignoreErrors","j","_defaultConfig","k","req","openCursor","iterationNumber","cursor","blobSupport","store","advanced","openKeyCursor","advance","keys","dropInstance","currentConfig","dbPromise","dropObjectPromise","deleteObjectStore","_forage2","dropDBPromise","deleteDatabase","onblocked","asyncStorage","_driver","_support","isWebSQLValid","BASE_CHARS","BLOB_TYPE_PREFIX","BLOB_TYPE_PREFIX_REGEX","SERIALIZED_MARKER","SERIALIZED_MARKER_LENGTH","TYPE_ARRAYBUFFER","TYPE_BLOB","TYPE_INT8ARRAY","TYPE_UINT8ARRAY","TYPE_UINT8CLAMPEDARRAY","TYPE_INT16ARRAY","TYPE_INT32ARRAY","TYPE_UINT16ARRAY","TYPE_UINT32ARRAY","TYPE_FLOAT32ARRAY","TYPE_FLOAT64ARRAY","TYPE_SERIALIZED_MARKER_LENGTH","toString$1","stringToBuffer","serializedString","encoded1","encoded2","encoded3","encoded4","bufferLength","buffer","bytes","bufferToString","base64String","serialize","valueType","fileReader","str","readAsArrayBuffer","deserialize","parse","blobType","matcher","Int8Array","Uint8ClampedArray","Int16Array","Uint16Array","Int32Array","Uint32Array","Float32Array","Float64Array","localforageSerializer","createDbTable","executeSql","_initStorage$1","dbInfoPromise","description","serializer","tryExecuteSql","sqlStatement","SYNTAX_ERR","results","rows","getItem$1","iterate$1","_setItem","retriesLeft","originalValue","sqlError","QUOTA_ERR","setItem$1","removeItem$1","clear$1","length$1","key$1","keys$1","getAllStoreNames","storeNames","dropInstance$1","operationInfo","dropTable","operations","webSQLStorage","isLocalStorageValid","_getKeyPrefix","defaultConfig","keyPrefix","checkIfLocalStorageThrows","localStorageTestKey","_isLocalStorageUsable","_initStorage$2","clear$2","getItem$2","iterate$2","keyPrefixLength","key$2","keys$2","itemKey","length$2","removeItem$2","setItem$2","dropInstance$2","localStorageWrapper","sameValue","x","y","isNaN","includes","array","searchElement","arg","DefinedDrivers","DriverSupport","DefaultDrivers","INDEXEDDB","WEBSQL","LOCALSTORAGE","DefaultDriverOrder","OptionalDriverMethods","LibraryMethods","DefaultConfig","driver","callWhenReady","localForageInstance","libraryMethod","_args","extend","_key","LocalForage","driverTypeKey","driverName","defineDriver","_driverSet","_initDriver","_ready","_wrapLibraryMethodsWithReady","setDriver","driverObject","complianceError","driverMethods","driverMethodName","configureMissingMethods","methodNotImplementedFactory","methodName","_len","optionalDriverMethod","setDriverSupport","support","getDriver","getDriverPromise","getSerializer","serializerPromise","drivers","supportedDrivers","_getSupportedDrivers","setDriverToConfig","extendSelfWithDriver","_extend","initDriver","currentDriverIndex","driverPromiseLoop","oldDriverSetDone","supports","libraryMethodsAndProperties","createInstance","localforage_js","assertPath","path","normalizeStringPosix","allowAboveRoot","lastSegmentLength","lastSlash","dots","lastSlashIndex","lastIndexOf","posix","cwd","resolvedPath","resolvedAbsolute","process","normalize","isAbsolute","trailingSeparator","joined","from","to","fromStart","fromEnd","fromLen","toStart","toLen","lastCommonSep","fromCode","_makeLong","hasRoot","end","matchedSlash","basename","ext","extIdx","firstNonSlashEnd","extname","startDot","startPart","preDotState","pathObject","sep","root","base","_format","ret","delimiter","win32","factory","exporter","makeExporter","previous","writable","hasOwn","supportsSymbol","toPrimitiveSymbol","toPrimitive","iteratorSymbol","supportsCreate","supportsProto","downLevel","HashMap","MakeDictionary","functionPrototype","getPrototypeOf","usePolyfill","_Map","entries","CreateMapPolyfill","_Set","CreateSetPolyfill","Metadata","WeakMap","CreateWeakMapPolyfill","propertyKey","attributes","IsUndefined","IsArray","IsConstructor","DecorateConstructor","IsObject","IsNull","DecorateProperty","ToPropertyKey","metadata","metadataKey","metadataValue","decorator","IsPropertyKey","OrdinaryDefineOwnMetadata","hasMetadata","OrdinaryHasMetadata","hasOwnMetadata","OrdinaryHasOwnMetadata","getMetadata","OrdinaryGetMetadata","OrdinaryGetOwnMetadata","getMetadataKeys","OrdinaryMetadataKeys","getOwnMetadataKeys","OrdinaryOwnMetadataKeys","deleteMetadata","metadataMap","GetOrCreateMetadataMap","targetMetadata","decorated","O","P","Create","MetadataKey","OrdinaryGetPrototypeOf","ToBoolean","MetadataValue","ownKeys","parentKeys","ownKeys_1","_a","parentKeys_1","GetIterator","next","IteratorStep","nextValue","IteratorValue","IteratorClose","Type","IsSymbol","ToPrimitive","input","PreferredType","hint","exoticToPrim","GetMethod","OrdinaryToPrimitive","toString_1","IsCallable","valueOf","toString_2","argument","ToString","V","iterResult","done","proto","prototypeProto","cacheSentinel","arraySentinel","MapIterator","selector","_index","_keys","_values","_selector","throw","return","_cacheKey","_cacheIndex","_find","getKey","getValue","getEntry","insert","_","_map","UUID_SIZE","rootKey","CreateUniqueKey","GetOrCreateWeakMapTable","CreateUUID","FillRandomBytes","GenRandomBytes","byte","FUNC_TYPE","UNDEF_TYPE","OBJ_TYPE","STR_TYPE","MODEL","NAME","TYPE","VENDOR","VERSION","ARCHITECTURE","CONSOLE","MOBILE","TABLET","SMARTTV","WEARABLE","EMBEDDED","AMAZON","APPLE","ASUS","BLACKBERRY","FIREFOX","GOOGLE","HUAWEI","LG","MICROSOFT","MOTOROLA","OPERA","SAMSUNG","SONY","XIAOMI","ZEBRA","FACEBOOK","enumerize","enums","toUpperCase","str1","str2","lowerize","rgxMapper","ua","arrays","q","matches","props","strMapper","windowsVersionMap","regexes","CHROME","EDGE","extensions","_ua","_rgxmap","mergedRegexes","getBrowser","_browser","major","getCPU","_cpu","getDevice","_device","getEngine","_engine","getOS","_os","getUA","setUA","BROWSER","CPU","DEVICE","ENGINE","OS","define","$","jQuery","Zepto","parser","prop","_assertThisInitialized","ReferenceError","_createForOfIteratorHelper","allowArrayLike","it","F","_e","normalCompletion","didErr","step","_e2","_createSuper","Derived","hasNativeReflectConstruct","Super","NewTarget","construct","_getPrototypeOf","_inherits","subClass","superClass","_isNativeReflectConstruct","sham","Proxy","Boolean","_possibleConstructorReturn","_setPrototypeOf","_construct","Parent","Class","isNativeReflectConstruct","_wrapNativeSuper","_cache","fn","Wrapper"],"sourceRoot":""}